From: Ian Jackson Date: Mon, 9 Dec 2019 15:05:22 +0000 (+0000) Subject: Syntax: Refine &TARGETS_things, mostly to avoid # wrinkle X-Git-Tag: subdirmk/0.3~97 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?p=subdirmk.git;a=commitdiff_plain;h=74b432cc45d829f428a713800ec007dbdf666c37;ds=sidebyside Syntax: Refine &TARGETS_things, mostly to avoid # wrinkle We will add a test case in a moment, since it is quite a noisy diff. We have to upate clean.sd.mk, which uses this feature. Signed-off-by: Ian Jackson --- diff --git a/README b/README index 63e4188..fd10056 100644 --- a/README +++ b/README @@ -295,7 +295,8 @@ So pathname syntax is a subset of: NEWQUOTE:changequote & set escape back to & &TARGETS_things - Handled specially. If mentioned, declares that this + Handled specially. If mentioned at the start of a line + (possibly following whitespace), declares that this subdir ought to have a target `things'. The rule will be &/things:: $(&TARGETS_things) @@ -309,9 +310,9 @@ So pathname syntax is a subset of: which recursively implies this directory's `things'. Must be spelled exactly &TARGETS_things. &_TARGETS_things, - for example, is not magic. But mentioning &TARGETS_things in - a #-comment *does* work because the & filter does not care - about comments. + for example, is not magic. To make the target exist + without providing any prerequisites for it, write a line + containing just `&TARGETS_things +='. `all' is extra special: every directory has an `all' target, which corresponds to &TARGETS. diff --git a/clean.sd.mk b/clean.sd.mk index 045561c..80c40bc 100644 --- a/clean.sd.mk +++ b/clean.sd.mk @@ -19,7 +19,7 @@ &CLEAN += $(&OBJECTS) &CLEAN += $(&TARGETS) -# &TARGETS_clean +&TARGETS_clean += &/clean:: $(RM) $(&CLEAN) diff --git a/generate b/generate index e1efc06..e853912 100755 --- a/generate +++ b/generate @@ -155,6 +155,10 @@ sub process_input_mk ($$$$$$$$$) { $buffering_output=''; } elsif (m#^\s*$esc\:([a-z][-0-9a-z_]*)#) { die "unknown directive $1"; + } elsif (s{^\s*${esc}TARGETS(?:_([0-9a-zA-Z_]+))?(?=\W)}{}) { + my $t = $1 // 'all'; + o target_varname($var_prefix, $t); + $targets->{$t} //= [ ]; } for (;;) { unless (s{^(.*?)$esc}{}) { o $_; last; } @@ -162,11 +166,6 @@ sub process_input_mk ($$$$$$$$$) { if (s{^\\$esc}{}) { o "$$esclitr" } elsif (s{^\\\$}{}) { o '$' } elsif (s{^$esc}{}) { o "$$esclitr$$esclitr" } - elsif (s{^TARGETS(?:_([0-9a-zA-Z_]+))?(?=\W)}{}) { - my $t = $1 // 'all'; - o target_varname($var_prefix, $t); - $targets->{$t} //= [ ]; - } elsif (m{^(?=$caps_re)}) { o $var_prefix } elsif (s{^\$([A-Za-z]\w+)}{}) { o "\$(${var_prefix}$1)" } elsif (s{^([~^]?)(?=$lc_re)}{}) { o $pfxmap{$1} }