tools/perf/tests/Build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
When someone has a global shellcheckrc file, for example at
~/.config/shellcheckrc, with the directive 'shell=sh', building perf
will fail with many shellcheck errors like:
In tests/shell/base_probe/test_adding_kernel.sh line 294:
(( TEST_RESULT += $? ))
^---------------------^ SC3006 (warning): In POSIX sh, standalone ((..)) is undefined.
For more information:
https://www.shellcheck.net/wiki/SC3006 -- In POSIX sh, standalone ((..)) is...
make[5]: *** [tests/Build:91: tests/shell/base_probe/test_adding_kernel.sh.shellcheck_log] Error 1
Passing the '-s bash' option ensures that it runs correctly regardless
of a developers global configuration.
Signed-off-by: Collin Funk <collin.funk1@gmail.com>
---
tools/perf/tests/Build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/perf/tests/Build b/tools/perf/tests/Build
index 2181f5a92148..26efc5d20f6c 100644
--- a/tools/perf/tests/Build
+++ b/tools/perf/tests/Build
@@ -89,7 +89,7 @@ endif
$(OUTPUT)%.shellcheck_log: %
$(call rule_mkdir)
- $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
+ $(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
perf-test-y += $(SHELL_TEST_LOGS)
--
2.49.0
On 13/06/2025 4:36 am, Collin Funk wrote: > When someone has a global shellcheckrc file, for example at > ~/.config/shellcheckrc, with the directive 'shell=sh', building perf > will fail with many shellcheck errors like: > > In tests/shell/base_probe/test_adding_kernel.sh line 294: > (( TEST_RESULT += $? )) > ^---------------------^ SC3006 (warning): In POSIX sh, standalone ((..)) is undefined. > > For more information: > https://www.shellcheck.net/wiki/SC3006 -- In POSIX sh, standalone ((..)) is... > make[5]: *** [tests/Build:91: tests/shell/base_probe/test_adding_kernel.sh.shellcheck_log] Error 1 > > Passing the '-s bash' option ensures that it runs correctly regardless > of a developers global configuration. > > Signed-off-by: Collin Funk <collin.funk1@gmail.com> > --- > tools/perf/tests/Build | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/tools/perf/tests/Build b/tools/perf/tests/Build > index 2181f5a92148..26efc5d20f6c 100644 > --- a/tools/perf/tests/Build > +++ b/tools/perf/tests/Build > @@ -89,7 +89,7 @@ endif > > $(OUTPUT)%.shellcheck_log: % > $(call rule_mkdir) > - $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > + $(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > > perf-test-y += $(SHELL_TEST_LOGS) > If we're enforcing bash style with static analysis shouldn't we also change all the hashbangs to bash? Recently there have been changes to change sh to bash in some of the tests so presumably the hard rule for sh is no more? In the past I've had to replace bashisms that didn't work in sh but it would be nice to have only one language to write tests in. I doubt anyone running the tests today is running somewhere without bash, or that changing it will break anything. If anything it will fix more bashisms that have already been written. Just for reference there are 34 #!/bin/bash and 42 #!/bin/sh in tools/perf/tests Thanks James
Hello, On Thu, Jun 19, 2025 at 11:28:46AM +0100, James Clark wrote: > > > On 13/06/2025 4:36 am, Collin Funk wrote: > > When someone has a global shellcheckrc file, for example at > > ~/.config/shellcheckrc, with the directive 'shell=sh', building perf > > will fail with many shellcheck errors like: > > > > In tests/shell/base_probe/test_adding_kernel.sh line 294: > > (( TEST_RESULT += $? )) > > ^---------------------^ SC3006 (warning): In POSIX sh, standalone ((..)) is undefined. > > > > For more information: > > https://www.shellcheck.net/wiki/SC3006 -- In POSIX sh, standalone ((..)) is... > > make[5]: *** [tests/Build:91: tests/shell/base_probe/test_adding_kernel.sh.shellcheck_log] Error 1 > > > > Passing the '-s bash' option ensures that it runs correctly regardless > > of a developers global configuration. > > > > Signed-off-by: Collin Funk <collin.funk1@gmail.com> > > --- > > tools/perf/tests/Build | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/tools/perf/tests/Build b/tools/perf/tests/Build > > index 2181f5a92148..26efc5d20f6c 100644 > > --- a/tools/perf/tests/Build > > +++ b/tools/perf/tests/Build > > @@ -89,7 +89,7 @@ endif > > $(OUTPUT)%.shellcheck_log: % > > $(call rule_mkdir) > > - $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > > + $(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > > perf-test-y += $(SHELL_TEST_LOGS) > > If we're enforcing bash style with static analysis shouldn't we also change > all the hashbangs to bash? Recently there have been changes to change sh to > bash in some of the tests so presumably the hard rule for sh is no more? > > In the past I've had to replace bashisms that didn't work in sh but it would > be nice to have only one language to write tests in. I doubt anyone running > the tests today is running somewhere without bash, or that changing it will > break anything. If anything it will fix more bashisms that have already been > written. > > Just for reference there are 34 #!/bin/bash and 42 #!/bin/sh in > tools/perf/tests Thanks for raising the concern. I agree that having one standard is a way to go but I really don't have preference between those shells. Thanks, Namhyung
On 20/06/2025 8:49 pm, Namhyung Kim wrote: > Hello, > > On Thu, Jun 19, 2025 at 11:28:46AM +0100, James Clark wrote: >> >> >> On 13/06/2025 4:36 am, Collin Funk wrote: >>> When someone has a global shellcheckrc file, for example at >>> ~/.config/shellcheckrc, with the directive 'shell=sh', building perf >>> will fail with many shellcheck errors like: >>> >>> In tests/shell/base_probe/test_adding_kernel.sh line 294: >>> (( TEST_RESULT += $? )) >>> ^---------------------^ SC3006 (warning): In POSIX sh, standalone ((..)) is undefined. >>> >>> For more information: >>> https://www.shellcheck.net/wiki/SC3006 -- In POSIX sh, standalone ((..)) is... >>> make[5]: *** [tests/Build:91: tests/shell/base_probe/test_adding_kernel.sh.shellcheck_log] Error 1 >>> >>> Passing the '-s bash' option ensures that it runs correctly regardless >>> of a developers global configuration. >>> >>> Signed-off-by: Collin Funk <collin.funk1@gmail.com> >>> --- >>> tools/perf/tests/Build | 2 +- >>> 1 file changed, 1 insertion(+), 1 deletion(-) >>> >>> diff --git a/tools/perf/tests/Build b/tools/perf/tests/Build >>> index 2181f5a92148..26efc5d20f6c 100644 >>> --- a/tools/perf/tests/Build >>> +++ b/tools/perf/tests/Build >>> @@ -89,7 +89,7 @@ endif >>> $(OUTPUT)%.shellcheck_log: % >>> $(call rule_mkdir) >>> - $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) >>> + $(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) >>> perf-test-y += $(SHELL_TEST_LOGS) >> >> If we're enforcing bash style with static analysis shouldn't we also change >> all the hashbangs to bash? Recently there have been changes to change sh to >> bash in some of the tests so presumably the hard rule for sh is no more? >> >> In the past I've had to replace bashisms that didn't work in sh but it would >> be nice to have only one language to write tests in. I doubt anyone running >> the tests today is running somewhere without bash, or that changing it will >> break anything. If anything it will fix more bashisms that have already been >> written. >> >> Just for reference there are 34 #!/bin/bash and 42 #!/bin/sh in >> tools/perf/tests > > Thanks for raising the concern. I agree that having one standard is a > way to go but I really don't have preference between those shells. > > Thanks, > Namhyung > I would vote for bash then, just because it has a few extra builtins that are sometimes useful. I can send a patch that does the change to see if anyone objects. Thanks James
Hi James, James Clark <james.clark@linaro.org> writes: > If we're enforcing bash style with static analysis shouldn't we also > change all the hashbangs to bash? Recently there have been changes to > change sh to bash in some of the tests so presumably the hard rule for > sh is no more? > > In the past I've had to replace bashisms that didn't work in sh but it > would be nice to have only one language to write tests in. I doubt > anyone running the tests today is running somewhere without bash, or > that changing it will break anything. If anything it will fix more > bashisms that have already been written. > > Just for reference there are 34 #!/bin/bash and 42 #!/bin/sh in > tools/perf/tests That sounds reasonable to me. Writing portable shell is a hassle and if we already assume a working /bin/bash in some places, I don't see a reason not to use it for the others. Regarding this patch, shellcheck will use the file extension or shebang only if it does not find a 'shell' directive in a .shellcheckrc. So that change will still require this patch. I saw it was used in other places, so I assumed this patch was fine: $ find tools/perf -name Build | xargs grep bash tools/perf/Build: $(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) tools/perf/trace/beauty/Build: $(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) Collin
On 20/06/2025 6:40 pm, Collin Funk wrote: > Hi James, > > James Clark <james.clark@linaro.org> writes: > >> If we're enforcing bash style with static analysis shouldn't we also >> change all the hashbangs to bash? Recently there have been changes to >> change sh to bash in some of the tests so presumably the hard rule for >> sh is no more? >> >> In the past I've had to replace bashisms that didn't work in sh but it >> would be nice to have only one language to write tests in. I doubt >> anyone running the tests today is running somewhere without bash, or >> that changing it will break anything. If anything it will fix more >> bashisms that have already been written. >> >> Just for reference there are 34 #!/bin/bash and 42 #!/bin/sh in >> tools/perf/tests > > That sounds reasonable to me. Writing portable shell is a hassle and if > we already assume a working /bin/bash in some places, I don't see a > reason not to use it for the others. > > Regarding this patch, shellcheck will use the file extension or shebang > only if it does not find a 'shell' directive in a .shellcheckrc. So that > change will still require this patch. > > I saw it was used in other places, so I assumed this patch was fine: > > $ find tools/perf -name Build | xargs grep bash > tools/perf/Build: $(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > tools/perf/trace/beauty/Build: $(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > > Collin In that case: Reviewed-by: James Clark <james.clark@linaro.org> And I'll send the bulk hashbang change separately.
On Mon, Jun 23, 2025 at 1:10 AM James Clark <james.clark@linaro.org> wrote: > > > > On 20/06/2025 6:40 pm, Collin Funk wrote: > > Hi James, > > > > James Clark <james.clark@linaro.org> writes: > > > >> If we're enforcing bash style with static analysis shouldn't we also > >> change all the hashbangs to bash? Recently there have been changes to > >> change sh to bash in some of the tests so presumably the hard rule for > >> sh is no more? > >> > >> In the past I've had to replace bashisms that didn't work in sh but it > >> would be nice to have only one language to write tests in. I doubt > >> anyone running the tests today is running somewhere without bash, or > >> that changing it will break anything. If anything it will fix more > >> bashisms that have already been written. > >> > >> Just for reference there are 34 #!/bin/bash and 42 #!/bin/sh in > >> tools/perf/tests > > > > That sounds reasonable to me. Writing portable shell is a hassle and if > > we already assume a working /bin/bash in some places, I don't see a > > reason not to use it for the others. > > > > Regarding this patch, shellcheck will use the file extension or shebang > > only if it does not find a 'shell' directive in a .shellcheckrc. So that > > change will still require this patch. > > > > I saw it was used in other places, so I assumed this patch was fine: > > > > $ find tools/perf -name Build | xargs grep bash > > tools/perf/Build: $(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > > tools/perf/trace/beauty/Build: $(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > > > > Collin > > In that case: > > Reviewed-by: James Clark <james.clark@linaro.org> > > And I'll send the bulk hashbang change separately. I've no objection to switching to using bash globally. It seems sub-optimal that we've copy-pasted the shellcheck command across many different Build files and that this patch will cause the tools/perf/tests/Build one to differ. My preference would be to have a global definition probably in Makefile.perf, then use it consistently. Alternative all shellcheck invocations can pass "-s bash" for the sake of consistency. Fwiw, I think the 'tools/arch/x86/tools/gen-insn-*' which is to some extent taken from the kernel's 'arch/x86/tools' is okay with the change too. Thanks, Ian
Hi Ian, Ian Rogers <irogers@google.com> writes: >> > $ find tools/perf -name Build | xargs grep bash >> > tools/perf/Build: $(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) >> > tools/perf/trace/beauty/Build: $(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) >> > >> > Collin >> >> In that case: >> >> Reviewed-by: James Clark <james.clark@linaro.org> >> >> And I'll send the bulk hashbang change separately. > > I've no objection to switching to using bash globally. It seems > sub-optimal that we've copy-pasted the shellcheck command across many > different Build files and that this patch will cause the > tools/perf/tests/Build one to differ. My preference would be to have a > global definition probably in Makefile.perf, then use it consistently. > Alternative all shellcheck invocations can pass "-s bash" for the sake > of consistency. Fwiw, I think the 'tools/arch/x86/tools/gen-insn-*' > which is to some extent taken from the kernel's 'arch/x86/tools' is > okay with the change too. Good point. It turns out there was a SHELLCHECK variable in Makefile.perf, but it was not used consistently. I have submitted V2 that adds the '-s bash' option to the definition and actually uses the variable [1] Collin [1] https://lore.kernel.org/all/f7ea3a430dc2bd77656c50f93283547d1245e2fe.1750730589.git.collin.funk1@gmail.com/
When someone has a global shellcheckrc file, for example at
~/.config/shellcheckrc, with the directive 'shell=sh', building perf
will fail with many shellcheck errors like:
In tests/shell/base_probe/test_adding_kernel.sh line 294:
(( TEST_RESULT += $? ))
^---------------------^ SC3006 (warning): In POSIX sh, standalone ((..)) is undefined.
For more information:
https://www.shellcheck.net/wiki/SC3006 -- In POSIX sh, standalone ((..)) is...
make[5]: *** [tests/Build:91: tests/shell/base_probe/test_adding_kernel.sh.shellcheck_log] Error 1
Passing the '-s bash' option ensures that it runs correctly regardless
of a developers global configuration.
This patch adds '-s bash' and other options to the SHELLCHECK variable
in Makefile.perf and makes use of the variable consistently.
Signed-off-by: Collin Funk <collin.funk1@gmail.com>
---
tools/perf/Build | 2 +-
tools/perf/Makefile.perf | 2 +-
tools/perf/arch/x86/Build | 2 +-
tools/perf/arch/x86/tests/Build | 2 +-
tools/perf/tests/Build | 2 +-
tools/perf/trace/beauty/Build | 2 +-
tools/perf/util/Build | 2 +-
7 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/tools/perf/Build b/tools/perf/Build
index 06107f1e1d42..b03cc59dabf8 100644
--- a/tools/perf/Build
+++ b/tools/perf/Build
@@ -73,7 +73,7 @@ endif
$(OUTPUT)%.shellcheck_log: %
$(call rule_mkdir)
- $(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
+ $(Q)$(call echo-cmd,test)$(SHELLCHECK) "$<" > $@ || (cat $@ && rm $@ && false)
perf-y += $(SHELL_TEST_LOGS)
diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf
index d4c7031b01a7..e0cf8db5462b 100644
--- a/tools/perf/Makefile.perf
+++ b/tools/perf/Makefile.perf
@@ -252,7 +252,7 @@ endif
ifeq ($(NO_SHELLCHECK),1)
SHELLCHECK :=
else
- SHELLCHECK := $(shell which shellcheck 2> /dev/null)
+ SHELLCHECK := $(shell which shellcheck 2> /dev/null) -s bash -a -S warning
endif
# shellcheck is using in tools/perf/tests/Build with option -a/--check-sourced (
diff --git a/tools/perf/arch/x86/Build b/tools/perf/arch/x86/Build
index afae7b8f6bd6..d31a1168757c 100644
--- a/tools/perf/arch/x86/Build
+++ b/tools/perf/arch/x86/Build
@@ -10,6 +10,6 @@ endif
$(OUTPUT)%.shellcheck_log: %
$(call rule_mkdir)
- $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
+ $(Q)$(call echo-cmd,test)$(SHELLCHECK) "$<" > $@ || (cat $@ && rm $@ && false)
perf-test-y += $(SHELL_TEST_LOGS)
diff --git a/tools/perf/arch/x86/tests/Build b/tools/perf/arch/x86/tests/Build
index 5e00cbfd2d56..01d5527f38c7 100644
--- a/tools/perf/arch/x86/tests/Build
+++ b/tools/perf/arch/x86/tests/Build
@@ -22,6 +22,6 @@ endif
$(OUTPUT)%.shellcheck_log: %
$(call rule_mkdir)
- $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
+ $(Q)$(call echo-cmd,test)$(SHELLCHECK) "$<" > $@ || (cat $@ && rm $@ && false)
perf-test-y += $(SHELL_TEST_LOGS)
diff --git a/tools/perf/tests/Build b/tools/perf/tests/Build
index 2181f5a92148..d6c35dd0de3b 100644
--- a/tools/perf/tests/Build
+++ b/tools/perf/tests/Build
@@ -89,7 +89,7 @@ endif
$(OUTPUT)%.shellcheck_log: %
$(call rule_mkdir)
- $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
+ $(Q)$(call echo-cmd,test)$(SHELLCHECK) "$<" > $@ || (cat $@ && rm $@ && false)
perf-test-y += $(SHELL_TEST_LOGS)
diff --git a/tools/perf/trace/beauty/Build b/tools/perf/trace/beauty/Build
index f50ebdc445b8..561590ee8cda 100644
--- a/tools/perf/trace/beauty/Build
+++ b/tools/perf/trace/beauty/Build
@@ -31,6 +31,6 @@ endif
$(OUTPUT)%.shellcheck_log: %
$(call rule_mkdir)
- $(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
+ $(Q)$(call echo-cmd,test)$(SHELLCHECK) "$<" > $@ || (cat $@ && rm $@ && false)
perf-y += $(SHELL_TEST_LOGS)
diff --git a/tools/perf/util/Build b/tools/perf/util/Build
index 7910d908c814..2dfa09a6f27d 100644
--- a/tools/perf/util/Build
+++ b/tools/perf/util/Build
@@ -421,7 +421,7 @@ endif
$(OUTPUT)%.shellcheck_log: %
$(call rule_mkdir)
- $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
+ $(Q)$(call echo-cmd,test)$(SHELLCHECK) "$<" > $@ || (cat $@ && rm $@ && false)
perf-util-y += $(SHELL_TEST_LOGS)
--
2.49.0
Hello, On Mon, Jun 23, 2025 at 10:44:59PM -0700, Collin Funk wrote: > When someone has a global shellcheckrc file, for example at > ~/.config/shellcheckrc, with the directive 'shell=sh', building perf > will fail with many shellcheck errors like: > > In tests/shell/base_probe/test_adding_kernel.sh line 294: > (( TEST_RESULT += $? )) > ^---------------------^ SC3006 (warning): In POSIX sh, standalone ((..)) is undefined. > > For more information: > https://www.shellcheck.net/wiki/SC3006 -- In POSIX sh, standalone ((..)) is... > make[5]: *** [tests/Build:91: tests/shell/base_probe/test_adding_kernel.sh.shellcheck_log] Error 1 > > Passing the '-s bash' option ensures that it runs correctly regardless > of a developers global configuration. > > This patch adds '-s bash' and other options to the SHELLCHECK variable > in Makefile.perf and makes use of the variable consistently. > > Signed-off-by: Collin Funk <collin.funk1@gmail.com> > --- > tools/perf/Build | 2 +- > tools/perf/Makefile.perf | 2 +- > tools/perf/arch/x86/Build | 2 +- > tools/perf/arch/x86/tests/Build | 2 +- > tools/perf/tests/Build | 2 +- > tools/perf/trace/beauty/Build | 2 +- > tools/perf/util/Build | 2 +- > 7 files changed, 7 insertions(+), 7 deletions(-) > > diff --git a/tools/perf/Build b/tools/perf/Build > index 06107f1e1d42..b03cc59dabf8 100644 > --- a/tools/perf/Build > +++ b/tools/perf/Build > @@ -73,7 +73,7 @@ endif > > $(OUTPUT)%.shellcheck_log: % > $(call rule_mkdir) > - $(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > + $(Q)$(call echo-cmd,test)$(SHELLCHECK) "$<" > $@ || (cat $@ && rm $@ && false) > > perf-y += $(SHELL_TEST_LOGS) > > diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf > index d4c7031b01a7..e0cf8db5462b 100644 > --- a/tools/perf/Makefile.perf > +++ b/tools/perf/Makefile.perf > @@ -252,7 +252,7 @@ endif > ifeq ($(NO_SHELLCHECK),1) > SHELLCHECK := > else > - SHELLCHECK := $(shell which shellcheck 2> /dev/null) > + SHELLCHECK := $(shell which shellcheck 2> /dev/null) -s bash -a -S warning This caused a trouble on a test environment where 'which' (and 'shellcheck' as well) is not available. Now it makes SHELLCHECK non-empty unconditionally. So the version check below failed like below: make[1]: which: No such file or directory /bin/sh: - : invalid option Usage: /bin/sh [GNU long option] [option] ... /bin/sh [GNU long option] [option] script-file ... GNU long options: --debug --debugger --dump-po-strings --dump-strings --help --init-file --login --noediting --noprofile --norc --posix --pretty-print --rcfile --rpm-requires --restricted --verbose --version Shell options: -ilrsD or -c command or -O shopt_option (invocation only) -abefhkmnptuvxBCEHPT or -o option expr: syntax error: unexpected argument ‘060’ And it failed to build later on shellchecks. TEST /build/arch/x86/tests/gen-insn-x86-dat.sh.shellcheck_log /bin/sh: line 1: -s: command not found make[6]: *** [arch/x86/tests/Build:25: /build/arch/x86/tests/gen-insn-x86-dat.sh.shellcheck_log] Error 1 make[6]: *** Waiting for unfinished jobs.... I think it's better to convert 'which' to 'command -v' (in other places too) and add the options after the version check. Thanks, Namhyung > endif > > # shellcheck is using in tools/perf/tests/Build with option -a/--check-sourced ( > diff --git a/tools/perf/arch/x86/Build b/tools/perf/arch/x86/Build > index afae7b8f6bd6..d31a1168757c 100644 > --- a/tools/perf/arch/x86/Build > +++ b/tools/perf/arch/x86/Build > @@ -10,6 +10,6 @@ endif > > $(OUTPUT)%.shellcheck_log: % > $(call rule_mkdir) > - $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > + $(Q)$(call echo-cmd,test)$(SHELLCHECK) "$<" > $@ || (cat $@ && rm $@ && false) > > perf-test-y += $(SHELL_TEST_LOGS) > diff --git a/tools/perf/arch/x86/tests/Build b/tools/perf/arch/x86/tests/Build > index 5e00cbfd2d56..01d5527f38c7 100644 > --- a/tools/perf/arch/x86/tests/Build > +++ b/tools/perf/arch/x86/tests/Build > @@ -22,6 +22,6 @@ endif > > $(OUTPUT)%.shellcheck_log: % > $(call rule_mkdir) > - $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > + $(Q)$(call echo-cmd,test)$(SHELLCHECK) "$<" > $@ || (cat $@ && rm $@ && false) > > perf-test-y += $(SHELL_TEST_LOGS) > diff --git a/tools/perf/tests/Build b/tools/perf/tests/Build > index 2181f5a92148..d6c35dd0de3b 100644 > --- a/tools/perf/tests/Build > +++ b/tools/perf/tests/Build > @@ -89,7 +89,7 @@ endif > > $(OUTPUT)%.shellcheck_log: % > $(call rule_mkdir) > - $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > + $(Q)$(call echo-cmd,test)$(SHELLCHECK) "$<" > $@ || (cat $@ && rm $@ && false) > > perf-test-y += $(SHELL_TEST_LOGS) > > diff --git a/tools/perf/trace/beauty/Build b/tools/perf/trace/beauty/Build > index f50ebdc445b8..561590ee8cda 100644 > --- a/tools/perf/trace/beauty/Build > +++ b/tools/perf/trace/beauty/Build > @@ -31,6 +31,6 @@ endif > > $(OUTPUT)%.shellcheck_log: % > $(call rule_mkdir) > - $(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > + $(Q)$(call echo-cmd,test)$(SHELLCHECK) "$<" > $@ || (cat $@ && rm $@ && false) > > perf-y += $(SHELL_TEST_LOGS) > diff --git a/tools/perf/util/Build b/tools/perf/util/Build > index 7910d908c814..2dfa09a6f27d 100644 > --- a/tools/perf/util/Build > +++ b/tools/perf/util/Build > @@ -421,7 +421,7 @@ endif > > $(OUTPUT)%.shellcheck_log: % > $(call rule_mkdir) > - $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > + $(Q)$(call echo-cmd,test)$(SHELLCHECK) "$<" > $@ || (cat $@ && rm $@ && false) > > perf-util-y += $(SHELL_TEST_LOGS) > > -- > 2.49.0 >
Hi Namhyung, Namhyung Kim <namhyung@kernel.org> writes: > This caused a trouble on a test environment where 'which' (and > 'shellcheck' as well) is not available. Now it makes SHELLCHECK > non-empty unconditionally. > > So the version check below failed like below: > > make[1]: which: No such file or directory > /bin/sh: - : invalid option > Usage: /bin/sh [GNU long option] [option] ... > /bin/sh [GNU long option] [option] script-file ... > GNU long options: > --debug > --debugger > --dump-po-strings > --dump-strings > --help > --init-file > --login > --noediting > --noprofile > --norc > --posix > --pretty-print > --rcfile > --rpm-requires > --restricted > --verbose > --version > Shell options: > -ilrsD or -c command or -O shopt_option (invocation only) > -abefhkmnptuvxBCEHPT or -o option > expr: syntax error: unexpected argument ‘060’ > > And it failed to build later on shellchecks. > > TEST /build/arch/x86/tests/gen-insn-x86-dat.sh.shellcheck_log > /bin/sh: line 1: -s: command not found > make[6]: *** [arch/x86/tests/Build:25: /build/arch/x86/tests/gen-insn-x86-dat.sh.shellcheck_log] Error 1 > make[6]: *** Waiting for unfinished jobs.... > > I think it's better to convert 'which' to 'command -v' (in other places > too) and add the options after the version check. Oops, I assumed that on a system without shellcheck NO_SHELLCHECK would be defined. Let me write another version. I think the 'command -v' change is best left for a separate patch(s). Since it is used in many other places, and maybe others will raise objections. Collin
Collin Funk <collin.funk1@gmail.com> writes: > Oops, I assumed that on a system without shellcheck NO_SHELLCHECK would > be defined. Let me write another version. > > I think the 'command -v' change is best left for a separate patch(s). > Since it is used in many other places, and maybe others will raise > objections. Okay, I sent V4 which makes sure SHELLCHECK is empty when the program doesn't exist [1]. If it does exist, we then check the version. If it does exit and is a supported version, we add the options, or else we set it to empty. Collin [1] https://lore.kernel.org/linux-perf-users/63491dbc8439edf2e949d80e264b9d22332fea61.1751082075.git.collin.funk1@gmail.com/T/#u
On 24/06/2025 6:44 am, Collin Funk wrote: > When someone has a global shellcheckrc file, for example at > ~/.config/shellcheckrc, with the directive 'shell=sh', building perf > will fail with many shellcheck errors like: > > In tests/shell/base_probe/test_adding_kernel.sh line 294: > (( TEST_RESULT += $? )) > ^---------------------^ SC3006 (warning): In POSIX sh, standalone ((..)) is undefined. > > For more information: > https://www.shellcheck.net/wiki/SC3006 -- In POSIX sh, standalone ((..)) is... > make[5]: *** [tests/Build:91: tests/shell/base_probe/test_adding_kernel.sh.shellcheck_log] Error 1 > > Passing the '-s bash' option ensures that it runs correctly regardless > of a developers global configuration. > > This patch adds '-s bash' and other options to the SHELLCHECK variable > in Makefile.perf and makes use of the variable consistently. > Reviewed-by: James Clark <james.clark@linaro.org> > Signed-off-by: Collin Funk <collin.funk1@gmail.com> > --- > tools/perf/Build | 2 +- > tools/perf/Makefile.perf | 2 +- > tools/perf/arch/x86/Build | 2 +- > tools/perf/arch/x86/tests/Build | 2 +- > tools/perf/tests/Build | 2 +- > tools/perf/trace/beauty/Build | 2 +- > tools/perf/util/Build | 2 +- > 7 files changed, 7 insertions(+), 7 deletions(-) > > diff --git a/tools/perf/Build b/tools/perf/Build > index 06107f1e1d42..b03cc59dabf8 100644 > --- a/tools/perf/Build > +++ b/tools/perf/Build > @@ -73,7 +73,7 @@ endif > > $(OUTPUT)%.shellcheck_log: % > $(call rule_mkdir) > - $(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > + $(Q)$(call echo-cmd,test)$(SHELLCHECK) "$<" > $@ || (cat $@ && rm $@ && false) > > perf-y += $(SHELL_TEST_LOGS) > > diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf > index d4c7031b01a7..e0cf8db5462b 100644 > --- a/tools/perf/Makefile.perf > +++ b/tools/perf/Makefile.perf > @@ -252,7 +252,7 @@ endif > ifeq ($(NO_SHELLCHECK),1) > SHELLCHECK := > else > - SHELLCHECK := $(shell which shellcheck 2> /dev/null) > + SHELLCHECK := $(shell which shellcheck 2> /dev/null) -s bash -a -S warning > endif > > # shellcheck is using in tools/perf/tests/Build with option -a/--check-sourced ( > diff --git a/tools/perf/arch/x86/Build b/tools/perf/arch/x86/Build > index afae7b8f6bd6..d31a1168757c 100644 > --- a/tools/perf/arch/x86/Build > +++ b/tools/perf/arch/x86/Build > @@ -10,6 +10,6 @@ endif > > $(OUTPUT)%.shellcheck_log: % > $(call rule_mkdir) > - $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > + $(Q)$(call echo-cmd,test)$(SHELLCHECK) "$<" > $@ || (cat $@ && rm $@ && false) > > perf-test-y += $(SHELL_TEST_LOGS) > diff --git a/tools/perf/arch/x86/tests/Build b/tools/perf/arch/x86/tests/Build > index 5e00cbfd2d56..01d5527f38c7 100644 > --- a/tools/perf/arch/x86/tests/Build > +++ b/tools/perf/arch/x86/tests/Build > @@ -22,6 +22,6 @@ endif > > $(OUTPUT)%.shellcheck_log: % > $(call rule_mkdir) > - $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > + $(Q)$(call echo-cmd,test)$(SHELLCHECK) "$<" > $@ || (cat $@ && rm $@ && false) > > perf-test-y += $(SHELL_TEST_LOGS) > diff --git a/tools/perf/tests/Build b/tools/perf/tests/Build > index 2181f5a92148..d6c35dd0de3b 100644 > --- a/tools/perf/tests/Build > +++ b/tools/perf/tests/Build > @@ -89,7 +89,7 @@ endif > > $(OUTPUT)%.shellcheck_log: % > $(call rule_mkdir) > - $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > + $(Q)$(call echo-cmd,test)$(SHELLCHECK) "$<" > $@ || (cat $@ && rm $@ && false) > > perf-test-y += $(SHELL_TEST_LOGS) > > diff --git a/tools/perf/trace/beauty/Build b/tools/perf/trace/beauty/Build > index f50ebdc445b8..561590ee8cda 100644 > --- a/tools/perf/trace/beauty/Build > +++ b/tools/perf/trace/beauty/Build > @@ -31,6 +31,6 @@ endif > > $(OUTPUT)%.shellcheck_log: % > $(call rule_mkdir) > - $(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > + $(Q)$(call echo-cmd,test)$(SHELLCHECK) "$<" > $@ || (cat $@ && rm $@ && false) > > perf-y += $(SHELL_TEST_LOGS) > diff --git a/tools/perf/util/Build b/tools/perf/util/Build > index 7910d908c814..2dfa09a6f27d 100644 > --- a/tools/perf/util/Build > +++ b/tools/perf/util/Build > @@ -421,7 +421,7 @@ endif > > $(OUTPUT)%.shellcheck_log: % > $(call rule_mkdir) > - $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > + $(Q)$(call echo-cmd,test)$(SHELLCHECK) "$<" > $@ || (cat $@ && rm $@ && false) > > perf-util-y += $(SHELL_TEST_LOGS) >
When someone has a global shellcheckrc file, for example at
~/.config/shellcheckrc, with the directive 'shell=sh', building perf
will fail with many shellcheck errors like:
In tests/shell/base_probe/test_adding_kernel.sh line 294:
(( TEST_RESULT += $? ))
^---------------------^ SC3006 (warning): In POSIX sh, standalone ((..)) is undefined.
For more information:
https://www.shellcheck.net/wiki/SC3006 -- In POSIX sh, standalone ((..)) is...
make[5]: *** [tests/Build:91: tests/shell/base_probe/test_adding_kernel.sh.shellcheck_log] Error 1
Passing the '-s bash' option ensures that it runs correctly regardless
of a developers global configuration.
This patch adds '-s bash' and other options to the SHELLCHECK variable
in Makefile.perf and makes use of the variable consistently.
Signed-off-by: Collin Funk <collin.funk1@gmail.com>
---
tools/perf/Build | 2 +-
tools/perf/Makefile.perf | 2 ++
tools/perf/arch/x86/Build | 2 +-
tools/perf/arch/x86/tests/Build | 2 +-
tools/perf/tests/Build | 2 +-
tools/perf/trace/beauty/Build | 2 +-
tools/perf/util/Build | 2 +-
7 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/tools/perf/Build b/tools/perf/Build
index 06107f1e1d42..b03cc59dabf8 100644
--- a/tools/perf/Build
+++ b/tools/perf/Build
@@ -73,7 +73,7 @@ endif
$(OUTPUT)%.shellcheck_log: %
$(call rule_mkdir)
- $(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
+ $(Q)$(call echo-cmd,test)$(SHELLCHECK) "$<" > $@ || (cat $@ && rm $@ && false)
perf-y += $(SHELL_TEST_LOGS)
diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf
index d4c7031b01a7..5f76c82e0aec 100644
--- a/tools/perf/Makefile.perf
+++ b/tools/perf/Makefile.perf
@@ -262,6 +262,8 @@ ifneq ($(SHELLCHECK),)
ifeq ($(shell expr $(shell $(SHELLCHECK) --version | grep version: | \
sed -e 's/.\+ \([0-9]\+\).\([0-9]\+\).\([0-9]\+\)/\1\2\3/g') \< 060), 1)
SHELLCHECK :=
+ else
+ SHELLCHECK := $(SHELLCHECK) -s bash -a -S warning
endif
endif
diff --git a/tools/perf/arch/x86/Build b/tools/perf/arch/x86/Build
index afae7b8f6bd6..d31a1168757c 100644
--- a/tools/perf/arch/x86/Build
+++ b/tools/perf/arch/x86/Build
@@ -10,6 +10,6 @@ endif
$(OUTPUT)%.shellcheck_log: %
$(call rule_mkdir)
- $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
+ $(Q)$(call echo-cmd,test)$(SHELLCHECK) "$<" > $@ || (cat $@ && rm $@ && false)
perf-test-y += $(SHELL_TEST_LOGS)
diff --git a/tools/perf/arch/x86/tests/Build b/tools/perf/arch/x86/tests/Build
index 5e00cbfd2d56..01d5527f38c7 100644
--- a/tools/perf/arch/x86/tests/Build
+++ b/tools/perf/arch/x86/tests/Build
@@ -22,6 +22,6 @@ endif
$(OUTPUT)%.shellcheck_log: %
$(call rule_mkdir)
- $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
+ $(Q)$(call echo-cmd,test)$(SHELLCHECK) "$<" > $@ || (cat $@ && rm $@ && false)
perf-test-y += $(SHELL_TEST_LOGS)
diff --git a/tools/perf/tests/Build b/tools/perf/tests/Build
index 2181f5a92148..d6c35dd0de3b 100644
--- a/tools/perf/tests/Build
+++ b/tools/perf/tests/Build
@@ -89,7 +89,7 @@ endif
$(OUTPUT)%.shellcheck_log: %
$(call rule_mkdir)
- $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
+ $(Q)$(call echo-cmd,test)$(SHELLCHECK) "$<" > $@ || (cat $@ && rm $@ && false)
perf-test-y += $(SHELL_TEST_LOGS)
diff --git a/tools/perf/trace/beauty/Build b/tools/perf/trace/beauty/Build
index f50ebdc445b8..561590ee8cda 100644
--- a/tools/perf/trace/beauty/Build
+++ b/tools/perf/trace/beauty/Build
@@ -31,6 +31,6 @@ endif
$(OUTPUT)%.shellcheck_log: %
$(call rule_mkdir)
- $(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
+ $(Q)$(call echo-cmd,test)$(SHELLCHECK) "$<" > $@ || (cat $@ && rm $@ && false)
perf-y += $(SHELL_TEST_LOGS)
diff --git a/tools/perf/util/Build b/tools/perf/util/Build
index 7910d908c814..2dfa09a6f27d 100644
--- a/tools/perf/util/Build
+++ b/tools/perf/util/Build
@@ -421,7 +421,7 @@ endif
$(OUTPUT)%.shellcheck_log: %
$(call rule_mkdir)
- $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
+ $(Q)$(call echo-cmd,test)$(SHELLCHECK) "$<" > $@ || (cat $@ && rm $@ && false)
perf-util-y += $(SHELL_TEST_LOGS)
--
2.50.0
On Fri, 27 Jun 2025 20:41:25 -0700, Collin Funk wrote: > When someone has a global shellcheckrc file, for example at > ~/.config/shellcheckrc, with the directive 'shell=sh', building perf > will fail with many shellcheck errors like: > > In tests/shell/base_probe/test_adding_kernel.sh line 294: > (( TEST_RESULT += $? )) > ^---------------------^ SC3006 (warning): In POSIX sh, standalone ((..)) is undefined. > > [...] Applied to perf-tools-next, thanks! Best regards, Namhyung
When someone has a global shellcheckrc file, for example at
~/.config/shellcheckrc, with the directive 'shell=sh', building perf
will fail with many shellcheck errors like:
In tests/shell/base_probe/test_adding_kernel.sh line 294:
(( TEST_RESULT += $? ))
^---------------------^ SC3006 (warning): In POSIX sh, standalone ((..)) is undefined.
For more information:
https://www.shellcheck.net/wiki/SC3006 -- In POSIX sh, standalone ((..)) is...
make[5]: *** [tests/Build:91: tests/shell/base_probe/test_adding_kernel.sh.shellcheck_log] Error 1
Passing the '-s bash' option ensures that it runs correctly regardless
of a developers global configuration.
This patch adds '-s bash' to the SHELLCHECK variable in Makefile.perf
and makes use of the variable consistently.
Signed-off-by: Collin Funk <collin.funk1@gmail.com>
---
tools/perf/Build | 2 +-
tools/perf/Makefile.perf | 2 +-
tools/perf/arch/x86/Build | 2 +-
tools/perf/arch/x86/tests/Build | 2 +-
tools/perf/tests/Build | 2 +-
tools/perf/trace/beauty/Build | 2 +-
tools/perf/util/Build | 2 +-
7 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/tools/perf/Build b/tools/perf/Build
index 06107f1e1d42..e69665bf9dce 100644
--- a/tools/perf/Build
+++ b/tools/perf/Build
@@ -73,7 +73,7 @@ endif
$(OUTPUT)%.shellcheck_log: %
$(call rule_mkdir)
- $(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
+ $(Q)$(call echo-cmd,test)$(SHELLCHECK) -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
perf-y += $(SHELL_TEST_LOGS)
diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf
index d4c7031b01a7..6810d321ff73 100644
--- a/tools/perf/Makefile.perf
+++ b/tools/perf/Makefile.perf
@@ -252,7 +252,7 @@ endif
ifeq ($(NO_SHELLCHECK),1)
SHELLCHECK :=
else
- SHELLCHECK := $(shell which shellcheck 2> /dev/null)
+ SHELLCHECK := $(shell which shellcheck 2> /dev/null) -s bash
endif
# shellcheck is using in tools/perf/tests/Build with option -a/--check-sourced (
diff --git a/tools/perf/arch/x86/Build b/tools/perf/arch/x86/Build
index afae7b8f6bd6..71e2553e5af1 100644
--- a/tools/perf/arch/x86/Build
+++ b/tools/perf/arch/x86/Build
@@ -10,6 +10,6 @@ endif
$(OUTPUT)%.shellcheck_log: %
$(call rule_mkdir)
- $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
+ $(Q)$(call echo-cmd,test)$(SHELLCHECK) -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
perf-test-y += $(SHELL_TEST_LOGS)
diff --git a/tools/perf/arch/x86/tests/Build b/tools/perf/arch/x86/tests/Build
index 5e00cbfd2d56..fd3af16f63bb 100644
--- a/tools/perf/arch/x86/tests/Build
+++ b/tools/perf/arch/x86/tests/Build
@@ -22,6 +22,6 @@ endif
$(OUTPUT)%.shellcheck_log: %
$(call rule_mkdir)
- $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
+ $(Q)$(call echo-cmd,test)$(SHELLCHECK) -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
perf-test-y += $(SHELL_TEST_LOGS)
diff --git a/tools/perf/tests/Build b/tools/perf/tests/Build
index 2181f5a92148..4a27fde30eb6 100644
--- a/tools/perf/tests/Build
+++ b/tools/perf/tests/Build
@@ -89,7 +89,7 @@ endif
$(OUTPUT)%.shellcheck_log: %
$(call rule_mkdir)
- $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
+ $(Q)$(call echo-cmd,test)$(SHELLCHECK) -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
perf-test-y += $(SHELL_TEST_LOGS)
diff --git a/tools/perf/trace/beauty/Build b/tools/perf/trace/beauty/Build
index f50ebdc445b8..727ce0a5c30a 100644
--- a/tools/perf/trace/beauty/Build
+++ b/tools/perf/trace/beauty/Build
@@ -31,6 +31,6 @@ endif
$(OUTPUT)%.shellcheck_log: %
$(call rule_mkdir)
- $(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
+ $(Q)$(call echo-cmd,test)$(SHELLCHECK) -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
perf-y += $(SHELL_TEST_LOGS)
diff --git a/tools/perf/util/Build b/tools/perf/util/Build
index 7910d908c814..626a359fee1e 100644
--- a/tools/perf/util/Build
+++ b/tools/perf/util/Build
@@ -421,7 +421,7 @@ endif
$(OUTPUT)%.shellcheck_log: %
$(call rule_mkdir)
- $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
+ $(Q)$(call echo-cmd,test)$(SHELLCHECK) -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
perf-util-y += $(SHELL_TEST_LOGS)
--
2.49.0
On Mon, Jun 23, 2025 at 7:06 PM Collin Funk <collin.funk1@gmail.com> wrote: > > When someone has a global shellcheckrc file, for example at > ~/.config/shellcheckrc, with the directive 'shell=sh', building perf > will fail with many shellcheck errors like: > > In tests/shell/base_probe/test_adding_kernel.sh line 294: > (( TEST_RESULT += $? )) > ^---------------------^ SC3006 (warning): In POSIX sh, standalone ((..)) is undefined. > > For more information: > https://www.shellcheck.net/wiki/SC3006 -- In POSIX sh, standalone ((..)) is... > make[5]: *** [tests/Build:91: tests/shell/base_probe/test_adding_kernel.sh.shellcheck_log] Error 1 > > Passing the '-s bash' option ensures that it runs correctly regardless > of a developers global configuration. > > This patch adds '-s bash' to the SHELLCHECK variable in Makefile.perf > and makes use of the variable consistently. > > Signed-off-by: Collin Funk <collin.funk1@gmail.com> > --- > tools/perf/Build | 2 +- > tools/perf/Makefile.perf | 2 +- > tools/perf/arch/x86/Build | 2 +- > tools/perf/arch/x86/tests/Build | 2 +- > tools/perf/tests/Build | 2 +- > tools/perf/trace/beauty/Build | 2 +- > tools/perf/util/Build | 2 +- > 7 files changed, 7 insertions(+), 7 deletions(-) > > diff --git a/tools/perf/Build b/tools/perf/Build > index 06107f1e1d42..e69665bf9dce 100644 > --- a/tools/perf/Build > +++ b/tools/perf/Build > @@ -73,7 +73,7 @@ endif > > $(OUTPUT)%.shellcheck_log: % > $(call rule_mkdir) > - $(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > + $(Q)$(call echo-cmd,test)$(SHELLCHECK) -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > > perf-y += $(SHELL_TEST_LOGS) > > diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf > index d4c7031b01a7..6810d321ff73 100644 > --- a/tools/perf/Makefile.perf > +++ b/tools/perf/Makefile.perf > @@ -252,7 +252,7 @@ endif > ifeq ($(NO_SHELLCHECK),1) > SHELLCHECK := > else > - SHELLCHECK := $(shell which shellcheck 2> /dev/null) > + SHELLCHECK := $(shell which shellcheck 2> /dev/null) -s bash Could we also place the "-a -S warning" warning here too? Thanks, Ian > endif > > # shellcheck is using in tools/perf/tests/Build with option -a/--check-sourced ( > diff --git a/tools/perf/arch/x86/Build b/tools/perf/arch/x86/Build > index afae7b8f6bd6..71e2553e5af1 100644 > --- a/tools/perf/arch/x86/Build > +++ b/tools/perf/arch/x86/Build > @@ -10,6 +10,6 @@ endif > > $(OUTPUT)%.shellcheck_log: % > $(call rule_mkdir) > - $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > + $(Q)$(call echo-cmd,test)$(SHELLCHECK) -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > > perf-test-y += $(SHELL_TEST_LOGS) > diff --git a/tools/perf/arch/x86/tests/Build b/tools/perf/arch/x86/tests/Build > index 5e00cbfd2d56..fd3af16f63bb 100644 > --- a/tools/perf/arch/x86/tests/Build > +++ b/tools/perf/arch/x86/tests/Build > @@ -22,6 +22,6 @@ endif > > $(OUTPUT)%.shellcheck_log: % > $(call rule_mkdir) > - $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > + $(Q)$(call echo-cmd,test)$(SHELLCHECK) -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > > perf-test-y += $(SHELL_TEST_LOGS) > diff --git a/tools/perf/tests/Build b/tools/perf/tests/Build > index 2181f5a92148..4a27fde30eb6 100644 > --- a/tools/perf/tests/Build > +++ b/tools/perf/tests/Build > @@ -89,7 +89,7 @@ endif > > $(OUTPUT)%.shellcheck_log: % > $(call rule_mkdir) > - $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > + $(Q)$(call echo-cmd,test)$(SHELLCHECK) -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > > perf-test-y += $(SHELL_TEST_LOGS) > > diff --git a/tools/perf/trace/beauty/Build b/tools/perf/trace/beauty/Build > index f50ebdc445b8..727ce0a5c30a 100644 > --- a/tools/perf/trace/beauty/Build > +++ b/tools/perf/trace/beauty/Build > @@ -31,6 +31,6 @@ endif > > $(OUTPUT)%.shellcheck_log: % > $(call rule_mkdir) > - $(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > + $(Q)$(call echo-cmd,test)$(SHELLCHECK) -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > > perf-y += $(SHELL_TEST_LOGS) > diff --git a/tools/perf/util/Build b/tools/perf/util/Build > index 7910d908c814..626a359fee1e 100644 > --- a/tools/perf/util/Build > +++ b/tools/perf/util/Build > @@ -421,7 +421,7 @@ endif > > $(OUTPUT)%.shellcheck_log: % > $(call rule_mkdir) > - $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > + $(Q)$(call echo-cmd,test)$(SHELLCHECK) -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) > > perf-util-y += $(SHELL_TEST_LOGS) > > -- > 2.49.0 >
Ian Rogers <irogers@google.com> writes: > Could we also place the "-a -S warning" warning here too? > > Thanks, > Ian Sure, done in V3 here [1]. Collin [1] https://lore.kernel.org/linux-perf-users/f8415e57c938482668717d918ab566ff5082f281.1750743784.git.collin.funk1@gmail.com/T/#u
© 2016 - 2025 Red Hat, Inc.