chiark / gitweb /
Warning reporting: Report each warning only once
[subdirmk.git] / README
diff --git a/README b/README
index b812f2782b06557d43101f1a642ebdf65570a018..41110ce410ac8ca098cff5e28cbd182951fcc4ee 100644 (file)
--- a/README
+++ b/README
@@ -246,24 +246,6 @@ So pathname syntax is a subset of:
 &#     delete everything to end of line
        (useful if the RHS contains unrecognised & constructions)
 
-&:changequote NEWQUOTE
-       changes the escape sequence from & to literally NEWQUOTE
-       NEWQUOTE may be any series of of non-whitespace characters,
-       and is terminated by EOL or lwsp.  The whole line is
-       discarded.
-
-       After this, write NEWQUOTE instead of &, everywhere.
-       The effect is unscoped and lasts until the next setting,
-       or until the end of the current directory's Suffix.sd.mk.
-       It takes effect on &:include'd files too, so maybe set
-       it back before using &:include.
-
-       Notably
-               NEWQUOTENEWQUOTE        => NEWQUOTENEWQUOTE
-               NEWQUOTE\NEWQUOTE       => NEWQUOTE
-               NEWQUOTE\$              => $
-               NEWQUOTE:changequote &  set escape back to &
-
 &TARGETS_things
        Handled specially.  If mentioned at the start of a line
        (possibly following whitespace), declares that this
@@ -287,6 +269,37 @@ So pathname syntax is a subset of:
        `all' is extra special: every directory has an `all'
        target, which corresponds to &TARGETS.
 
+&:warn [!]WARNTAG ...
+       Suppress (with !) or re-enable (without !) warnings tagged
+       WARNTAG (see section `Warnings', below).  The suppression list
+       is reset at the start of processing in each subdirectory.
+       Warnings that appear at the end of processing are controlled
+       by the final warning state after processing all the toplevel
+       input files (including Final.sd.mk).
+
+&:local+global [&]VARIABLE ...
+       Suppresses the warning about seeing both VARIABLE and
+       &VARIABLE.  Any & specified in the RHS is redundant: this
+       always affects both versions identically.
+
+&:changequote NEWQUOTE
+       changes the escape sequence from & to literally NEWQUOTE
+       NEWQUOTE may be any series of of non-whitespace characters,
+       and is terminated by EOL or lwsp.  The whole line is
+       discarded.
+
+       After this, write NEWQUOTE instead of &, everywhere.
+       The effect is unscoped and lasts until the next setting,
+       or until the end of the current directory's Suffix.sd.mk.
+       It takes effect on &:include'd files too, so maybe set
+       it back before using &:include.
+
+       Notably
+               NEWQUOTENEWQUOTE        => NEWQUOTENEWQUOTE
+               NEWQUOTE\NEWQUOTE       => NEWQUOTE
+               NEWQUOTE\$              => $
+               NEWQUOTE:changequote &  set escape back to &
+
 
 Dollar doubling and macro assistance
 ------------------------------------
@@ -373,6 +386,33 @@ In more detail, with all the various options laid out:
 (This assumes you have appropriate make variables src, PWD and
 abs_src.)
 
+Warnings
+--------
+
+subdirmk's `generate' program, which does the acual &-substitution,
+can produce some warnings about your .sd.mk files.  These can be
+suppressed with the &:warn directive.  The warning tags are:
+
+    local+global
+       The same VARNAME was used both with and without an & prefix.
+       This can be confusing.  Also, if you avoid this then you will
+       get a warning iff you accidentally leave off a needed &.
+       (You can suppress this warning for a particular VARNAME with
+       the &:local+global directive.)
+
+    single-char-var
+       A variable expansion like $FBAR.  make's expansion rules
+       interpret this as $(F)BAR.  It's normally better to write
+       it this way, at least if the variable expansion is followed
+       by more letters.  Note that &$FOO works differently to
+       raw make: it expands to $(sub_dir_FOO).
+
+    unknown-warning
+       &:warn was used to try to enable a warning that this version
+       of subdirmk does not understand.  (Note that an attempt to
+       *dis*able an unknown warning is only reported if some other
+       warning was issued which might have been disabled.)
+
 Subdirectory and variable naming
 --------------------------------