kheaders: use `command -v` to test for existence of `cpio`
authorMiguel Ojeda <ojeda@kernel.org>
Tue, 28 May 2024 16:31:50 +0000 (18:31 +0200)
committerMasahiro Yamada <masahiroy@kernel.org>
Wed, 29 May 2024 16:13:20 +0000 (01:13 +0900)
Commit 13e1df09284d ("kheaders: explicitly validate existence of cpio
command") added an explicit check for `cpio` using `type`.

However, `type` in `dash` (which is used in some popular distributions
and base images as the shell script runner) prints the missing message
to standard output, and thus no error is printed:

    $ bash -c 'type missing >/dev/null'
    bash: line 1: type: missing: not found
    $ dash -c 'type missing >/dev/null'
    $

For instance, this issue may be seen by loongarch builders, given its
defconfig enables CONFIG_IKHEADERS since commit 9cc1df421f00 ("LoongArch:
Update Loongson-3 default config file").

Therefore, use `command -v` instead to have consistent behavior, and
take the chance to provide a more explicit error.

Fixes: 13e1df09284d ("kheaders: explicitly validate existence of cpio command")
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
kernel/gen_kheaders.sh

index 8b6e0c2bc0dfe0f966a86fa68632d64db2f73411..383fd43ac6122247310720afc391ab2610bd9847 100755 (executable)
@@ -14,7 +14,12 @@ include/
 arch/$SRCARCH/include/
 "
 
-type cpio > /dev/null
+if ! command -v cpio >/dev/null; then
+       echo >&2 "***"
+       echo >&2 "*** 'cpio' could not be found."
+       echo >&2 "***"
+       exit 1
+fi
 
 # Support incremental builds by skipping archive generation
 # if timestamps of files being archived are not changed.