Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

kbuild: do not quote string values in include/config/auto.conf

The previous commit fixed up all shell scripts to not include
include/config/auto.conf.

Now that include/config/auto.conf is only included by Makefiles,
we can change it into a more Make-friendly form.

Previously, Kconfig output string values enclosed with double-quotes
(both in the .config and include/config/auto.conf):

CONFIG_X="foo bar"

Unlike shell, Make handles double-quotes (and single-quotes as well)
verbatim. We must rip them off when used.

There are some patterns:

[1] $(patsubst "%",%,$(CONFIG_X))
[2] $(CONFIG_X:"%"=%)
[3] $(subst ",,$(CONFIG_X))
[4] $(shell echo $(CONFIG_X))

These are not only ugly, but also fragile.

[1] and [2] do not work if the value contains spaces, like
CONFIG_X=" foo bar "

[3] does not work correctly if the value contains double-quotes like
CONFIG_X="foo\"bar"

[4] seems to work better, but has a cost of forking a process.

Anyway, quoted strings were always PITA for our Makefiles.

This commit changes Kconfig to stop quoting in include/config/auto.conf.

These are the string type symbols referenced in Makefiles or scripts:

ACPI_CUSTOM_DSDT_FILE
ARC_BUILTIN_DTB_NAME
ARC_TUNE_MCPU
BUILTIN_DTB_SOURCE
CC_IMPLICIT_FALLTHROUGH
CC_VERSION_TEXT
CFG80211_EXTRA_REGDB_KEYDIR
EXTRA_FIRMWARE
EXTRA_FIRMWARE_DIR
EXTRA_TARGETS
H8300_BUILTIN_DTB
INITRAMFS_SOURCE
LOCALVERSION
MODULE_SIG_HASH
MODULE_SIG_KEY
NDS32_BUILTIN_DTB
NIOS2_DTB_SOURCE
OPENRISC_BUILTIN_DTB
SOC_CANAAN_K210_DTB_SOURCE
SYSTEM_BLACKLIST_HASH_LIST
SYSTEM_REVOCATION_KEYS
SYSTEM_TRUSTED_KEYS
TARGET_CPU
UNUSED_KSYMS_WHITELIST
XILINX_MICROBLAZE0_FAMILY
XILINX_MICROBLAZE0_HW_VER
XTENSA_VARIANT_NAME

I checked them one by one, and fixed up the code where necessary.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>

+40 -66
+2 -2
Makefile
··· 1720 1720 # now expand this into a simple variable to reduce the cost of shell evaluations 1721 1721 prepare: CC_VERSION_TEXT := $(CC_VERSION_TEXT) 1722 1722 prepare: 1723 - @if [ "$(CC_VERSION_TEXT)" != $(CONFIG_CC_VERSION_TEXT) ]; then \ 1723 + @if [ "$(CC_VERSION_TEXT)" != "$(CONFIG_CC_VERSION_TEXT)" ]; then \ 1724 1724 echo >&2 "warning: the compiler differs from the one used to build the kernel"; \ 1725 - echo >&2 " The kernel was built by: "$(CONFIG_CC_VERSION_TEXT); \ 1725 + echo >&2 " The kernel was built by: $(CONFIG_CC_VERSION_TEXT)"; \ 1726 1726 echo >&2 " You are using: $(CC_VERSION_TEXT)"; \ 1727 1727 fi 1728 1728
+2 -2
arch/arc/Makefile
··· 14 14 tune-mcpu-def-$(CONFIG_ISA_ARCOMPACT) := -mcpu=arc700 15 15 tune-mcpu-def-$(CONFIG_ISA_ARCV2) := -mcpu=hs38 16 16 17 - ifeq ($(CONFIG_ARC_TUNE_MCPU),"") 17 + ifeq ($(CONFIG_ARC_TUNE_MCPU),) 18 18 cflags-y += $(tune-mcpu-def-y) 19 19 else 20 - tune-mcpu := $(shell echo $(CONFIG_ARC_TUNE_MCPU)) 20 + tune-mcpu := $(CONFIG_ARC_TUNE_MCPU) 21 21 ifneq ($(call cc-option,$(tune-mcpu)),) 22 22 cflags-y += $(tune-mcpu) 23 23 else
+2 -2
arch/arc/boot/dts/Makefile
··· 2 2 # Built-in dtb 3 3 builtindtb-y := nsim_700 4 4 5 - ifneq ($(CONFIG_ARC_BUILTIN_DTB_NAME),"") 6 - builtindtb-y := $(patsubst "%",%,$(CONFIG_ARC_BUILTIN_DTB_NAME)) 5 + ifneq ($(CONFIG_ARC_BUILTIN_DTB_NAME),) 6 + builtindtb-y := $(CONFIG_ARC_BUILTIN_DTB_NAME) 7 7 endif 8 8 9 9 obj-y += $(builtindtb-y).dtb.o
+1 -5
arch/h8300/boot/dts/Makefile
··· 1 1 # SPDX-License-Identifier: GPL-2.0 2 - ifneq '$(CONFIG_H8300_BUILTIN_DTB)' '""' 3 - BUILTIN_DTB := $(patsubst "%",%,$(CONFIG_H8300_BUILTIN_DTB)).dtb.o 4 - endif 5 - 6 - obj-y += $(BUILTIN_DTB) 2 + obj-y += $(addsuffix .dtb.o, $(CONFIG_H8300_BUILTIN_DTB)) 7 3 8 4 dtb-$(CONFIG_H8300H_SIM) := h8300h_sim.dtb 9 5 dtb-$(CONFIG_H8S_SIM) := h8s_sim.dtb
+1 -1
arch/microblaze/Makefile
··· 5 5 6 6 # What CPU version are we building for, and crack it open 7 7 # as major.minor.rev 8 - CPU_VER := $(shell echo $(CONFIG_XILINX_MICROBLAZE0_HW_VER)) 8 + CPU_VER := $(CONFIG_XILINX_MICROBLAZE0_HW_VER) 9 9 CPU_MAJOR := $(shell echo $(CPU_VER) | cut -d '.' -f 1) 10 10 CPU_MINOR := $(shell echo $(CPU_VER) | cut -d '.' -f 2) 11 11 CPU_REV := $(shell echo $(CPU_VER) | cut -d '.' -f 3)
+1 -6
arch/nds32/boot/dts/Makefile
··· 1 1 # SPDX-License-Identifier: GPL-2.0-only 2 - ifneq '$(CONFIG_NDS32_BUILTIN_DTB)' '""' 3 - BUILTIN_DTB := $(patsubst "%",%,$(CONFIG_NDS32_BUILTIN_DTB)).dtb.o 4 - else 5 - BUILTIN_DTB := 6 - endif 7 - obj-$(CONFIG_OF) += $(BUILTIN_DTB) 2 + obj-$(CONFIG_OF) += $(addsuffix .dtb.o, $(CONFIG_NDS32_BUILTIN_DTB))
+1 -1
arch/nios2/boot/dts/Makefile
··· 1 1 # SPDX-License-Identifier: GPL-2.0 2 2 3 - obj-y := $(patsubst "%.dts",%.dtb.o,$(CONFIG_NIOS2_DTB_SOURCE)) 3 + obj-y := $(patsubst %.dts,%.dtb.o,$(CONFIG_NIOS2_DTB_SOURCE)) 4 4 5 5 dtstree := $(srctree)/$(src) 6 6 dtb-$(CONFIG_OF_ALL_DTBS) := $(patsubst $(dtstree)/%.dts,%.dtb, $(wildcard $(dtstree)/*.dts))
+1 -6
arch/openrisc/boot/dts/Makefile
··· 1 1 # SPDX-License-Identifier: GPL-2.0 2 - ifneq '$(CONFIG_OPENRISC_BUILTIN_DTB)' '""' 3 - BUILTIN_DTB := $(patsubst "%",%,$(CONFIG_OPENRISC_BUILTIN_DTB)).dtb.o 4 - else 5 - BUILTIN_DTB := 6 - endif 7 - obj-y += $(BUILTIN_DTB) 2 + obj-y += $(addsuffix .dtb.o, $(CONFIG_OPENRISC_BUILTIN_DTB)) 8 3 9 4 #DTC_FLAGS ?= -p 1024
+1 -1
arch/powerpc/boot/Makefile
··· 365 365 endif 366 366 367 367 # Allow extra targets to be added to the defconfig 368 - image-y += $(subst ",,$(CONFIG_EXTRA_TARGETS)) 368 + image-y += $(CONFIG_EXTRA_TARGETS) 369 369 370 370 initrd- := $(patsubst zImage%, zImage.initrd%, $(image-)) 371 371 initrd-y := $(patsubst zImage%, zImage.initrd%, \
+1 -3
arch/riscv/boot/dts/canaan/Makefile
··· 1 1 # SPDX-License-Identifier: GPL-2.0 2 - ifneq ($(CONFIG_SOC_CANAAN_K210_DTB_SOURCE),"") 3 - dtb-y += $(strip $(shell echo $(CONFIG_SOC_CANAAN_K210_DTB_SOURCE))).dtb 2 + dtb-$(CONFIG_SOC_CANAAN_K210_DTB_BUILTIN) += $(addsuffix .dtb, $(CONFIG_SOC_CANAAN_K210_DTB_SOURCE)) 4 3 obj-$(CONFIG_SOC_CANAAN_K210_DTB_BUILTIN) += $(addsuffix .o, $(dtb-y)) 5 - endif
+1 -3
arch/sh/boot/dts/Makefile
··· 1 1 # SPDX-License-Identifier: GPL-2.0-only 2 - ifneq ($(CONFIG_BUILTIN_DTB_SOURCE),"") 3 - obj-$(CONFIG_USE_BUILTIN_DTB) += $(patsubst "%",%,$(CONFIG_BUILTIN_DTB_SOURCE)).dtb.o 4 - endif 2 + obj-$(CONFIG_USE_BUILTIN_DTB) += $(addsuffix .dtb.o, $(CONFIG_BUILTIN_DTB_SOURCE))
+1 -1
arch/xtensa/Makefile
··· 12 12 # Core configuration. 13 13 # (Use VAR=<xtensa_config> to use another default compiler.) 14 14 15 - variant-y := $(patsubst "%",%,$(CONFIG_XTENSA_VARIANT_NAME)) 15 + variant-y := $(CONFIG_XTENSA_VARIANT_NAME) 16 16 17 17 VARIANT = $(variant-y) 18 18
+1 -4
arch/xtensa/boot/dts/Makefile
··· 7 7 # 8 8 # 9 9 10 - BUILTIN_DTB_SOURCE := $(patsubst "%",%,$(CONFIG_BUILTIN_DTB_SOURCE)).dtb.o 11 - ifneq ($(CONFIG_BUILTIN_DTB_SOURCE),"") 12 - obj-$(CONFIG_OF) += $(BUILTIN_DTB_SOURCE) 13 - endif 10 + obj-$(CONFIG_OF) += $(addsuffix .dtb.o, $(CONFIG_BUILTIN_DTB_SOURCE)) 14 11 15 12 # for CONFIG_OF_ALL_DTBS test 16 13 dtstree := $(srctree)/$(src)
+2 -8
certs/Makefile
··· 6 6 obj-$(CONFIG_SYSTEM_TRUSTED_KEYRING) += system_keyring.o system_certificates.o common.o 7 7 obj-$(CONFIG_SYSTEM_BLACKLIST_KEYRING) += blacklist.o common.o 8 8 obj-$(CONFIG_SYSTEM_REVOCATION_LIST) += revocation_certificates.o 9 - ifneq ($(CONFIG_SYSTEM_BLACKLIST_HASH_LIST),"") 9 + ifneq ($(CONFIG_SYSTEM_BLACKLIST_HASH_LIST),) 10 10 obj-$(CONFIG_SYSTEM_BLACKLIST_KEYRING) += blacklist_hashes.o 11 11 else 12 12 obj-$(CONFIG_SYSTEM_BLACKLIST_KEYRING) += blacklist_nohashes.o ··· 16 16 cmd_extract_certs = scripts/extract-cert $(2) $@ 17 17 18 18 $(obj)/system_certificates.o: $(obj)/x509_certificate_list 19 - 20 - CONFIG_SYSTEM_TRUSTED_KEYS := $(CONFIG_SYSTEM_TRUSTED_KEYS:"%"=%) 21 19 22 20 $(obj)/x509_certificate_list: $(CONFIG_SYSTEM_TRUSTED_KEYS) scripts/extract-cert FORCE 23 21 $(call if_changed,extract_certs,$(if $(CONFIG_SYSTEM_TRUSTED_KEYS),$<,"")) ··· 44 46 # We do it this way rather than having a boolean option for enabling an 45 47 # external private key, because 'make randconfig' might enable such a 46 48 # boolean option and we unfortunately can't make it depend on !RANDCONFIG. 47 - ifeq ($(CONFIG_MODULE_SIG_KEY),"certs/signing_key.pem") 49 + ifeq ($(CONFIG_MODULE_SIG_KEY),certs/signing_key.pem) 48 50 49 51 keytype-$(CONFIG_MODULE_SIG_KEY_TYPE_ECDSA) := -newkey ec -pkeyopt ec_paramgen_curve:secp384r1 50 52 ··· 67 69 68 70 endif # CONFIG_MODULE_SIG_KEY 69 71 70 - CONFIG_MODULE_SIG_KEY := $(CONFIG_MODULE_SIG_KEY:"%"=%) 71 - 72 72 # If CONFIG_MODULE_SIG_KEY isn't a PKCS#11 URI, depend on it 73 73 ifneq ($(filter-out pkcs11:%, %(CONFIG_MODULE_SIG_KEY)),) 74 74 X509_DEP := $(CONFIG_MODULE_SIG_KEY) ··· 81 85 targets += signing_key.x509 82 86 83 87 $(obj)/revocation_certificates.o: $(obj)/x509_revocation_list 84 - 85 - CONFIG_SYSTEM_REVOCATION_KEYS := $(CONFIG_SYSTEM_REVOCATION_KEYS:"%"=%) 86 88 87 89 $(obj)/x509_revocation_list: $(CONFIG_SYSTEM_REVOCATION_KEYS) scripts/extract-cert FORCE 88 90 $(call if_changed,extract_certs,$(if $(CONFIG_SYSTEM_REVOCATION_KEYS),$<,""))
+1 -1
drivers/acpi/Makefile
··· 9 9 # ACPI Boot-Time Table Parsing 10 10 # 11 11 ifeq ($(CONFIG_ACPI_CUSTOM_DSDT),y) 12 - tables.o: $(src)/../../include/$(subst $\",,$(CONFIG_ACPI_CUSTOM_DSDT_FILE)) ; 12 + tables.o: $(src)/../../include/$(CONFIG_ACPI_CUSTOM_DSDT_FILE) ; 13 13 14 14 endif 15 15
+2 -2
drivers/base/firmware_loader/builtin/Makefile
··· 3 3 4 4 # Create $(fwdir) from $(CONFIG_EXTRA_FIRMWARE_DIR) -- if it doesn't have a 5 5 # leading /, it's relative to $(srctree). 6 - fwdir := $(subst $(quote),,$(CONFIG_EXTRA_FIRMWARE_DIR)) 6 + fwdir := $(CONFIG_EXTRA_FIRMWARE_DIR) 7 7 fwdir := $(addprefix $(srctree)/,$(filter-out /%,$(fwdir)))$(filter /%,$(fwdir)) 8 8 9 - firmware := $(addsuffix .gen.o, $(subst $(quote),,$(CONFIG_EXTRA_FIRMWARE))) 9 + firmware := $(addsuffix .gen.o, $(CONFIG_EXTRA_FIRMWARE)) 10 10 obj-y += $(firmware) 11 11 12 12 FWNAME = $(patsubst $(obj)/%.gen.S,%,$@)
+1 -1
init/Makefile
··· 31 31 cmd_compile.h = \ 32 32 $(CONFIG_SHELL) $(srctree)/scripts/mkcompile_h $@ \ 33 33 "$(UTS_MACHINE)" "$(CONFIG_SMP)" "$(CONFIG_PREEMPT_BUILD)" \ 34 - "$(CONFIG_PREEMPT_RT)" $(CONFIG_CC_VERSION_TEXT) "$(LD)" 34 + "$(CONFIG_PREEMPT_RT)" "$(CONFIG_CC_VERSION_TEXT)" "$(LD)" 35 35 36 36 include/generated/compile.h: FORCE 37 37 $(call cmd,compile.h)
+2 -2
net/wireless/Makefile
··· 33 33 echo 'unsigned int shipped_regdb_certs_len = sizeof(shipped_regdb_certs);'; \ 34 34 ) > $@ 35 35 36 - $(obj)/extra-certs.c: $(CONFIG_CFG80211_EXTRA_REGDB_KEYDIR:"%"=%) \ 37 - $(wildcard $(CONFIG_CFG80211_EXTRA_REGDB_KEYDIR:"%"=%)/*.x509) 36 + $(obj)/extra-certs.c: $(CONFIG_CFG80211_EXTRA_REGDB_KEYDI) \ 37 + $(wildcard $(CONFIG_CFG80211_EXTRA_REGDB_KEYDIR)/*.x509) 38 38 @$(kecho) " GEN $@" 39 39 $(Q)(set -e; \ 40 40 allf=""; \
-1
scripts/Makefile.modinst
··· 66 66 # Don't stop modules_install even if we can't sign external modules. 67 67 # 68 68 ifeq ($(CONFIG_MODULE_SIG_ALL),y) 69 - CONFIG_MODULE_SIG_KEY := $(CONFIG_MODULE_SIG_KEY:"%"=%) 70 69 sig-key := $(if $(wildcard $(CONFIG_MODULE_SIG_KEY)),,$(srctree)/)$(CONFIG_MODULE_SIG_KEY) 71 70 quiet_cmd_sign = SIGN $@ 72 71 cmd_sign = scripts/sign-file $(CONFIG_MODULE_SIG_HASH) $(sig-key) certs/signing_key.x509 $@ \
+1 -1
scripts/gen_autoksyms.sh
··· 23 23 needed_symbols="$needed_symbols module_layout" 24 24 fi 25 25 26 - ksym_wl=$(sed -n 's/^CONFIG_UNUSED_KSYMS_WHITELIST="\(.*\)"$/\1/p' include/config/auto.conf) 26 + ksym_wl=$(sed -n 's/^CONFIG_UNUSED_KSYMS_WHITELIST=\(.*\)$/\1/p' include/config/auto.conf) 27 27 if [ -n "$ksym_wl" ]; then 28 28 [ "${ksym_wl}" != "${ksym_wl#/}" ] || ksym_wl="$abs_srctree/$ksym_wl" 29 29 if [ ! -f "$ksym_wl" ] || [ ! -r "$ksym_wl" ]; then
+13 -11
scripts/kconfig/confdata.c
··· 244 244 p, sym->name); 245 245 return 1; 246 246 case S_STRING: 247 - if (*p++ != '"') 248 - break; 249 - for (p2 = p; (p2 = strpbrk(p2, "\"\\")); p2++) { 250 - if (*p2 == '"') { 251 - *p2 = 0; 247 + /* No escaping for S_DEF_AUTO (include/config/auto.conf) */ 248 + if (def != S_DEF_AUTO) { 249 + if (*p++ != '"') 252 250 break; 251 + for (p2 = p; (p2 = strpbrk(p2, "\"\\")); p2++) { 252 + if (*p2 == '"') { 253 + *p2 = 0; 254 + break; 255 + } 256 + memmove(p2, p2 + 1, strlen(p2)); 253 257 } 254 - memmove(p2, p2 + 1, strlen(p2)); 255 - } 256 - if (!p2) { 257 - if (def != S_DEF_AUTO) 258 + if (!p2) { 258 259 conf_warning("invalid string found"); 259 - return 1; 260 + return 1; 261 + } 260 262 } 261 263 /* fall through */ 262 264 case S_INT: ··· 702 700 703 701 static void print_symbol_for_autoconf(FILE *fp, struct symbol *sym) 704 702 { 705 - __print_symbol(fp, sym, OUTPUT_N_NONE, true); 703 + __print_symbol(fp, sym, OUTPUT_N_NONE, false); 706 704 } 707 705 708 706 void print_symbol_for_listconfig(struct symbol *sym)
+1 -1
scripts/setlocalversion
··· 123 123 fi 124 124 125 125 # CONFIG_LOCALVERSION and LOCALVERSION (if set) 126 - config_localversion=$(sed -n 's/^CONFIG_LOCALVERSION="\(.*\)"$/\1/p' include/config/auto.conf) 126 + config_localversion=$(sed -n 's/^CONFIG_LOCALVERSION=\(.*\)$/\1/p' include/config/auto.conf) 127 127 res="${res}${config_localversion}${LOCALVERSION}" 128 128 129 129 # scm version string if not at a tagged commit
+1 -1
usr/Makefile
··· 21 21 22 22 $(obj)/initramfs_data.o: $(obj)/initramfs_inc_data 23 23 24 - ramfs-input := $(strip $(shell echo $(CONFIG_INITRAMFS_SOURCE))) 24 + ramfs-input := $(CONFIG_INITRAMFS_SOURCE) 25 25 cpio-data := 26 26 27 27 # If CONFIG_INITRAMFS_SOURCE is empty, generate a small initramfs with the