[OpenWrt-Devel] [PATCH 0/6] build: update scritps/config to kconfig-v5.6

Eneas U de Queiroz cotequeiroz at gmail.com
Mon Apr 6 16:10:30 EDT 2020


TLDR: You can't review this by only looking at the patches.

This series updates scripts/config to tag 'kconfig-v5.6' of
git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild

The Good Stuff:
===============

The thing that motivated me to make this update was the change in
displaying which dependents are forcing a package to be selected.  Try
to figure out what is forcing alsa libs to be built-in, with the current
way they are displayed:

  Selected by: PACKAGE_classpath [=n] && AUDIO_SUPPORT [=y] || PACKAGE_libao [=n] && \
AUDIO_SUPPORT [=y] || PACKAGE_libffmpeg-full [=m] && AUDIO_SUPPORT [=y] && (!\
PACKAGE_libx264 [=n] || BUILD_PATENTED [=n]) || PACKAGE_gst1-mod-alsa [=n] && \
AUDIO_SUPPORT [=y] || PACKAGE_asterisk16-chan-alsa [=n] && PACKAGE_asterisk16 [=n] && \
AUDIO_SUPPORT [=y] || PACKAGE_baresip-mod-alsa [=n] && AUDIO_SUPPORT [=y] && \
PACKAGE_baresip [=n] || PACKAGE_freeswitch-stable-mod-alsa [=n] && \
PACKAGE_freeswitch-stable [=n] && AUDIO_SUPPORT [=y] || PACKAGE_yate-mod-alsachan [=n] && \
AUDIO_SUPPORT [=y] && PACKAGE_yate [=n] || PACKAGE_alsa-utils [=y] && AUDIO_SUPPORT [=y] || \
PACKAGE_alsa-utils-seq [=n] && AUDIO_SUPPORT [=y] || PACKAGE_alsa-utils-tests [=n] && \
AUDIO_SUPPORT [=y] || PACKAGE_forked-daapd [=m] && (!PACKAGE_libx264 [=n] || \
BUILD_PATENTED [=n]) && AUDIO_SUPPORT [=y] || PACKAGE_ices [=n] && AUDIO_SUPPORT [=y] || \
PACKAGE_madplay-alsa [=n] && AUDIO_SUPPORT [=y] || PACKAGE_moc [=n] && AUDIO_SUPPORT [=y]\
 || PACKAGE_mpd-avahi-service [=n] && AUDIO_SUPPORT [=y] || PACKAGE_mpd-full [=n] && \
AUDIO_SUPPORT [=y] || PACKAGE_mpd-mini [=n] && AUDIO_SUPPORT [=y] || PACKAGE_mpg123 [=n] && \
AUDIO_SUPPORT [=y] || PACKAGE_portaudio [=n] && AUDIO_SUPPORT [=y] || \
PACKAGE_pulseaudio-daemon [=n] && AUDIO_SUPPORT [=y] || PACKAGE_pulseaudio-daemon-avahi [=n]\
 && AUDIO_SUPPORT [=y] || PACKAGE_shairport-sync-mbedtls [=n] && AUDIO_SUPPORT [=y] || \
PACKAGE_shairport-sync-mini [=n] && AUDIO_SUPPORT [=y] || \
PACKAGE_shairport-sync-openssl [=n] && AUDIO_SUPPORT [=y] || PACKAGE_sox [=n] && \
AUDIO_SUPPORT [=y] || PACKAGE_squeezelite-full [=n] && AUDIO_SUPPORT [=y] || \
PACKAGE_squeezelite-mini [=n] && AUDIO_SUPPORT [=y]

This is the new display, much easier:

Selected by [y]:
  - PACKAGE_alsa-utils [=y] && AUDIO_SUPPORT [=y]
Selected by [m]:
  - PACKAGE_libffmpeg-full [=m] && (!PACKAGE_libx264 [=n] || BUILD_PATENTED [=n]) && \
AUDIO_SUPPORT [=y]
  - PACKAGE_forked-daapd [=m] && AUDIO_SUPPORT [=y] && (!PACKAGE_libx264 [=n] || \
BUILD_PATENTED [=n])
Selected by [n]:
  - PACKAGE_classpath [=n] && AUDIO_SUPPORT [=y]
  - PACKAGE_libao [=n] && AUDIO_SUPPORT [=y]
  - PACKAGE_gst1-mod-alsa [=n] && AUDIO_SUPPORT [=y]
  - PACKAGE_asterisk16-chan-alsa [=n] && PACKAGE_asterisk16 [=n] && AUDIO_SUPPORT [=y]
  - PACKAGE_baresip-mod-alsa [=n] && AUDIO_SUPPORT [=y] && PACKAGE_baresip [=n]
  - PACKAGE_freeswitch-stable-mod-alsa [=n] && PACKAGE_freeswitch-stable [=n] && \
AUDIO_SUPPORT [=y]
  - PACKAGE_yate-mod-alsachan [=n] && AUDIO_SUPPORT [=y] && PACKAGE_yate [=n]
  - PACKAGE_alsa-utils-seq [=n] && AUDIO_SUPPORT [=y]
  - PACKAGE_alsa-utils-tests [=n] && AUDIO_SUPPORT [=y]
  - PACKAGE_ices [=n] && AUDIO_SUPPORT [=y]
  - PACKAGE_madplay-alsa [=n] && AUDIO_SUPPORT [=y]
  - PACKAGE_moc [=n] && AUDIO_SUPPORT [=y]
  - PACKAGE_mpd-avahi-service [=n] && AUDIO_SUPPORT [=y]
  - PACKAGE_mpd-full [=n] && AUDIO_SUPPORT [=y]
  - PACKAGE_mpd-mini [=n] && AUDIO_SUPPORT [=y]
  - PACKAGE_mpg123 [=n] && AUDIO_SUPPORT [=y]
  - PACKAGE_portaudio [=n] && AUDIO_SUPPORT [=y]
  - PACKAGE_pulseaudio-daemon [=n] && AUDIO_SUPPORT [=y]
  - PACKAGE_pulseaudio-daemon-avahi [=n] && AUDIO_SUPPORT [=y]
  - PACKAGE_shairport-sync-mbedtls [=n] && AUDIO_SUPPORT [=y]
  - PACKAGE_shairport-sync-mini [=n] && AUDIO_SUPPORT [=y]
  - PACKAGE_shairport-sync-openssl [=n] && AUDIO_SUPPORT [=y]
  - PACKAGE_sox [=n] && AUDIO_SUPPORT [=y]


Reviewing this Series:
======================

In order to make reviews possible, I've published a list of commits that
I've assembled, to get from upstream commit 2bce77b9f8c9 to the current
openwrt scripts/config.  The commits are listed here:
https://github.com/cotequeiroz/linux/commits/openwrt-b2c55d50f8/scripts/kconfig

Then, I've rebased these changes to the current upstream kconfig, and
reverted/adapted some upstream changes to make the new version work with
openwrt:
https://github.com/cotequeiroz/linux/commits/openwrt/scripts/kconfig

I suggest to create a repository for it within the openwrt
infrastructure, to ease future upgrades.  I could maintain it, if there
is a need for a maintainer.

Changes from Upstream:
======================

The following is a comparative list of commits I used to get from
upstream to the openwrt versions (current, and newly proposed):

 = remove kernel configuration targets
 < remove gettext support			- removed upstream
 > remove tests					- added upstream
 = remove gconf files
 = remove nconf files
 = Makefile adjustments
 = don't use yydebug unless YYDEBUG is on
 = add wildcard file include feature
 = remove useless file
 = adjust menuconfig help text
 = force config reset when target changes
 = Add gitignore files
 = use default file in conf --all*config
 = remove override: reassigning symbol warn
 = conf: allow writing to a different file
 < zconf.gperf: remove problematic prototype	- gperf was dropped
 = conf: allow reading an input file
 = handle select on symbol with unmet deps
 < apply kconfig: fix relational operators for bool and tristate symbols
						- this was a backport
 < Change conf.c remove compiler warnings	- gone with gettext drop
 < refresh *_shipped files			- done at build time now
 = Add README file with summary of changes
 < adjust help message to openwrt HEAD		} changes needed to
 < use openwrt auxiliary build files		} achieve 100% match
 < add deprecated 'depends' syntax		} with current openwrt
 < use openwrt *_shipped files			} version
 > Revert "kconfig: Warn if there is more than one help text"
 > Revert "kconfig: only write '# CONFIG_FOO is not set' for visible
           symbols"
 > don't write files to $(TOPDIR)/include
 > Revert "kconfig: stop supporting '.' and '/' in unquoted words"
 > allow to warn when seeing recursive dep

Commits marked with '=' are common in both versions; '<' are commits
only present in the current openwrt version, and '>' are commits added
to the proposed new config.

About removed commits (<):
==========================

gettext support was dropped upstream, as well as use of gperf, and
pregenerated '_shipped' C files.  The relational operators fix was a
backport, and the compiler warnings disappeared with gettext removal.

The 3 commits that follow the README change are cosmetic/minor changes
that I made to get an 'empty diff' against current scripts/config.
The deprecated 'depends' syntax is no longer used and can be safely
dropped.

As for the commits added in the new version (>):
================================================

The warning about more than one help text is there to handle the few
packages in the feeds that use a little hack to be able to show one text
in the menuconfig help command, and another, shorter version to be shown
by 'opkg'.  A second 'help' definition, done inside Package/foo/config,
is the one shown by menuconfig, while Package/foo/description will be
the text saved in the final ipkg file.  Since this was done with a
purpose, I decided to let it stay.  It can be removed nonetheless, and
it's only a warning being shown.

The '# CONFIG_FOO' revert is needed for busybox to write its own .config
file from openwrt main .config.  If the symbols are pruned, busybox will
fail to build because it will understand that missing 'choice' values
are new configuration symbols, and then will ask for the choice
(automatically answering 'n' won't work).

The $(TOPDIR)/include change is there because Linux needs header files
there, and we don't.  Rather than reverting the commits, which may give
us future rebase work, I chose to exit the function earlier, keeping the
code mostly intact.

Support for '.' and '/' in symbol names is needed in a few cases, and I
did not feel that I needed to make rename changes to targets/packages
that I don't fully grasp.  It can (should?) be done later, then this can
be dropped.

Recursive dependency changed from warning to error upstream:
============================================================

The recursive dependency warning needs some more thought.  I first
wanted to go with upstream, and just call it an error.  When I was
running a final test after a rebase, it ended up biting me.  It picked
up an existing recursive dep that was not showing up in the old version.
After spending some brainpower (git bisect will not help much, since the
commit that errors out is not necessarily the culprit, and it wasn't
this time).  There were many module packages 'select'ing ipv6 modules
without 'depend'ing on @IPV6.  So I've included a commit adding the
dependency to resolve the problem.  Note that I've only looked at
'package/kernel/linux/modules', and they were enough to make it build
again.

I've softened my approach and added an option to have conf built to only
warn on a recursive dep by compiling with make WARN_RECURSIVE_DEP=1, but
kept the upstream behavior of considering it an error by default.

Note that conf will not be automatically rebuilt if the flag changes.
You must either run 'make config-clean' before calling make again
with/without WARN_RECURSIVE_DEP=1, and that make 'WARN_RECURSIVE_DEP=0'
will not build it without the warning!  Ci bots would certainly benefit
from the new behavior, while buildbots _may_ want to be run with a
warning only, although a failure will make mistakes more visible--no
flag on master, WARN_RECURSIVE_DEP=1 for stable builds?.

Other commits included in the series:
=====================================

Besides the aforementioned commit to resolve recursive dependencies,
there were some upstream changes that require openwrt adjustments, such
as the need to quote 'source' filenames:  busybox needed to be adapted.

Also, unmet dependencies are handled a bit differently now, and
RTC_SUPPORT in target/Config.in, which was defined as tristate, and
depended on 'm' (meaning its value should be only 'm' or 'n'), but ended
up being selected by feature rtc.  Old config version would write it as
RTC_SUPPORT=y; new version would do RTC_SUPPORT=n.  However, RTC_SUPPORT
does not even need to be m, so I've made it a plain bool in a separate
commit.

Also, I've simplified the way the related *config targets are built in
include/toplevel.mk by using pattern rules, adding '-O2' to CFLAGS'
while at it.

Cheers,

Eneas

Eneas U de Queiroz (6):
  kernel: add @IPV6 dependency to ipv6 modules
  busybox: quote 'source' filenames in Config.in
  build: define RTC_SUPPORT as a bool
  build: simplify building *config targets
  build: scripts/config - update to kconfig-v5.6
  build: add option to warn on recursive dependency

 include/toplevel.mk                           |   15 +-
 package/kernel/linux/modules/netfilter.mk     |   13 +-
 package/kernel/linux/modules/netsupport.mk    |    6 +-
 package/utils/busybox/config/Config.in        |   44 +-
 .../utils/busybox/config/networking/Config.in |    2 +-
 .../utils/busybox/config/util-linux/Config.in |    2 +-
 scripts/config/.gitignore                     |   35 +-
 scripts/config/Makefile                       |  182 +-
 scripts/config/README                         |   27 +-
 scripts/config/conf.c                         |  248 +-
 scripts/config/confdata.c                     |  533 ++--
 scripts/config/expr.c                         |  216 +-
 scripts/config/expr.h                         |  110 +-
 scripts/config/images.c                       |   34 +-
 scripts/config/images.h                       |   33 +
 scripts/config/{zconf.l => lexer.l}           |  340 ++-
 scripts/config/list.h                         |    1 +
 scripts/config/lkc.h                          |   58 +-
 scripts/config/lkc_proto.h                    |   21 +-
 scripts/config/lxdialog/.gitignore            |    2 -
 scripts/config/lxdialog/check-lxdialog.sh     |   91 -
 scripts/config/lxdialog/checklist.c           |   19 +-
 scripts/config/lxdialog/dialog.h              |   23 +-
 scripts/config/lxdialog/inputbox.c            |   22 +-
 scripts/config/lxdialog/menubox.c             |   25 +-
 scripts/config/lxdialog/textbox.c             |   17 +-
 scripts/config/lxdialog/util.c                |   15 +-
 scripts/config/lxdialog/yesno.c               |   19 +-
 scripts/config/mconf-cfg.sh                   |   50 +
 scripts/config/mconf.c                        |  179 +-
 scripts/config/menu.c                         |  451 ++-
 scripts/config/{zconf.y => parser.y}          |  429 ++-
 scripts/config/preprocess.c                   |  575 ++++
 scripts/config/qconf-cfg.sh                   |   32 +
 scripts/config/qconf.cc                       |  174 +-
 scripts/config/qconf.h                        |    3 +-
 scripts/config/symbol.c                       |  268 +-
 scripts/config/util.c                         |   86 +-
 scripts/config/zconf.gperf                    |   49 -
 scripts/config/zconf.hash.c_shipped           |  250 --
 scripts/config/zconf.lex.c_shipped            | 2533 -----------------
 scripts/config/zconf.tab.c_shipped            | 2478 ----------------
 target/Config.in                              |    3 +-
 43 files changed, 2700 insertions(+), 7013 deletions(-)
 create mode 100644 scripts/config/images.h
 rename scripts/config/{zconf.l => lexer.l} (50%)
 delete mode 100644 scripts/config/lxdialog/.gitignore
 delete mode 100644 scripts/config/lxdialog/check-lxdialog.sh
 create mode 100755 scripts/config/mconf-cfg.sh
 rename scripts/config/{zconf.y => parser.y} (64%)
 create mode 100644 scripts/config/preprocess.c
 create mode 100755 scripts/config/qconf-cfg.sh
 delete mode 100644 scripts/config/zconf.gperf
 delete mode 100644 scripts/config/zconf.hash.c_shipped
 delete mode 100644 scripts/config/zconf.lex.c_shipped
 delete mode 100644 scripts/config/zconf.tab.c_shipped


_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list