docs: kconfig: fix shell function syntax in caveats
Subsystems (3)
PATCH 1/1 docs: kconfig: fix shell function syntax in caveats
Kconfig separates a function name from its arguments with a comma, but the caveats section uses Make-style whitespace in its shell calls. These expressions expand as undefined variables rather than invoking the shell function, so the supposedly working CC_HAS_ENDIAN_FLAG example fails to parse.
Add the missing commas to the shell calls in this section. Keep the Make examples unchanged.
---
The issue was found and this patch and changelog were prepared with an AI coding assistant after a request to find a small, verifiable Linux fix. The assistant also prepared and ran the verification described below.
Validation:
- Built the current Kconfig conf tool on macOS with Clang, Bison and Flex, using -Wall -Wmissing-prototypes -Wstrict-prototypes -Werror.
- Extracted the documented working CC_HAS_ENDIAN_FLAG example into a minimal Kconfig, with a test gcc-check-flag helper returning y for either endian flag. Before: syntax errors and no helper invocations for either CPU endianness. After: both probes execute and CC_HAS_ENDIAN_FLAG=y.
- Built the changed page alone with Sphinx, treating warnings as errors. The complete kernel documentation set and kernel were not built.
Documentation/kbuild/kconfig-macro-language.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
Documentation/kbuild/kconfig-macro-language.rst +4 -4
@@ -225,7 +225,7 @@ not work:: $(MY_TYPE) "foo" default y -Obviously from the design, $(shell command) is expanded in the textual +Obviously from the design, $(shell,command) is expanded in the textual substitution phase. You cannot pass symbols to the 'shell' function. The following does not work as expected::
@@ -236,12 +236,12 @@ The following does not work as expected:: default "-mlittle-endian" if CPU_LITTLE_ENDIAN config CC_HAS_ENDIAN_FLAG - def_bool $(shell $(srctree)/scripts/gcc-check-flag ENDIAN_FLAG) + def_bool $(shell, $(srctree)/scripts/gcc-check-flag ENDIAN_FLAG) Instead, you can do like follows so that any function call is statically expanded:: config CC_HAS_ENDIAN_FLAG bool - default $(shell $(srctree)/scripts/gcc-check-flag -mbig-endian) if CPU_BIG_ENDIAN - default $(shell $(srctree)/scripts/gcc-check-flag -mlittle-endian) if CPU_LITTLE_ENDIAN + default $(shell, $(srctree)/scripts/gcc-check-flag -mbig-endian) if CPU_BIG_ENDIAN + default $(shell, $(srctree)/scripts/gcc-check-flag -mlittle-endian) if CPU_LITTLE_ENDIAN
base-commit: 4d7d9486c04d917265f64c55bd23b2cc4fe7749c
Signature · 1 line
2.50.1 (Apple Git-155)
Julian Braha
reviewerHi Erkan,
Thanks for the patch!
Quoted 45 lines · Erkan Erdem
Kconfigseparates a function name from its arguments with a comma, but the caveats section uses Make-style whitespace in its shell calls. These expressions expand as undefined variables rather than invoking the shell function, so the supposedly workingCC_HAS_ENDIAN_FLAGexample fails to parse.Add the missing commas to the shell calls in this section. Keep the Make examples unchanged.
Fixes 316d55d55f49 ("Documentation: kconfig: document a new Kconfig macro language")Assisted-by LLMSigned-off-by Erkan Erdem <[email protected]>---
The issue was found and this patch and changelog were prepared with an AI coding assistant after a request to find a small, verifiable Linux fix. The assistant also prepared and ran the verification described below.
Validation:
- Built the currentKconfigconf tool on macOS with Clang, Bison and Flex, using -Wall -Wmissing-prototypes -Wstrict-prototypes -Werror.
- Extracted the documented workingCC_HAS_ENDIAN_FLAGexample into a minimalKconfig, with a test gcc-check-flag helper returning y for either endian flag. Before: syntax errors and no helper invocations for either CPU endianness. After: both probes execute and CC_HAS_ENDIAN_FLAG=y.
- Built the changed page alone with Sphinx, treating warnings as errors. The complete kernel documentation set and kernel were not built.Documentation/kbuild/kconfig-macro-language.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)Documentation/kbuild/kconfig-macro-language.rst +1
-1@@ -225,7 +225,7 @@ not work:: $(MY_TYPE) "foo" default y -Obviously from the design, $(shell command) is expanded in the textual +Obviously from the design, $(shell,command) is expanded in the textual substitution phase. You cannot pass symbols to the 'shell' function. The following does not work as expected::
Documentation/kbuild/kconfig-macro-language.rst The following does not work as expected:: · line 239
Quoted 5 lines
Documentation/kbuild/kconfig-macro-language.rst +1
-1@@ -236,12 +236,12 @@ The following does not work as expected:: default "-mlittle-endian" if CPU_LITTLE_ENDIAN config CC_HAS_ENDIAN_FLAG - def_bool $(shell $(srctree)/scripts/gcc-check-flag ENDIAN_FLAG) + def_bool $(shell, $(srctree)/scripts/gcc-check-flag ENDIAN_FLAG)
Here, the space after the comma is actually included in the argument.
Checking the tree, I found 20 instances of this, but none of them use whitespace after the comma. It may be harmless in most (all?) cases, but we probably want to exclude it when documenting ideal usage, anyway.
I think you got it right in your earlier '$(shell,command)' example.
Quoted 11 lines
Documentation/kbuild/kconfig-macro-language.rst +2
-2Instead, you can do like follows so that any function call is statically expanded:: config CC_HAS_ENDIAN_FLAG bool - default $(shell $(srctree)/scripts/gcc-check-flag -mbig-endian) if CPU_BIG_ENDIAN - default $(shell $(srctree)/scripts/gcc-check-flag -mlittle-endian) if CPU_LITTLE_ENDIAN + default $(shell, $(srctree)/scripts/gcc-check-flag -mbig-endian) if CPU_BIG_ENDIAN + default $(shell, $(srctree)/scripts/gcc-check-flag -mlittle-endian) if CPU_LITTLE_ENDIAN
Quoted 1 line
base-commit:
4d7d9486c04d917265f64c55bd23b2cc4fe7749c
Same thing here.
- Julian Braha