From a289726792fcd288f1d57d9a58eec203c72c3810 Mon Sep 17 00:00:00 2001 From: Michael Shigorin Date: Sun, 29 Jan 2017 15:22:11 +0300 Subject: [PATCH] check-recipe: generalize dependency control An initial (and quite naive) implementation was done for conf.d/ files but features do need it as well -- which became obvious during a casual inspection of distro/alt-workstation's target graph (which occured broken). The code is a messy hackery unfortunately, regexes used are fragile regarding e.g. [A-Z_] in target names. Read with care. NB: lib/ might need this too but it's rather stable and contains some special cases that would obstruct the regexes even more... --- bin/check-recipe | 14 ++++++++++++++ conf.d/Makefile | 5 +---- features.in/Makefile | 3 +++ 3 files changed, 18 insertions(+), 4 deletions(-) create mode 100755 bin/check-recipe diff --git a/bin/check-recipe b/bin/check-recipe new file mode 100755 index 00000000..43fa7f33 --- /dev/null +++ b/bin/check-recipe @@ -0,0 +1,14 @@ +#!/bin/sh + +# missing "; @:" for recipeless rules makes SHELL payload useless +# (see also ../lib/report.mk); this results in broken target graphs +# (so REPORT=1 gets crippled) + + sed 's/^[a-z]\+\/.*:.*$/\n&/' "$@" \ +| grep -vE '^(#|export|if|else|endif|define|endef)' \ +| sed ':loop /^[^#].*[^\\]\\$/N; s/\\\n//; t loop' \ +| grep -vE ':=| = | ?= | += |^\$' \ +| sed ':loop /^[a-z]\+\/.*:.*$/N; s/\n\t\+@*/\; /; t loop' \ +| grep -vE ';|^$' && exit 1 ||: + +# see also http://unix.stackexchange.com/questions/228547 diff --git a/conf.d/Makefile b/conf.d/Makefile index 3c9a8326..b2d4e113 100644 --- a/conf.d/Makefile +++ b/conf.d/Makefile @@ -1,5 +1,2 @@ -# missing "; @:" for recipeless rules makes SHELL payload useless -# (see also ../lib/report.mk); this results in broken target graphs -# (so REPORT=1 gets crippled) check: - @grep -E '^[a-z]+/.*: .*[^\\:]$$' *.mk + @../bin/check-recipe *.mk diff --git a/features.in/Makefile b/features.in/Makefile index a400c131..63ad79bb 100644 --- a/features.in/Makefile +++ b/features.in/Makefile @@ -25,6 +25,9 @@ define grepper_body done endef +check: + @../bin/check-recipe */config.mk + %: $(error BUILDDIR not defined)