From e59d37e907c31b1c65ec1ff50f2f092293e1a45c Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Fri, 19 Jun 2026 12:47:28 +0200 Subject: [PATCH 1/2] defs.mk: Use EXE_SH for shell scripts only To make EXE_SH useful for automated shell syntax checking, remove all non POSIX shell / bash scripts from that variable, and place the non-shell scripts into EXE_SCRIPTS. Signed-off-by: Jan Lindemann --- make/defs.mk | 7 ++++--- make/rules.mk | 2 -- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/make/defs.mk b/make/defs.mk index 46647ac1..5e7eaf26 100644 --- a/make/defs.mk +++ b/make/defs.mk @@ -356,17 +356,18 @@ INSTALLED_DOC ?= $(addprefix $(INSTALL_DOCDIR)/,$(DOCS)) # -- EXE INSTALLATION_FILE_TYPES += EXE -EXE_SH += $(filter-out $(DONT_INSTALL),$(wildcard *.sh *.pl *.pm *.py *.bat *.feedfs)) +EXE_SH += $(wildcard *.sh) EXE_SH += $(patsubst %.sh.tmpl,%.sh,$(filter-out $(DONT_INSTALL),$(wildcard *.sh.tmpl))) +EXE_SCRIPTS += $(EXE_SH) $(filter-out $(DONT_INSTALL),$(wildcard *.pl *.pm *.py *.bat *.feedfs)) #EXE_ALL += $(EXE) $(wildcard *.a *.dll *.so *.so.*) -BUILD_EXE_BIN += $(addprefix $(BUILD_EXEDIR)/,$(EXE) $(EXE_SH)) +BUILD_EXE_BIN += $(addprefix $(BUILD_EXEDIR)/,$(EXE) $(EXE_SCRIPTS)) INSTALLED_EXE_BIN += $(addprefix $(INSTALL_EXEDIR)/,$(EXE_BIN)) BUILD_EXEDIR = $(TOPDIR)/bin INSTALL_EXEDIR ?= $(EXE_PREFIX)/bin BUILD_EXE += $(BUILD_EXE_BIN) -INSTALLED_EXE += $(addprefix $(INSTALL_EXEDIR)/,$(EXE) $(EXE_SH)) $(INSTALLED_EXE_BIN) +INSTALLED_EXE += $(addprefix $(INSTALL_EXEDIR)/,$(EXE) $(EXE_SCRIPTS)) $(INSTALLED_EXE_BIN) # -- CGI INSTALLATION_FILE_TYPES += CGI diff --git a/make/rules.mk b/make/rules.mk index 6d2b5fe0..a0157556 100644 --- a/make/rules.mk +++ b/make/rules.mk @@ -58,8 +58,6 @@ installexe: all checkroot $(INSTALLED_EXE) installso: all checkroot install_dir_LIB $(INSTALLED_SHOBJS) -installsh: all checkroot $(INSTALL_EXEDIR) $(INSTALLED_EXE_SH) - pckgclean: $(RM) -rf *.zip *.tar.gz *.rpm *.deb -- 2.55.0 From 3aecb6c685d9d6104bd8d13bd54320a02fc2b14f Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Fri, 19 Jun 2026 12:48:16 +0200 Subject: [PATCH 2/2] rules.mk: Add targets to check shell syntax Add the target sh-syntax-check, which triggers bash syntax linting with shellcheck This commit stops short of making target all depend on it, because the fallout is impressive. Signed-off-by: Jan Lindemann --- make/defs.mk | 8 ++++++++ make/rules.mk | 17 +++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/make/defs.mk b/make/defs.mk index 5e7eaf26..5127b63b 100644 --- a/make/defs.mk +++ b/make/defs.mk @@ -98,6 +98,14 @@ endif ifndef PRISTINE_MAKE PRISTINE_MAKE := umask $(MINIMAL_UMASK) && MAKEFLAGS=$(MINIMAL_MAKEFLAGS) LD_LIBRARY_PATH=$(MINIMAL_LD_LIBRARY_PATH) PATH=$(MINIMAL_PATH) $(MAKE) endif +ifndef SHELLCHECK + SHELLCHECK := $(shell $(WHICH) shellcheck) +endif +ifdef SHELLCHECK + SHELLCHECK += -f gcc +else + SHELLCHECK := bash -n +endif # ----- Function definitions diff --git a/make/rules.mk b/make/rules.mk index a0157556..fca1258a 100644 --- a/make/rules.mk +++ b/make/rules.mk @@ -16,6 +16,7 @@ distclean: clean %.this \ allclean \ checkroot \ + check-syntax \ collect \ coreclean \ depclean \ @@ -39,6 +40,7 @@ distclean: clean rccclean \ remake \ runclean \ + sh-check-syntax \ textclean \ tmpclean \ uicclean \ @@ -430,4 +432,19 @@ find: collect: bash $(JWB_SCRIPT_DIR)/collect-installed-pkg-changes.sh -t $(TOPDIR) +check: check-syntax +check-syntax: sh-check-syntax +sh-check-syntax: + +ifneq ($(strip $(EXE_SH)),) +$(info EXE_SH=>$(EXE_SH)<) +sh-check-syntax: sh-check-syntax-rule +sh-check-syntax-rule: $(EXE_SH) + $(SHELLCHECK) $^ + set -e; for script in $^; do \ + echo "Checking $$script" ;\ + $(SHELLCHECK) $$script ;\ + done +endif + endif # ifndef JW_PKG_RULES_MK_INCLUDED -- 2.55.0