chiark / gitweb /
docs: Summarise directory reference syntaxes
[subdirmk.git] / README
diff --git a/README b/README
index e5ef4b4f5c28a1291e1d4b9c4e981d1ffb4f4eb7..5897e308644050ec8006fe42e830816ed03f0fb2 100644 (file)
--- a/README
+++ b/README
@@ -138,6 +138,19 @@ 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 source tree             In build tree
+                  Relative     Absolute      Relative  Absolute
+
+                                             &file     $(abs)/&file
+ This directory   &^/file      &~/file       &/file    $(abs)/&/file
+                  & ^ f g h    & ~ f g h     & f g h
+
+ Top level        $(ts)/file   $(ats)/file   file      $(abs)/file
+                                             f g h
+
 Substitution syntax
 -------------------
 
 Substitution syntax
 -------------------
 
@@ -275,6 +288,31 @@ have:
   &:include subdirmk/cdeps.sd.mk
   &:include subdirmk/clean.sd.mk
 
   &:include subdirmk/cdeps.sd.mk
   &:include subdirmk/clean.sd.mk
 
+Hints
+-----
+
+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
+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
+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
+far enough to regenerate a working set of makefiles.  If this happens
+just rerun ./config.status by hand.
+
 
 Legal information
 -----------------
 
 Legal information
 -----------------