chiark / gitweb /
Syntax: Provide convenience syntax &( for $(eval
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 11 Jan 2020 13:58:34 +0000 (13:58 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 11 Jan 2020 13:59:41 +0000 (13:59 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
README
generate

diff --git a/README b/README
index b42356dc5e15ef63ee3bbb89b668551ddf2e964a..d85a68804c4e4bf8adff2480fc37fcf9bcef0ed7 100644 (file)
--- a/README
+++ b/README
@@ -222,6 +222,7 @@ STUFF $ THINGS      ..      STUFF $$ THINGS
 &{..$..}       =>      ${eval ${call ..$$..}}
        (matches { } pairs to find the end)
        content is $-doubled (unless it contains &$- to turn that off)
+       cf &(...), see "Convenience syntax for eval", below.
 
 Together &:macro and &${...} provide a more reasonable macro facility
 than raw make.  They solve the problem that make expansions cannot
@@ -245,6 +246,18 @@ A few contexts do not support $-doubling, such as directive arguments
 or places where this might imply $-quadrupling.  (There is no way to
 get $-quadrupling.)
 
+Convenience syntax for eval
+- - - - - - - - - - - - - -
+
+&(thing                =>      $(call thing
+&( thing       =>      $(call thing
+       and specially:
+&(&lc          =>      $(call sub_dir_lc       or $(call TOP_lc
+&( &lc         =>      $(call sub_dir_lc       or $(call TOP_lc
+       even though lc would normally be thought a filename
+
+Unlike &{...}, this does not involve any dollar-doubling.
+
 
 Invocation, "recursive" per-directory targets
 ---------------------------------------------
index c2dc42da1ae75eb7ca8f17c1c0e0c635de22541c..b564260dea4c02e4385fc0b36974e04efbddf718 100755 (executable)
--- a/generate
+++ b/generate
@@ -371,6 +371,8 @@ sub process_input_mk ($$$$) {
                $note_varref->($2,!!$1) if m{^($esc)?([^()\$]+\))};
            }
            elsif (s{^\$(\d+)}{}) { ddbl_only($&); oud "\${$1}"; }
+           elsif (s{^\(\s*$esc(?=$lc_re)}{}) { od "\$(call ${var_prefix}" }
+           elsif (s{^\(\s*(?=\S)}{}        ) { od "\$(call "              }
            elsif (s{^\{}{}) {
                err 'macro invocation cannot be re-$-doubled' if $ddbl;
                od '${eval ${call ';