chiark / gitweb /
docs: Fill in an empty cell with a copy instead
[subdirmk.git] / README
diff --git a/README b/README
index 5a585df4f26d3a1f042622712aec99232994edc0..b4f9a1563d21b6277056ed6bc1cb93fc3a00cce8 100644 (file)
--- a/README
+++ b/README
@@ -138,18 +138,36 @@ 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
----------------------------------------
-
-                  In build tree             In source tree             
-                  Relative  Absolute        Relative     Absolute      
-                                          
-                  &file     $(abs)/&file                             
- This directory   &/file    $(abs)/&/file   &^/file      &~/file       
-                  & f g h                   & ^ f g h    & ~ f g h     
-                                          
- Top level        file      $(abs)/file     $(ts)/file   $(ats)/file   
-                  f g h                                              
+Summary of recommended directory reference syntaxes
+---------------------------------------------------
+
+Path construction &-expansions, meanings summary:
+
+                      Relative paths in...   Absolute paths in...
+                      build     source       build           source
+                                                       
+  This directory      &         &,           &@              &@,
+  Top level           .         &;           &@.             &@;
+
+Adding `@' means "absolute path".  (`&.' is not allowed without @
+because just `&./' is a silly way of writing `.'.)  `/' 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.
+
+In more detail, with the various options for what comes next:
+
+      Recommended     Relative paths in...   Absolute paths in...
+             for      build     source       build           source
+                                                       
+  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         &@;file
+  level      any      file      &;/file      &@./file        &@;/file
+             several  f g h     &; f g h     &@. f g h       &@; f g h
+             .mk.in   file      $(src)/file  $(abs)/file     $(abs_src)/file
 
 Substitution syntax
 -------------------
 
 Substitution syntax
 -------------------
@@ -176,22 +194,45 @@ 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)/lc               &;/   => $(top_srcdir)/
+
+&@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)/lc           &@;/  => $(abs_top_srcdir)/
+
+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, `@' must be specified
+    @   absolute pathnames
+
+So pathname syntax is a subset of:
+    '&' [ '@' ] [ ',' | ';' | '.' ] [ lc | '/' ]
+
+    To avoid incomprehensible .sd.mk files, some combinations are not
+    allowed.  For example `&=./' would mean `.' and `&./' would be the
+    empty string.  Variations with `=' and one of `@' `,' `;' are
+    uncommon and must be written using make variables instead.
 
 &&             =>      &&              for convenience in shell runes
 \&             =>      &               general escaping mechanism
 
 
 &&             =>      &&              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... &     &@; 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.
+        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.