Skip to contentSkip to conversation

docs: kconfig: fix shell function syntax in caveats

PATCH Superseded Erkan Erdem 2 participants 2 messages Sep 5

Subsystems (3)

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore
#0 lore raw

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.

Fixes 316d55d55f49 ("Documentation: kconfig: document a new Kconfig macro language")
Assisted-by LLM

---

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
index 6163467f..e15af278 100644
@@ -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)
reviewer
#1 lore raw

Hi Erkan,

Thanks for the patch!

Quoted 45 lines · Erkan Erdem

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.

Fixes 316d55d55f49 ("Documentation: kconfig: document a new Kconfig macro language")
Assisted-by LLM

---

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 +1 -1
index 6163467f..e15af278 100644
@@ -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 -2
 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
 
Quoted 1 line

base-commit: 4d7d9486c04d917265f64c55bd23b2cc4fe7749c

Same thing here.

- Julian Braha