chiark / gitweb /
docs: wip new syntax
[subdirmk.git] / README
diff --git a/README b/README
index 5897e308644050ec8006fe42e830816ed03f0fb2..96664ecac434164de67224dc2ac0a34e97fd7ee5 100644 (file)
--- a/README
+++ b/README
@@ -138,18 +138,32 @@ 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
+---------------------------------------------------
 
 
-                  In source tree             In build tree
-                  Relative     Absolute      Relative  Absolute
+Path construction &-expansions, meanings summary:
 
 
-                                             &file     $(abs)/&file
- This directory   &^/file      &~/file       &/file    $(abs)/&/file
-                  & ^ f g h    & ~ f g h     & f g h
+                      In build tree             In source tree
+  This directory        just &                    &,
+  Top level             &.  implies absolute      &;
 
 
- Top level        $(ts)/file   $(ats)/file   file      $(abs)/file
-                                             f g h
+Adding `@' means "absolute path".  This is not needed with &. because
+there is never any need to use &. since it would expand to nothing.
+`/' terminates the escape (needed if the next thing is not a lowercase
+character, or space).  `=' means "just the value, no /".  Space starts
+multi-word processing.
+
+      Recommended     In build tree             In source tree
+             when     Relative  Absolute        Relative     Absolute
+                                          
+  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
+
+  Top        lc                 &.file          &;file       &@;file
+  level      any      file      &./file         &;/file      &@;/file
+             several  f g h     &. f g h        &; f g h     &@; f g h
+             .mk.in   file      $(abs)/file     $(src)/file  $(abs_src)/file
 
 Substitution syntax
 -------------------
 
 Substitution syntax
 -------------------
@@ -176,22 +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:
+    =  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.