chiark / gitweb /
docs: wip new syntax
[subdirmk.git] / README
diff --git a/README b/README
index 0b95b98ff17f75152a7279503bc8139c56f86471..96664ecac434164de67224dc2ac0a34e97fd7ee5 100644 (file)
--- a/README
+++ b/README
@@ -138,14 +138,14 @@ If you `include subdirmk/regen.mk', dependency management and
 automatic regeneration for all of this template substitution, and for
 config.status etc. is done for you.
 
 automatic regeneration for all of this template substitution, and for
 config.status etc. is done for you.
 
-Summary of directory reference syntaxes
----------------------------------------
+Summary of recommended directory reference syntaxes
+---------------------------------------------------
 
 Path construction &-expansions, meanings summary:
 
 
 Path construction &-expansions, meanings summary:
 
-                      In build tree            In source tree
-  This directory      just &                   &,
-  Top level           &.  implies absolute     &;
+                      In build tree             In source tree
+  This directory        just &                    &,
+  Top level             &.  implies absolute      &;
 
 Adding `@' means "absolute path".  This is not needed with &. because
 there is never any need to use &. since it would expand to nothing.
 
 Adding `@' means "absolute path".  This is not needed with &. because
 there is never any need to use &. since it would expand to nothing.
@@ -158,14 +158,12 @@ multi-word processing.
                                           
   This       lc       &file     &@file          &,file       &@,file
   directory  any      &/file    &@/file         &,/file      &@,/file
                                           
   This       lc       &file     &@file          &,file       &@,file
   directory  any      &/file    &@/file         &,/file      &@,/file
-             several  & f g h   &@ f g h        &, f g h     &^, f g h
+             several  & f g h   &@ f g h        &, f g h     &@, f g h
 
   Top        lc                 &.file          &;file       &@;file
   level      any      file      &./file         &;/file      &@;/file
 
   Top        lc                 &.file          &;file       &@;file
   level      any      file      &./file         &;/file      &@;/file
-             .mk.in   file      $(abs)/file     $(src)/file  $(abs_src)/file
              several  f g h     &. f g h        &; f g h     &@; f g h
              several  f g h     &. f g h        &; f g h     &@; f g h
-                                &@. file
-                                &@. f g h
+             .mk.in   file      $(abs)/file     $(src)/file  $(abs_src)/file
 
 Substitution syntax
 -------------------
 
 Substitution syntax
 -------------------
@@ -192,27 +190,55 @@ empty string).
        variables usually uppercase.  Otherwise, use another syntax:
 
 &_             =>      sub_dir_                        or TOP_
        variables usually uppercase.  Otherwise, use another syntax:
 
 &_             =>      sub_dir_                        or TOP_
-&/             =>      sub/dir/                        or nothing
 &=_            =>      sub_dir                         or TOP
 &=_            =>      sub_dir                         or TOP
+
+&/             =>      sub/dir/                        or nothing
 &=/            =>      sub/dir                         or .
 &=/            =>      sub/dir                         or .
-&^             =>      $(top_srcdir)/sub/dir           or $(top_srcdir)
-&~             =>      $(abs_top_srcdir)/sub/dir       or $(abs_top_srcdir)
+
+&,lc           =>      $(top_srcdir)/sub/dir/lc
+&,/            =>      $(top_srcdir)/sub/dir/
+
+&;lc           =>      $(top_srcdir)/sub/dir/lc
+&;/            =>      $(top_srcdir)/sub/dir/
+
+&@lc           =>      $(PWD)/sub/dir/lc
+&@/            =>      $(PWD)/sub/dir/
+
+&.lc           =>      $(PWD)/lc
+&./            =>      $(PWD)/
+
+&@,lc          =>      $(abs_top_srcdir)/sub/dir/lc
+&@,/           =>      $(abs_top_srcdir)/sub/dir/
+
+&@;lc          =>      $(abs_top_srcdir)/sub/dir/lc
+&@;/           =>      $(abs_top_srcdir)/sub/dir/
 
 In general:
 
 In general:
-        ^       filenames in source tree rather than build tree
-        ~       filenames are absolute rather than relative
-        @       filenames do not contain subdir (useful with the above)
+    =  return subdir without delimiter (not allowed with `,' `;' `@')
+    ,   pathname of this subdirectory in source tree
+    ;   pathname of top level of source tree
+    .   pathname of this directory in build tree, implies absolute pathnames
+    @   absolute pathnames (forbidden with `.', must come first)
+
+So pathname syntax is a subset of:
+    '&' [ '@' ] [ ',' | ';' | '.' ] [ lc | '/' ]
+
+    To avoid incomprehensible .sd.mk files, some combinations are not
+    allowed.  For example `&@=./' would mean `$(PWD)/sub/dir' but can
+    be spelled `$(PWD)/&=/', but more normally the trailing / can be
+    tolerated, so use `&@/'.
 
 &&             =>      &&              for convenience in shell runes
 \&             =>      &               general escaping mechanism
 
 & thing thing... &
 
 &&             =>      &&              for convenience in shell runes
 \&             =>      &               general escaping mechanism
 
 & thing thing... &
-& ^ thing thing... &
-& ~ thing thing... &
+&. thing thing... &     &@. thing thing... &
+&, thing thing... &     &@, thing thing... &
+&; thing thing... &     &@; thing thing... &
        Convenience syntax for prefixing multiple filenames.
        Convenience syntax for prefixing multiple filenames.
-       Introduced by & followed by lwsp (space or tab).
-       Each lwsp-separated non-ws word is prefixed by &/ &^/ &~/
-       respectively.  No other & escapes are recognised.
+       Introduced by & followed by lwsp where lc could go.
+       Each lwsp-separated non-ws word is prefixed by &/ &./ &@./
+        etc. respectively.  No other & escapes are recognised.
        This processing continues until & preceded by lwsp,
        or until EOL (the end of the line), or \ then EOL.
 
        This processing continues until & preceded by lwsp,
        or until EOL (the end of the line), or \ then EOL.