chiark / gitweb /
docs: New plan for directory references
[subdirmk.git] / README
diff --git a/README b/README
index 0ab3b50..5bfb29e 100644 (file)
--- a/README
+++ b/README
@@ -138,6 +138,21 @@ 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
+---------------------------------------
+
+      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
+             .mk.in   file      $(abs)/file     $(src)/file  $(abs_src)/file
+             several  f g h     & @~ f g h      & @^ f g h   & @~^ f g h
+
 Substitution syntax
 -------------------
 
 Substitution syntax
 -------------------
 
@@ -169,6 +184,11 @@ empty string).
 &^             =>      $(top_srcdir)/sub/dir           or $(top_srcdir)
 &~             =>      $(abs_top_srcdir)/sub/dir       or $(abs_top_srcdir)
 
 &^             =>      $(top_srcdir)/sub/dir           or $(top_srcdir)
 &~             =>      $(abs_top_srcdir)/sub/dir       or $(abs_top_srcdir)
 
+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)
+
 &&             =>      &&              for convenience in shell runes
 \&             =>      &               general escaping mechanism
 
 &&             =>      &&              for convenience in shell runes
 \&             =>      &               general escaping mechanism
 
@@ -282,15 +302,18 @@ You can convert your project incrementally.  Start with the top-level
 Makefile.in and rename it to Subdir.sd.mk, and add the appropriate
 stuff to configure.ac, and fix everything up.  Leave the existing
 $(MAKE) -C for your existing subdirectories alone.  Then you can
 Makefile.in and rename it to Subdir.sd.mk, and add the appropriate
 stuff to configure.ac, and fix everything up.  Leave the existing
 $(MAKE) -C for your existing subdirectories alone.  Then you can
-convert individual subdirectories, or classes of subdirectories.
+convert individual subdirectories, or classes of subdirectories, at
+your leisure.  (You must be /sure/ that each subdirectory will be
+entered only once at a time, but your existing recursive make descent
+system should already do that or you already have concurrency bugs.)
 
 Aside from this, be very wary of any invocation of $(MAKE) anywhere.
 This is a frequent source of concurrency bugs in recursive make build
 
 Aside from this, be very wary of any invocation of $(MAKE) anywhere.
 This is a frequent source of concurrency bugs in recursive make build
-systems.  When combined with nonrecursive make there is no
-separate-directory barrier stopping the different invocations ending
-up trying to make the same targets at the same time, which causes
-hideous racy lossage.  There are ways to get this to work reliably but
-it is advanced stuff.
+systems.  When combined with nonrecursive make it's all in the same
+directory and there is nothing stopping the different invocations
+ending up trying to make the same targets at the same time. That
+causes hideous racy lossage.  There are ways to get this to work
+reliably but it is advanced stuff.
 
 If you make syntax errors, or certain kinds of other errors, in your
 makefiles, you may find that just `make' is broken now and cannot get
 
 If you make syntax errors, or certain kinds of other errors, in your
 makefiles, you may find that just `make' is broken now and cannot get