ASCIIDOC = asciidoc
CPPCHECK = cppcheck
CPPCHECK_SUPPRESSIONS = misc/cppcheck-suppressions.txt
+SHELLCHECK = shellcheck
+SHELLCHECK_EXCLUDES = misc/shellcheck-excludes.txt
SCAN_BUILD = scan-build
DOCKER = docker
GPERF = gperf
--inline-suppr -q --enable=all --force \
$(non_3pp_sources) src/main.c $(test_sources)
+.PHONY: shellcheck
+shellcheck: test/suites/*.bash
+ $(SHELLCHECK) --shell=bash --exclude=$(shell sed -e 's/:.*//' <$(SHELLCHECK_EXCLUDES) | grep -v '#' | tr '\n' ',' | sed -e 's/,$$//') $^
+
.PHONY: uncrustify
uncrustify:
uncrustify -c misc/uncrustify.cfg --no-backup --replace $(filter-out $(uncrustify_exclude_files), $(base_sources)) $(test_sources)
--- /dev/null
+SC2148: Tips depend on target shell and yours is unknown. Add a shebang.
+# the below excludes are (mostly) about bourne shell and style issues
+SC2001: See if you can use ${variable//search/replace} instead.
+SC2006: Use $(..) instead of legacy `..`.
+SC2046: Quote this to prevent word splitting.
+SC2086: Double quote to prevent globbing and word splitting.
+SC2094: Make sure not to read and write the same file in the same pipeline.
+SC2103: Consider using ( subshell ), 'cd foo||exit', or pushd/popd instead.
+SC2155: Declare and assign separately to avoid masking return values.
+SC2129: Consider using { cmd1; cmd2; } >> file instead of individual redirects.