Merge tag 'kconfig-v4.21' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy...
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 29 Dec 2018 21:03:29 +0000 (13:03 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 29 Dec 2018 21:03:29 +0000 (13:03 -0800)
Pull Kconfig updates from Masahiro Yamada:

 - support -y option for merge_config.sh to avoid downgrading =y to =m

 - remove S_OTHER symbol type, and touch include/config/*.h files correctly

 - fix file name and line number in lexer warnings

 - fix memory leak when EOF is encountered in quotation

 - resolve all shift/reduce conflicts of the parser

 - warn no new line at end of file

 - make 'source' statement more strict to take only string literal

 - rewrite the lexer and remove the keyword lookup table

 - convert to SPDX License Identifier

 - compile C files independently instead of including them from zconf.y

 - fix various warnings of gconfig

 - misc cleanups

* tag 'kconfig-v4.21' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (39 commits)
  kconfig: surround dbg_sym_flags with #ifdef DEBUG to fix gconf warning
  kconfig: split images.c out of qconf.cc/gconf.c to fix gconf warnings
  kconfig: add static qualifiers to fix gconf warnings
  kconfig: split the lexer out of zconf.y
  kconfig: split some C files out of zconf.y
  kconfig: convert to SPDX License Identifier
  kconfig: remove keyword lookup table entirely
  kconfig: update current_pos in the second lexer
  kconfig: switch to ASSIGN_VAL state in the second lexer
  kconfig: stop associating kconf_id with yylval
  kconfig: refactor end token rules
  kconfig: stop supporting '.' and '/' in unquoted words
  treewide: surround Kconfig file paths with double quotes
  microblaze: surround string default in Kconfig with double quotes
  kconfig: use T_WORD instead of T_VARIABLE for variables
  kconfig: use specific tokens instead of T_ASSIGN for assignments
  kconfig: refactor scanning and parsing "option" properties
  kconfig: use distinct tokens for type and default properties
  kconfig: remove redundant token defines
  kconfig: rename depends_list to comment_option_list
  ...

78 files changed:
arch/arm/Kconfig
arch/arm/kvm/Kconfig
arch/arm64/Kconfig
arch/arm64/kvm/Kconfig
arch/ia64/Kconfig
arch/m68k/Kconfig
arch/microblaze/Kconfig.platform
arch/mips/kvm/Kconfig
arch/openrisc/Kconfig
arch/powerpc/Kconfig
arch/powerpc/kvm/Kconfig
arch/riscv/Kconfig
arch/s390/Kconfig
arch/s390/kvm/Kconfig
arch/sh/Kconfig
arch/sparc/Kconfig
arch/x86/Kconfig
arch/x86/kvm/Kconfig
block/Kconfig
crypto/Kconfig
drivers/crypto/Kconfig
drivers/gpu/drm/i915/Kconfig
drivers/hwmon/Kconfig
drivers/i2c/Kconfig
drivers/pps/Kconfig
drivers/ras/Kconfig
drivers/thermal/Kconfig
drivers/w1/Kconfig
kernel/Kconfig.preempt
lib/Kconfig.debug
scripts/kconfig/Makefile
scripts/kconfig/conf.c
scripts/kconfig/confdata.c
scripts/kconfig/expr.c
scripts/kconfig/expr.h
scripts/kconfig/gconf.c
scripts/kconfig/images.c
scripts/kconfig/images.h [new file with mode: 0644]
scripts/kconfig/kconf_id.c [deleted file]
scripts/kconfig/lkc.h
scripts/kconfig/lxdialog/checklist.c
scripts/kconfig/lxdialog/dialog.h
scripts/kconfig/lxdialog/inputbox.c
scripts/kconfig/lxdialog/menubox.c
scripts/kconfig/lxdialog/textbox.c
scripts/kconfig/lxdialog/util.c
scripts/kconfig/lxdialog/yesno.c
scripts/kconfig/mconf.c
scripts/kconfig/menu.c
scripts/kconfig/merge_config.sh
scripts/kconfig/nconf.c
scripts/kconfig/nconf.gui.c
scripts/kconfig/nconf.h
scripts/kconfig/preprocess.c
scripts/kconfig/qconf.cc
scripts/kconfig/qconf.h
scripts/kconfig/streamline_config.pl
scripts/kconfig/symbol.c
scripts/kconfig/tests/auto_submenu/Kconfig
scripts/kconfig/tests/auto_submenu/__init__.py
scripts/kconfig/tests/choice/Kconfig
scripts/kconfig/tests/choice/__init__.py
scripts/kconfig/tests/choice_value_with_m_dep/Kconfig
scripts/kconfig/tests/choice_value_with_m_dep/__init__.py
scripts/kconfig/tests/err_recursive_inc/__init__.py
scripts/kconfig/tests/inter_choice/Kconfig
scripts/kconfig/tests/inter_choice/__init__.py
scripts/kconfig/tests/new_choice_with_dep/Kconfig
scripts/kconfig/tests/new_choice_with_dep/__init__.py
scripts/kconfig/tests/no_write_if_dep_unmet/Kconfig
scripts/kconfig/tests/no_write_if_dep_unmet/__init__.py
scripts/kconfig/tests/rand_nested_choice/Kconfig
scripts/kconfig/tests/rand_nested_choice/__init__.py
scripts/kconfig/util.c
scripts/kconfig/zconf.l
scripts/kconfig/zconf.y
security/Kconfig
security/integrity/Kconfig

index 2196aac0e45c809643f3f3366601fafd9d19a60b..3a7cce7f80df7b77e4f8a7cb2204cf025e348c9d 100644 (file)
@@ -910,7 +910,7 @@ config PLAT_VERSATILE
 
 source "arch/arm/firmware/Kconfig"
 
-source arch/arm/mm/Kconfig
+source "arch/arm/mm/Kconfig"
 
 config IWMMXT
        bool "Enable iWMMXt support"
index e2bd35b6780cd6c859758a276cea0cf3b29eada2..3f5320f46de2df1251b840680f3a8e75179027d1 100644 (file)
@@ -55,6 +55,6 @@ config KVM_ARM_HOST
        ---help---
          Provides host support for ARM processors.
 
-source drivers/vhost/Kconfig
+source "drivers/vhost/Kconfig"
 
 endif # VIRTUALIZATION
index 86b18c1bd33c84665dc776e8e4868021c16c5847..5c02802f049395792b0ef9081af881ce54df6d79 100644 (file)
@@ -857,7 +857,7 @@ config NEED_PER_CPU_EMBED_FIRST_CHUNK
 config HOLES_IN_ZONE
        def_bool y
 
-source kernel/Kconfig.hz
+source "kernel/Kconfig.hz"
 
 config ARCH_SUPPORTS_DEBUG_PAGEALLOC
        def_bool y
index 47b23bf617c76a01516168b8eb0c8e3ea1d64505..a3f85624313ea58b42dabc548c459ba7ebc0adb3 100644 (file)
@@ -61,6 +61,6 @@ config KVM_ARM_PMU
 config KVM_INDIRECT_VECTORS
        def_bool KVM && (HARDEN_BRANCH_PREDICTOR || HARDEN_EL2_VECTORS)
 
-source drivers/vhost/Kconfig
+source "drivers/vhost/Kconfig"
 
 endif # VIRTUALIZATION
index cbf6c67c7166e7d188e360e22274fd36db02867c..74638de8091d412e5c73be873c0c036034d4aca9 100644 (file)
@@ -261,7 +261,7 @@ config HZ
 endif
 
 if !IA64_HP_SIM
-source kernel/Kconfig.hz
+source "kernel/Kconfig.hz"
 endif
 
 config IA64_BRL_EMU
index 8a5868e9a3a0e6f83e300157759c800789e47fa9..e173ea2ff3952ef28af8bdb60894837c0621348e 100644 (file)
@@ -122,11 +122,11 @@ config BOOTINFO_PROC
 
 menu "Platform setup"
 
-source arch/m68k/Kconfig.cpu
+source "arch/m68k/Kconfig.cpu"
 
-source arch/m68k/Kconfig.machine
+source "arch/m68k/Kconfig.machine"
 
-source arch/m68k/Kconfig.bus
+source "arch/m68k/Kconfig.bus"
 
 endmenu
 
index f7f1739c11b9fef091b1176c0120c4613232cfeb..7361974417dcc993828978c50b8043e0290606fc 100644 (file)
@@ -65,6 +65,6 @@ config XILINX_MICROBLAZE0_USE_FPU
 
 config XILINX_MICROBLAZE0_HW_VER
        string "Core version number"
-       default 7.10.d
+       default "7.10.d"
 
 endmenu
index 760aec70dce535fb6e766fdab7411381f7a58945..4528bc9c3cb1695d3c4a6cc8e20ea9dd4b8afdd4 100644 (file)
@@ -73,6 +73,6 @@ config KVM_MIPS_DEBUG_COP0_COUNTERS
 
          If unsure, say N.
 
-source drivers/vhost/Kconfig
+source "drivers/vhost/Kconfig"
 
 endif # VIRTUALIZATION
index d0feebad5a8f6b4af4da34c721d3486b002c9eff..09ab59e942ae2366f726fa3dee8b7309a7c5a970 100644 (file)
@@ -138,7 +138,7 @@ config SMP
 
          If you don't know what to do here, say N.
 
-source kernel/Kconfig.hz
+source "kernel/Kconfig.hz"
 
 config OPENRISC_NO_SPR_SR_DSX
        bool "use SPR_SR_DSX software emulation" if OR1K_1200
index 50f27a65605146493932cb14fbab694e6888689e..285fefcf512a58398e44126426a0789b4353d499 100644 (file)
@@ -393,7 +393,7 @@ config HIGHMEM
        bool "High memory support"
        depends on PPC32
 
-source kernel/Kconfig.hz
+source "kernel/Kconfig.hz"
 
 config HUGETLB_PAGE_SIZE_VARIABLE
        bool
@@ -816,7 +816,7 @@ config ARCH_WANTS_FREEZER_CONTROL
        def_bool y
        depends on ADB_PMU
 
-source kernel/power/Kconfig
+source "kernel/power/Kconfig"
 
 config SECCOMP
        bool "Enable seccomp to safely compute untrusted bytecode"
index 68a0e9d5b44023579daad3602ca89433f94a1208..bfdde04e49051473c126ff0819f981403216a9ef 100644 (file)
@@ -204,6 +204,6 @@ config KVM_XIVE
        default y
        depends on KVM_XICS && PPC_XIVE_NATIVE && KVM_BOOK3S_HV_POSSIBLE
 
-source drivers/vhost/Kconfig
+source "drivers/vhost/Kconfig"
 
 endif # VIRTUALIZATION
index 106539bb914e9dec0982110491d9d39d36f1c42d..a1aade822927ac59fabe5eaba9e0bd5b8e1b6d00 100644 (file)
@@ -296,6 +296,6 @@ endmenu
 
 menu "Power management options"
 
-source kernel/power/Kconfig
+source "kernel/power/Kconfig"
 
 endmenu
index 21d271d04ca612a9b4bb6becadbedd94bc7a8e5c..6e9c66b3f054b011f9fff9991e94303ea6bbff86 100644 (file)
@@ -518,7 +518,7 @@ config SCHED_TOPOLOGY
          making when dealing with machines that have multi-threading,
          multiple cores or multiple books.
 
-source kernel/Kconfig.hz
+source "kernel/Kconfig.hz"
 
 config KEXEC
        def_bool y
index a3dbd459cce91bf2941222477bec5a085eff10af..767453faacfcd575ba858235cd6f896bebfca162 100644 (file)
@@ -57,6 +57,6 @@ config KVM_S390_UCONTROL
 
 # OK, it's a little counter-intuitive to do this, but it puts it neatly under
 # the virtualization menu.
-source drivers/vhost/Kconfig
+source "drivers/vhost/Kconfig"
 
 endif # VIRTUALIZATION
index 10fd4e9c454b39fb16b5eb1ade649f2971decad6..34c97f051c1e7b39a7f7e4c09958663445d52dda 100644 (file)
@@ -596,7 +596,7 @@ endmenu
 
 menu "Kernel features"
 
-source kernel/Kconfig.hz
+source "kernel/Kconfig.hz"
 
 config KEXEC
        bool "kexec system call (EXPERIMENTAL)"
index f5bb9ded1d187fc1031c0e6c53fd3dc8ed7cc41c..ff96e248e585baf24f7961d4085760de5456734b 100644 (file)
@@ -185,7 +185,7 @@ config NR_CPUS
        default 32 if SPARC32
        default 4096 if SPARC64
 
-source kernel/Kconfig.hz
+source "kernel/Kconfig.hz"
 
 config RWSEM_GENERIC_SPINLOCK
        bool
index 57552f2b37eb70b31fb06704648c48a77b3c8967..4385fc9174e1f280c179ae5b7020adf0cde2a57c 100644 (file)
@@ -1977,7 +1977,7 @@ config SECCOMP
 
          If unsure, say Y. Only embedded should say N here.
 
-source kernel/Kconfig.hz
+source "kernel/Kconfig.hz"
 
 config KEXEC
        bool "kexec system call"
index 1bbec387d289cb785e4acbd28389e5e071fdfdbb..72fa955f4a15ee27609200e6e483b28e4a1c3925 100644 (file)
@@ -98,6 +98,6 @@ config KVM_MMU_AUDIT
 
 # OK, it's a little counter-intuitive to do this, but it puts it neatly under
 # the virtualization menu.
-source drivers/vhost/Kconfig
+source "drivers/vhost/Kconfig"
 
 endif # VIRTUALIZATION
index 8044452a4fd3ab81b1485b990395297b7f2f4f6d..028bc085dac825826e9f44ad851ffb8c17451f32 100644 (file)
@@ -218,4 +218,4 @@ config BLK_MQ_RDMA
 config BLK_PM
        def_bool BLOCK && PM
 
-source block/Kconfig.iosched
+source "block/Kconfig.iosched"
index 045af6eeb7e2ef01bec8bb6784f5ad82356a540e..9511144ac7b569fd594462f0a37d550a34e39ec1 100644 (file)
@@ -1889,7 +1889,7 @@ config CRYPTO_HASH_INFO
        bool
 
 source "drivers/crypto/Kconfig"
-source crypto/asymmetric_keys/Kconfig
-source certs/Kconfig
+source "crypto/asymmetric_keys/Kconfig"
+source "certs/Kconfig"
 
 endif  # if CRYPTO
index d80751d48cf1e57704d7f8a84d5ec369001566b2..5a90075f719d74c898e4f7fd7a1b3c61be38bc3e 100644 (file)
@@ -258,7 +258,7 @@ config CRYPTO_DEV_HIFN_795X_RNG
          Select this option if you want to enable the random number generator
          on the HIFN 795x crypto adapters.
 
-source drivers/crypto/caam/Kconfig
+source "drivers/crypto/caam/Kconfig"
 
 config CRYPTO_DEV_TALITOS
        tristate "Talitos Freescale Security Engine (SEC)"
index 33a458b7f1fcd1584a176c451094b2a4ff42c8ee..148be8e1a09052db6946714cb375985633b98fe3 100644 (file)
@@ -131,5 +131,5 @@ config DRM_I915_GVT_KVMGT
 menu "drm/i915 Debugging"
 depends on DRM_I915
 depends on EXPERT
-source drivers/gpu/drm/i915/Kconfig.debug
+source "drivers/gpu/drm/i915/Kconfig.debug"
 endmenu
index 7bec39266402f34d4ec28acf50a5d0e9023e0373..6f929bfa9fcd39380f7e9d9fc9729156e28e09f6 100644 (file)
@@ -1310,7 +1310,7 @@ config SENSORS_PCF8591
          These devices are hard to detect and rarely found on mainstream
          hardware. If unsure, say N.
 
-source drivers/hwmon/pmbus/Kconfig
+source "drivers/hwmon/pmbus/Kconfig"
 
 config SENSORS_PWM_FAN
        tristate "PWM fan"
index efc3354d60ae891226da67a1447c7f0f76f456d1..c6b7fc7b67d6ad1f06af7fa8a2075f5fd2b9fb2a 100644 (file)
@@ -68,7 +68,7 @@ config I2C_MUX
          This support is also available as a module.  If so, the module
          will be called i2c-mux.
 
-source drivers/i2c/muxes/Kconfig
+source "drivers/i2c/muxes/Kconfig"
 
 config I2C_HELPER_AUTO
        bool "Autoselect pertinent helper modules"
@@ -94,8 +94,8 @@ config I2C_SMBUS
          This support is also available as a module.  If so, the module
          will be called i2c-smbus.
 
-source drivers/i2c/algos/Kconfig
-source drivers/i2c/busses/Kconfig
+source "drivers/i2c/algos/Kconfig"
+source "drivers/i2c/busses/Kconfig"
 
 config I2C_STUB
        tristate "I2C/SMBus Test Stub"
index c6008f296605587660a0c6c4baad34bd18c78403..965aa086a1e0f1c57d958d91ef9c0bda7a44009c 100644 (file)
@@ -37,8 +37,8 @@ config NTP_PPS
 
          It doesn't work on tickless systems at the moment.
 
-source drivers/pps/clients/Kconfig
+source "drivers/pps/clients/Kconfig"
 
-source drivers/pps/generators/Kconfig
+source "drivers/pps/generators/Kconfig"
 
 endif # PPS
index 4c3c67d13254aff48b41d4748e7d7d55bd6f220f..b834ff555188dffbf32d663a691e9f758c02ca1f 100644 (file)
@@ -30,6 +30,6 @@ menuconfig RAS
 
 if RAS
 
-source arch/x86/ras/Kconfig
+source "arch/x86/ras/Kconfig"
 
 endif
index 5422523c03f8638746b8a2b3a7fece4809a28f9c..5fbfabbf627b8f94344b7804abd805b1cb5227e4 100644 (file)
@@ -383,7 +383,7 @@ config INTEL_QUARK_DTS_THERMAL
          underlying BIOS/Firmware.
 
 menu "ACPI INT340X thermal drivers"
-source drivers/thermal/int340x_thermal/Kconfig
+source "drivers/thermal/int340x_thermal/Kconfig"
 endmenu
 
 config INTEL_BXT_PMIC_THERMAL
index 6743bde038cc656972d42b2e7078026056b3dc27..dbb41f45af8aa1e3b31b7f42ef07251fda15b02a 100644 (file)
@@ -25,7 +25,7 @@ config W1_CON
          2. Userspace commands. Includes read/write and search/alarm search commands.
          3. Replies to userspace commands.
 
-source drivers/w1/masters/Kconfig
-source drivers/w1/slaves/Kconfig
+source "drivers/w1/masters/Kconfig"
+source "drivers/w1/slaves/Kconfig"
 
 endif # W1
index cd1655122ec0bb8b73def7adbb8d8f8f3c7d0cb8..0fee5fe6c89905257a65969846c45a12794b898e 100644 (file)
@@ -57,4 +57,4 @@ config PREEMPT
 endchoice
 
 config PREEMPT_COUNT
-       bool
\ No newline at end of file
+       bool
index 2b5a4256e88bc37b3a1b61278b2ed406493d2d5f..d4df5b24d75e107061fe8db387948d5dc5c785c4 100644 (file)
@@ -439,7 +439,7 @@ config DEBUG_KERNEL
 
 menu "Memory Debugging"
 
-source mm/Kconfig.debug
+source "mm/Kconfig.debug"
 
 config DEBUG_OBJECTS
        bool "Debug object operations"
@@ -1624,7 +1624,7 @@ config LATENCYTOP
          Enable this option if you want to use the LatencyTOP tool
          to find out which userspace is blocking on what kernel operations.
 
-source kernel/trace/Kconfig
+source "kernel/trace/Kconfig"
 
 config PROVIDE_OHCI1394_DMA_INIT
        bool "Remote debugging over FireWire early on boot"
index 63b609243d03783beb1da485aaaa1e1d6f3c78eb..ec204fa54c9a6aeee96437e9b59f0198ca29ed28 100644 (file)
@@ -142,23 +142,20 @@ help:
        @echo  '  testconfig      - Run Kconfig unit tests (requires python3 and pytest)'
 
 # ===========================================================================
-# Shared Makefile for the various kconfig executables:
-# conf:          Used for defconfig, oldconfig and related targets
 # object files used by all kconfig flavours
+common-objs    := confdata.o expr.o symbol.o preprocess.o zconf.lex.o zconf.tab.o
 
-conf-objs      := conf.o  zconf.tab.o
-
-hostprogs-y := conf
-
-targets                += zconf.lex.c
-
-# generated files seem to need this to find local include files
+$(obj)/zconf.lex.o: $(obj)/zconf.tab.h
 HOSTCFLAGS_zconf.lex.o := -I$(src)
 HOSTCFLAGS_zconf.tab.o := -I$(src)
 
+# conf: Used for defconfig, oldconfig and related targets
+hostprogs-y    += conf
+conf-objs      := conf.o $(common-objs)
+
 # nconf: Used for the nconfig target based on ncurses
 hostprogs-y    += nconf
-nconf-objs     := nconf.o zconf.tab.o nconf.gui.o
+nconf-objs     := nconf.o nconf.gui.o $(common-objs)
 
 HOSTLDLIBS_nconf       = $(shell . $(obj)/.nconf-cfg && echo $$libs)
 HOSTCFLAGS_nconf.o     = $(shell . $(obj)/.nconf-cfg && echo $$cflags)
@@ -169,7 +166,7 @@ $(obj)/nconf.o $(obj)/nconf.gui.o: $(obj)/.nconf-cfg
 # mconf: Used for the menuconfig target based on lxdialog
 hostprogs-y    += mconf
 lxdialog       := checklist.o inputbox.o menubox.o textbox.o util.o yesno.o
-mconf-objs     := mconf.o zconf.tab.o $(addprefix lxdialog/, $(lxdialog))
+mconf-objs     := mconf.o $(addprefix lxdialog/, $(lxdialog)) $(common-objs)
 
 HOSTLDLIBS_mconf = $(shell . $(obj)/.mconf-cfg && echo $$libs)
 $(foreach f, mconf.o $(lxdialog), \
@@ -181,7 +178,7 @@ $(addprefix $(obj)/lxdialog/, $(lxdialog)): $(obj)/.mconf-cfg
 # qconf: Used for the xconfig target based on Qt
 hostprogs-y    += qconf
 qconf-cxxobjs  := qconf.o
-qconf-objs     := zconf.tab.o
+qconf-objs     := images.o $(common-objs)
 
 HOSTLDLIBS_qconf       = $(shell . $(obj)/.qconf-cfg && echo $$libs)
 HOSTCXXFLAGS_qconf.o   = $(shell . $(obj)/.qconf-cfg && echo $$cflags)
@@ -196,15 +193,13 @@ $(obj)/%.moc: $(src)/%.h $(obj)/.qconf-cfg
 
 # gconf: Used for the gconfig target based on GTK+
 hostprogs-y    += gconf
-gconf-objs     := gconf.o zconf.tab.o
+gconf-objs     := gconf.o images.o $(common-objs)
 
 HOSTLDLIBS_gconf    = $(shell . $(obj)/.gconf-cfg && echo $$libs)
 HOSTCFLAGS_gconf.o  = $(shell . $(obj)/.gconf-cfg && echo $$cflags)
 
 $(obj)/gconf.o: $(obj)/.gconf-cfg
 
-$(obj)/zconf.tab.o: $(obj)/zconf.lex.c
-
 # check if necessary packages are available, and configure build flags
 define filechk_conf_cfg
        $(CONFIG_SHELL) $<
index 98e0c7a34699e941402085b7ceda086ea29a79c8..da89ef788a8d73f7683c058341ab5c7f822c2e59 100644 (file)
@@ -1,6 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
  * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
  */
 
 #include <ctype.h>
index 91d0a5c014acd3a17cecad8f486ff90f59e1211c..08ba146a83c547db9e5607f407de08128656bc40 100644 (file)
@@ -1,12 +1,13 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
  * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
  */
 
 #include <sys/stat.h>
 #include <ctype.h>
 #include <errno.h>
 #include <fcntl.h>
+#include <limits.h>
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -74,6 +75,47 @@ static int make_parent_dir(const char *path)
        return 0;
 }
 
+static char depfile_path[PATH_MAX];
+static size_t depfile_prefix_len;
+
+/* touch depfile for symbol 'name' */
+static int conf_touch_dep(const char *name)
+{
+       int fd, ret;
+       const char *s;
+       char *d, c;
+
+       /* check overflow: prefix + name + ".h" + '\0' must fit in buffer. */
+       if (depfile_prefix_len + strlen(name) + 3 > sizeof(depfile_path))
+               return -1;
+
+       d = depfile_path + depfile_prefix_len;
+       s = name;
+
+       while ((c = *s++))
+               *d++ = (c == '_') ? '/' : tolower(c);
+       strcpy(d, ".h");
+
+       /* Assume directory path already exists. */
+       fd = open(depfile_path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
+       if (fd == -1) {
+               if (errno != ENOENT)
+                       return -1;
+
+               ret = make_parent_dir(depfile_path);
+               if (ret)
+                       return ret;
+
+               /* Try it again. */
+               fd = open(depfile_path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
+               if (fd == -1)
+                       return -1;
+       }
+       close(fd);
+
+       return 0;
+}
+
 struct conf_printer {
        void (*print_symbol)(FILE *, struct symbol *, const char *, void *);
        void (*print_comment)(FILE *, const char *, void *);
@@ -186,14 +228,6 @@ static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p)
                        conf_warning("symbol value '%s' invalid for %s",
                                     p, sym->name);
                return 1;
-       case S_OTHER:
-               if (*p != '"') {
-                       for (p2 = p; *p2 && !isspace(*p2); p2++)
-                               ;
-                       sym->type = S_STRING;
-                       goto done;
-               }
-               /* fall through */
        case S_STRING:
                if (*p++ != '"')
                        break;
@@ -212,7 +246,6 @@ static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p)
                /* fall through */
        case S_INT:
        case S_HEX:
-       done:
                if (sym_string_valid(sym, p)) {
                        sym->def[def].val = xstrdup(p);
                        sym->flags |= def_flags;
@@ -363,7 +396,7 @@ load:
                                sym = sym_find(line + 2 + strlen(CONFIG_));
                                if (!sym) {
                                        sym_add_change_count(1);
-                                       goto setsym;
+                                       continue;
                                }
                        } else {
                                sym = sym_lookup(line + 2 + strlen(CONFIG_), 0);
@@ -393,17 +426,22 @@ load:
                                if (*p2 == '\r')
                                        *p2 = 0;
                        }
-                       if (def == S_DEF_USER) {
-                               sym = sym_find(line + strlen(CONFIG_));
-                               if (!sym) {
+
+                       sym = sym_find(line + strlen(CONFIG_));
+                       if (!sym) {
+                               if (def == S_DEF_AUTO)
+                                       /*
+                                        * Reading from include/config/auto.conf
+                                        * If CONFIG_FOO previously existed in
+                                        * auto.conf but it is missing now,
+                                        * include/config/foo.h must be touched.
+                                        */
+                                       conf_touch_dep(line + strlen(CONFIG_));
+                               else
                                        sym_add_change_count(1);
-                                       goto setsym;
-                               }
-                       } else {
-                               sym = sym_lookup(line + strlen(CONFIG_), 0);
-                               if (sym->type == S_UNKNOWN)
-                                       sym->type = S_OTHER;
+                               continue;
                        }
+
                        if (sym->flags & def_flags) {
                                conf_warning("override: reassigning to symbol %s", sym->name);
                        }
@@ -416,7 +454,7 @@ load:
 
                        continue;
                }
-setsym:
+
                if (sym && sym_is_choice_value(sym)) {
                        struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym));
                        switch (sym->def[def].tri) {
@@ -669,7 +707,6 @@ static void conf_write_symbol(FILE *fp, struct symbol *sym,
        const char *str;
 
        switch (sym->type) {
-       case S_OTHER:
        case S_UNKNOWN:
                break;
        case S_STRING:
@@ -906,24 +943,19 @@ static int conf_write_dep(const char *name)
        return 0;
 }
 
-static int conf_split_config(void)
+static int conf_touch_deps(void)
 {
        const char *name;
-       char path[PATH_MAX+1];
-       char *s, *d, c;
        struct symbol *sym;
-       int res, i, fd;
+       int res, i;
+
+       strcpy(depfile_path, "include/config/");
+       depfile_prefix_len = strlen(depfile_path);
 
        name = conf_get_autoconfig_name();
        conf_read_simple(name, S_DEF_AUTO);
        sym_calc_value(modules_sym);
 
-       if (make_parent_dir("include/config/foo.h"))
-               return 1;
-       if (chdir("include/config"))
-               return 1;
-
-       res = 0;
        for_all_symbols(i, sym) {
                sym_calc_value(sym);
                if ((sym->flags & SYMBOL_NO_WRITE) || !sym->name)
@@ -975,42 +1007,12 @@ static int conf_split_config(void)
                 *      different from 'no').
                 */
 
-               /* Replace all '_' and append ".h" */
-               s = sym->name;
-               d = path;
-               while ((c = *s++)) {
-                       c = tolower(c);
-                       *d++ = (c == '_') ? '/' : c;
-               }
-               strcpy(d, ".h");
-
-               /* Assume directory path already exists. */
-               fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
-               if (fd == -1) {
-                       if (errno != ENOENT) {
-                               res = 1;
-                               break;
-                       }
-
-                       if (make_parent_dir(path)) {
-                               res = 1;
-                               goto out;
-                       }
-
-                       /* Try it again. */
-                       fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
-                       if (fd == -1) {
-                               res = 1;
-                               break;
-                       }
-               }
-               close(fd);
+               res = conf_touch_dep(sym->name);
+               if (res)
+                       return res;
        }
-out:
-       if (chdir("../.."))
-               return 1;
 
-       return res;
+       return 0;
 }
 
 int conf_write_autoconf(int overwrite)
@@ -1028,7 +1030,7 @@ int conf_write_autoconf(int overwrite)
 
        conf_write_dep("include/config/auto.conf.cmd");
 
-       if (conf_split_config())
+       if (conf_touch_deps())
                return 1;
 
        out = fopen(".tmpconfig", "w");
index e1a39e90841d809451517c7dc2b8b51cf424c329..77ffff3a053ccb844a0f368ae59661a01bc8444c 100644 (file)
@@ -1,8 +1,10 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
  * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
  */
 
+#include <ctype.h>
+#include <errno.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -980,7 +982,6 @@ enum string_value_kind {
        k_string,
        k_signed,
        k_unsigned,
-       k_invalid
 };
 
 union string_value {
@@ -1011,13 +1012,10 @@ static enum string_value_kind expr_parse_string(const char *str,
                val->u = strtoull(str, &tail, 16);
                kind = k_unsigned;
                break;
-       case S_STRING:
-       case S_UNKNOWN:
+       default:
                val->s = strtoll(str, &tail, 0);
                kind = k_signed;
                break;
-       default:
-               return k_invalid;
        }
        return !errno && !*tail && tail > str && isxdigit(tail[-1])
               ? kind : k_string;
@@ -1073,13 +1071,7 @@ tristate expr_calc_value(struct expr *e)
 
        if (k1 == k_string || k2 == k_string)
                res = strcmp(str1, str2);
-       else if (k1 == k_invalid || k2 == k_invalid) {
-               if (e->type != E_EQUAL && e->type != E_UNEQUAL) {
-                       printf("Cannot compare \"%s\" and \"%s\"\n", str1, str2);
-                       return no;
-               }
-               res = strcmp(str1, str2);
-       } else if (k1 == k_unsigned || k2 == k_unsigned)
+       else if (k1 == k_unsigned || k2 == k_unsigned)
                res = (lval.u > rval.u) - (lval.u < rval.u);
        else /* if (k1 == k_signed && k2 == k_signed) */
                res = (lval.s > rval.s) - (lval.s < rval.s);
index 7c329e179007a1e7cf92f012eee74f9ccb2f85d1..999edb60cd53e9808cb8b156b80a6341f814cc46 100644 (file)
@@ -1,6 +1,6 @@
+/* SPDX-License-Identifier: GPL-2.0 */
 /*
  * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
  */
 
 #ifndef EXPR_H
@@ -62,7 +62,7 @@ struct symbol_value {
 };
 
 enum symbol_type {
-       S_UNKNOWN, S_BOOLEAN, S_TRISTATE, S_INT, S_HEX, S_STRING, S_OTHER
+       S_UNKNOWN, S_BOOLEAN, S_TRISTATE, S_INT, S_HEX, S_STRING
 };
 
 /* enum values are used as index to symbol.def[] */
@@ -131,7 +131,7 @@ struct symbol {
        struct expr_value implied;
 };
 
-#define for_all_symbols(i, sym) for (i = 0; i < SYMBOL_HASHSIZE; i++) for (sym = symbol_hash[i]; sym; sym = sym->next) if (sym->type != S_OTHER)
+#define for_all_symbols(i, sym) for (i = 0; i < SYMBOL_HASHSIZE; i++) for (sym = symbol_hash[i]; sym; sym = sym->next)
 
 #define SYMBOL_CONST      0x0001  /* symbol is const */
 #define SYMBOL_CHECK      0x0008  /* used during dependency checking */
index 36f578415c4a64d37128d0a980a80e38c2da0994..5d4ecf309ee40188ba85652a1008be3abc206e0f 100644 (file)
@@ -1,9 +1,6 @@
-/* Hey EMACS -*- linux-c -*- */
+// SPDX-License-Identifier: GPL-2.0
 /*
- *
  * Copyright (C) 2002-2003 Romain Lievin <roms@tilp.info>
- * Released under the terms of the GNU GPL v2.0.
- *
  */
 
 #ifdef HAVE_CONFIG_H
@@ -12,7 +9,7 @@
 
 #include <stdlib.h>
 #include "lkc.h"
-#include "images.c"
+#include "images.h"
 
 #include <glade/glade.h>
 #include <gtk/gtk.h>
@@ -78,8 +75,8 @@ static gchar **fill_row(struct menu *menu);
 static void conf_changed(void);
 
 /* Helping/Debugging Functions */
-
-const char *dbg_sym_flags(int val)
+#ifdef DEBUG
+static const char *dbg_sym_flags(int val)
 {
        static char buf[256];
 
@@ -108,9 +105,10 @@ const char *dbg_sym_flags(int val)
 
        return buf;
 }
+#endif
 
-void replace_button_icon(GladeXML * xml, GdkDrawable * window,
-                        GtkStyle * style, gchar * btn_name, gchar ** xpm)
+static void replace_button_icon(GladeXML *xml, GdkDrawable *window,
+                               GtkStyle *style, gchar *btn_name, gchar **xpm)
 {
        GdkPixmap *pixmap;
        GdkBitmap *mask;
@@ -128,7 +126,7 @@ void replace_button_icon(GladeXML * xml, GdkDrawable * window,
 }
 
 /* Main Window Initialization */
-void init_main_window(const gchar * glade_file)
+static void init_main_window(const gchar *glade_file)
 {
        GladeXML *xml;
        GtkWidget *widget;
@@ -190,7 +188,7 @@ void init_main_window(const gchar * glade_file)
        gtk_widget_show(main_wnd);
 }
 
-void init_tree_model(void)
+static void init_tree_model(void)
 {
        gint i;
 
@@ -220,7 +218,7 @@ void init_tree_model(void)
        model1 = GTK_TREE_MODEL(tree1);
 }
 
-void init_left_tree(void)
+static void init_left_tree(void)
 {
        GtkTreeView *view = GTK_TREE_VIEW(tree1_w);
        GtkCellRenderer *renderer;
@@ -262,7 +260,7 @@ static void renderer_edited(GtkCellRendererText * cell,
                            const gchar * path_string,
                            const gchar * new_text, gpointer user_data);
 
-void init_right_tree(void)
+static void init_right_tree(void)
 {
        GtkTreeView *view = GTK_TREE_VIEW(tree2_w);
        GtkCellRenderer *renderer;
@@ -1212,8 +1210,8 @@ static GtkTreeIter found;
 /*
  * Find a menu in the GtkTree starting at parent.
  */
-GtkTreeIter *gtktree_iter_find_node(GtkTreeIter * parent,
-                                   struct menu *tofind)
+static GtkTreeIter *gtktree_iter_find_node(GtkTreeIter *parent,
+                                          struct menu *tofind)
 {
        GtkTreeIter iter;
        GtkTreeIter *child = &iter;
@@ -1424,7 +1422,7 @@ static void display_list(void)
        tree = tree2;
 }
 
-void fixup_rootmenu(struct menu *menu)
+static void fixup_rootmenu(struct menu *menu)
 {
        struct menu *child;
        static int menu_cnt = 0;
index d4f84bd4a96b6f39081cd72e7dadd34c49fbc00e..b4fa0e4a63a5c4d4419ebee4357cf11a9247c2c1 100644 (file)
@@ -1,9 +1,11 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
  * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
  */
 
-static const char *xpm_load[] = {
+#include "images.h"
+
+const char *xpm_load[] = {
 "22 22 5 1",
 ". c None",
 "# c #000000",
@@ -33,7 +35,7 @@ static const char *xpm_load[] = {
 "###############.......",
 "......................"};
 
-static const char *xpm_save[] = {
+const char *xpm_save[] = {
 "22 22 5 1",
 ". c None",
 "# c #000000",
@@ -63,7 +65,7 @@ static const char *xpm_save[] = {
 "..##################..",
 "......................"};
 
-static const char *xpm_back[] = {
+const char *xpm_back[] = {
 "22 22 3 1",
 ". c None",
 "# c #000083",
@@ -91,7 +93,7 @@ static const char *xpm_back[] = {
 "......................",
 "......................"};
 
-static const char *xpm_tree_view[] = {
+const char *xpm_tree_view[] = {
 "22 22 2 1",
 ". c None",
 "# c #000000",
@@ -118,7 +120,7 @@ static const char *xpm_tree_view[] = {
 "......................",
 "......................"};
 
-static const char *xpm_single_view[] = {
+const char *xpm_single_view[] = {
 "22 22 2 1",
 ". c None",
 "# c #000000",
@@ -145,7 +147,7 @@ static const char *xpm_single_view[] = {
 "......................",
 "......................"};
 
-static const char *xpm_split_view[] = {
+const char *xpm_split_view[] = {
 "22 22 2 1",
 ". c None",
 "# c #000000",
@@ -172,7 +174,7 @@ static const char *xpm_split_view[] = {
 "......................",
 "......................"};
 
-static const char *xpm_symbol_no[] = {
+const char *xpm_symbol_no[] = {
 "12 12 2 1",
 "  c white",
 ". c black",
@@ -189,7 +191,7 @@ static const char *xpm_symbol_no[] = {
 " .......... ",
 "            "};
 
-static const char *xpm_symbol_mod[] = {
+const char *xpm_symbol_mod[] = {
 "12 12 2 1",
 "  c white",
 ". c black",
@@ -206,7 +208,7 @@ static const char *xpm_symbol_mod[] = {
 " .......... ",
 "            "};
 
-static const char *xpm_symbol_yes[] = {
+const char *xpm_symbol_yes[] = {
 "12 12 2 1",
 "  c white",
 ". c black",
@@ -223,7 +225,7 @@ static const char *xpm_symbol_yes[] = {
 " .......... ",
 "            "};
 
-static const char *xpm_choice_no[] = {
+const char *xpm_choice_no[] = {
 "12 12 2 1",
 "  c white",
 ". c black",
@@ -240,7 +242,7 @@ static const char *xpm_choice_no[] = {
 "    ....    ",
 "            "};
 
-static const char *xpm_choice_yes[] = {
+const char *xpm_choice_yes[] = {
 "12 12 2 1",
 "  c white",
 ". c black",
@@ -257,7 +259,7 @@ static const char *xpm_choice_yes[] = {
 "    ....    ",
 "            "};
 
-static const char *xpm_menu[] = {
+const char *xpm_menu[] = {
 "12 12 2 1",
 "  c white",
 ". c black",
@@ -274,7 +276,7 @@ static const char *xpm_menu[] = {
 " .......... ",
 "            "};
 
-static const char *xpm_menu_inv[] = {
+const char *xpm_menu_inv[] = {
 "12 12 2 1",
 "  c white",
 ". c black",
@@ -291,7 +293,7 @@ static const char *xpm_menu_inv[] = {
 " .......... ",
 "            "};
 
-static const char *xpm_menuback[] = {
+const char *xpm_menuback[] = {
 "12 12 2 1",
 "  c white",
 ". c black",
@@ -308,7 +310,7 @@ static const char *xpm_menuback[] = {
 " .......... ",
 "            "};
 
-static const char *xpm_void[] = {
+const char *xpm_void[] = {
 "12 12 2 1",
 "  c white",
 ". c black",
diff --git a/scripts/kconfig/images.h b/scripts/kconfig/images.h
new file mode 100644 (file)
index 0000000..d8ff614
--- /dev/null
@@ -0,0 +1,33 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
+ */
+
+#ifndef IMAGES_H
+#define IMAGES_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern const char *xpm_load[];
+extern const char *xpm_save[];
+extern const char *xpm_back[];
+extern const char *xpm_tree_view[];
+extern const char *xpm_single_view[];
+extern const char *xpm_split_view[];
+extern const char *xpm_symbol_no[];
+extern const char *xpm_symbol_mod[];
+extern const char *xpm_symbol_yes[];
+extern const char *xpm_choice_no[];
+extern const char *xpm_choice_yes[];
+extern const char *xpm_menu[];
+extern const char *xpm_menu_inv[];
+extern const char *xpm_menuback[];
+extern const char *xpm_void[];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* IMAGES_H */
diff --git a/scripts/kconfig/kconf_id.c b/scripts/kconfig/kconf_id.c
deleted file mode 100644 (file)
index b3e0ea0..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-
-static struct kconf_id kconf_id_array[] = {
-       { "mainmenu",           T_MAINMENU,             TF_COMMAND },
-       { "menu",               T_MENU,                 TF_COMMAND },
-       { "endmenu",            T_ENDMENU,              TF_COMMAND },
-       { "source",             T_SOURCE,               TF_COMMAND },
-       { "choice",             T_CHOICE,               TF_COMMAND },
-       { "endchoice",          T_ENDCHOICE,            TF_COMMAND },
-       { "comment",            T_COMMENT,              TF_COMMAND },
-       { "config",             T_CONFIG,               TF_COMMAND },
-       { "menuconfig",         T_MENUCONFIG,           TF_COMMAND },
-       { "help",               T_HELP,                 TF_COMMAND },
-       { "---help---",         T_HELP,                 TF_COMMAND },
-       { "if",                 T_IF,                   TF_COMMAND|TF_PARAM },
-       { "endif",              T_ENDIF,                TF_COMMAND },
-       { "depends",            T_DEPENDS,              TF_COMMAND },
-       { "optional",           T_OPTIONAL,             TF_COMMAND },
-       { "default",            T_DEFAULT,              TF_COMMAND, S_UNKNOWN },
-       { "prompt",             T_PROMPT,               TF_COMMAND },
-       { "tristate",           T_TYPE,                 TF_COMMAND, S_TRISTATE },
-       { "def_tristate",       T_DEFAULT,              TF_COMMAND, S_TRISTATE },
-       { "bool",               T_TYPE,                 TF_COMMAND, S_BOOLEAN },
-       { "def_bool",           T_DEFAULT,              TF_COMMAND, S_BOOLEAN },
-       { "int",                T_TYPE,                 TF_COMMAND, S_INT },
-       { "hex",                T_TYPE,                 TF_COMMAND, S_HEX },
-       { "string",             T_TYPE,                 TF_COMMAND, S_STRING },
-       { "select",             T_SELECT,               TF_COMMAND },
-       { "imply",              T_IMPLY,                TF_COMMAND },
-       { "range",              T_RANGE,                TF_COMMAND },
-       { "visible",            T_VISIBLE,              TF_COMMAND },
-       { "option",             T_OPTION,               TF_COMMAND },
-       { "on",                 T_ON,                   TF_PARAM },
-       { "modules",            T_OPT_MODULES,          TF_OPTION },
-       { "defconfig_list",     T_OPT_DEFCONFIG_LIST,   TF_OPTION },
-       { "allnoconfig_y",      T_OPT_ALLNOCONFIG_Y,    TF_OPTION },
-};
-
-#define KCONF_ID_ARRAY_SIZE (sizeof(kconf_id_array)/sizeof(struct kconf_id))
-
-static const struct kconf_id *kconf_id_lookup(register const char *str, register unsigned int len)
-{
-       int i;
-
-       for (i = 0; i < KCONF_ID_ARRAY_SIZE; i++) {
-               struct kconf_id *id = kconf_id_array+i;
-               int l = strlen(id->name);
-
-               if (len == l && !memcmp(str, id->name, len))
-                       return id;
-       }
-       return NULL;
-}
index 9eb7c837cd8fd686bbafa000d067db3c8e4b444f..531ff7c57d92dce95e933fee200e6fc0ed3f13b4 100644 (file)
@@ -1,6 +1,6 @@
+/* SPDX-License-Identifier: GPL-2.0 */
 /*
  * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
  */
 
 #ifndef LKC_H
@@ -30,10 +30,6 @@ static inline const char *CONFIG_prefix(void)
 #undef CONFIG_
 #define CONFIG_ CONFIG_prefix()
 
-#define TF_COMMAND     0x0001
-#define TF_PARAM       0x0002
-#define TF_OPTION      0x0004
-
 enum conf_def_mode {
        def_default,
        def_yes,
@@ -42,17 +38,6 @@ enum conf_def_mode {
        def_random
 };
 
-#define T_OPT_MODULES          1
-#define T_OPT_DEFCONFIG_LIST   2
-#define T_OPT_ALLNOCONFIG_Y    4
-
-struct kconf_id {
-       const char *name;
-       int token;
-       unsigned int flags;
-       enum symbol_type stype;
-};
-
 extern int yylineno;
 void zconfdump(FILE *out);
 void zconf_starthelp(void);
@@ -91,7 +76,9 @@ void menu_add_visibility(struct expr *dep);
 struct property *menu_add_prompt(enum prop_type type, char *prompt, struct expr *dep);
 void menu_add_expr(enum prop_type type, struct expr *expr, struct expr *dep);
 void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep);
-void menu_add_option(int token, char *arg);
+void menu_add_option_modules(void);
+void menu_add_option_defconfig_list(void);
+void menu_add_option_allnoconfig_y(void);
 void menu_finalize(struct menu *parent);
 void menu_set_type(int type);
 
@@ -103,6 +90,9 @@ void *xrealloc(void *p, size_t size);
 char *xstrdup(const char *s);
 char *xstrndup(const char *s, size_t n);
 
+/* zconf.l */
+int yylex(void);
+
 struct gstr {
        size_t len;
        char  *s;
@@ -121,6 +111,7 @@ const char *str_get(struct gstr *gs);
 /* symbol.c */
 void sym_clear_all_valid(void);
 struct symbol *sym_choice_default(struct symbol *sym);
+struct property *sym_get_range_prop(struct symbol *sym);
 const char *sym_get_string_default(struct symbol *sym);
 struct symbol *sym_check_deps(struct symbol *sym);
 struct property *prop_alloc(enum prop_type type, struct symbol *sym);
index 2e96323ad11b3e83316e1a62e0b74227dd3cb6a7..fd161cfff121fd15e45aebce45bbc38f311d3709 100644 (file)
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  *  checklist.c -- implements the checklist box
  *
@@ -5,20 +6,6 @@
  *     Stuart Herbert - S.Herbert@sheffield.ac.uk: radiolist extension
  *     Alessandro Rubini - rubini@ipvvis.unipv.it: merged the two
  *  MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License
- *  as published by the Free Software Foundation; either version 2
- *  of the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "dialog.h"
index 0b00be5abaa67dd6f9e280019c49c7ff208f8c79..68b565e3c495664881d1ae85ba9a2d7de6e157e5 100644 (file)
@@ -1,21 +1,8 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
 /*
  *  dialog.h -- common declarations for all dialog modules
  *
  *  AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License
- *  as published by the Free Software Foundation; either version 2
- *  of the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include <sys/types.h>
index fe82ff6d744e5696e6e91cc55e266a20cb0efa6a..611945611bf8352d4831a51c411c2d3d5d7afc59 100644 (file)
@@ -1,22 +1,9 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  *  inputbox.c -- implements the input box
  *
  *  ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
  *  MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License
- *  as published by the Free Software Foundation; either version 2
- *  of the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "dialog.h"
index d70cab36137eb62e21e42bdb041a90f5edd005da..58c2f8afe59bbd93a08dc0d453bd189557787035 100644 (file)
@@ -1,22 +1,9 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  *  menubox.c -- implements the menu box
  *
  *  ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
  *  MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcapw@cfw.com)
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License
- *  as published by the Free Software Foundation; either version 2
- *  of the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 /*
index 88d2818ed956a94e770306ffe56f198615788590..4e339b12664e0f3d719be4ff41b35b1f789d3a5e 100644 (file)
@@ -1,22 +1,9 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  *  textbox.c -- implements the text box
  *
  *  ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
  *  MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License
- *  as published by the Free Software Foundation; either version 2
- *  of the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "dialog.h"
index f7abdeb92af02188a48712ce48ab76f6b32f1d27..1b490d4af0d3b6176439c658534b56430220678e 100644 (file)
@@ -1,22 +1,9 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  *  util.c
  *
  *  ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
  *  MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License
- *  as published by the Free Software Foundation; either version 2
- *  of the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include <stdarg.h>
index cd1223c903d1bbd318b5bfaf37abaaa68914e4e2..bcaac9b7bab2cafb17b82d5e447ae778c68ff618 100644 (file)
@@ -1,22 +1,9 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  *  yesno.c -- implements the yes/no box
  *
  *  ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
  *  MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License
- *  as published by the Free Software Foundation; either version 2
- *  of the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "dialog.h"
index 143c05fec1614bafe2f5f70dec85da3849e8225e..5f8c82a4cb08c1e877d8054db9bc857640c4aaca 100644 (file)
@@ -1,6 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
  * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
  *
  * Introduced single menu mode (show all sub-menus in one large tree).
  * 2002-11-06 Petr Baudis <pasky@ucw.cz>
index 4cf15d449c05d2a126d0a3fa9af592068b8ff5d7..d9d16469859ab9e008686007b93a78acb23cf6e9 100644 (file)
@@ -1,6 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
  * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
  */
 
 #include <ctype.h>
@@ -195,29 +195,26 @@ void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep)
        menu_add_prop(type, NULL, expr_alloc_symbol(sym), dep);
 }
 
-void menu_add_option(int token, char *arg)
+void menu_add_option_modules(void)
 {
-       switch (token) {
-       case T_OPT_MODULES:
-               if (modules_sym)
-                       zconf_error("symbol '%s' redefines option 'modules'"
-                                   " already defined by symbol '%s'",
-                                   current_entry->sym->name,
-                                   modules_sym->name
-                                   );
-               modules_sym = current_entry->sym;
-               break;
-       case T_OPT_DEFCONFIG_LIST:
-               if (!sym_defconfig_list)
-                       sym_defconfig_list = current_entry->sym;
-               else if (sym_defconfig_list != current_entry->sym)
-                       zconf_error("trying to redefine defconfig symbol");
-               sym_defconfig_list->flags |= SYMBOL_NO_WRITE;
-               break;
-       case T_OPT_ALLNOCONFIG_Y:
-               current_entry->sym->flags |= SYMBOL_ALLNOCONFIG_Y;
-               break;
-       }
+       if (modules_sym)
+               zconf_error("symbol '%s' redefines option 'modules' already defined by symbol '%s'",
+                           current_entry->sym->name, modules_sym->name);
+       modules_sym = current_entry->sym;
+}
+
+void menu_add_option_defconfig_list(void)
+{
+       if (!sym_defconfig_list)
+               sym_defconfig_list = current_entry->sym;
+       else if (sym_defconfig_list != current_entry->sym)
+               zconf_error("trying to redefine defconfig symbol");
+       sym_defconfig_list->flags |= SYMBOL_NO_WRITE;
+}
+
+void menu_add_option_allnoconfig_y(void)
+{
+       current_entry->sym->flags |= SYMBOL_ALLNOCONFIG_Y;
 }
 
 static int menu_validate_number(struct symbol *sym, struct symbol *sym2)
index 0ef906499646b57293bb85dea54234c601bfcafa..d924c51d28b7b817df5445396f9bed74969dfdb6 100755 (executable)
@@ -1,4 +1,6 @@
 #!/bin/sh
+# SPDX-License-Identifier: GPL-2.0
+#
 #  merge_config.sh - Takes a list of config fragment values, and merges
 #  them one by one. Provides warnings on overridden values, and specified
 #  values that did not make it to the resulting .config file (due to missed
 #
 #  Copyright (c) 2009-2010 Wind River Systems, Inc.
 #  Copyright 2011 Linaro
-#
-#  This program is free software; you can redistribute it and/or modify
-#  it under the terms of the GNU General Public License version 2 as
-#  published by the Free Software Foundation.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-#  See the GNU General Public License for more details.
 
 clean_up() {
        rm -f $TMP_FILE
+       rm -f $MERGE_FILE
        exit
 }
 trap clean_up HUP INT TERM
@@ -32,6 +26,7 @@ usage() {
        echo "  -m    only merge the fragments, do not execute the make command"
        echo "  -n    use allnoconfig instead of alldefconfig"
        echo "  -r    list redundant entries when merging fragments"
+       echo "  -y    make builtin have precedence over modules"
        echo "  -O    dir to put generated output files.  Consider setting \$KCONFIG_CONFIG instead."
        echo
        echo "Used prefix: '$CONFIG_PREFIX'. You can redefine it with \$CONFIG_ environment variable."
@@ -40,6 +35,7 @@ usage() {
 RUNMAKE=true
 ALLTARGET=alldefconfig
 WARNREDUN=false
+BUILTIN=false
 OUTPUT=.
 CONFIG_PREFIX=${CONFIG_-CONFIG_}
 
@@ -64,6 +60,11 @@ while true; do
                shift
                continue
                ;;
+       "-y")
+               BUILTIN=true
+               shift
+               continue
+               ;;
        "-O")
                if [ -d $2 ];then
                        OUTPUT=$(echo $2 | sed 's/\/*$//')
@@ -106,32 +107,45 @@ SED_CONFIG_EXP1="s/^\(${CONFIG_PREFIX}[a-zA-Z0-9_]*\)=.*/\1/p"
 SED_CONFIG_EXP2="s/^# \(${CONFIG_PREFIX}[a-zA-Z0-9_]*\) is not set$/\1/p"
 
 TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX)
+MERGE_FILE=$(mktemp ./.merge_tmp.config.XXXXXXXXXX)
 
 echo "Using $INITFILE as base"
 cat $INITFILE > $TMP_FILE
 
 # Merge files, printing warnings on overridden values
-for MERGE_FILE in $MERGE_LIST ; do
-       echo "Merging $MERGE_FILE"
-       if [ ! -r "$MERGE_FILE" ]; then
-               echo "The merge file '$MERGE_FILE' does not exist.  Exit." >&2
+for ORIG_MERGE_FILE in $MERGE_LIST ; do
+       echo "Merging $ORIG_MERGE_FILE"
+       if [ ! -r "$ORIG_MERGE_FILE" ]; then
+               echo "The merge file '$ORIG_MERGE_FILE' does not exist.  Exit." >&2
                exit 1
        fi
+       cat $ORIG_MERGE_FILE > $MERGE_FILE
        CFG_LIST=$(sed -n -e "$SED_CONFIG_EXP1" -e "$SED_CONFIG_EXP2" $MERGE_FILE)
 
        for CFG in $CFG_LIST ; do
                grep -q -w $CFG $TMP_FILE || continue
                PREV_VAL=$(grep -w $CFG $TMP_FILE)
                NEW_VAL=$(grep -w $CFG $MERGE_FILE)
-               if [ "x$PREV_VAL" != "x$NEW_VAL" ] ; then
-                       echo Value of $CFG is redefined by fragment $MERGE_FILE:
+               BUILTIN_FLAG=false
+               if [ "$BUILTIN" = "true" ] && [ "${NEW_VAL#CONFIG_*=}" = "m" ] && [ "${PREV_VAL#CONFIG_*=}" = "y" ]; then
+                       echo Previous  value: $PREV_VAL
+                       echo New value:       $NEW_VAL
+                       echo -y passed, will not demote y to m
+                       echo
+                       BUILTIN_FLAG=true
+               elif [ "x$PREV_VAL" != "x$NEW_VAL" ] ; then
+                       echo Value of $CFG is redefined by fragment $ORIG_MERGE_FILE:
                        echo Previous  value: $PREV_VAL
                        echo New value:       $NEW_VAL
                        echo
                elif [ "$WARNREDUN" = "true" ]; then
-                       echo Value of $CFG is redundant by fragment $MERGE_FILE:
+                       echo Value of $CFG is redundant by fragment $ORIG_MERGE_FILE:
+               fi
+               if [ "$BUILTIN_FLAG" = "false" ]; then
+                       sed -i "/$CFG[ =]/d" $TMP_FILE
+               else
+                       sed -i "/$CFG[ =]/d" $MERGE_FILE
                fi
-               sed -i "/$CFG[ =]/d" $TMP_FILE
        done
        cat $MERGE_FILE >> $TMP_FILE
 done
index 1ef232ae5ab9f957972310e40db45f3eaec529a5..a4670f4e825a8c779cf4894587b6e7e31f556b02 100644 (file)
@@ -1,9 +1,8 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
- * Copyright (C) 2008 Nir Tzachar <nir.tzachar@gmail.com?
- * Released under the terms of the GNU GPL v2.0.
+ * Copyright (C) 2008 Nir Tzachar <nir.tzachar@gmail.com>
  *
  * Derived from menuconfig.
- *
  */
 #ifndef _GNU_SOURCE
 #define _GNU_SOURCE
index 88874acfda3670afe03fd73c3e17c9cf56b0a569..7be620a1fcdb8191639aaeaca7b5c6ae421d9769 100644 (file)
@@ -1,9 +1,8 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
- * Copyright (C) 2008 Nir Tzachar <nir.tzachar@gmail.com?
- * Released under the terms of the GNU GPL v2.0.
+ * Copyright (C) 2008 Nir Tzachar <nir.tzachar@gmail.com>
  *
  * Derived from menuconfig.
- *
  */
 #include "nconf.h"
 #include "lkc.h"
index 2b9e19f603c4ae7047907baeb3b80705fc5316d6..fa5245eb93a75358b3427f5d5224020fbe1e1fd9 100644 (file)
@@ -1,9 +1,8 @@
+/* SPDX-License-Identifier: GPL-2.0 */
 /*
- * Copyright (C) 2008 Nir Tzachar <nir.tzachar@gmail.com?
- * Released under the terms of the GNU GPL v2.0.
+ * Copyright (C) 2008 Nir Tzachar <nir.tzachar@gmail.com>
  *
  * Derived from menuconfig.
- *
  */
 
 #include <ctype.h>
index 5ca2df790d3cfa5f4253a33a303219aaa8fc4394..592dfbfa9fb30d6804043a5bad23b9f683adefd8 100644 (file)
@@ -2,6 +2,7 @@
 //
 // Copyright (C) 2018 Masahiro Yamada <yamada.masahiro@socionext.com>
 
+#include <ctype.h>
 #include <stdarg.h>
 #include <stdbool.h>
 #include <stdio.h>
@@ -9,6 +10,7 @@
 #include <string.h>
 
 #include "list.h"
+#include "lkc.h"
 
 #define ARRAY_SIZE(arr)                (sizeof(arr) / sizeof((arr)[0]))
 
@@ -555,8 +557,7 @@ char *expand_string(const char *in)
 
 static bool is_end_of_token(char c)
 {
-       /* Why are '.' and '/' valid characters for symbols? */
-       return !(isalnum(c) || c == '_' || c == '-' || c == '.' || c == '/');
+       return !(isalnum(c) || c == '_' || c == '-');
 }
 
 /*
index ef4310f2558b1be23c3e8705e8a9a11e97ec03ff..8be8a70c554284a55f46fee54652455ddf6f61e0 100644 (file)
@@ -1,7 +1,7 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
  * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
  * Copyright (C) 2015 Boris Barbulovski <bbarbulovski@gmail.com>
- * Released under the terms of the GNU GPL v2.0.
  */
 
 #include <qglobal.h>
@@ -32,7 +32,7 @@
 #include "qconf.h"
 
 #include "qconf.moc"
-#include "images.c"
+#include "images.h"
 
 
 static QApplication *configApp;
index a40036d1b059275153dad27f78b522212af97ca7..41df466e67d96cfd21e294d653ba6990f48b04a8 100644 (file)
@@ -1,6 +1,6 @@
+/* SPDX-License-Identifier: GPL-2.0 */
 /*
  * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
  */
 
 #include <QTextBrowser>
index 4686531e2f8ce6fe88c375917724fb076bc8679e..08d76d7b3b81d8ad5fbe7c7b9c137b8ce9d77b86 100755 (executable)
@@ -1,7 +1,7 @@
 #!/usr/bin/env perl
+# SPDX-License-Identifier: GPL-2.0
 #
 # Copyright 2005-2009 - Steven Rostedt
-# Licensed under the terms of the GNU GPL License version 2
 #
 #  It's simple enough to figure out how this works.
 #  If not, then you can ask me at stripconfig@goodmis.org
index 703b9b899ee9c6fd0b2f2de9411d8be5b4413cbe..1f9266dadedf63f2c01fb102e3e173d3349520e7 100644 (file)
@@ -1,6 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
  * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
  */
 
 #include <ctype.h>
@@ -61,8 +61,6 @@ const char *sym_type_name(enum symbol_type type)
                return "string";
        case S_UNKNOWN:
                return "unknown";
-       case S_OTHER:
-               break;
        }
        return "???";
 }
@@ -88,7 +86,7 @@ static struct property *sym_get_default_prop(struct symbol *sym)
        return NULL;
 }
 
-static struct property *sym_get_range_prop(struct symbol *sym)
+struct property *sym_get_range_prop(struct symbol *sym)
 {
        struct property *prop;
 
@@ -757,7 +755,6 @@ const char *sym_get_string_default(struct symbol *sym)
                return str;
        case S_STRING:
                return str;
-       case S_OTHER:
        case S_UNKNOWN:
                break;
        }
index c17bf2caa7e6c877f614e266bcfd11dc61d6c049..b20761edc2f44d96223d2fe51558ef2c19563668 100644 (file)
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: GPL-2.0
+
 config A
        bool "A"
        default y
index 32e79b85faebcf27a7b605db04ffb66ac098a38b..25abd927fd0a80a677e10c2a1bed60dc673dcbd6 100644 (file)
@@ -1,3 +1,4 @@
+# SPDX-License-Identifier: GPL-2.0
 """
 Create submenu for symbols that depend on the preceding one.
 
index cc60e9ce2c03859309b2fc33b9f6136a856b01ef..a412205b1b0c429a38f3f400b89301d23983f73d 100644 (file)
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: GPL-2.0
+
 config MODULES
        bool "Enable loadable module support"
        option modules
index 9edcc5262134fd5c1f778a762c4e363071b9fb12..4318fce05912f4bde7df5cabb1b67be5113ce9a3 100644 (file)
@@ -1,3 +1,4 @@
+# SPDX-License-Identifier: GPL-2.0
 """
 Basic choice tests.
 
index 11ac25c26040da7f5128630aae320fdd156424d5..7106c26bb3a83ddc2dc67e5a88065972a75f65eb 100644 (file)
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: GPL-2.0
+
 config MODULES
        def_bool y
        option modules
index f8d728c7b101d59b680e515b93e4597a41ec5dd1..075b4e08696ed15ed5bd45dc3a90e6d1834bd645 100644 (file)
@@ -1,3 +1,4 @@
+# SPDX-License-Identifier: GPL-2.0
 """
 Hide tristate choice values with mod dependency in y choice.
 
index 0e4c839c54aa1161a8c6d417a4d9392c96ec9d6e..27aa1895a0b29517d466e448a452f5178ff8504b 100644 (file)
@@ -1,3 +1,4 @@
+# SPDX-License-Identifier: GPL-2.0
 """
 Detect recursive inclusion error.
 
index e44449f075dfe1b4cbc7d9f279d9d6b5fd9d12d1..5698a4018dd0ec2291915861135d88b84f5a57f5 100644 (file)
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: GPL-2.0
+
 config MODULES
        def_bool y
        option modules
index 5c7fc365ed400c8276a273802e393a310b1104cc..ffea6b1148a6b4309736db7f8505faae3482935b 100644 (file)
@@ -1,3 +1,4 @@
+# SPDX-License-Identifier: GPL-2.0
 """
 Do not affect user-assigned choice value by another choice.
 
index 53ef1b86e7bf8ff01087ff9ea892ab600b6aeca2..127731c046b5b3f75575fec76425821a6654eee3 100644 (file)
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: GPL-2.0
+
 config A
        bool "A"
        help
index f0e0ead0f32f6a72a0e60f5312bf897861061e05..fe9d322539c9127df024d402e0d12c347f812c42 100644 (file)
@@ -1,3 +1,4 @@
+# SPDX-License-Identifier: GPL-2.0
 """
 Ask new choice values when they become visible.
 
index c00b8fe54f4545e09aacb2bdc19450c1823008d3..4767aab6d8e3cd56322369780481e46eeafc1b8c 100644 (file)
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: GPL-2.0
+
 config A
        bool "A"
 
index 207261b0fe005b80a1d8de7d1c3e6233a36548df..ffd469d1f2268166214228a05f169544203f8aa9 100644 (file)
@@ -1,3 +1,4 @@
+# SPDX-License-Identifier: GPL-2.0
 """
 Do not write choice values to .config if the dependency is unmet.
 
index c591d512929fd275ee92a52b4ffbf1ddd3c86758..8350de7f732bda328bdac3ed2a7f885c1e8701df 100644 (file)
@@ -1,3 +1,5 @@
+# SPDX-License-Identifier: GPL-2.0
+
 choice
        prompt "choice"
 
index e729a4e85218a12b6b80a79e172a2e223a252b6c..9e4b2db53581ed305a9faf291fb16e5597b731b5 100644 (file)
@@ -1,3 +1,4 @@
+# SPDX-License-Identifier: GPL-2.0
 """
 Set random values recursively in nested choices.
 
index d999683bb2a778ae05841531abad3fc3e323d4a0..29585394df71dfb75e3f56fcd1995b593863fc8d 100644 (file)
@@ -1,8 +1,7 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
  * Copyright (C) 2002-2005 Roman Zippel <zippel@linux-m68k.org>
  * Copyright (C) 2002-2005 Sam Ravnborg <sam@ravnborg.org>
- *
- * Released under the terms of the GNU GPL v2.0.
  */
 
 #include <stdarg.h>
index 25bd2b89fe3f3b8d588cad2c72b3cc9b3ebae2cb..b2d0a3b0bce92294a4d0c7a84ccef12c8ac8a131 100644 (file)
@@ -1,11 +1,11 @@
-%option nostdinit noyywrap never-interactive full ecs
-%option 8bit nodefault yylineno
-%x COMMAND HELP STRING PARAM ASSIGN_VAL
-%{
+/* SPDX-License-Identifier: GPL-2.0 */
 /*
  * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
  */
+%option nostdinit noyywrap never-interactive full ecs
+%option 8bit nodefault yylineno
+%x ASSIGN_VAL HELP STRING
+%{
 
 #include <assert.h>
 #include <limits.h>
@@ -15,6 +15,9 @@
 #include <unistd.h>
 
 #include "lkc.h"
+#include "zconf.tab.h"
+
+#define YY_DECL                static int yylex1(void)
 
 #define START_STRSIZE  16
 
@@ -23,6 +26,8 @@ static struct {
        int lineno;
 } current_pos;
 
+static int prev_prev_token = T_EOL;
+static int prev_token = T_EOL;
 static char *text;
 static int text_size, text_asize;
 
@@ -73,7 +78,7 @@ static void warn_ignored_character(char chr)
 {
        fprintf(stderr,
                "%s:%d:warning: ignoring unsupported character '%c'\n",
-               zconf_curname(), zconf_lineno(), chr);
+               current_file->name, yylineno, chr);
 }
 %}
 
@@ -83,54 +88,73 @@ n   [A-Za-z0-9_-]
        int str = 0;
        int ts, i;
 
-[ \t]*#.*\n    |
-[ \t]*\n       {
-       return T_EOL;
-}
-[ \t]*#.*
-
-
-[ \t]+ {
-       BEGIN(COMMAND);
-}
-
-.      {
-       unput(yytext[0]);
-       BEGIN(COMMAND);
-}
-
-
-<COMMAND>{
-       {n}+    {
-               const struct kconf_id *id = kconf_id_lookup(yytext, yyleng);
-               current_pos.file = current_file;
-               current_pos.lineno = yylineno;
-               if (id && id->flags & TF_COMMAND) {
-                       BEGIN(PARAM);
-                       yylval.id = id;
-                       return id->token;
-               }
-               alloc_string(yytext, yyleng);
-               yylval.string = text;
-               return T_VARIABLE;
-       }
-       ({n}|$)+        {
-               /* this token includes at least one '$' */
-               yylval.string = expand_token(yytext, yyleng);
-               if (strlen(yylval.string))
-                       return T_VARIABLE;
-               free(yylval.string);
-       }
-       "="     { BEGIN(ASSIGN_VAL); yylval.flavor = VAR_RECURSIVE; return T_ASSIGN; }
-       ":="    { BEGIN(ASSIGN_VAL); yylval.flavor = VAR_SIMPLE; return T_ASSIGN; }
-       "+="    { BEGIN(ASSIGN_VAL); yylval.flavor = VAR_APPEND; return T_ASSIGN; }
-       [[:blank:]]+
-       .       warn_ignored_character(*yytext);
-       \n      {
-               BEGIN(INITIAL);
-               return T_EOL;
-       }
-}
+#.*                    /* ignore comment */
+[ \t]*                 /* whitespaces */
+\\\n                   /* escaped new line */
+\n                     return T_EOL;
+"allnoconfig_y"                return T_ALLNOCONFIG_Y;
+"bool"                 return T_BOOL;
+"choice"               return T_CHOICE;
+"comment"              return T_COMMENT;
+"config"               return T_CONFIG;
+"def_bool"             return T_DEF_BOOL;
+"def_tristate"         return T_DEF_TRISTATE;
+"default"              return T_DEFAULT;
+"defconfig_list"       return T_DEFCONFIG_LIST;
+"depends"              return T_DEPENDS;
+"endchoice"            return T_ENDCHOICE;
+"endif"                        return T_ENDIF;
+"endmenu"              return T_ENDMENU;
+"help"|"---help---"    return T_HELP;
+"hex"                  return T_HEX;
+"if"                   return T_IF;
+"imply"                        return T_IMPLY;
+"int"                  return T_INT;
+"mainmenu"             return T_MAINMENU;
+"menu"                 return T_MENU;
+"menuconfig"           return T_MENUCONFIG;
+"modules"              return T_MODULES;
+"on"                   return T_ON;
+"option"               return T_OPTION;
+"optional"             return T_OPTIONAL;
+"prompt"               return T_PROMPT;
+"range"                        return T_RANGE;
+"select"               return T_SELECT;
+"source"               return T_SOURCE;
+"string"               return T_STRING;
+"tristate"             return T_TRISTATE;
+"visible"              return T_VISIBLE;
+"||"                   return T_OR;
+"&&"                   return T_AND;
+"="                    return T_EQUAL;
+"!="                   return T_UNEQUAL;
+"<"                    return T_LESS;
+"<="                   return T_LESS_EQUAL;
+">"                    return T_GREATER;
+">="                   return T_GREATER_EQUAL;
+"!"                    return T_NOT;
+"("                    return T_OPEN_PAREN;
+")"                    return T_CLOSE_PAREN;
+":="                   return T_COLON_EQUAL;
+"+="                   return T_PLUS_EQUAL;
+\"|\'                  {
+                               str = yytext[0];
+                               new_string();
+                               BEGIN(STRING);
+                       }
+{n}+                   {
+                               alloc_string(yytext, yyleng);
+                               yylval.string = text;
+                               return T_WORD;
+                       }
+({n}|$)+               {
+                               /* this token includes at least one '$' */
+                               yylval.string = expand_token(yytext, yyleng);
+                               if (strlen(yylval.string))
+                                       return T_WORD;
+                               free(yylval.string);
+                       }
+.                      warn_ignored_character(*yytext);
 
 <ASSIGN_VAL>{
        [^[:blank:]\n]+.*       {
@@ -142,71 +166,17 @@ n [A-Za-z0-9_-]
        .
 }
 
-<PARAM>{
-       "&&"    return T_AND;
-       "||"    return T_OR;
-       "("     return T_OPEN_PAREN;
-       ")"     return T_CLOSE_PAREN;
-       "!"     return T_NOT;
-       "="     return T_EQUAL;
-       "!="    return T_UNEQUAL;
-       "<="    return T_LESS_EQUAL;
-       ">="    return T_GREATER_EQUAL;
-       "<"     return T_LESS;
-       ">"     return T_GREATER;
-       \"|\'   {
-               str = yytext[0];
-               new_string();
-               BEGIN(STRING);
-       }
-       \n      BEGIN(INITIAL); return T_EOL;
-       ({n}|[/.])+     {
-               const struct kconf_id *id = kconf_id_lookup(yytext, yyleng);
-               if (id && id->flags & TF_PARAM) {
-                       yylval.id = id;
-                       return id->token;
-               }
-               alloc_string(yytext, yyleng);
-               yylval.string = text;
-               return T_WORD;
-       }
-       ({n}|[/.$])+    {
-               /* this token includes at least one '$' */
-               yylval.string = expand_token(yytext, yyleng);
-               if (strlen(yylval.string))
-                       return T_WORD;
-               free(yylval.string);
-       }
-       #.*     /* comment */
-       \\\n    ;
-       [[:blank:]]+
-       .       warn_ignored_character(*yytext);
-       <<EOF>> {
-               BEGIN(INITIAL);
-       }
-}
-
 <STRING>{
        "$".*   append_expanded_string(yytext);
-       [^$'"\\\n]+/\n  {
-               append_string(yytext, yyleng);
-               yylval.string = text;
-               return T_WORD_QUOTE;
-       }
        [^$'"\\\n]+     {
                append_string(yytext, yyleng);
        }
-       \\.?/\n {
-               append_string(yytext + 1, yyleng - 1);
-               yylval.string = text;
-               return T_WORD_QUOTE;
-       }
        \\.?    {
                append_string(yytext + 1, yyleng - 1);
        }
        \'|\"   {
                if (str == yytext[0]) {
-                       BEGIN(PARAM);
+                       BEGIN(INITIAL);
                        yylval.string = text;
                        return T_WORD_QUOTE;
                } else
@@ -216,11 +186,15 @@ n [A-Za-z0-9_-]
                fprintf(stderr,
                        "%s:%d:warning: multi-line strings not supported\n",
                        zconf_curname(), zconf_lineno());
+               unput('\n');
                BEGIN(INITIAL);
-               return T_EOL;
+               yylval.string = text;
+               return T_WORD_QUOTE;
        }
        <<EOF>> {
                BEGIN(INITIAL);
+               yylval.string = text;
+               return T_WORD_QUOTE;
        }
 }
 
@@ -271,6 +245,12 @@ n  [A-Za-z0-9_-]
 }
 
 <<EOF>>        {
+       BEGIN(INITIAL);
+
+       if (prev_token != T_EOL && prev_token != T_HELPTEXT)
+               fprintf(stderr, "%s:%d:warning: no new line at end of file\n",
+                       current_file->name, yylineno);
+
        if (current_file) {
                zconf_endfile();
                return T_EOL;
@@ -280,6 +260,41 @@ n  [A-Za-z0-9_-]
 }
 
 %%
+
+/* second stage lexer */
+int yylex(void)
+{
+       int token;
+
+repeat:
+       token = yylex1();
+
+       if (prev_token == T_EOL || prev_token == T_HELPTEXT) {
+               if (token == T_EOL) {
+                       /* Do not pass unneeded T_EOL to the parser. */
+                       goto repeat;
+               } else {
+                       /*
+                        * For the parser, update file/lineno at the first token
+                        * of each statement. Generally, \n is a statement
+                        * terminator in Kconfig, but it is not always true
+                        * because \n could be escaped by a backslash.
+                        */
+                       current_pos.file = current_file;
+                       current_pos.lineno = yylineno;
+               }
+       }
+
+       if (prev_prev_token == T_EOL && prev_token == T_WORD &&
+           (token == T_EQUAL || token == T_COLON_EQUAL || token == T_PLUS_EQUAL))
+               BEGIN(ASSIGN_VAL);
+
+       prev_prev_token = prev_token;
+       prev_token = token;
+
+       return token;
+}
+
 static char *expand_token(const char *in, size_t n)
 {
        char *out;
index 22fceb264cf51b6972c7d09357265d416c4157a5..69409abc7dc29c9b4ea1e75fb24d4a89f14f2e65 100644 (file)
@@ -1,8 +1,8 @@
-%{
+/* SPDX-License-Identifier: GPL-2.0 */
 /*
  * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
  */
+%{
 
 #include <ctype.h>
 #include <stdarg.h>
 
 int cdebug = PRINTD;
 
-int yylex(void);
 static void yyerror(const char *err);
 static void zconfprint(const char *err, ...);
 static void zconf_error(const char *err, ...);
-static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtoken);
+static bool zconf_endtoken(const char *tokenname,
+                          const char *expected_tokenname);
 
 struct symbol *symbol_hash[SYMBOL_HASHSIZE];
 
 static struct menu *current_menu, *current_entry;
 
 %}
-%expect 30
 
 %union
 {
@@ -40,46 +39,50 @@ static struct menu *current_menu, *current_entry;
        struct symbol *symbol;
        struct expr *expr;
        struct menu *menu;
-       const struct kconf_id *id;
+       enum symbol_type type;
        enum variable_flavor flavor;
 }
 
-%token <id>T_MAINMENU
-%token <id>T_MENU
-%token <id>T_ENDMENU
-%token <id>T_SOURCE
-%token <id>T_CHOICE
-%token <id>T_ENDCHOICE
-%token <id>T_COMMENT
-%token <id>T_CONFIG
-%token <id>T_MENUCONFIG
-%token <id>T_HELP
 %token <string> T_HELPTEXT
-%token <id>T_IF
-%token <id>T_ENDIF
-%token <id>T_DEPENDS
-%token <id>T_OPTIONAL
-%token <id>T_PROMPT
-%token <id>T_TYPE
-%token <id>T_DEFAULT
-%token <id>T_SELECT
-%token <id>T_IMPLY
-%token <id>T_RANGE
-%token <id>T_VISIBLE
-%token <id>T_OPTION
-%token <id>T_ON
 %token <string> T_WORD
 %token <string> T_WORD_QUOTE
-%token T_UNEQUAL
-%token T_LESS
-%token T_LESS_EQUAL
-%token T_GREATER
-%token T_GREATER_EQUAL
+%token T_ALLNOCONFIG_Y
+%token T_BOOL
+%token T_CHOICE
 %token T_CLOSE_PAREN
+%token T_COLON_EQUAL
+%token T_COMMENT
+%token T_CONFIG
+%token T_DEFAULT
+%token T_DEFCONFIG_LIST
+%token T_DEF_BOOL
+%token T_DEF_TRISTATE
+%token T_DEPENDS
+%token T_ENDCHOICE
+%token T_ENDIF
+%token T_ENDMENU
+%token T_HELP
+%token T_HEX
+%token T_IF
+%token T_IMPLY
+%token T_INT
+%token T_MAINMENU
+%token T_MENU
+%token T_MENUCONFIG
+%token T_MODULES
+%token T_ON
 %token T_OPEN_PAREN
+%token T_OPTION
+%token T_OPTIONAL
+%token T_PLUS_EQUAL
+%token T_PROMPT
+%token T_RANGE
+%token T_SELECT
+%token T_SOURCE
+%token T_STRING
+%token T_TRISTATE
+%token T_VISIBLE
 %token T_EOL
-%token <string> T_VARIABLE
-%token <flavor> T_ASSIGN
 %token <string> T_ASSIGN_VAL
 
 %left T_OR
@@ -91,12 +94,13 @@ static struct menu *current_menu, *current_entry;
 %type <string> prompt
 %type <symbol> nonconst_symbol
 %type <symbol> symbol
+%type <type> type logic_type default
 %type <expr> expr
 %type <expr> if_expr
-%type <id> end
-%type <id> option_name
+%type <string> end
 %type <menu> if_entry menu_entry choice_entry
-%type <string> symbol_option_arg word_opt assign_val
+%type <string> word_opt assign_val
+%type <flavor> assign_op
 
 %destructor {
        fprintf(stderr, "%s:%d: missing end statement for this entry\n",
@@ -105,15 +109,8 @@ static struct menu *current_menu, *current_entry;
                menu_end_menu();
 } if_entry menu_entry choice_entry
 
-%{
-/* Include kconf_id.c here so it can see the token constants. */
-#include "kconf_id.c"
-%}
-
 %%
-input: nl start | start;
-
-start: mainmenu_stmt stmt_list | stmt_list;
+input: mainmenu_stmt stmt_list | stmt_list;
 
 /* mainmenu entry */
 
@@ -127,22 +124,12 @@ stmt_list:
        | stmt_list common_stmt
        | stmt_list choice_stmt
        | stmt_list menu_stmt
-       | stmt_list end                 { zconf_error("unexpected end statement"); }
        | stmt_list T_WORD error T_EOL  { zconf_error("unknown statement \"%s\"", $2); }
-       | stmt_list option_name error T_EOL
-{
-       zconf_error("unexpected option \"%s\"", $2->name);
-}
        | stmt_list error T_EOL         { zconf_error("invalid statement"); }
 ;
 
-option_name:
-       T_DEPENDS | T_PROMPT | T_TYPE | T_SELECT | T_IMPLY | T_OPTIONAL | T_RANGE | T_DEFAULT | T_VISIBLE
-;
-
 common_stmt:
-         T_EOL
-       | if_stmt
+         if_stmt
        | comment_stmt
        | config_stmt
        | menuconfig_stmt
@@ -150,12 +137,6 @@ common_stmt:
        | assignment_stmt
 ;
 
-option_error:
-         T_WORD error T_EOL            { zconf_error("unknown option \"%s\"", $1); }
-       | error T_EOL                   { zconf_error("invalid option"); }
-;
-
-
 /* config/menuconfig entry */
 
 config_entry_start: T_CONFIG nonconst_symbol T_EOL
@@ -189,19 +170,16 @@ menuconfig_stmt: menuconfig_entry_start config_option_list
 config_option_list:
          /* empty */
        | config_option_list config_option
-       | config_option_list symbol_option
        | config_option_list depends
        | config_option_list help
-       | config_option_list option_error
-       | config_option_list T_EOL
 ;
 
-config_option: T_TYPE prompt_stmt_opt T_EOL
+config_option: type prompt_stmt_opt T_EOL
 {
-       menu_set_type($1->stype);
+       menu_set_type($1);
        printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
                zconf_curname(), zconf_lineno(),
-               $1->stype);
+               $1);
 };
 
 config_option: T_PROMPT prompt if_expr T_EOL
@@ -210,14 +188,14 @@ config_option: T_PROMPT prompt if_expr T_EOL
        printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
 };
 
-config_option: T_DEFAULT expr if_expr T_EOL
+config_option: default expr if_expr T_EOL
 {
        menu_add_expr(P_DEFAULT, $2, $3);
-       if ($1->stype != S_UNKNOWN)
-               menu_set_type($1->stype);
+       if ($1 != S_UNKNOWN)
+               menu_set_type($1);
        printd(DEBUG_PARSE, "%s:%d:default(%u)\n",
                zconf_curname(), zconf_lineno(),
-               $1->stype);
+               $1);
 };
 
 config_option: T_SELECT nonconst_symbol if_expr T_EOL
@@ -238,27 +216,20 @@ config_option: T_RANGE symbol symbol if_expr T_EOL
        printd(DEBUG_PARSE, "%s:%d:range\n", zconf_curname(), zconf_lineno());
 };
 
-symbol_option: T_OPTION symbol_option_list T_EOL
-;
+config_option: T_OPTION T_MODULES T_EOL
+{
+       menu_add_option_modules();
+};
 
-symbol_option_list:
-         /* empty */
-       | symbol_option_list T_WORD symbol_option_arg
+config_option: T_OPTION T_DEFCONFIG_LIST T_EOL
 {
-       const struct kconf_id *id = kconf_id_lookup($2, strlen($2));
-       if (id && id->flags & TF_OPTION) {
-               menu_add_option(id->token, $3);
-               free($3);
-       }
-       else
-               zconfprint("warning: ignoring unknown option %s", $2);
-       free($2);
+       menu_add_option_defconfig_list();
 };
 
-symbol_option_arg:
-         /* empty */           { $$ = NULL; }
-       | T_EQUAL prompt        { $$ = $2; }
-;
+config_option: T_OPTION T_ALLNOCONFIG_Y T_EOL
+{
+       menu_add_option_allnoconfig_y();
+};
 
 /* choice entry */
 
@@ -279,7 +250,7 @@ choice_entry: choice choice_option_list
 
 choice_end: end
 {
-       if (zconf_endtoken($1, T_CHOICE, T_ENDCHOICE)) {
+       if (zconf_endtoken($1, "choice")) {
                menu_end_menu();
                printd(DEBUG_PARSE, "%s:%d:endchoice\n", zconf_curname(), zconf_lineno());
        }
@@ -293,8 +264,6 @@ choice_option_list:
        | choice_option_list choice_option
        | choice_option_list depends
        | choice_option_list help
-       | choice_option_list T_EOL
-       | choice_option_list option_error
 ;
 
 choice_option: T_PROMPT prompt if_expr T_EOL
@@ -303,15 +272,11 @@ choice_option: T_PROMPT prompt if_expr T_EOL
        printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
 };
 
-choice_option: T_TYPE prompt_stmt_opt T_EOL
+choice_option: logic_type prompt_stmt_opt T_EOL
 {
-       if ($1->stype == S_BOOLEAN || $1->stype == S_TRISTATE) {
-               menu_set_type($1->stype);
-               printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
-                       zconf_curname(), zconf_lineno(),
-                       $1->stype);
-       } else
-               YYERROR;
+       menu_set_type($1);
+       printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
+              zconf_curname(), zconf_lineno(), $1);
 };
 
 choice_option: T_OPTIONAL T_EOL
@@ -322,14 +287,26 @@ choice_option: T_OPTIONAL T_EOL
 
 choice_option: T_DEFAULT nonconst_symbol if_expr T_EOL
 {
-       if ($1->stype == S_UNKNOWN) {
-               menu_add_symbol(P_DEFAULT, $2, $3);
-               printd(DEBUG_PARSE, "%s:%d:default\n",
-                       zconf_curname(), zconf_lineno());
-       } else
-               YYERROR;
+       menu_add_symbol(P_DEFAULT, $2, $3);
+       printd(DEBUG_PARSE, "%s:%d:default\n",
+              zconf_curname(), zconf_lineno());
 };
 
+type:
+         logic_type
+       | T_INT                 { $$ = S_INT; }
+       | T_HEX                 { $$ = S_HEX; }
+       | T_STRING              { $$ = S_STRING; }
+
+logic_type:
+         T_BOOL                { $$ = S_BOOLEAN; }
+       | T_TRISTATE            { $$ = S_TRISTATE; }
+
+default:
+         T_DEFAULT             { $$ = S_UNKNOWN; }
+       | T_DEF_BOOL            { $$ = S_BOOLEAN; }
+       | T_DEF_TRISTATE        { $$ = S_TRISTATE; }
+
 choice_block:
          /* empty */
        | choice_block common_stmt
@@ -347,20 +324,13 @@ if_entry: T_IF expr T_EOL
 
 if_end: end
 {
-       if (zconf_endtoken($1, T_IF, T_ENDIF)) {
+       if (zconf_endtoken($1, "if")) {
                menu_end_menu();
                printd(DEBUG_PARSE, "%s:%d:endif\n", zconf_curname(), zconf_lineno());
        }
 };
 
-if_stmt: if_entry if_block if_end
-;
-
-if_block:
-         /* empty */
-       | if_block common_stmt
-       | if_block menu_stmt
-       | if_block choice_stmt
+if_stmt: if_entry stmt_list if_end
 ;
 
 /* menu entry */
@@ -372,27 +342,26 @@ menu: T_MENU prompt T_EOL
        printd(DEBUG_PARSE, "%s:%d:menu\n", zconf_curname(), zconf_lineno());
 };
 
-menu_entry: menu visibility_list depends_list
+menu_entry: menu menu_option_list
 {
        $$ = menu_add_menu();
 };
 
 menu_end: end
 {
-       if (zconf_endtoken($1, T_MENU, T_ENDMENU)) {
+       if (zconf_endtoken($1, "menu")) {
                menu_end_menu();
                printd(DEBUG_PARSE, "%s:%d:endmenu\n", zconf_curname(), zconf_lineno());
        }
 };
 
-menu_stmt: menu_entry menu_block menu_end
+menu_stmt: menu_entry stmt_list menu_end
 ;
 
-menu_block:
+menu_option_list:
          /* empty */
-       | menu_block common_stmt
-       | menu_block menu_stmt
-       | menu_block choice_stmt
+       | menu_option_list visible
+       | menu_option_list depends
 ;
 
 source_stmt: T_SOURCE prompt T_EOL
@@ -411,7 +380,12 @@ comment: T_COMMENT prompt T_EOL
        printd(DEBUG_PARSE, "%s:%d:comment\n", zconf_curname(), zconf_lineno());
 };
 
-comment_stmt: comment depends_list
+comment_stmt: comment comment_option_list
+;
+
+comment_option_list:
+         /* empty */
+       | comment_option_list depends
 ;
 
 /* help option */
@@ -440,13 +414,6 @@ help: help_start T_HELPTEXT
 
 /* depends option */
 
-depends_list:
-         /* empty */
-       | depends_list depends
-       | depends_list T_EOL
-       | depends_list option_error
-;
-
 depends: T_DEPENDS T_ON expr T_EOL
 {
        menu_add_dep($3);
@@ -454,14 +421,7 @@ depends: T_DEPENDS T_ON expr T_EOL
 };
 
 /* visibility option */
-
-visibility_list:
-         /* empty */
-       | visibility_list visible
-       | visibility_list T_EOL
-;
-
-visible: T_VISIBLE if_expr
+visible: T_VISIBLE if_expr T_EOL
 {
        menu_add_visibility($2);
 };
@@ -479,14 +439,9 @@ prompt:      T_WORD
        | T_WORD_QUOTE
 ;
 
-end:     T_ENDMENU T_EOL       { $$ = $1; }
-       | T_ENDCHOICE T_EOL     { $$ = $1; }
-       | T_ENDIF T_EOL         { $$ = $1; }
-;
-
-nl:
-         T_EOL
-       | nl T_EOL
+end:     T_ENDMENU T_EOL       { $$ = "menu"; }
+       | T_ENDCHOICE T_EOL     { $$ = "choice"; }
+       | T_ENDIF T_EOL         { $$ = "if"; }
 ;
 
 if_expr:  /* empty */                  { $$ = NULL; }
@@ -518,7 +473,13 @@ word_opt: /* empty */                      { $$ = NULL; }
 
 /* assignment statement */
 
-assignment_stmt:  T_VARIABLE T_ASSIGN assign_val T_EOL { variable_add($1, $3, $2); free($1); free($3); }
+assignment_stmt:  T_WORD assign_op assign_val T_EOL    { variable_add($1, $3, $2); free($1); free($3); }
+
+assign_op:
+         T_EQUAL       { $$ = VAR_RECURSIVE; }
+       | T_COLON_EQUAL { $$ = VAR_SIMPLE; }
+       | T_PLUS_EQUAL  { $$ = VAR_APPEND; }
+;
 
 assign_val:
        /* empty */             { $$ = xstrdup(""); };
@@ -563,35 +524,21 @@ void conf_parse(const char *name)
        sym_set_change_count(1);
 }
 
-static const char *zconf_tokenname(int token)
-{
-       switch (token) {
-       case T_MENU:            return "menu";
-       case T_ENDMENU:         return "endmenu";
-       case T_CHOICE:          return "choice";
-       case T_ENDCHOICE:       return "endchoice";
-       case T_IF:              return "if";
-       case T_ENDIF:           return "endif";
-       case T_DEPENDS:         return "depends";
-       case T_VISIBLE:         return "visible";
-       }
-       return "<token>";
-}
-
-static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtoken)
+static bool zconf_endtoken(const char *tokenname,
+                          const char *expected_tokenname)
 {
-       if (id->token != endtoken) {
+       if (strcmp(tokenname, expected_tokenname)) {
                zconf_error("unexpected '%s' within %s block",
-                       id->name, zconf_tokenname(starttoken));
+                           tokenname, expected_tokenname);
                yynerrs++;
                return false;
        }
        if (current_menu->file != current_file) {
                zconf_error("'%s' in different file than '%s'",
-                       id->name, zconf_tokenname(starttoken));
+                           tokenname, expected_tokenname);
                fprintf(stderr, "%s:%d: location of the '%s'\n",
                        current_menu->file->name, current_menu->lineno,
-                       zconf_tokenname(starttoken));
+                       expected_tokenname);
                yynerrs++;
                return false;
        }
@@ -781,10 +728,5 @@ void zconfdump(FILE *out)
        }
 }
 
-#include "zconf.lex.c"
 #include "util.c"
-#include "confdata.c"
-#include "expr.c"
-#include "symbol.c"
 #include "menu.c"
-#include "preprocess.c"
index d9aa521b52063501fce79062e35324a3c9046ec0..e4fe2f3c2c65a00eb8ea794178c73998b0e567de 100644 (file)
@@ -4,7 +4,7 @@
 
 menu "Security options"
 
-source security/keys/Kconfig
+source "security/keys/Kconfig"
 
 config SECURITY_DMESG_RESTRICT
        bool "Restrict unprivileged access to the kernel syslog"
@@ -230,14 +230,14 @@ config STATIC_USERMODEHELPER_PATH
          If you wish for all usermode helper programs to be disabled,
          specify an empty string here (i.e. "").
 
-source security/selinux/Kconfig
-source security/smack/Kconfig
-source security/tomoyo/Kconfig
-source security/apparmor/Kconfig
-source security/loadpin/Kconfig
-source security/yama/Kconfig
+source "security/selinux/Kconfig"
+source "security/smack/Kconfig"
+source "security/tomoyo/Kconfig"
+source "security/apparmor/Kconfig"
+source "security/loadpin/Kconfig"
+source "security/yama/Kconfig"
 
-source security/integrity/Kconfig
+source "security/integrity/Kconfig"
 
 choice
        prompt "Default security module"
index da9565891738d6c9836804c513595f5f6e238758..877af1f2d9045814f02c7691f2226734438e3449 100644 (file)
@@ -66,7 +66,7 @@ config INTEGRITY_AUDIT
          be enabled by specifying 'integrity_audit=1' on the kernel
          command line.
 
-source security/integrity/ima/Kconfig
-source security/integrity/evm/Kconfig
+source "security/integrity/ima/Kconfig"
+source "security/integrity/evm/Kconfig"
 
 endif   # if INTEGRITY