<HTML><head><TITLE>Manpage of DMAKE 4.7</TITLE>
</head><body>
<H1>DMAKE  Version 4.7</H1>
<A HREF="#index">Index</A>
<HR>

<A NAME="lbAB">&nbsp;</A>
<H2>NAME</H2>

<B>dmake</B> - maintain program groups, or interdependent files
<A NAME="lbAC">&nbsp;</A>
<H2>SYNOPSIS</H2>


<B>dmake</B>

[-P#] [-{f|C|K} file] [-{w|W} target ...]
[macro[[!][*][+][:]]=<I>value</I> ...]
[-ABcdeEghiknpqrsStTuVxX] [-v[cdfimrtw]] [-m[trae]] [target ...]

<A NAME="lbAD">&nbsp;</A>
<H2>DESCRIPTION</H2>

<P>

<B>dmake</B>

is a re-implementation of the UNIX Make utility with significant enhancements.
<B>dmake</B>

executes commands found in an external file called a
<I>makefile</I>

to update one or more target names.
Each target may depend on zero or more prerequisite targets.
If any of the target's prerequisites is newer than the target or if the target
itself does not exist, then
<B>dmake</B>

will attempt to make the target.
<P>

If no
<B>-f</B>

command line option is present then
<B>dmake</B>

searches for an existing
<I>makefile</I>

from the list of prerequisites specified for the special target <I>.MAKEFILES</I>
(see the STARTUP section for more details).
If &quot;-&quot; is the name of the file specified to the
<B>-f</B>

flag then <B>dmake</B> uses standard input as the source of the makefile text.
<P>

Any macro definitions (arguments with embedded &quot;=&quot;
signs) that appear on the command line are processed first
and supercede definitions for macros of the same name found
within the makefile.  In general it is impossible for definitions found
inside the makefile to redefine a macro defined on the command line, see the
MACROS section for exceptions.
<P>

If no
<I>target</I>

names are specified on the command line, then <B>dmake</B> uses the first
non-special target found in the makefile as the default target.
See the
<B>SPECIAL TARGETS</B>

section for the list of special targets and their function.
Makefiles written for most previous
versions of
<I>Make</I>

will be handled correctly by 
<B>dmake.</B>

Known differences between <B>dmake</B> and other versions of make
are discussed in the
<B>COMPATIBILITY</B>

section found at the end of this document.
<B>dmake</B>

returns 0 if no errors were detected and a non-zero result if an error
occurred.
<A NAME="lbAE">&nbsp;</A>
<H2>OPTIONS</H2>

<DL COMPACT>
<DT><B>-A</B><DD>
Enable AUGMAKE special inference rule transformations
(see the &quot;PERCENT(%) RULES&quot; and &quot;AUGMAKE META RULES&quot; sections), these are
set to off by default.
<DT><B>-B</B><DD>
Enable the use of spaces instead of &lt;tabs&gt; to begin recipe lines.
This flag equivalent to the .NOTABS special macro and is further described
below.
<DT><B>-c</B><DD>
Use non-standard comment stripping.  If you specify <B>-c</B> then
<B>dmake</B>

will treat any <B>#</B> character as a start of comment character wherever it
may appear unless it is escaped by a \.
<DT><B>-C [+]file</B><DD>
This option writes to <I>file</I> a copy of standard output and
standard error from any child processes and from the
<B>dmake</B>

process itself.  If you specify a <B>+</B> prior to the file name then
the text is appended to the previous contents of <I>file</I>.
This option is active in the MSDOS implementation only and is ignored
by non-MSDOS versions of
<B>dmake.</B>

<DT><B>-d</B><DD>
Disable the use of the directory cache.  Normally <B>dmake</B> caches directories
as it checks file timestamps.  Giving this flag is equivalent to the
.DIRCACHE attribute or macro being set to <I>no</I>.
<DT><B>-E</B><DD>
Read the environment and define all strings of the
form '<B>ENV-VAR</B>=<I>evalue</I>'
defined within as macros whose name is <B>ENV-VAR</B>,
and whose value is '<I>evalue</I>'.
The environment is processed prior to processing the user
specified makefile thereby allowing definitions in the makefile to override
definitions in the environment.
<DT><B>-e</B><DD>
Same as -E, except that the environment is processed after the
user specified makefile has been processed
(thus definitions in the environment override definitions in the makefile).
The -e and -E options are mutually exclusive.
If both are given the latter takes effect.
<DT><B>-f file</B><DD>
Use <B>file</B> as the source for the makefile text.
Only one <B>-f</B> option is allowed.
<DT><B>-g</B><DD>
Globally disable group recipe parsing, equivalent to the .IGNOREGROUP
attribute or macro being set to <I>yes</I> at the start of the makefile.
<DT><B>-h</B><DD>
Print the command summary for <B>dmake</B>.
<DT><B>-i</B><DD>
Tells <B>dmake</B> to ignore errors, and continue making other targets.
This is equivalent to the .IGNORE attribute or macro.
<DT><B>-K file</B><DD>
Turns on <B>.KEEP_STATE</B> state tracking and tells <B>dmake</B> to use
<I>file</I> as the state file.
<DT><B>-k</B><DD>
Causes <B>dmake</B> to ignore errors caused by command execution and to make
all targets not depending on targets that could not be made. 
Ordinarily <B>dmake</B> stops after a command returns a non-zero status,
specifying <B>-k</B> causes <B>dmake</B> to ignore the error
and continue to make as much as possible.
<DT><B>-m[trae]</B><DD>
Measure timing information. Print the time when targets and/or recipes
are started and finished to stdout. The following format is used:
<DT><DD>
<B>{s|e} {target|recipe} time maketarget</B>
<DT><DD>
<B>s</B> or <B>e</B> stands for started or ended, <B>target</B> or
<B>recipe</B> denotes if this line refers to the whole target or a
recipe. <B>time</B> is displayed in Unix time format, i.e. the number
of seconds since an epoch.  (Since 1970-01-01T00:00:00Z).  <B>maketarget</B>
obviously represents the target the timing information is given for.
The optional flags <B>[trae]</B> can be used to change the information that
is displayed.  If no optional flags are given only the <B>t</B> flag
is assumed to be selected, ie. <B>-mt</B>.  The optional flags stand for:
<DL COMPACT><DT><DD>
<DL COMPACT>
<DT><B>t</B><DD>
Display the start and end time of each target.
<DT><B>r</B><DD>
Display the start and end time of each recipe.
<DT><B>a</B><DD>
Display the target as an absolute path, i.e. prepend the current working
directory.
<DT><B>e</B><DD>
Also display the start and end time of the <B>$(shell command)</B> function
(aka. shell escape) macros.
</DL>
</DL>

<DT><B>-n</B><DD>
Causes <B>dmake</B> to print out what it would have executed,
but does not actually execute the commands.  A special check is made for
the string &quot;$(MAKE)&quot; inside a recipe line, if it is found,
the line is expanded and invoked, thereby enabling recursive makes to give a
full description of all that they will do.
This check is disabled inside group recipes.
<DT><B>-p</B><DD>
Print out a version of the digested makefile in human readable form.
(useful for debugging, but cannot be re-read by <B>dmake</B>)
<DT><B>-P#</B><DD>
On systems that support multi-processing cause <B>dmake</B> to use <I>#</I>
concurrent child processes to make targets.
See the &quot;MULTI PROCESSING&quot; section for more information.
<DT><B>-q</B><DD>
Check and see if the target is up to date.  Exits with code 0 if up to date,
1 otherwise.
<DT><B>-r</B><DD>
Tells <B>dmake</B> not to read the initial startup makefile, see STARTUP
section for more details.
<DT><B>-s</B><DD>
Tells <B>dmake</B> to do all its work silently and not echo the commands it is
executing to stdout (also suppresses warnings).
This  is equivalent to the .SILENT attribute or macro.
<DT><B>-S</B><DD>
Force sequential execution of recipes on architectures which support
concurrent makes.  For backward compatibility with old makefiles that have
nasty side-effect prerequisite dependencies. (Implies -P1)
<DT><B>-t</B><DD>
Causes <B>dmake</B> to touch the targets and bring them up to date
without executing any commands.
Note that targets will not be created if they do not already exist.
<DT><B>-T</B><DD>
Tells <B>dmake</B> to not perform transitive closure on the inference graph.
<DT><B>-u</B><DD>
Force an unconditional update.  (ie. do everything that would
be done if everything that a target depended on was out of date)
<DT><B>-v[cdfimrtw]</B><DD>
Verbose flag, when making targets print to stdout what we are going to make
and what we think its time stamp is.  The optional flags <B>[cdfimrtw]</B> can be
used to restrict the information that is displayed.  In the absence of any
optional flags all are assumed to be given (ie. <B>-v</B> is equivalent to
<B>-vcdfimrtw</B>).  The meanings of the optional flags are:
<DL COMPACT><DT><DD>
<DL COMPACT>
<DT><B>c</B><DD>
Notify of directory cache operations only.
<DT><B>d</B><DD>
Notify of change directory operations only.
<DT><B>f</B><DD>
Notify of file I/O operations only.
<DT><B>i</B><DD>
Notify of inference algorithm operation only.
<DT><B>m</B><DD>
Notify of target update operations only.
<DT><B>r</B><DD>
Force output of recipe lines, warnings and executed commands. This switch
is usefull when debugging makefiles that disable the output using the @
or @@ property for recipe lines or the .SILENT target/attribute.
It also overrides the -s flag.
<DT><B>t</B><DD>
Keep any temporary files created; normally they are automatically deleted.
<DT><B>w</B><DD>
Notify of non-essential warnings (these are historical).
</DL>
</DL>

<DT><B>-V</B><DD>
Print the version of <B>dmake</B>, and values of builtin macros.
<DT><B>-W target</B><DD>
Run <B>dmake</B> pretending that <I>target</I> is out of date.
<DT><B>-w target</B><DD>
<I>What if?</I> Show what would be made if <I>target</I> were out of date.
<DT><B>-x</B><DD>
Upon processing the user makefile export all non-internally defined macros
to the user's environment.  This option together with the -e option
allows SYSV AUGMAKE recursive makes to function as expected.
<DT><B>-X</B><DD>
Inhibit the execution of <B>#!</B> lines found at the beginning of a makefile.
The use of this flag prevents non-termination of recursive make invocations.
</DL>
<A NAME="lbAF">&nbsp;</A>
<H2>INDEX</H2>

Here is a list of the sections that follow and a short description of each.
Perhaps you won't have to read the entire man page to find
what you need.
<DL COMPACT>
<DT><B>STARTUP</B><DD>
Describes <B>dmake</B> initialization.
<DT><B>SYNTAX</B><DD>
Describes the syntax of makefile expressions.
<DT><B>ATTRIBUTES</B><DD>
Describes the notion of attributes and how they are used when
making targets.
<DT><B>MACROS</B><DD>
Defining and expanding macros.
<DT><B>RULES AND TARGETS<DD>
How to define targets and their prerequisites.
<DT>RECIPES</B><DD>
How to tell <B>dmake</B> how to make a target.
<DT><B>BUILTIN COMMANDS</B><DD>
Internal dmake commands.
<DT><B>TEXT DIVERSIONS</B><DD>
How to use text diversions in recipes and macro expansions.
<DT><B>SPECIAL TARGETS</B><DD>
Some targets are special.
<DT><B>SPECIAL MACROS</B><DD>
Macros used by <B>dmake</B> to alter the processing of the makefile,
and those defined by <B>dmake</B> for the user.
<DT><B>CONTROL MACROS</B><DD>
Itemized list of special control macros.
<DT><B>RUNTIME MACROS</B><DD>
Discussion of special run-time macros such as $@ and $&lt;.
<DT><B>FUNCTION MACROS</B><DD>
GNU style function macros, only $(mktmp ...) for now.
<DT><B>CONDITIONAL MACROS</B><DD>
Target specific conditional macros.
<DT><B>DYNAMIC PREREQUISITES</B><DD>
Processing of prerequisites which contain macro expansions in their name.
<DT><B>BINDING TARGETS</B><DD>
The rules that <B>dmake</B> uses to bind
a target to an existing file in the file system.
<DT><B>PERCENT(%) RULES</B><DD>
Specification of recipes to be used by the inference algorithm.
<DT><B>MAKING INFERENCES</B><DD>
The rules that <B>dmake</B> uses when inferring how to make a target which
has no explicit recipe.  This and the previous section are really a single
section in the text.
<DT><B>AUGMAKE META RULES</B><DD>
A subclass of the <B>PERCENT(%) RULES</B>.
<DT><B>MAKING TARGETS</B><DD>
How <B>dmake</B> makes targets other than libraries.
<DT><B>MAKING LIBRARIES</B><DD>
How <B>dmake</B> makes libraries.
<DT><B>KEEP STATE</B><DD>
A discussion of how .KEEP_STATE works.
<DT><B>MULTI PROCESSING</B><DD>
Discussion of <B>dmake's</B> parallel make facilities for architectures that
support them.
<DT><B>CONDITIONALS</B><DD>
Conditional expressions which control the processing of the makefile.
<DT><B>EXAMPLES</B><DD>
Some hopefully useful examples.
<DT><B>COMPATIBILITY</B><DD>
How <B>dmake</B> compares with previous versions of make.
<DT><B>LIMITS</B><DD>
Limitations of <B>dmake</B>.
<DT><B>PORTABILITY</B><DD>
Comments on writing portable makefiles.
<DT><B>FILES</B><DD>
Files used by <B>dmake</B>.
<DT><B>SEE ALSO</B><DD>
Other related programs, and man pages.
<DT><B>AUTHOR</B><DD>
The guy responsible for this thing.
<DT><B>BUGS</B><DD>
Hope not.
</DL>
<A NAME="lbAG">&nbsp;</A>
<H2>STARTUP</H2>

When
<B>dmake</B>

begins execution it first processes the command line and then processes
an initial startup-makefile.
This is followed by an attempt to locate and process a user supplied makefile.
The startup file defines the default values of all required control macros
and the set of default rules for making targets and inferences.
When searching for the startup makefile,
<B>dmake</B>

searches the following locations, in the order specified,
until a startup file is located:
<P>

<DL COMPACT><DT><DD>
<DL COMPACT>
<DT>1.<DD>
The location given as the value of the macro
MAKESTARTUP defined on the command line.
<DT>2.<DD>
The location given as the value of the environment variable MAKESTARTUP
defined in the current environment.
<DT>3.<DD>
The location given as the value of the macro
MAKESTARTUP defined internally within <B>dmake</B>.  In this version, the
internal definition of MAKESTARTUP is &quot;$(DMAKEROOT)/startup.mk&quot;, so you
can set the environment variable DMAKEROOT to the location of your startup
directory.
<P>
If DMAKEROOT is not changed, for native Windows dmake versions its value
defaults to &quot;$(ABSMAKECMD:d)startup&quot; (see definition of ABSMAKECMD for
details).
For unix like versions build with the autotools build system it defaults
to the value of &quot;${prefix}/share/startup&quot; at build time. The actual value,
usually something like /usr/local/share/startup can be checked with the -V
command line switch.
</DL>
</DL>

<P>

The above search is disabled by specifying the -r option on the command line.
An error is issued if a startup makefile cannot be found and the -r
option was not specified.
A user may substitute a custom startup file by defining
the MAKESTARTUP environment variable or by redefining the
MAKESTARTUP macro on the command line.
To determine where
<B>dmake</B>

looks for the default startup file, check your environment or issue the command
<I>&quot;dmake -V&quot;</I>.
<P>

A similar search is performed to locate a default user makefile when no
<B>-f</B> command line option is specified.
By default, the prerequisite list of the special target .MAKEFILES
specifies the names of possible makefiles and the search order that
<B>dmake</B> should use to determine if one exists.
A typical definition for this target is:
<DL COMPACT><DT><DD>
<P>
.MAKEFILES : makefile.mk Makefile makefile
<P>
</DL>

<B>dmake</B> will first look for makefile.mk and then the others.
If a prerequisite
cannot be found <B>dmake</B> will try to make it before going on to the next
prerequisite.  For example, makefile.mk can be checked out of an RCS file
if the proper rules for doing so are defined in the startup file.
<P>

If the first line of the user makefile is of the form:
<DL COMPACT><DT><DD>
<P>
#!command command_args
<P>
</DL>

then <B>dmake</B> will expand and run the command prior to reading any
additional input.  If the return code of the command is zero then <B>dmake</B>
will continue on to process the remainder of the user makefile, if the return
code is non-zero then dmake will exit.
<P>

<B>dmake</B> builds the internal dependency graph as it parses a user specified
makefile.  The graph is rooted at the special target <B>.ROOT</B>. .ROOT is the
top level target that dmake builds when it starts to build targets.  All user
specified targets (those from the command line or taken as defaults from
the makefile) are made prerequisites of the special target <B>.TARGETS</B>.
<B>dmake</B> by default creates the relationship that .ROOT depends on .TARGETS
and as a result everything is made.  This approach allows the user to customize, within
their makefile, the order and which, target, is built first.  For example the
default makefiles come with settings for .ROOT that specify:
<P>
<DL COMPACT><DT><DD>
.ROOT .PHONY .NOSTATE .SEQUENTIAL : .INIT .TARGETS .DONE
</DL>

<P>
with .INIT and .DONE defined as:
<P>
<DL COMPACT><DT><DD>
.INIT .DONE .PHONY:;
</DL>

<P>
which nicely emulates the behaviour of Sun's make extensions.  The building of
.ROOT's prerequisites is always forced to be sequential.  However, this
definition is trivially changed by supplying the definition:
<P>
<DL COMPACT><DT><DD>
.ROOT : .TARGETS
</DL>

<P>
which skips the preamble and postamble phases of building .TARGETS.
<P>

<B>Please note</B>

that even though .INIT and .DONE are special exceptions, see section SPECIAL
TARGETS, the use of self defined targets starting with `.' should be avoided
as they would be handled as .&lt;suffix&gt; meta targets. The target names _INIT
and _DONE for example would work equally well without the .&lt;suffix&gt;
drawback.
<A NAME="lbAH">&nbsp;</A>
<H2>SYNTAX</H2>

This section is a summary of the syntax of makefile statements.
The description is given in a style similar to BNF, where { } enclose
items that may appear zero or more times, and [ ] enclose items that
are optional.  Alternative productions for a left hand side are indicated
by '->', and newlines are significant.  All symbols in <B>bold</B> type
are text or names representing text supplied by the user.
<P>
<DL COMPACT><DT><DD>

<P>
<PRE>
<DL COMPACT>
<DT>Makefile<DD>-> { Statement }


<DT>Statement<DD>-> Macro-Definition
-> Conditional-Macro-Definition
-> Conditional
-> Rule-Definition
-> Attribute-Definition


<DT>Macro-Definition<DD>-> <B>MACRO = LINE</B>
-> <B>MACRO [!</B>]*= LINE
-> <B>MACRO [!</B>]:= LINE
-> <B>MACRO [!</B>]*:= LINE
-> <B>MACRO [!</B>]+= LINE
-> <B>MACRO [!</B>]+:= LINE


<DT>Conditional-Macro-Definition -> <DD><B>TARGET</B> ?= Macro-Definition


<DT>Conditional -> <DD><B>.IF</B> expression
   Makefile
[ <B>.ELIF</B> expression
   Makefile ]
[ <B>.ELSE</B>
   Makefile ]
<B>.END</B>


<DT>expression<DD>-> <B>LINE</B>
-> <B>STRING</B>
-> expression <B>==</B> expression
-> expression <B>!=</B> expression
-> expression <B>&lt;=</B> expression
-> expression <B>&gt;=</B> expression
-> <B>(</B> expression <B>)</B>
-> expression <B>||</B> expression
-> expression <B>&amp;&amp;</B> expression


<DT>Rule-Definition -> <DD>target-definition
   [ recipe ]
</DL>

target-definition -> targets [attrs] op { <B>PREREQUISITE</B> } [<B>;</B> rcp-line]


<DL COMPACT>
<DT>targets<DD>-> target { targets }
-> <B>&quot;</B>target<B>&quot;</B> { targets }


<DT>target<DD>-> special-target
-> <B>TARGET</B>


<DT>attrs<DD>-> attribute { attrs }
-> <B>&quot;</B>attribute<B>&quot;</B> { attrs }


<DT>op<DD>-> <B>:</B> { modifier }


<DT>modifier<DD>-> <B>:</B>
-> <B>^</B>
-> <B>!</B>
-> <B>-</B>
-> <B>|</B>


<DT>recipe<DD>-> { <B>TAB</B> rcp-line }
-> [<B>@</B>[<B>@</B>]][<B>%</B>][<B>-</B>] <B>[


<DT> <DD>   </B>{ <B>LINE</B> }

<DT> <DD><B>]</B>


<DT>rcp-line<DD>-> [<B>@</B>[<B>@</B>]][<B>%</B>][<B>-</B>][<B>+</B>] <B>LINE</B>


<DT>Attribute-Definition<DD>-> attrs <B>:</B> targets


<DT>attribute<DD>-> <B>.EPILOG</B>
-> <B>.ERRREMOVE</B>
-> <B>.EXECUTE</B>
-> <B>.GROUP</B>
-> <B>.IGNORE</B>
-> <B>.IGNOREGROUP</B>
-> <B>.LIBRARY</B>
-> <B>.MKSARGS</B>
-> <B>.NOINFER</B>
-> <B>.NOSTATE</B>
-> <B>.PHONY</B>
-> <B>.PRECIOUS</B>
-> <B>.PROLOG</B>
-> <B>.SETDIR=</B><I>path</I>
-> <B>.SILENT</B>
-> <B>.SEQUENTIAL</B>
-> <B>.SWAP</B>
-> <B>.USESHELL</B>
-> <B>.SYMBOL</B>
-> <B>.UPDATEALL</B>


<DT>special-target<DD>-> <B>.ERROR</B>
-> <B>.EXIT</B>
-> <B>.EXPORT</B>
-> <B>.GROUPEPILOG</B>
-> <B>.GROUPPROLOG</B>
-> <B>.IMPORT</B>
-> <B>.INCLUDE</B>
-> <B>.INCLUDEDIRS</B>
-> <B>.MAKEFILES</B>
-> <B>.REMOVE</B>
-> <B>.ROOT</B>
-> <B>.SOURCE</B>
-> <B>.SOURCE.</B><I>suffix</I>
-> <B>.SUFFIXES (deprecated)</B>
-> <B>.TARGETS</B>
-> <B>.INIT</B>
-> <B>.DONE</B>
-> .<I>suffix</I>
-> .<I>suffix1</I>.<I>suffix2</I>
</PRE>

</DL>
</DL>

<P>
<P>

Where, <B>TAB</B> represents a &lt;tab&gt; character, <B>STRING</B> represents an
arbitrary sequence of characters, and
<B>LINE</B> represents a
possibly empty sequence of characters terminated by a non-escaped 
(not immediately preceded by a backslash '\') new-line character.
<B>MACRO</B>, <B>PREREQUISITE</B>,
and <B>TARGET</B> each represent a string of characters not
including space or tab which respectively form the name of a macro,
prerequisite or target.
The name may itself be a macro expansion expression.
A <B>LINE</B> can be continued over several physical lines by terminating it with
a single backslash character.  Comments are initiated by the
pound <B>#</B> character and extend to the end of line.
All comment text is discarded, a '#' may be placed into the makefile text
by escaping it with '\' (ie. \# translates to # when it is parsed).
An exception to this occurs when a # is seen inside
a recipe line that begins with a &lt;tab&gt; or is inside a group recipe.
If you specify the <B>-c</B> command line switch then this behavior is
disabled and
<B>dmake</B>

will treat all # characters as start of comment indicators unless they
are escaped by \.
A set of continued lines may be commented out by placing a single # at the
start of the first line.
A continued line cannot span more than one makefile.
<P>

<B>white space</B> is defined to be any combination of
&lt;space&gt;, &lt;tab&gt;, and the sequence \&lt;nl&gt; when \&lt;nl&gt; is used to terminate a
LINE. <B>Note</B> the special treatment of \&lt;nl&gt; in macro definion and recipe
lines below.
When processing <B>macro definition</B> lines,
any amount of white space is allowed on either side of the macro operator
and white space is stripped from both before and after the macro
value string. A \&lt;nl&gt; sequence in a macro definition is deleted from the
macro value before assigning this value.
During <B>recipe expansion</B> the sequence \&lt;nl&gt; is treated as white space 
but is deleted from the final recipe string.
You must escape the \&lt;nl&gt; with another \ in order to get a \ at the end
of a recipe or macro definition line.
<P>

When processing <B>target</B> definition lines,
the recipe for a target must, in general, follow the first definition
of the target (See the RULES AND TARGETS section for an exception), and
the recipe may not span across multiple makefiles.
Any targets and prerequisites found on a target definition line are taken
to be white space separated tokens.
The rule operator (<I>op</I> in SYNTAX section) is also considered
to be a token but does not require
white space to precede or follow it.  Since the rule operator begins with a `:',
traditional versions of make do not allow the `:' character to
form a valid target name.  <B>dmake</B> allows `:' to be present in
target/prerequisite names as long as the entire target/prerequisite name is
quoted.  For example:
<P>
	a:fred : test
<P>
would be parsed as TARGET = a, PREREQUISITES={fred, :, test}, which
is not what was intended.  To fix this you must write:
<P>
	&quot;a:fred&quot; : test
<P>
Which will be parsed as expected.  Quoted target and prerequisite
specifications may also contain white space thereby allowing the use of
complex function macro expressions..
See the EXAMPLES section for how to apply <B>&quot;</B> quoting
to a list of targets.
<A NAME="lbAI">&nbsp;</A>
<H2>ATTRIBUTES</H2>

<B>dmake</B>

defines several target attributes.  Attributes may be
assigned to a single target, a group of targets, or to all targets in the
makefile.  Attributes are used to modify
<B>dmake</B> actions during target update.
The recognized attributes are:
<P>
<DL COMPACT>
<DT><B>.EPILOG</B><DD>
Insert shell epilog code when executing a group recipe associated with
any target having this attribute set.
<DT><B>.ERRREMOVE</B><DD>
Always remove any target having this attribute if an error is encountered
while making them.  Setting this attribute overrides the .PRECIOUS attribute.
<DT><B>.EXECUTE</B><DD>
If the -n flag was given then execute the recipe associated with any
target having this attribute set.
<DT><B>.FIRST</B><DD>
Used in conjunction with .INCLUDE.  Terminates the inclusion with the first
successfully included prerequisite.
<DT><B>.GROUP</B><DD>
Force execution of a target's recipe as a group recipe.
<DT><B>.IGNORE</B><DD>
Ignore an error when trying to make any target with this attribute set.
<DT><B>.IGNOREGROUP</B><DD>
Disable the special meaning of '[' to initiate a group recipe.
<DT><B>.LIBRARY</B><DD>
Target is a library.
<DT><B>.MKSARGS</B><DD>
If running in an MSDOS environment then use MKS extended argument passing
conventions to pass arguments to commands.  Non-MSDOS
environments ignore this attribute.
<DT><B>.NOINFER</B><DD>
Any target with this attribute set will not be subjected
to transitive closure if it is inferred as a prerequisite 
of a target whose recipe and prerequisites are being inferred.
(i.e. the inference algorithm will not use any prerequisite with this attribute 
set, as a target)
If specified as '.NOINFER:' (ie. with no prerequisites or targets) then the
effect is equivalent to specifying <B>-T</B> on the command line.
<DT><B>.NOSTATE</B><DD>
Any target with this attribute set will not have command line flag
information stored in the state file if .KEEP_STATE has been enabled.
<DT><B>.PHONY</B><DD>
Any target with this attribute set will have its recipe executed
each time the target is made even if a file matching the target name can
be located.  Any targets that have a .PHONY attributed target as a
prerequisite will be made each time the .PHONY attributed prerequisite is
made.
<DT><B>.PRECIOUS</B><DD>
Do not remove associated target under any circumstances.
Set by default for any targets whose corresponding files exist in the file
system prior to the execution of <B>dmake</B>.
<DT><B>.PROLOG</B><DD>
Insert shell prolog code when executing a group recipe associated with
any target having this attribute set.
<DT><B>.SEQUENTIAL</B><DD>
Force a sequential make of the associated target's prerequisites. If set
as a global attribute this implies setting MAXPROCESS=1.
<DT><B>.SETDIR</B><DD>
Change current working directory to specified directory when making the
associated target.  You must
specify the directory at the time the attribute is specified.  To do this
simply give <I>.SETDIR=path</I> as the attribute.  <I>path</I> is expanded and
the result is used as the value of the directory to change to.
If <I>path</I> contains <B>$$@</B> then the name of the target to be built is
used in computing the path to change directory to.
If path is surrounded by single quotes then path is not expanded, and is used
literally as the directory name.
If the <I>path</I> contains any `:' characters then the entire attribute string
must be quoted using &quot;.
If a target having this attribute set also has the .IGNORE
attribute set then if the change to the specified directory fails it will be
ignored, and no error message will be issued.
<DT><B>.SILENT</B><DD>
Do not echo the recipe lines when making any target with this attribute set,
and do not issue any warnings.
<DT><B>.SWAP</B><DD>
Under MSDOS
when making a target with this attribute set swap the <B>dmake</B> executable
to disk prior to executing the recipe line.  Also see the '%' recipe line
flag defined in the RECIPES section.
<DT><B>.SYMBOL</B><DD>
Target is a library member and is an entry point into a module in the
library.  This attribute is used only when searching a library for a target.
Targets of the form lib((entry)) have this attribute set automatically.
<DT><B>.USESHELL</B><DD>
Force each recipe line of a target to be executed using a shell.
Specifying this attribute is equivalent to specifying the '+' character at the
start of each line of a non-group recipe.
<DT><B>.UPDATEALL</B><DD>
Indicates that all the targets listed in this rule are updated by the
execution of the accompanying recipe.
A common example is the production of the
<I>y.tab.c</I>

and
<I>y.tab.h</I>

files by
<B>yacc</B>

when it is run on a grammar.  Specifying .UPDATEALL in such a rule
prevents the running of yacc twice, once for the y.tab.c file and once
for the y.tab.h file.  .UPDATEALL targets that are specified in a single rule
are treated as a single target and all timestamps are updated whenever any
target in the set is made.  As a side-effect, <B>dmake</B> internally sorts
such targets in ascending alphabetical order and the value of $@ is always
the first target in the sorted set.
</DL>
<P>

All attributes are user setable and except for .UPDATEALL and .MKSARGS
may be used in one of two forms.
The .MKSARGS attribute is restricted to use as a global attribute, and
the use of the .UPDATEALL attribute is restricted to rules
of the second form only.
<P>
	ATTRIBUTE_LIST : <I>targets</I>
<P>
assigns the attributes specified by ATTRIBUTE_LIST to each target in
<I>targets</I>

or
<P>
	<I>targets</I> ATTRIBUTE_LIST : ...
<P>
assigns the attributes specified by ATTRIBUTE_LIST to each target in
<I>targets.</I>

In the first form if
<I>targets</I>

is empty (ie. a NULL list), then the
list of attributes will apply to all targets in the makefile
(this is equivalent to the common Make construct of <I>&quot;.IGNORE :&quot;</I>
but has been modified to the notion of an attribute instead of
a special target).
Not all of the attributes have global meaning.
In particular, .LIBRARY, .NOSTATE, .PHONY, .SETDIR, .SYMBOL and .UPDATEALL
have no assigned global meaning.
<P>

Any attribute may be used with any target, even with the special targets.
Some combinations are useless (e.g. .INCLUDE .PRECIOUS: ... ),
while others are useful (e.g. .INCLUDE .IGNORE : &quot;file.mk&quot; will not complain
if file.mk cannot be found using the include file search rules,
see the section on SPECIAL TARGETS for a description of .INCLUDE).
If a specified attribute will not be used with the special target a warning
is issued and the attribute is ignored.
<A NAME="lbAJ">&nbsp;</A>
<H2>MACROS</H2>

<B>dmake</B>

supports six forms of macro assignment.
<P>
<DL COMPACT>
<DT><B>MACRO = LINE</B><DD>
This is the most common and familiar form of macro assignment.  It assigns
LINE literally as the value of MACRO.
Future expansions of MACRO recursively expand its value.
<DT><B>MACRO *= LINE</B><DD>
This form behaves exactly as the simple '=' form with the exception that if
MACRO already has a value then the assignment is not performed.
<DT><B>MACRO := LINE</B><DD>
This form differs from the simple '=' form in that it expands LINE
prior to assigning it as the value of MACRO.
Future expansions of MACRO do not recursively expand its value.
<DT><B>MACRO *:= LINE</B><DD>
This form behaves exactly as the ':=' form with the exception that if
MACRO already has a value then the assignment and expansion are not performed.
<DT><B>MACRO += LINE</B><DD>
This form of macro assignment allows macro values to grow.  It takes the
literal value of LINE and appends it to the previous value of MACRO separating
the two by a single space.
Future expansions of MACRO recursively expand its value.
<DT><B>MACRO +:= LINE</B><DD>
This form is similar to the '+=' form except that the value of LINE is expanded
prior to being added to the value of MACRO.
</DL>
<P>

Macro expressions specified on the command line allow the macro value
to be redefined within the makefile only if the macro is defined using
the '+=' and '+:=' operators.  Other operators will define a macro that cannot
be further modified.
<P>

Each of the preceeding macro assignment operators may be prefixed by <B>!</B>
to indicate that the assignment should be forced and that no warnings should
be issued.  Thus, specifying <B>!</B> has the effect of silently forcing the
specified macro assignment.
<P>

When <B>dmake</B> defines a non-environment macro it strips leading and
trailing white space from the macro value.
Macros imported from the environment via either the .IMPORT special
target (see the SPECIAL TARGETS section), or the <B>-e</B>, or <B>-E</B> flags
are an exception to this rule.  Their values are
always taken literally and white space is never stripped.
In addition, named macros defined using the .IMPORT special target do
not have their values expanded when they are used within a makefile.
In contrast, environment macros that are imported
due to the specification of the <B>-e</B> or <B>-E</B> flags
are subject to expansion when used.
<P>

To specify a macro expansion
enclose the name in () or {} and precede it with a dollar sign $.
Thus $(TEST) represents an expansion of the macro variable named TEST.
If TEST is
defined then $(TEST) is replaced by its expanded value.  If TEST is not
defined then $(TEST) expands to the NULL string (this is equivalent to
defining a macro as 'TEST=' ).  A short form may be used for single character
named macros.  In this case the parentheses are optional, and $(I) is
equivalent to $I.
Macro expansion is recursive, hence, if the value string contains an expression
representing a macro expansion, the expansion is performed.  Circular macro
expansions are detected and cause an error to be issued.
<P>

When defining a macro the given macro name is first expanded before being used
to define the macro.  Thus it is possible to define macros whose names
depend on values of other macros.  For example, suppose CWD is defined as
<P>
	CWD = $(PWD:b)
<P>
then the value of $(CWD) is the name of the current directory.
This can be used to define macros specific to this directory, for
example:
<P>
	_$(CWD).prt = list of files to print...
<P>
The actual name of the defined macro is a function of the current directory.
A construct such as this is useful when processing a hierarchy of directories
using .SETDIR attributed targets and a collection of small distributed
makefile stubs.
<P>

Macro variables may be defined within the makefile, on the command
line, or imported from the environment.
<P>

<B>dmake</B>

supports several non-standard macro expansions:
The first is of the form:
<DL COMPACT><DT><DD>
<DL COMPACT>
<DT><I>$(macro_name:modifier_list:modifier_list:...)</I><DD>
</DL>
</DL>

<P>

where
<I>modifier_list</I>

may be a combination of:
<DL COMPACT><DT><DD>
<P>


<PRE>

<DL COMPACT>
<DT>b or B<DD>- file (not including suffix) portion of path names

<DT>d or D<DD>- directory portion of all path names

<DT>e or E<DD>- suffix portion of path names

<DT>f or F<DD>- file (including suffix) portion of path names

<DT>i or I<DD>- inferred names of targets

<DT>l or L<DD>- macro value in lower case

<DT>u or U<DD>- macro value in upper case

<DT>1<DD>- return the first white space separated token from value
</DL>
</DL>

or a single one of:
<DL COMPACT><DT><DD>

<DL COMPACT>
<DT>m or M<DD>- map escape codes found in macro to their ASCII value

<DT>s or S<DD>- simple pattern substitution

<DT>t or T<DD>- tokenization.

<DT>^<DD>- prepend a prefix to each token

<DT>+<DD>- append a suffix to each token

</DL>
</DL>
</PRE>

Thus if we have the example:
<DL COMPACT><DT><DD>
test = d1/d2/d3/a.out f.out d1/k.out
</DL>

The following macro expansions produce the values on the right of '->' after
expansion.
<DL COMPACT><DT><DD>
<P>


<PRE>

<DL COMPACT>
<DT>$(test:d)<DD>-> d1/d2/d3/ d1/

<DT>$(test:b)<DD>-> a f k

<DT>$(test:f)<DD>-> a.out f.out k.out

<DT>${test:db}<DD>-> d1/d2/d3/a f d1/k

<DT>${test:s/out/in/:f}<DD>-> a.in f.in k.in

<DT>$(test:f:t+)<DD>-> a.out+f.out+k.out

<DT>$(test:e)<DD>-> .out .out .out

<DT>$(test:u)<DD>-> D1/D2/D3/A.OUT F.OUT D1/K.OUT

<DT>$(test:1)<DD>-> d1/d2/d3/a.out
</DL>
</DL>
</PRE>

<P>

If a token ends in a string composed from the value of the macro DIRBRKSTR
(ie. ends in a directory separator string, e.g. '/' in UNIX) and you use the
<B>:d</B> modifier then the expansion returns the directory name less the
final directory separator string.  Thus successive pairs of :d modifiers
each remove a level of directory in the token string.
<P>

The map escape codes modifier changes the following escape codes \a =&gt; &lt;bel&gt;,
\b =&gt; &lt;backspace&gt;, \f =&gt; &lt;formfeed&gt;, \n =&gt; &lt;nl&gt;, \r =&gt; &lt;cr&gt;,
\t =&gt; &lt;tab&gt;, \v =&gt; &lt;vertical tab&gt;, \&quot; =&gt; &quot;, and \xxx =&gt; &lt;xxx&gt; where
xxx is the octal representation of a character into the corresponding ASCII
value.
<P>

The tokenization, prepend and append modifier may use the same escape codes
that are supported by the map escape codes modifier in the string that is
inserted, prepended or added by the respective macro modifier.
These modifiers may quote this string to include otherwise problematic
characters.  E.g. spaces, colons and parentheses.
<P>

The tokenization modifier takes all white space separated tokens from the
macro value and separates them by the separator string.  Thus the
expansion:
<P>

<DL COMPACT><DT><DD>
<PRE>
$(test:f:t&quot;+\n&quot;)
</DL>
produces:
<DL COMPACT><DT><DD>a.out+
f.out+
k.out
</PRE>

</DL>

<P>

The prefix operator <B>^</B> takes all white space separated tokens from the
macro value and prepends <I>string</I> to each.
<P>

<DL COMPACT><DT><DD>
<PRE>
$(test:f:^mydir/)
</DL>
produces:
<DL COMPACT><DT><DD>mydir/a.out mydir/f.out mydir/k.out
</PRE>

</DL>

<P>

The suffix operator <B>+</B> takes all white space separated tokens from the
macro value and appends <I>string</I> to each.
<P>

<DL COMPACT><DT><DD>
<PRE>
$(test:b:+.c)
</DL>
produces:
<DL COMPACT><DT><DD>a.c f.c k.c
</PRE>

</DL>

<P>

The next non-standard form of macro expansion allows for recursive macros.
It is possible to specify a $(<I>macro_name</I>) or ${<I>macro_name</I>} expansion
where <I>macro_name</I> contains more $( ... ) or ${ ... } macro expansions
itself.
<P>

For example $(CC$(_HOST)$(_COMPILER)) will first expand CC$(_HOST)$(_COMPILER)
to get a result and use that result as the name of the macro to expand.
This is useful for writing a makefile for more than one target
environment.  As an example consider the following hypothetical case. 
Suppose that _HOST and _COMPILER are imported from the environment
and are set to represent the host machine type and the host compiler
respectively.
<DL COMPACT><DT><DD>
<P>
<PRE>
CFLAGS_VAX_CC = -c -O  # _HOST == &quot;_VAX&quot;, _COMPILER == &quot;_CC&quot;
CFLAGS_PC_MSC = -c -ML # _HOST == &quot;_PC&quot;,  _COMPILER == &quot;_MSC&quot;

# redefine CFLAGS macro as:

CFLAGS := $(CFLAGS$(_HOST)$(_COMPILER))
</PRE>

<P>
</DL>

This causes CFLAGS to take on a value that corresponds to the
environment in which the make is being invoked.
<P>

The final non-standard macro expansion is of the form:
<DL COMPACT><DT><DD>
<P>
string1{token_list}string2
</DL>

<P>

where string1, string2 and token_list are expanded.  After expansion,
string1 is prepended to each token found in token_list and
string2 is appended to each resulting token from the previous prepend.
string1 and string2 are not delimited by white space
whereas the tokens in token_list are.
A null token in the token list 
is specified using &quot;&quot;.
Thus using another example we have:
<DL COMPACT><DT><DD>
<P>


<PRE>

<DL COMPACT>
<DT>test/{f1 f2}.o<DD>--&gt; test/f1.o test/f2.o

<DT>test/ {f1 f2}.o<DD>--&gt; test/ f1.o f2.o

<DT>test/{f1 f2} .o<DD>--&gt; test/f1 test/f2 .o

<DT>test/{f1  }.o<DD>--&gt; test/f1.o test/.o


<DT>and<DD>


<DT>test/{d1 d2}/{f1 f2}.o --&gt; <DD>test/d1/f1.o test/d1/f2.o
test/d2/f1.o test/d2/f2.o

</DL>
</DL>
</PRE>

This last expansion is activated only when the first characters of
<I>token_list</I>
appear immediately after the opening '{' with no intervening white space.
The reason for this restriction is the following incompatibility with
Bourne Shell recipes.  The line
<DL COMPACT><DT><DD>
<P>
{ echo hello;}
<P>
</DL>

is valid /bin/sh syntax; while
<DL COMPACT><DT><DD>
<P>
{echo hello;}
<P>
</DL>


is not. Hence the latter triggers the enhanced macro expansion while the former
causes it to be suppressed.
See the SPECIAL MACROS section for a description of the special macros that
<B>dmake</B> defines and understands.
<A NAME="lbAK">&nbsp;</A>
<H2>RULES AND TARGETS</H2>

A makefile contains a series of entries that specify dependencies.
Such entries are called <I>target/prerequisite</I> or <I>rule</I> definitions.
Each rule definition
is optionally followed by a set of lines that provide a recipe for updating
any targets defined by the rule.
Whenever
<B>dmake</B>

attempts to bring a target up to date and an explicit recipe is provided with
a rule defining the target, that recipe is used to update the
target.  A rule definition begins with a line having the following syntax:
<P>
<DL COMPACT><DT><DD>
<PRE>
<I>&lt;targets&gt;</I> [<I>&lt;attributes&gt;</I>] <I>&lt;ruleop&gt;</I> [<I>&lt;prerequisites&gt;</I>] [;<I>&lt;recipe&gt;</I>]
</PRE>

</DL>

<P>
<I>targets</I>

is a non-empty list of targets.  If the target is a
special target (see SPECIAL TARGETS section below) then it must appear alone
on the rule line.  For example:
<P>
<DL COMPACT><DT><DD>
.IMPORT .ERROR : ...
</DL>

<P>
is not allowed since both .IMPORT and .ERROR are special targets.
Special targets are not used in the construction of the dependency graph and
will not be made.
<P>

<I>attributes</I>

is a possibly empty list of attributes.  Any attribute defined in the
ATTRIBUTES section above may be specified.  All attributes will be applied to
the list of named targets in the rule definition.  No other targets will
be affected.
<P>
<DL COMPACT>
<DT>NOTE:<DD>
As stated earlier,
if both the target list and prerequisite list are empty but the attributes
list is not, then the specified attributes affect all targets in the makefile.
<P>
</DL>
<P>

<I>ruleop</I>

is a separator which is used to identify the targets from the prerequisites.
Optionally it also provides a facility for modifying the way in which
<B>dmake</B>

handles the making of the associated targets.
In its simplest form the operator is a single ':', and need not be separated
by white space from its neighboring tokens.  It may additionally be followed
by any of the modifiers { !, ^, -, :, | }, where:
<P>
<DL COMPACT>
<DT><B>!</B><DD>
says execute the recipe for the associated targets once for each out of date
prerequisite.  Ordinarily the recipe is executed
once for all out of date prerequisites at the same time.
<DT><B>^</B><DD>
says to insert the specified prerequisites, if any, before any
other prerequisites already associated with the specified targets.
In general, it is not useful to specify ^ with an empty
list of prerequisites.
<DT><B>-</B><DD>
says to clear the previous list of prerequisites before adding
the new prerequisites.  Thus,
<P>
	foo :
<BR>

	foo : bar baz
<P>
can be replaced by
<P>
	foo :- bar baz
<P>
however the old form still works as expected.
<DT><B>:</B><DD>
When the rule operator is not modified by a second ':'
only one set of rules may be specified for making a target.
Multiple definitions may be used to add to the
list of prerequisites that a target depends on.
However, if a target is multiply defined
only one definition may specify a recipe
for making the target.
<P>
When a target's rule operator is modified by a second ':'
(:: for example) then this definition may not be the only
definition with a recipe for the target.  There may be other :: target
definition lines that specify a different set of prerequisites with a
different recipe for updating the target.  
Any such target is made if any of the definitions
find it to be out of date
with respect to the related prerequisites
and the corresponding recipe is used to update the
target.  By definition all '::' recipes that are found to be out of date for
are executed.
<P>
In the following simple example, each rule has a `::' <I>ruleop</I>.  In such an
operator we call the first `:' the operator, and the second `:' the modifier.
<P>
<PRE>
a.o :: a.c b.h
   first recipe for making a.o

a.o :: a.y b.h
   second recipe for making a.o
</PRE>

<P>
If a.o is found to be out of date with respect to a.c then the first recipe
is used to make a.o.  If it is found out of date with respect to a.y then
the second recipe is used.  If a.o is out of date with respect to
b.h then both recipes are invoked to make a.o.
In the last case the order of invocation corresponds to the order in which the
rule definitions appear in the makefile.
<DT><B>|</B><DD>
Is defined only for PERCENT rule target definitions.  When specified it
indicates that the following construct should be parsed using the old
semantinc meaning:
<P>
<PRE>
%.o :| %.c %.r %.f ; some rule

is equivalent to:

%.o : %.c ; some rule
%.o : %.r ; some rule
%.o : %.f ; some rule
</PRE>

</DL>
<P>

Targets defined using a single `:' operator
with a recipe may be redefined again with a new recipe by using a
`:' operator with a `:' modifier.
This is equivalent to a target having been
initially defined with a rule using a `:' modifier.
Once a target is defined using a `:'
modifier it may not be defined again with a recipe using only the `:' operator
with no `:' modifier.  In both cases the use of a `:' modifier creates a new
list of prerequisites and makes it the current prerequisite list for the target.
The `:' operator with no recipe always modifies the current list
of prerequisites.
Thus assuming each of the following definitions has a recipe attached, then:
<DL COMPACT><DT><DD>
<P>
<PRE>
joe :  fred ... (1)
joe :: more ... (2)

and

joe :: fred ... (3)
joe :: more ... (4)

</PRE>

</DL>

are legal and mean:  add the recipe associated with (2), or (4) to the set
of recipes for joe, placing them after existing recipes for
making joe.
The constructs:
<DL COMPACT><DT><DD>
<P>
<PRE>
joe :: fred ... (5)
joe : more ...  (6)

and

joe : fred ...  (7)
joe : more ...  (8)

</PRE>

</DL>

are errors since we have two sets of perfectly good recipes for
making the target.
<P>

<I>prerequisites</I>

is a possibly empty list of targets that must be brought up to date before
making the current target.
<P>

<I>recipe</I>

is a short form and allows the user to specify short rule definitions
on a single line.
It is taken to be the first recipe line in a larger recipe
if additional lines follow the rule definition.
If the semi-colon is present but the recipe line is empty (ie. null string)
then it is taken
to be an empty rule.  Any target so defined causes the
<I>Don't know how to make ...</I>

error message to be suppressed when
<B>dmake</B>

tries to make the target and fails.
This silence is maintained for rules that are terminated
by a semicolon and have no following recipe lines, for targets listed on the
command line, for the first target found in the makefile, and for any target
having no recipe but containing a list of prerequisites (see the COMPATIBILITY
section for an exception to this rule if the AUGMAKE (<B>-A</B>) flag
was specified).
<A NAME="lbAL">&nbsp;</A>
<H2>RECIPES</H2>

The traditional format used by most versions of Make defines the recipe
lines as arbitrary strings that may contain macro expansions.  They
follow a rule definition line and may be spaced
apart by comment or blank lines.
The list of recipe lines defining the recipe is terminated by a new target
definition, a macro definition, or end-of-file.
Each recipe line
<B>MUST</B>

begin with a <B>&lt;TAB&gt;</B> character (or <B>spaces</B>, see <B>.NOTABS</B>)
which may optionally be followed with one or all the following
<I>recipe property</I>

characters 
<I>'@%+-'</I>

which affect the recipe execution:
<DL COMPACT>
<DT>'-'<DD>
indicates that non-zero exit values (ie. errors)
are to be ignored when this recipe line is executed.
<DT>'+'<DD>
indicates that the current recipe line is to be executed using the shell. Group recipes implicitely ignore this property.
<DT>'%'<DD>
indicates that
<B>dmake</B>

should swap itself out to secondary storage (MSDOS only) before running the
recipe.
<DT>'@'<DD>
indicates that the recipe line should NOT be echoed to the terminal prior to
being executed.
<DT>'@@'<DD>
is a stronger version of the previous property. The recipe line and the
output (stdout and stderr) of the executed recipe are NOT shown on the
terminal.
</DL>
<P>

Each property is off by default
(ie. by default, errors are significant, commands are echoed, no swapping is
done and a shell is
used only if the recipe line contains a character found in the value of the
SHELLMETAS macro).
Global settings activated via command line options or special attribute or
target names may also affect these settings.
An example recipe:
<P>
<DL COMPACT><DT><DD>
<PRE>
target :
<DL COMPACT><DT><DD>first recipe line
second recipe line, executed independent of first.
@a recipe line that is not echoed
-and one that has errors ignored
%and one that causes dmake to swap out
+and one that is executed using a shell.
</DL>
</PRE>

</DL>

<P>

The second and new format of the recipe block begins the block with the
character '[' (the open group character) in the last non-white space
position of a line, and terminates the
block with the character ']' (the close group character)
in the first non-white space position of a line.
In this form each recipe line need not have a leading TAB.  This is
called a recipe group.  Groups so defined are fed intact as a single
unit to a shell for execution whenever the corresponding target needs to
be updated.  If the open group character '[' is preceded
by one or all of the
<I>recipe properties</I>

(-, %, @ and @@)
then they apply to the entire group in the same way that they
apply to single recipe lines.  You may also specify '+' but it is
redundant as a shell is already being used to run the recipe.
See the MAKING TARGETS section for a description of how
<B>dmake</B>

invokes recipes.
Here is an example of a group recipe:
<P>
<DL COMPACT><DT><DD>
<PRE>
target :
[
   first recipe line
   second recipe line
   tall of these recipe lines are fed to a
   single copy of a shell for execution.
]
</PRE>

</DL>

<P>
<A NAME="lbAM">&nbsp;</A>
<H2>BUILTIN COMMANDS</H2>

<B>dmake</B>

supports some builtin commands. An optional leading '+' describes that
the builtin can be used also when being executed in a shell otherwise it
is only implemented when used directly. Remember that if a character of the
recipe is found in the SHELLMETAS macro the execution of the recipe in a
shell is forced.
<DL COMPACT>
<DT>[<B>+</B>]<B>noop</B> [<B>something</B>]<DD>
The  <B>noop</B> internal command always returns success if used but it is
not executed even though the rest of the commandline is evaluated.
This command can be used to evaluate macro expansions at the runtime of the
recipe without starting a real commmand.
<DT>[<B>+</B>]&lt;empty recipe&gt;<DD>
If an empty recipe line is encountered it is not executed. This sounds
more trivial than it really is because the recipe could consist of
macros that evaluated to empty or whitespace only strings.
<DT><B>echo</B> [<B>-n</B>] <B>data</B><DD>
This internal command prints data (with all leading whitespace removed, but
otherwise literally) to stdout. If the '-n' switch is given no trailing
newline is printed. Note that no quoting is removed nor that escape sequences
are handled.
</DL>
<P>

No special treatment of buildin commands for group recipes is implemented
even though the &lt;empty recipe&gt; will most propably also not be evaluated by
most shells that can be used to handle the recipe groups.
<A NAME="lbAN">&nbsp;</A>
<H2>TEXT DIVERSIONS</H2>

<B>dmake</B>

supports the notion of text diversions.
If a recipe line contains the macro expression
<DL COMPACT><DT><DD>
<P>
$(mktmp[,[<I>file</I>][,<I>text</I>]] <I>data</I>)
<P>
</DL>

then all text contained in the <I>data</I> expression is expanded and
is written to a temporary file.  The <I>data</I> in the file will always
be terminated from a new line character.  The return
value of the macro is the name of the temporary file unless the <I>text</I>
parameter is defined. In this case the return value is the expanded value
of <I>text</I>.
<P>

<I>data</I>

can be any text and must be separated from the 'mktmp' portion of the
macro name by white-space.  The only restriction on the data text is that
it must contain a balanced number of parentheses of the same kind as are
used to initiate the $(mktmp ...) expression.  For example:
<DL COMPACT><DT><DD>
<P>
$(mktmp $(XXX))
<P>
</DL>

is legal and works as expected, but:
<DL COMPACT><DT><DD>
<P>
$(mktmp text (to dump to file)
<P>
</DL>

is not legal.  You can achieve what you wish by either defining a macro that
expands to '(' or by using {} in the macro expression; like this:
<DL COMPACT><DT><DD>
<P>
${mktmp text (to dump to file}
<P>
</DL>

Since the temporary file is opened when the
macro containing the text diversion expression is expanded, diversions may
be nested and any diversions that are created as part of ':=' macro
expansions persist for the duration of the
<B>dmake</B>

run.
If the <I>data</I> text is to contain new lines the map escape codes macro
expasion can be used.  For example the expression:
<DL COMPACT><DT><DD>
<P>
<PRE>
mytext:=this is a\ntest of the text diversion
all:
        cat $(mktmp $(mytext:m))
</PRE>

<P>
</DL>

is replaced by:
<DL COMPACT><DT><DD>
<P>
cat /tmp/mk12294AA
<P>
</DL>

where the temporary file contains two lines both of which are terminated
by a new-line.
A second more illustrative example generates a response file to an MSDOS
link command:
<DL COMPACT><DT><DD>
<P>
<PRE>
OBJ = fred.obj mary.obj joe.obj
all : $(OBJ)
        link @$(mktmp $(^:t&quot;+\n&quot;))
</PRE>

<P>
</DL>

The result of making `all' in the second example is the command:
<DL COMPACT><DT><DD>
<P>
link @/tmp/mk02394AA
<P>
</DL>

where the temporary file contains:
<DL COMPACT><DT><DD>
<P>
<PRE>
fred.obj+
mary.obj+
joe.obj
</PRE>

<P>
</DL>

The last line of the file is terminated by a new-line which is always
inserted at the end of the <I>data</I> string.
<P>

If the optional <I>file</I> specifier is present then its expanded value
is the name of the temporary file to create.  An example that would be useful
for MSDOS users with a Turbo-C compiler
<DL COMPACT><DT><DD>
<P>
$(mktmp,turboc.cfg $(CFLAGS))
<P>
</DL>

will place the contents of CFLAGS into a local <I>turboc.cfg</I> file.
The second optional argument, <I>text</I>, if present alters the name
of the value returned by the $(mktmp ...) macro.
<P>

Under MS-DOS text diversions may be a problem.  Many DOS tools require
that path names which contain directories use the \ character to delimit
the directories.  Some users however wish to use the '/' to delimit pathnames
and use environments that allow them to do so.
The macro USESHELL is set to &quot;yes&quot; if the
current recipe is forced to use a shell via the .USESHELL or '+' directives,
otherwise its value is &quot;no&quot;.
The
<B>dmake</B>

startup files define the macro DIVFILE whose value is either the
value of TMPFILE or the value of TMPFILE edited to replace any '/' characters
to the appropriate value based on the current shell and whether it will be
used to execute the recipe.
<P>

Previous versions of
<B>dmake</B>

defined text diversions using &lt;+, +&gt; strings,
where &lt;+ started a text diversion and +&gt; terminated one.
<B>dmake</B>

is backward compatible with this construct only
if the &lt;+ and +&gt; appear literally
on the same recipe line or in the same macro value string.  In such instances
the expression:
<P>
	&lt;+data+&gt;
<P>
is mapped to:
<P>
	$(mktmp data)
<P>
which is fully output compatible with the earlier construct.  &lt;+, +&gt;
constructs whose text spans multiple lines must be converted by hand to use
$(mktmp ...).
<P>

If the environment variable TMPDIR is defined then the
temporary file is placed into the directory specified by that variable.
A makefile can modify the location of temporary files by
defining a macro named TMPDIR and exporting it using the .EXPORT special
target.
<A NAME="lbAO">&nbsp;</A>
<H2>SPECIAL TARGETS</H2>

This section describes the special targets that are recognized by <B>dmake</B>.
Some are affected by attributes and others are not.
<DL COMPACT>
<DT><B>.ERROR</B><DD>
If defined then the recipe associated with this target is executed
whenever an error condition is detected by <B>dmake</B>.  All attributes that
can be used with any other target may be used with this target.  Any
prerequisites of this target will be brought up to date during its processing.
NOTE:  errors will be ignored while making this target, in extreme cases this
may cause some problems.
<DT><B>.EXIT</B><DD>
If this target is encountered while parsing a makefile then the parsing of the
makefile is immediately terminated at that point.
<DT><B>.EXPORT</B><DD>
All prerequisites associated with this target are assumed to
correspond to macro names and they and their values
are exported to the environment as environment strings at the point in
the makefile at which this target appears.
Any attributes specified with this target are ignored.
Only macros which have been assigned a value in the makefile prior to the
export directive are exported, macros as yet undefined
or macros whose value contains any of the characters &quot;+=:*&quot;
are not exported.
<P>
Note that macros that are not expanded during the macro assignment and contain
other macros will be written into the environment containing these other
macros in the form of $(macroname).
<DT><B>.IMPORT</B><DD>
Prerequisite names specified for this target are searched for in the
environment and defined as macros with their value taken from the environment.
If the special name <B>.EVERYTHING</B> is used as a prerequisite name then
all environment variables defined in the environment are imported.
The functionality of the <B>-E</B> flag can be forced by placing the construct
<I>.IMPORT : .EVERYTHING</I> at the start of a makefile.  Similarly, by
placing the construct at the end, one can emulate the effect of the <B>-e</B>
command line flag.
If a prerequisite name cannot be found in the environment
an error message is issued.
.IMPORT accepts the .IGNORE attribute.  When given, it causes <B>dmake</B>
to ignore the above error.
See the MACROS section for a description of the processing of imported macro
values.
<DT><B>.INCLUDE</B><DD>
Parse another makefile just as if it had been located at the point of the
.INCLUDE in the current makefile.
The list of prerequisites gives the list of
makefiles to try to read.  If the list contains multiple makefiles then they
are read in order from left to right.  The following search rules are used
when trying to locate the file.  If the filename is surrounded by &quot; or just
by itself then it is searched for in the current directory.  If it is not
found it is then searched for in each of the directories specified
as prerequisites of the .INCLUDEDIRS special target.
If the file name is surrounded by &lt; and &gt;, (ie.
&lt;my_spiffy_new_makefile&gt;) then it is searched for only in the directories
given by the .INCLUDEDIRS special target.  In both cases if the file name is a
fully qualified name starting at the root of the file system then it is only
searched for once, and the .INCLUDEDIRS list is ignored.
If .INCLUDE fails to find the file it invokes the inference engine to
try to infer and hence make the file to be included.  In this way the
file can be checked out of an RCS repository for example.
.INCLUDE accepts
the .IGNORE, .SETDIR, and .NOINFER attributes.
If the .IGNORE attribute is given and the file
cannot be found then <B>dmake</B> continues processing,
otherwise an error message is generated.
If the .NOINFER attribute is given and the file
cannot be found then <B>dmake</B> will not attempt to
<I>infer and make</I> the file.
The .SETDIR attribute causes
<B>dmake</B>

to change directories to the specified directory prior to attempting the
include operation.  If all fails <B>dmake</B> attempts to <I>make</I> the file
to be included.  If making the file fails then <B>dmake</B> terminates unless
the .INCLUDE directive also specified the .IGNORE attribute.
If .FIRST is specified along with .INCLUDE then <B>dmake</B> attempts to
include each named prerequisite and will terminate the inclusion with the
first prerequisite that results in a successful inclusion.
<DT><B>.INCLUDEDIRS</B><DD>
The list of prerequisites specified for this target defines the set of
directories to search when trying to include a makefile.
<DT><B>.KEEP_STATE</B><DD>
This special target is a synonym for the macro definition
<P>
	.KEEP_STATE := _state.mk
<P>
It's effect is to turn on STATE keeping and to define <I>_state.mk</I>
as the state file.
<DT><B>.MAKEFILES</B><DD>
The list of prerequisites is the set of files to try to read as the default
makefile.  By default this target is defined as: 
<P>
	.MAKEFILES : makefile.mk Makefile makefile
<P>
<DT><B>.REMOVE</B><DD>
The recipe of this target is used whenever <B>dmake</B> needs to remove
intermediate targets that were made but do not need to be kept around.
Such targets result from the application of transitive closure on the
dependency graph.
<DT><B>.ROOT</B><DD>
The internal root of the dependency graph, see section STARTUP for details.
<DT><B>.SOURCE</B><DD>
The prerequisite list of this target defines a set of directories to check
when trying to locate a target file name.  See the section on BINDING of
targets for more information.
<DT><B>.SOURCE.suff</B><DD>
The same as .SOURCE, except that the .SOURCE.suff list is searched first when
trying to locate a file matching the a target whose name ends in the suffix
.suff.
<DT><B>.SUFFIXES</B><DD>
This deprecated special target has no special meaning. Avoid its use.
<DT><B>.TARGETS</B><DD>
The internal targets that all user defined targets are prerequisites of,
see section STARTUP for details.
</DL>
<P>

There are a few targets that are &quot;slightly&quot; special:
<DL COMPACT><DT><DD>
<PRE>

<B>.INIT</B>
<B>.DONE</B>

</PRE>

</DL>

These targets exist because of historical reasons, see the usage of .INIT
and .DONE in section &quot;STARTUP&quot;, they can be used and defined as ordinary
targets but are special in the sense that even though they start with a `.'
they are not treated as a .&lt;suffix&gt; meta target (See the AUGMAKE META RULES
section for details).
<P>

<B>Please note</B>

that self defined targets shouldn't use the prefix `.' as they would be
handled as .&lt;suffix&gt; meta targets and dmake most propably would complain
about this.
<P>

In addition to the special targets above,
several other forms of targets are recognized and are considered special,
their exact form and use is defined in the sections that follow.
<A NAME="lbAP">&nbsp;</A>
<H2>SPECIAL MACROS</H2>

<B>dmake</B>

defines a number of special macros.  They are divided into three classes:
control macros, run-time macros, and function macros.
The control macros are used by
<B>dmake</B>

to configure its actions, and are the preferred method of doing so.
In the case when a control macro has the same function as a special 
target or attribute they share the same name as the special target or
attribute.
The run-time macros are defined when
<B>dmake</B>

makes targets and may be used by the user inside recipes.
The function macros provide higher level functions dealing with macro
expansion and diversion file processing.
<A NAME="lbAQ">&nbsp;</A>
<H2>CONTROL MACROS</H2>

To use the control macros simply assign them a value just like any other
macro.  The control macros are divided into three groups:
string valued macros, character valued macros, and boolean valued macros.
<P>

The following are all of the string valued macros.
This list is divided into two groups.  The first group gives the string
valued macros that are defined internally and cannot be directly set by the
user.
<DL COMPACT>
<DT><B>ABSMAKECMD</B><DD>
<B>Warning!</B> This macro's value is differently defined for a native Windows
dmake executable (compiled with MS Visual C++ or MinGW) and dmake for other
operating systems or build with other compilers.
<P>
In the first case its value is the absolute filename of the executable of
the current dmake process, otherwise it is defined as the NULL string.
<DT><B>INCDEPTH</B><DD>
This macro's value is a string of digits representing
the current depth of makefile inclusion.
In the first makefile level this value is zero.
<DT><B>MFLAGS</B><DD>
Is the list of flags
that were given on the command line including a leading switch character.
The -f flag is not included in this list.
<DT><B>MAKECMD</B><DD>
Is the name with which <B>dmake</B> was invoked.
<DT><B>MAKEDIR</B><DD>
Is the full path to the initial directory in which
<B>dmake</B>

was invoked.
<DT><B>MAKEFILE</B><DD>
Contains the string &quot;-f <I>makefile</I>&quot; where, <I>makefile</I> is the name
of initial user makefile that was first read.
<DT><B>MAKEFLAGS</B><DD>
Is the same as $(MFLAGS) but has no leading switch
character. (ie. MFLAGS = -$(MAKEFLAGS))
<DT><B>MAKEMACROS</B><DD>
Contains the complete list of macro expressions that were specified on the
command line.
<DT><B>MAKETARGETS</B><DD>
Contains the name(s) of the target(s), if any, that were
specified on the command line.
<DT><B>MAKEVERSION</B><DD>
Contains a string indicating the current <B>dmake</B> version number.
<DT><B>MAXPROCESSLIMIT</B><DD>
Is a numeric string representing the maximum number of processes that 
<B>dmake</B> can use when making targets using parallel mode.
<DT><B>NULL</B><DD>
Is permanently defined to be the NULL string.
This is useful when comparing a conditional expression to an NULL value.
<DT><B>PWD</B><DD>
Is the full path to the
current directory in which make is executing.
<DT><B>SPACECHAR</B><DD>
Is permanently defined to contain one space character. This is useful
when using space characters in function macros, e.g. subst, that
otherwise would get deleted (leading/trailing spaces) or for using
spaces in function macro parameters.
<DT><B>TMPFILE</B><DD>
Is set to the name of the most recent temporary file opened by <B>dmake</B>.
Temporary files are used for text diversions and for group recipe processing.
<DT><B>TMD</B><DD>
Stands for &quot;To Make Dir&quot;, and
is the path from the present directory (value of $(PWD)) to the directory
that <B>dmake</B> was started up in (value of $(MAKEDIR)). If the present
directory is the directory that <B>dmake</B> was started up in TMD will be
set to the relative path &quot;.&quot;. This allows to create valid paths by prepending
$(TMD)$(DIRSEPSTR) to a relative path.
This macro is modified when .SETDIR attributes are processed.
<DT><B>USESHELL</B><DD>
The value of this macro is set to &quot;yes&quot; if the current recipe is forced to
use a shell for its execution via the .USESHELL or '+' directives, its value
is &quot;no&quot; otherwise.
<P>
</DL>
<P>

The second group of string valued macros control
<B>dmake</B>

behavior and may be set by the user.
<DL COMPACT>
<DT><B>.DIRCACHE</B><DD>
If set to &quot;yes&quot; enables the directory cache (this is the default).  If set to
&quot;no&quot; disables the directory cache (equivalent to -d command-line flag).
<DT><B>.DIRCACHERESPCASE</B><DD>
If set to &quot;yes&quot; causes the directory cache, if enabled, to respect
file case, if set to &quot;no&quot; facilities of the native OS are used to
match file case.
By default it is set to &quot;no&quot; for Windows and Mac OS X as the filesystems on
those operating systems are usually case insensitive and set to &quot;yes&quot; for all
other operating systems. The default can be overriden, if desired.
<DT><B>NAMEMAX</B><DD>
Defines the maximum length of a filename component.  The value of the variable
is initialized at startup to the value of the compiled macro NAME_MAX.  On
some systems the value of NAME_MAX is too short by default.  Setting a new
value for NAMEMAX will override the compiled value.
<DT><B>.NOTABS</B><DD>
When set to &quot;yes&quot; enables the use of spaces as well as &lt;tabs&gt; to begin
recipe lines.
By default a non-group recipe is terminated by a line without any leading
white-space or by a line not beggining with a &lt;tab&gt; character.
Enabling this mode modifies the first condition of
the above termination rule to terminate a
non-group recipe with a line that contains only white-space.
This mode does not effect the parsing of group recipes bracketed by [].
<DT><B>AUGMAKE</B><DD>
If set to &quot;yes&quot; value will enable the transformation of special
meta targets to support special AUGMAKE inferences (See the &quot;AUGMAKE
META RULES&quot; and &quot;COMPATIBILITY&quot; sections).
<DT><B>DIRBRKSTR</B><DD>
Contains the string of chars used to terminate
the name of a directory in a pathname.
Under UNIX its value is &quot;/&quot;, under MSDOS its value is &quot;/\:&quot;.
<DT><B>DIRSEPSTR</B><DD>
Contains the string that is used to separate directory components when
path names are constructed.  It is defined with a default value at startup.
<DT><B>DIVFILE</B><DD>
Is defined in the startup file and gives the name that should be returned for
the diversion file name when used in
$(mktmp ...) expansions, see the TEXT DIVERSION section for details.
<DT><B>.KEEP_STATE</B><DD>
Assigning this macro a value tells
<B>dmake</B>

the name of the state file to use and turns on the keeping of state
information for any targets that are brought up to date by the make.
<DT><B>GROUPFLAGS</B><DD>
This macro gives the set of flags to pass to the shell when
invoking it to execute a group recipe.  The value of the macro is the
list of flags with a leading switch indicator.  (ie. `-' under UNIX)
<DT><B>GROUPSHELL</B><DD>
This macro defines the full
path to the executable image to be used as the shell when
processing group recipes.  This macro must be defined if group recipes are
used.  It is assigned a default value in the startup makefile.  Under UNIX
this value is /bin/sh.
<DT><B>GROUPSUFFIX</B><DD>
If defined, this macro gives the string to use as a suffix
when creating group recipe files to be handed to the command interpreter.
For example, if it is defined as .sh, then all
temporary files created by <B>dmake</B> will end in the suffix .sh.
Under MSDOS if you are using command.com as your GROUPSHELL, then this suffix
must be set to .bat in order for group recipes to function correctly.
The setting of GROUPSUFFIX and GROUPSHELL is done automatically for
command.com in the startup.mk files.
<DT><B>MAKE</B><DD>
Is defined in the startup file by default.
Initially this macro is defined to have the value &quot;$(MAKECMD) $(MFLAGS)&quot;.
The string $(MAKE) is recognized when using the -n switch.
<DT><B>MAKESTARTUP</B><DD>
This macro defines the full path to the initial startup
makefile.  Use the <B>-V</B> command line option to discover its initial
value.
<DT><B>MAXLINELENGTH</B><DD>
This macro defines the maximum size of a single line of
makefile input text.  The size is specified as a number, the default value
is defined internally and is shown via the <B>-V</B> option.
A buffer of this size plus 2 is allocated for reading makefile text.  The
buffer is freed before any targets are made, thereby allowing files containing
long input lines to be processed without consuming memory during the actual
make.
This macro can only be used to extend the line length beyond it's default
minimum value.
<DT><B>MAXPROCESS</B><DD>
Specify the maximum number of child processes to use when making targets.
The default value of this macro is &quot;1&quot; and its value cannot exceed the value
of the macro MAXPROCESSLIMIT.  Setting the value of MAXPROCESS on the command
line or in the makefile is equivalent to supplying a corresponding value to
the -P flag on the command line. If the global .SEQUENTIAL attribute is set
(or the -S command line switch is used) the value of MAXPROCESS is fixed
to &quot;1&quot; and cannot be changed.
<DT><B>PREP</B><DD>
This macro defines the number of iterations to be expanded
automatically when processing % rule definitions of the form:
<P>
% : %.suff
<P>
See the sections on PERCENT(%) RULES for details on how PREP is used.
<DT><B>SHELL</B><DD>
This macro defines the full path to the executable
image to be used as the shell when
processing single line recipes.  This macro must be defined if recipes
requiring the shell for execution are to be used.
It is assigned a default value in the startup makefile.
Under UNIX this value is /bin/sh.
<DT><B>SHELLFLAGS</B><DD>
This macro gives the set of flags to pass to the shell when
invoking it to execute a single line recipe.  The value of the macro is the
list of flags with a leading switch indicator.  (ie. `-' under UNIX)
<DT><B>SHELLMETAS</B><DD>
Each time
<B>dmake</B>

executes a single recipe line (not a group recipe) the line is
searched for any occurrence of a character defined in the value of SHELLMETAS.
If such a character is found the recipe line is defined to require a shell
to ensure its correct execution.  In such instances
a shell is used to invoke the recipe line.
If no match is found the recipe line is executed without the use of a shell.
<P>
</DL>
<P>

There is only one character valued macro defined by <B>dmake</B>:
<B>SWITCHAR</B> contains the switch character used
to introduce options on command lines.  For UNIX its value is `-', and for
MSDOS its value may be `/' or `-'.
The macro is internally defined and is not user setable.
The MSDOS version of <B>dmake</B> attempts to first extract SWITCHAR from an
environment variable of the same name.  If that fails it then attempts to
use the undocumented getswitchar system call, and returns the result of
that.  Under MSDOS version 4.0 you must set the value of the environment
macro SWITCHAR to '/' to obtain predictable behavior.
<P>

All boolean macros currently understood by 
<B>dmake</B>

correspond directly to the previously defined attributes.
These macros provide
a second way to apply global attributes, and represent the
preferred method of doing so.  They are used by assigning them a
value.  If the value is not a NULL string then the boolean condition
is set to on.
If the value is a NULL string then the condition is set to off.
There are five conditions defined and they correspond directly to the
attributes of the same name.  Their meanings are defined in the ATTRIBUTES
section above.
The macros are:
<B>.EPILOG</B>,
<B>.IGNORE</B>,
<B>.MKSARGS</B>,
<B>.NOINFER</B>,
<B>.PRECIOUS</B>,
<B>.PROLOG</B>,
<B>.SEQUENTIAL</B>,
<B>.SILENT</B>,
<B>.SWAP</B>, and
<B>.USESHELL</B>.
Assigning any of these a non NULL value will globally set
the corresponding attribute to on.
<A NAME="lbAR">&nbsp;</A>
<H2>RUNTIME MACROS</H2>

These macros are defined
when <B>dmake</B> is making targets, and may take on different values for each
target.  <B>$@</B> is defined to be the full target name, <B>$?</B> is the
list of all out of date prerequisites, <B>$&amp;</B> is the list of all
prerequisites, <B>$&gt;</B> is the name of the library if the current target is a
library member, and
<B>$&lt;</B> is the list of prerequisites specified in the current rule.
If the current target had a recipe inferred then <B>$&lt;</B> is the name of the
inferred prerequisite even if the target had a list of prerequisites supplied
using an explicit rule that did not provide a recipe.  In such situations
<B>$&amp;</B> gives the full list of prerequisites.
<P>

<B>$*</B> is defined as
<B>$(@:db)</B> when making targets with explicit recipes and is defined as the
value of % when making targets whose recipe is the result of an inference.
In the first case <B>$*</B> is the target name with no suffix,
and in the second case, is the value of the matched % pattern from
the associated %-rule.
<B>$^</B> expands to the set of out of date prerequisites taken from the
current value of <B>$&lt;</B>.
In addition to these,
<B>$$</B> expands to $, <B>{{</B> expands to {, <B>}}</B> expands to }, and the
strings <B>&lt;+</B> and <B>+&gt;</B> are recognized
as respectively starting and terminating a text diversion when they appear
literally together in the same input line.
<P>

The difference between $? and $^ can best be illustrated by an example,
consider:
<DL COMPACT><DT><DD>
<P>
<PRE>
fred.out : joe amy hello
	rules for making fred

fred.out : my.c your.h his.h her.h        # more prerequisites
</PRE>

<P>
</DL>

Assume joe, amy, and my.c are newer then fred.out.  When
<B>dmake</B>

executes the recipe for making fred.out the values of the following macros
will be:
<DL COMPACT><DT><DD>
<P>
<PRE>


<DL COMPACT>
<DT>$@<DD>--&gt; fred.out

<DT>$*<DD>--&gt; fred

<DT>$?<DD>--&gt; joe amy my.c  # note output of $? vs $^

<DT>$^<DD>--&gt; joe amy

<DT>$&lt;<DD>--&gt; joe amy hello

<DT>$&amp;<DD>--&gt; joe amy hello my.c your.h his.h her.h
</PRE>

<P>
</DL>
</DL>

<A NAME="lbAS">&nbsp;</A>
<H2>FUNCTION MACROS</H2>

<B>dmake</B>

supports a full set of functional macros.  One of these, the $(mktmp ...)
macro, is discussed in detail in the TEXT DIVERSION section and is not
covered here.
The names of function macros must appear literally after the opening $(
or ${. They are <B>not</B> recognized if they are the result of a recursive
expansion.
<P>

Note that some of these macros take comma separated parameters
but that these parameters must not contain literal whitespaces. Whitespaces
in macros used in these parameters are allowed.
<DL COMPACT><DT><DD>
<P>
<DL COMPACT>
<DT>$(<B>and</B> <B>macroterm ...</B>)<DD>
expands each <B>macroterm</B> in turn until there are no more or one of
them returns an empty string.  If all expand to non-empty strings the
macro returs the string &quot;t&quot; otherwise it returns an empty string.
<P>
<DT>$(<B>assign</B> <B>expression</B>)<DD>
Causes <I>expression</I> to be parsed as a macro assignment expression and results
in the specified assignment being made.  An error is issued if the assignment
is not syntatically correct.  <I>expression</I> may contain white space.  This is
in effect a dynamic macro assignment facility and may appear anywhere any
other macro may appear.  The result of the expanding a dynamic macro
assignment expression is the name of the macro that was assigned and $(NULL)
if the <I>expression</I> is not a valid macro assignment expression.
Some examples are:
<DL COMPACT><DT><DD>
<P>
<PRE>
$(assign foo := fred)
$(assign $(ind_macro_name) +:= $(morejunk))
</PRE>

</DL>

<DT>$(<B>echo</B> <B>list</B>)<DD>
Echo's the value of <I>list</I>.  <I>list</I> is not expanded.
<DT>$(<B>eq</B>,<I>text_a</I>,<I>text_b</I> <B>true</B> <B>false</B>)<DD>
expands
<I>text_a</I>

and
<I>text_b</I>

and compares their results.  If equal it returns the result of the expansion
of the 
<B>true</B>

term, otherwise it returns the expansion of the
<B>false</B>

term.
<DT>$(<B>!eq</B>,<I>text_a</I>,<I>text_b</I> <B>true</B> <B>false</B>)<DD>
Behaves identically to the previous macro except that the 
<B>true</B>

string is chosen if the expansions of the two strings are not equal
<DT>$(<B>foreach</B>,<I>var</I>,<I>list</I> <B>data</B>)<DD>
Implements iterative macro expansion over <I>data</I> using <B>var</B> as the
iterator taking on values from <I>list</I>. <I>var</I> and <I>list</I> are
expanded and the result is the concatenation of expanding <I>data</I> with
<I>var</I> being set to each whitespace separated token from <I>list</I>.
For example:
<DL COMPACT><DT><DD>
<DL COMPACT><DT><DD>
<P>
<PRE>
list = a b c
all :; echo [$(foreach,i,$(list) [$i])]
</PRE>

<P>
</DL>

will output
<DL COMPACT><DT><DD>
<P>
<PRE>
[[a] [b] [c]]
</PRE>

<P>
</DL>

The iterator variable is defined as a local variable to this foreach
instance.  The following expression illustrates this:
<DL COMPACT><DT><DD>
<P>
<PRE>
$(foreach,i,$(foreach,i,$(sort c a b) root/$i) [$i/f.h])
</PRE>

<P>
</DL>

when evaluated the result is:
<DL COMPACT><DT><DD>
<P>
<PRE>
[root/a/f.h] [root/b/f.h] [root/c/f.h]
</PRE>

<P>
</DL>

The specification of list must be a valid macro expression, such as:
<DL COMPACT><DT><DD>
<P>
<PRE>
$($(assign list=a b c))
$(sort d a b c)
$(echo a b c)
</PRE>

<P>
</DL>

and cannot just be the list itself.  That is, the following foreach
expression:
<DL COMPACT><DT><DD>
<P>
<PRE>
$(foreach,i,a b c [$i])
</PRE>

<P>
</DL>

yields:
<DL COMPACT><DT><DD>
<P>
<PRE>
&quot;b c [a]&quot;
</PRE>

<P>
</DL>

when evaluated.
</DL>

<DT>$(<B>nil</B> <B>expression</B>)<DD>
Always returns the value of $(NULL) regardless of what <I>expression</I> is.
This function macro can be used to discard results of expanding
macro expressions.
<DT>$(<B>not</B> <B>macroterm</B>)<DD>
expands <B>macroterm</B> and returs the string &quot;t&quot; if the result of the
expansion is the empty string; otherwise, it returns the empty string.
<DT>$(<B>null</B>,<I>text</I> <B>true</B> <B>false</B>)<DD>
expands the value of
<I>text.</I>

If it is NULL then the macro returns the value of the expansion of <B>true</B>
and the expansion of <B>false</B> otherwise.  The terms <B>true</B>, and
<B>false</B> must be strings containing no white-space.
<DT>$(<B>!null</B>,<I>text</I> <B>true</B> <B>false</B>)<DD>
Behaves identically to the previous macro except that the 
<B>true</B>

string is chosen if the expansion of
<I>text</I>

is not NULL.
<DT>$(<B>or</B> <B>macroterm ...</B>)<DD>
expands each <B>macroterm</B> in turn and returs the empty string if
each term expands to the empty string; otherwise, it returs the string
&quot;t&quot;.
<DT>$(<B>shell</B> <B>command</B>)<DD>
is a shell escape macro. It runs <I>command</I> as if it were part of a
recipe and returns, separated by a single space, all the non-white
space terms written to stdout by the command.
For example:
<DL COMPACT><DT><DD>
<DL COMPACT><DT><DD>
<P>
$(shell ls *.c)
<P>
</DL>

will return <I>&quot;a.c b.c c.c d.c&quot;</I> if the files exist in the current
directory.  The recipe modification flags <B>[+@%-]</B> are honored if they
appear as the first characters in the command.  For example:
<DL COMPACT><DT><DD>
<P>
$(shell +ls *.c)
<P>
</DL>

will run the command using the current shell.
<P>

<B>Note</B> that if the macro is part of a recipe it will be evaluated after
all previous recipe lines have been executed. For obvious reasons it will be
evaluated before the current recipe line or group recipe is executed.
</DL>

<DT>$(<B>shell,expand</B> <B>command</B>)<DD>
Is an extension to the <B>$(shell command)</B> function macro that expands the
result of running <B>command</B>.
<DT>$(<B>sort</B> <B>list</B>)<DD>
Will take all white-space separated tokens in <I>list</I> and will
return their sorted equivalent list.
<DT>$(<B>strip</B> <B>data</B>)<DD>
Will replace all strings of white-space in data by a single space.
<DT>$(<B>subst</B>,<I>pat</I>,<I>replacement</I> <B>data</B>)<DD>
Will search for <I>pat</I> in
<B>data</B>

and will replace any occurrence of
<I>pat</I>

with the
<I>replacement</I>

string.  The expansion
<DL COMPACT><DT><DD>
<P>
$(subst,.o,.c $(OBJECTS))
<P>
</DL>

is equivalent to:
<DL COMPACT><DT><DD>
<P>
$(OBJECTS:s/.o/.c/)
<P>
</DL>

<DT>$(<B>uniq</B> <B>list</B>)<DD>
Will take all white-space separated tokens in <I>list</I> and will
return their sorted equivalent list containing no duplicates.
<P>
</DL>
</DL>

For historic reasons <B>dmake</B> treats the following case slightly special:
<DL COMPACT><DT><DD>
<P>
$(<B>name</B> <B>something</B>)
<P>
</DL>

If it encounters a macro with a whitespace after <B>name</B> and <B>name</B>
is not literally one of the above mentioned function macro identifiers then
<B>dmake</B> will return the recursively expanded value of <B>$(name)</B>.
The remaining <B>something</B> part will be expanded but the result will be
discarded. The use of this special feature is deprecated and should not be
used.
<P>
<A NAME="lbAT">&nbsp;</A>
<H2>CONDITIONAL MACROS</H2>

<B>dmake</B>

supports conditional macros.  These allow the definition of target specific
macro values.  You can now say the following:
<DL COMPACT><DT><DD>
<P>
<B>target</B> ?= <I>MacroName MacroOp Value</I>
<P>
</DL>

This creates a definition for <I>MacroName</I> whose value is <I>Value</I>
only when <B>target</B> is being made.  You may use a conditional macro
assignment anywhere that a regular macro assignment may appear, including
as the value of a $(assign ...) macro.
<P>

The new definition is associated with the most recent cell definition
for <B>target</B>.  If no prior definition exists then one is created.  The
implications of this are immediately evident in the following example:
<P>
<DL COMPACT><DT><DD>
<PRE>
foo := hello

all : cond;@echo &quot;all done, foo=[$(foo)] bar=[$(bar)]&quot;

cond ?= bar := global decl

cond .SETDIR=unix::;@echo $(foo) $(bar)
cond ?= foo := hi

cond .SETDIR=msdos::;@echo $(foo) $(bar)
        cond ?= foo := hihi
</PRE>

</DL>

<P>
The first conditional assignment creates a binding for 'bar' that is
activated when 'cond' is made.  The bindings following the :: definitions are
activated when their respective recipe rules are used.  Thus the
first binding serves to provide a global value for 'bar' while any of the
cond :: rules are processed, and the local bindings for 'foo' come into
effect when their associated :: rule is processed.
<P>

Conditionals for targets of .UPDATEALL are all activated before the
target group is made.  Assignments are processed in order.  Note that
the value of a conditional macro assignment is NOT AVAILABLE until the
associated target is made, thus the construct
<P>
<DL COMPACT><DT><DD>
<PRE>
mytarget ?= bar := hello
mytarget ?= foo := $(bar)
</PRE>

</DL>

<P>
results in $(foo) expanding to &quot;&quot;, if you want the result to be &quot;hello&quot;
you must use:
<P>
<DL COMPACT><DT><DD>
<PRE>
mytarget ?= bar := hello
mytarget ?= foo  = $(bar)
</PRE>

</DL>

<P>
Once a target is made any associated conditional macros are deactivated
and their values are no longer available.  Activation occurrs after all
inference, and .SETDIR directives have been processed and after $@ is
assigned, but before prerequisites are processed; thereby making the values of
conditional macro definitions available during construction of prerequisites.
<P>

If a %-meta rule target has associated conditional macro assignments,
and the rule is chosen by the inference algorithm then the conditional
macro assignments are inferred together with the associated recipe.
<A NAME="lbAU">&nbsp;</A>
<H2>DYNAMIC PREREQUISITES</H2>

<B>dmake</B>

looks for prerequisites whose names contain macro expansions during target
processing.  Any such prerequisites are expanded and the result of the
expansion is used as the prerequisite name.  As an example the line:
<P>
	fred : $$@.c
<P>
causes the $$@ to be expanded when <B>dmake</B> is making fred, and it resolves
to the target <I>fred</I>.
This enables dynamic prerequisites to be generated.  The value
of @ may be modified by any of the valid macro modifiers.  So you can say for
example:
<P>
	fred.out : $$(@:b).c
<P>
where the $$(@:b) expands to <I>fred</I>.
Note the use of $$ instead of $ to indicate the dynamic expansion, this
is due to the fact that the rule line is expanded when it is initially parsed,
and $$ then returns $ which later triggers the dynamic prerequisite expansion.
Dynamic macro expansion is performed in all user defined rules, and the special
targets .SOURCE*, and .INCLUDEDIRS.
<P>

<B>NOTE:</B> The use of a <B>$</B> as part of a prerequisite or target name is
<B>strongly discouraged</B> as the runtime macros (like $@) are expanded when
used in a recipe line so that the $ is interpreted as a macro identifier and
not as a character of the filename leading to invalid runtime macros.
In addition to this no filename normalization is done for prerequisites and
targets that contain $ characters.
Nevertheless it is possible to use $ in prerequisites by using $$$$ but this
is <B>not recommended</B> and can lead to surprising results.
<P>

If dynamic macro expansion results in multiple white space separated tokens
then these are inserted into the prerequisite list inplace of the dynamic
prerequisite.  Due to the recursive nature of macro expansion the prerequisite
list is fully expanded even if the dynamic prerequisite contained other
runtime macros.
<A NAME="lbAV">&nbsp;</A>
<H2>BINDING TARGETS</H2>

This operation takes a target name and binds it to an existing file, if
possible.
<B>dmake</B>

makes a distinction between the internal target name of a target and its
associated external file name.
Thus it is possible for a target's internal name and its external
file name to differ.
To perform the binding, the following set of rules is used.
Assume that we are
trying to bind a target whose name is of the form <I>X.suff</I>,
where <I>.suff</I> is the suffix and <I>X</I> is the stem portion
(ie. that part which contains the directory and the basename).
<B>dmake</B>

takes this target name and performs a series of search operations that try to
find a suitably named file in the external file system.
The search operation is user controlled
via the settings of the various .SOURCE targets.
<DL COMPACT><DT><DD>
<DL COMPACT>
<DT>1.<DD>
If target has the .SYMBOL attribute set then look for it in the library.
If found, replace the target name with the library member name and continue
with step 2.  If the name is not found then return.
<DT>2.<DD>
Extract the suffix portion (that following the `.') of the target name.
If the suffix is not null, look up the special target .SOURCE.&lt;suff&gt;
(&lt;suff&gt; is the suffix).  
If the special target exists then search each directory given in
the .SOURCE.&lt;suff&gt; prerequisite list for the target.
If the target's suffix was null (ie. <I>.suff</I> was empty) then 
perform the above search but use the special target .SOURCE.NULL instead.
If at any point a match is found then terminate the search.
If a directory in the prerequisite list is the special name `.NULL ' perform
a search for the full target name without prepending any directory portion
(ie. prepend the NULL directory).
<DT>3.<DD>
The search in step 2. failed.  Repeat the same search but this time
use the special target .SOURCE.
(a default target of '.SOURCE : .NULL' is defined by <B>dmake</B> at startup,
and is user redefinable)
<DT>4.<DD>
The search in step 3. failed.
If the target has the library member attribute (.LIBMEMBER)
set then try to find the target in the library which was passed along
with the .LIBMEMBER attribute (see the MAKING LIBRARIES section).
The bound file name assigned to a target which is successfully
located in a library is the same name that would be assigned had the search
failed (see 5.).
<DT>5.<DD>
The search failed.  Either the target was not found in any of the search
directories or no applicable .SOURCE special targets exist.
If applicable .SOURCE special targets exist, but the target was not found,
then <B>dmake</B> assigns the first name searched as the bound file name.
If no applicable .SOURCE special targets exist,
then the full original target name becomes the bound file name.
</DL>
</DL>

<P>

There is potential here for a lot of search operations.  The trick is to
define .SOURCE.x special targets with short search lists and leave .SOURCE
as short as possible.
The search algorithm has the following useful side effect.
When a target having the .LIBMEMBER (library member) attribute is searched for,
it is first searched for as an ordinary file.
When a number of library members require updating it is desirable to compile
all of them first and to update the library at the end in a single operation.
If one of the members does not compile and <B>dmake</B> stops, then
the user may fix the error and make again.  <B>dmake</B> will not remake any
of the targets whose object files have already been generated as long as
none of their prerequisite files have been modified as a result of the fix.
<P>

When <B>dmake</B> constructs target (and prerequisite) pathnames they are
normalized  to the shortest (or most natural, see below for the cygwin case)
representation.  Substrings like './' or of the form 'baz/..' are removed.
For example &quot;./foo&quot;, &quot;bar/../foo&quot; and foo are recognized as the same file.
This may result in somewhat unexpected values of the macro expansion
of runtime macros like <B>$@</B>, but is infact the corect result.
<P>

<B>NOTE:</B>  A cygwin <B>dmake</B> executable will accept DOS like pathnames
with drive letters and cygwin POSIX pathnames and normalize them into its
natural POSIX representation.  This might result in even more surprising
values of runtime macros.
<P>

When defining .SOURCE and .SOURCE.x targets the construct
<DL COMPACT><DT><DD>
<P>
.SOURCE :
<BR>

.SOURCE : fred gery
<P>
</DL>

is equivalent to
<DL COMPACT><DT><DD>
<P>
.SOURCE :- fred gery
</DL>

<P>

<B>dmake</B> correctly handles the UNIX Make variable VPATH.  By definition VPATH
contains a list of ':' separated directories to search when looking for a
target.  <B>dmake</B> maps VPATH to the following special rule:
<DL COMPACT><DT><DD>
<P>
.SOURCE :^ $(VPATH:s/:/ /)
<P>
</DL>

Which takes the value of VPATH and sets .SOURCE to the same set of directories
as specified in VPATH.
<A NAME="lbAW">&nbsp;</A>
<H2>PERCENT(%) RULES AND MAKING INFERENCES</H2>

When <B>dmake</B> makes a target, the target's set of prerequisites (if any)
must exist and the target must have a recipe which <B>dmake</B>
can use to make it.
If the makefile does not specify an explicit recipe for the target then
<B>dmake</B>

uses special rules to try to infer a recipe which it can use
to make the target.  Previous versions of Make perform this task by using
rules that are defined by targets of the form .&lt;suffix&gt;.&lt;suffix&gt; (this is still
supported, see &quot;AUGMAKE META RULES&quot;) or by using the <B>not supported</B> by
dmake .SUFFIXES list of suffixes (see &quot;SPECIAL TARGETS&quot; for more details
about .SUFFIXES).  The exact workings of this mechanism
were sometimes difficult to understand and often limiting in their usefulness.
Instead, <B>dmake</B> supports the concept of <I>%-meta</I> rules.  
The syntax and semantics of these rules differ from standard rule lines as
follows:
<P>
<PRE>
<DL COMPACT><DT><DD><I>&lt;%-targets&gt;</I> [<I>&lt;attributes&gt;</I>] <I>&lt;ruleop&gt;</I> [<I>&lt;%-prereqs&gt;</I>] [;<I>&lt;recipe&gt;</I>]
</DL>
</PRE>

<P>
where <I>%-targets</I> are one or more targets containing exactly a single `%'
sign,
<I>attributes</I>

is a list (possibly empty) of attributes,
<I>ruleop</I>

is the standard set of rule operators,
<I>%-prereqs</I>

, if present, is a list of prerequisites containing zero or more `%' signs,
and
<I>recipe,</I>

if present, is the first line of the recipe.
<P>

If more than one %-target is present this line is equivalent to a repetition
of the whole [&lt;attributes&gt;] &lt;ruleop&gt; [&lt;%-prereqs&gt;] [;&lt;recipe&gt;] sequence
for each %-target, i.e. it is possible to specify the same rule for multiple
%-targets. Because of this following only speaks about <I>&lt;%-target&gt;</I> as
<I>%-targets</I> are divided into multiple definitions with a single %-target.
<P>

<B>NOTE:</B>  As multiple %-targets didn't work reliably with dmake versions prior
to 4.5 unless the rule operator `|:' was used we currently issue a warning
stating that it <B>now</B> works.
<P>

The
<I>%-target</I>

defines a pattern against which a target whose recipe is
being inferred gets matched.  The pattern match goes as follows:  all chars are
matched exactly from left to right up to but not including the % sign in the
pattern, % then matches the longest string from the actual target name
not ending in
the suffix given after the % sign in the pattern.
Consider the following examples:
<DL COMPACT><DT><DD>
<P>
<PRE>


<DL COMPACT>
<DT>%.c<DD>matches fred.c but not joe.c.Z

<DT>dir/%.c<DD>matches dir/fred.c but not dd/fred.c

<DT>fred/%<DD>matches fred/joe.c but not f/joe.c

<DT>%<DD>matches anything
</PRE>

<P>
</DL>
</DL>

In each case the part of the target name that matched the % sign is retained
and is substituted for any % signs in the prerequisite list of the %-meta rule
when the rule is selected during inference and
<B>dmake</B>

constructs the new dependency.
<P>

<B>Please note,</B>

that currently only the first, non-indirect, prerequisite of the
list is used and all other non-indirect prerequisites are ignored.
<P>

As an example the following %-meta rules describe the following:
<DL COMPACT><DT><DD>
<P>
%.c : %.y ; recipe...
<P>
</DL>

describes how to make any file ending in .c if a corresponding file ending
in .y can be found.
<DL COMPACT><DT><DD>
<P>
foo%.o : fee%.k ; recipe...
<P>
</DL>

is used to describe how to make fooxxxx.o from feexxxx.k.
<DL COMPACT><DT><DD>
<P>
%.a :; recipe...
<P>
</DL>

describes how to make a file whose suffix is .a without inferring any
prerequisites.
<DL COMPACT><DT><DD>
<P>
%.c : %.y yaccsrc/%.y ; recipe...
<P>
</DL>

should match the corresponding .y file and another .y file in the yaccsrc
subdirectory. (Currently only the first prerequisite is used.)
Another interesting example is:
<DL COMPACT><DT><DD>
<P>
% : RCS/%,v ; co $&lt;
<P>
</DL>

which describes how to take any target and check it out of
the RCS directory if the corresponding file exists in the RCS directory.
The equivalent SCCS rule would be:
<DL COMPACT><DT><DD>
<P>
% : s.% ; get $&lt;
<P>
</DL>

<P>

The previous RCS example defines an infinite rule, because it says how to make
<I>anything</I>

from RCS/%,v, and
<I>anything</I>

also includes RCS/fred.c,v.
To limit the size of the graph that results from such rules
<B>dmake</B>

uses the macro variable PREP (stands for % repetition).  By default the value
of this variable is 0, which says that no repetitions of a %-rule are to be
generated.  If it is set to something greater than 0, then that many
repetitions of any infinite %-rule are allowed.  If in the above
example PREP was set to 1, then <B>dmake</B> would generate the dependency
graph:
<DL COMPACT><DT><DD>
<P>
% --&gt; RCS/%,v --&gt; RCS/RCS/%,v,v
<P>
</DL>

Where each link is assigned the same recipe as the first link.
PREP should be used only in special cases, since it may result in
a large increase in the number of possible prerequisites tested.
<B>dmake</B>

further assumes that any target that has no suffix can be made from
a prerequisite that has at least one suffix.
<P>

<B>dmake</B>

supports dynamic prerequisite generation for prerequisites of %-meta rules.
This is best illustrated by an example.  The RCS rule shown above can infer
how to check out a file from a corresponding RCS file only if the target
is a simple file name with no directory information.  That is, the above rule
can infer how to find <I>RCS/fred.c,v</I> from the target <I>fred.c</I>,
but cannot infer how to find <I>srcdir/RCS/fred.c,v</I> from <I>srcdir/fred.c</I>
because the above rule will cause <B>dmake</B> to look for RCS/srcdir/fred.c,v;
which does not exist (assume that srcdir has its own RCS directory as is the
common case).
<P>

A more versatile formulation of the above RCS check out rule is the following:
<DL COMPACT><DT><DD>
<P>
% :  $$(@:d)RCS/$$(@:f),v : co $@
<P>
</DL>

This rule uses the dynamic macro $@ to specify the prerequisite to try to
infer.  During inference of this rule the macro $@ is set to the value of
the target of the %-meta rule and the appropriate prerequisite is generated by
extracting the directory portion of the target name (if any), appending the
string <I>RCS/</I> to it, and appending the target file name with a trailing
<I>,v</I> attached to the previous result.
<P>

<B>dmake</B>

can also infer indirect prerequisites.
An inferred target can have a list of prerequisites added that will not
show up in the value of $&lt; but will show up in the value of $? and $&amp;.
Indirect prerequisites are specified in an inference rule by quoting the
prerequisite with single quotes.  For example, if you had the explicit
dependency:
<DL COMPACT><DT><DD>
<P>
<PRE>
fred.o : fred.c ; rule to make fred.o
fred.o : local.h
</PRE>

<P>
</DL>

then this can be inferred for fred.o from the following inference rule:
<DL COMPACT><DT><DD>
<P>
%.o : %.c 'local.h' ; makes a .o from a .c
<P>
</DL>

You may infer indirect prerequisites that are a function of the value of '%'
in the current rule.  The meta-rule:
<DL COMPACT><DT><DD>
<P>
%.o : %.c '$(INC)/%.h' ; rule to make a .o from a .c
<P>
</DL>

infers an indirect prerequisite found in the INC directory whose name is the
same as the expansion of $(INC), and the prerequisite name depends on the
base name of the current target.
The set of indirect prerequisites is attached to the meta rule in which they
are specified and are inferred only if the rule is used to infer a recipe
for a target.  They do not play an active role in driving the inference
algorithm.
The construct:
<DL COMPACT><DT><DD>
<P>
%.o : %.c %.f 'local.h'; recipe
<P>
</DL>

is (currently) equivalent to:
<DL COMPACT><DT><DD>
<P>
<PRE>
%.o : %.c 'local.h' ; recipe
</PRE>

<P>
</DL>

because the second prerequisite is ignored, while:
<DL COMPACT><DT><DD>
<P>
%.o :| %.c %.f 'local.h'; recipe
<P>
</DL>

is equivalent to:
<DL COMPACT><DT><DD>
<P>
<PRE>
%.o : %.c 'local.h' ; recipe
%.o : %.f 'local.h' ; recipe
</PRE>

<P>
</DL>

<P>

If any of the attributes .SETDIR, .EPILOG, .PROLOG, .SILENT,
.USESHELL, .SWAP, .PRECIOUS, .LIBRARY, .NOSTATE and .IGNORE
are given for a %-rule then when that rule is bound to a target
as the result of an inference, the target's set of attributes is augmented by
the attributes from the above set that are specified in the bound %-rule.
Other attributes specified for %-meta rules are not inherited by the target.
The .SETDIR attribute is treated in a special way.
If the target already had a .SETDIR attribute set then
<B>dmake</B>

changes to that directory prior to performing the inference.
During inference any .SETDIR attributes for the inferred prerequisite
are honored.
The directories must exist for a %-meta rule to be selected as a possible
inference path.  If the directories do not exist no error message is issued,
instead the corresponding path in the inference graph is rejected.
<P>

<B>dmake</B>

bases all of its inferences on the inference graph constructed from the
%-rules defined in the makefile.
It knows exactly which targets can be made from which prerequisites by
making queries on the inference graph.
<P>

For a %-meta rule to be inferred as the
rule whose recipe will be used to make a target, the target's name must match
the %-target pattern, and any inferred %-prerequisite must already exist or
have an explicit recipe so that the prerequisite can be made.
Without <I>transitive closure</I> on the inference graph the above rule
describes precisely when an inference match terminates the search.
If transitive closure is enabled (the usual case), and a prerequisite does
not exist or cannot be made, then
<B>dmake</B>

invokes the inference algorithm recursively on the prerequisite to see if
there is some way the prerequisite can be manufactured.  For, if the
prerequisite can be made then the current target can also be made using the
current %-meta rule.
This means that there is no longer a need to give a rule
for making a .o from a .y if you have already given a rule for making a .o
from a .c and a .c from a .y.  In such cases
<B>dmake</B>

can infer how to make the
.o from the .y via the intermediary .c and will remove the .c when the .o is
made.  Transitive closure can be disabled by giving the -T switch on the
command line.
<P>

A word of caution.
<B>dmake</B>

bases its transitive closure on the %-meta rule targets.
When it performs transitive closure it infers how to make a target from a
prerequisite by performing a pattern match as if the potential prerequisite
were a new target.
The set of rules:
<DL COMPACT><DT><DD>
<PRE>

%.o : %.c ; rule for making .o from .c
%.c : %.y ; rule for making .c from .y
% : RCS/%,v ; check out of RCS file
</PRE>

<P>
</DL>

will, by performing transitive closure, allow <B>dmake</B> to infer how to make
a .o from a .y using a .c as an intermediate temporary file.  Additionally
it will be able to infer how to make a .y from an RCS file, as long as that
RCS file is in the RCS directory and has a name which ends in .y,v.
The transitivity computation is performed dynamically for each target that
does not have a recipe.  This has potential to be costly if the %-meta
rules are not carefully specified.  The .NOINFER attribute is used to mark
a %-meta node as being a final target during inference.  Any node with this
attribute set will not be used for subsequent inferences.  As an example
the node RCS/%,v is marked as a final node since we know that if the RCS file
does not exist there likely is no other way to make it.  Thus the standard
startup makefile contains an entry similar to:
<DL COMPACT><DT><DD>
<PRE>
.NOINFER : RCS/%,v
</PRE>

</DL>

Thereby indicating that the RCS file is the end of the inference chain.
Whenever the inference algorithm determines that a target can be made from
more than one prerequisite and the inference chains for the two methods
are the same length the algorithm reports an ambiguity and prints the
ambiguous inference chains.
<P>

<B>dmake</B>

tries to
remove intermediate files resulting from transitive closure if the file
is not marked as being PRECIOUS, or the <B>-u</B> flag was not given on the
command line, and if the inferred intermediate did not previously exist.
Intermediate targets that existed prior to being made are never removed.
This is in keeping with the philosophy that
<B>dmake</B>

should never remove things from the file system that it did not add.
If the special target .REMOVE is defined and has a recipe then
<B>dmake</B>

constructs a list of the intermediate files to be removed and makes them
prerequisites of .REMOVE.  It then makes .REMOVE thereby removing the
prerequisites if the recipe of .REMOVE says to.  Typically .REMOVE is defined
in the startup file as:
<DL COMPACT><DT><DD>
<P>
.REMOVE :; $(RM) $&lt;
</DL>

<A NAME="lbAX">&nbsp;</A>
<H2>AUGMAKE META RULES</H2>

As a subclass of the meta targets that is actually mapped to %-meta rules
<B>dmake</B>

understands several SYSV AUGMAKE targets transformations. This .&lt;suffix&gt;
special target construct transforms into the following %-meta rules:
<DL COMPACT><DT><DD>
<P>
.suff :; recipe
<P>
</DL>

gets mapped into:
<DL COMPACT><DT><DD>
<P>
% : %.suff; recipe
<P>
</DL>

<P>

<B>dmake</B>

also supports the old format special target .&lt;suffix&gt;.&lt;suffix&gt;
by identifying any rules
of this form and mapping them to the appropriate %-rule.  So for example if
an old makefile contains the construct:
<DL COMPACT><DT><DD>
<P>
.c.o :; cc -c $&lt; -o $@
<P>
</DL>

<B>dmake</B>

maps this into the following %-rule:
<DL COMPACT><DT><DD>
<P>
%.o : %.c; cc -c $&lt; -o $@
<P>
</DL>

The following SYSV AUGMAKE special targets transformation must be
enabled by providing the -A flag
on the command line or by setting the value of AUGMAKE to non-NULL.
The construct
<DL COMPACT><DT><DD>
<P>
.c~.o :; recipe
<P>
</DL>

gets mapped into:
<DL COMPACT><DT><DD>
<P>
%.o : s.%.c ; recipe
<P>
</DL>

In general, a special target of the form .&lt;str&gt;~ is replaced by the %-rule
construct s.%.&lt;str&gt;, thereby providing support for the syntax used by SYSV
AUGMAKE for providing SCCS support.
When enabled, these mappings allow processing of existing SYSV
makefiles without modifications.

<A NAME="lbAY">&nbsp;</A>
<H2>MAKING TARGETS</H2>

In order to update a target <B>dmake</B> must execute a recipe.
When a recipe needs to be executed it is first expanded so that any macros
in the recipe text are expanded, and it is then either executed directly or
passed to a shell.
<B>dmake</B>

supports two types of recipes.  The regular recipes and group recipes.
<P>

When a regular recipe is invoked <B>dmake</B> executes each line of the recipe
separately using a new copy of a shell if a shell is required.
Thus effects of commands do not generally persist across recipe lines
(e.g. cd requests in a recipe line do not carry over to the next recipe line).
This is true even in environments such as <B>MSDOS</B>, where dmake internally
sets the current working director to match the directory it was in before
the command was executed.
<P>

The decision on whether a shell is required to execute a command is based on
the value of the macro SHELLMETAS or on the specification of '+' or .USESHELL
for the current recipe or target respectively.
If any character in the value of
SHELLMETAS is found in the expanded recipe text-line or the use of a shell
is requested explicitly via '+' or .USESHELL then the command is
executed using a shell, otherwise the command is executed directly.
The shell that is used for execution is given by the value of the macro SHELL.
The flags that are passed to the shell are given by the value of SHELLFLAGS.
Thus <B>dmake</B> constructs the command line:
<P>
	$(SHELL) $(SHELLFLAGS) $(expanded_recipe_command)
<P>
Normally
<B>dmake</B>

writes the command line that it is about to invoke to standard output.
If the .SILENT attribute is set for the target or for
the recipe line (via @), then the recipe line is not echoed.
<P>

Group recipe processing is similar to that of regular recipes, except that
a shell is always invoked.  The shell that is invoked is given by the value of
the macro GROUPSHELL, and its flags are taken from the value of the macro
GROUPFLAGS.  If a target has the .PROLOG attribute set then
<B>dmake</B>

prepends to the shell script the recipe associated with the special target
.GROUPPROLOG, and if the attribute .EPILOG is set as well, then the recipe
associated with the special target .GROUPEPILOG is appended to the script
file.
This facility can be used to always prepend a common header and common trailer
to group recipes.
Group recipes are echoed to standard output just like standard recipes, but
are enclosed by lines beginning with [ and ].
<P>

The recipe flags [+,-,%,@] are recognized at the start of a recipe line
even if they appear in a macro.  For example:
<DL COMPACT><DT><DD>
<P>
<PRE>
SH = +
all:
	$(SH)echo hi
</PRE>

<P>
</DL>

is completely equivalent to writing
<DL COMPACT><DT><DD>
<P>
<PRE>
SH = +
all:
	+echo hi
</PRE>

<P>
</DL>

<P>

The last step performed by
<B>dmake</B>

prior to running a recipe is to set the macro CMNDNAME to the name of the
command to execute (determined by finding the first white-space ending token
in the command line).  It then sets the macro CMNDARGS to be the remainder
of the line.
<B>dmake</B>

then expands the macro COMMAND which by default is set to
<DL COMPACT><DT><DD>
<P>
COMMAND = $(CMNDNAME) $(CMNDARGS)
<P>
</DL>

The result of this final expansion is the command that will be executed.
The reason for this expansion is to allow for a different interface to
the argument passing facilities (esp. under DOS) than that provided by
<B>dmake</B>.

You can for example define COMMAND to be
<DL COMPACT><DT><DD>
<P>
COMMAND = $(CMNDNAME) @$(mktmp $(CMNDARGS))
<P>
</DL>

which dumps the arguments into a temporary file and runs the command
<DL COMPACT><DT><DD>
<P>
$(CMNDNAME) @/tmp/ASAD23043
<P>
</DL>

which has a much shorter argument list.  It is now up to the command to
use the supplied argument as the source for all other arguments.
As an optimization, if COMMAND is not defined
<B>dmake</B>

does not perform the above expansion.  On systems, such as UNIX, that
handle long command lines this provides a slight saving in processing the
makefiles.
<A NAME="lbAZ">&nbsp;</A>
<H2>MAKING LIBRARIES</H2>

Libraries are easy to maintain using <B>dmake</B>.  A library is a file
containing a collection of object files.
Thus to make a library you simply specify it as a target with the .LIBRARY
attribute set and specify its list of prerequisites.  The prerequisites should
be the object members that are to go into the library.  When
<B>dmake</B>

makes the library target it uses the .LIBRARY attribute to pass to the
prerequisites the .LIBMEMBER attribute and the name of the library.  This
enables the file binding mechanism to look for the member in the library if an
appropriate object file cannot be found. 
<B>dmake</B>

now supports <B>Elf</B> libraries on systems that support <B>Elf</B> and
hence supports, on those systems, long member file names.
A small example best illustrates this.
<DL COMPACT><DT><DD>
<PRE>

mylib.a .LIBRARY : mem1.o mem2.o mem3.o
	rules for making library...
	# remember to remove .o's when lib is made

# equivalent to:  '%.o : %.c ; ...'
.c.o :; rules for making .o from .c say

</PRE>

</DL>

<B>dmake</B>

will use the .c.o rule for making the library members if appropriate .c files
can be found using the search rules.  NOTE:  this is not specific in any way
to C programs, they are simply used as an example.
<P>

<B>dmake</B>

tries to handle the old library construct format in a sensible way.
The construct 
<I>lib(member.o)</I>

is separated and the <I>lib</I> portion is declared
as a library target.
The new target is defined
with the .LIBRARY attribute set and the <I>member.o</I> portion of the
construct is
declared as a prerequisite of the lib target.
If the construct <I>lib(member.o)</I>
appears as a prerequisite of a target in the
makefile, that target has the new name of the lib assigned as its
prerequisite.  Thus the following example:
<DL COMPACT><DT><DD>
<P>
<PRE>
a.out : ml.a(a.o) ml.a(b.o); $(CC) -o $@  $&lt;

.c.o :; $(CC) -c $(CFLAGS) -o $@  $&lt;
%.a:
<DL COMPACT><DT><DD>ar rv $@ $?
ranlib $@
rm -rf $?
</DL>

</PRE>

</DL>

constructs the following dependency
graph.
<DL COMPACT><DT><DD>
<P>
<PRE>
a.out : ml.a; $(CC) -o $@  $&lt;
ml.a .LIBRARY : a.o b.o

%.o : %.c ; $(CC) -c $(CFLAGS) -o $@  $&lt;
%.a :
<DL COMPACT><DT><DD>ar rv $@ $?
ranlib $@
rm -rf $?
</DL>

</PRE>

</DL>

and making a.out then works as expected.
<P>

The same thing happens for any target of the form <I>lib((entry))</I>.
These targets have an
additional feature in that the <I>entry</I> target has the .SYMBOL attribute
set automatically.
<P>

NOTE:  If the notion of entry points is supported by the archive and by
<B>dmake</B> (currently not the case) then
<B>dmake</B>

will search the archive for the entry point and return not only the
modification time of the member which defines the entry but also the name of
the member file.  This name will then replace <I>entry</I> and will be used for
making the member file.  Once bound to an archive member the .SYMBOL
attribute is removed from the target.
This feature is presently disabled as there is little standardization
among archive formats, and we have yet to find a makefile utilizing this
feature (possibly due to the fact that it is unimplemented in most versions
of UNIX Make).
<P>

Finally, when
<B>dmake</B>

looks for a library member it must first locate the library file.
It does so by first looking for the library relative to the current directory
and if it is not found it then looks relative to the current value of
$(TMD).  This allows commonly used libraries to be kept near the root of
a source tree and to be easily found by
<B>dmake</B>.

<A NAME="lbBA">&nbsp;</A>
<H2>KEEP STATE</H2>

<B>dmake</B>

supports the keeping of state information for targets that it makes whenever
the macro .KEEP_STATE is assigned a value.  The value of the macro should be
the name of a state file that will contain the state information.  If state
keeping is enabled then each target that does not poses the .NOSTATE
attribute will have a record written into the state file indicating the
target's name, the current directory, the command used to update the target,
and which, if any, :: rule is being used.  When you make this target again
if any of this information does not match the previous settings and the
target is not out dated it will still be re-made.  The assumption is that one
of the conditions above has changed and that we wish to remake the target.
For example,
state keeping is used in the maintenance of
<B>dmake</B>

to test compile different versions of the source using different compilers.
Changing the compiler causes the compilation flags to be modified and hence
all sources to be recompiled.
<P>

The state file is an ascii file and is portable, however it is
not in human readable form as the entries represent hash keys of the above
information.
<P>

The Sun Microsystem's Make construct
<DL COMPACT><DT><DD>
<P>
.KEEP_STATE :
<P>
</DL>

is recognized and is mapped to <B>.KEEP_STATE:=_state.mk</B>.
The
<B>dmake</B>

version of state keeping does not include scanning C source files for
dependencies like Sun Make.  This is specific to C programs and it was
felt that it does not belong in make.
<B>dmake</B>

instead provides the tool, <B>cdepend</B>, to scan C source files and to produce
depedency information.  Users are free to modify cdepend to produce other
dependency files.  (NOTE:
<B>cdepend</B>

does not come with the distribution at this time, but will be available in
a patch in the near future)
<A NAME="lbBB">&nbsp;</A>
<H2>MULTI PROCESSING</H2>

If the architecture supports it then <B>dmake</B> is capable of making a target's
prerequisites in parallel.  <B>dmake</B> will make as much in parallel as it
can and use a number of child processes up to the maximum specified by
MAXPROCESS or by the value supplied to the -P command line flag.
A parallel make is enabled by setting the value of MAXPROCESS (either directly
or via -P option) to a value which is &gt; 1.
<B>dmake</B> guarantees that all dependencies as specified in the makefile are
honored.  A target will not be made until all of its prerequisites have been
made.  Note that when you specify <B>-P 4</B> then four child processes are
run concurrently but <B>dmake</B> actually displays the fifth command it will
run immediately upon a child process becomming free.  This is an artifact of
the method used to traverse the dependency graph and cannot be removed.
If a parallel make is being performed then the following restrictions on
parallelism are enforced.
<DL COMPACT><DT><DD>
<DL COMPACT>
<DT>1.<DD>
Individual recipe lines in a non-group recipe are performed sequentially in
the order in which they are specified within the makefile and in parallel with
the recipes of other targets.
<DT>2.<DD>
If a target contains multiple recipe definitions (cf. :: rules) then these are
performed sequentially in the order in which the :: rules are specified within
the makefile and in parallel with the recipes of other targets.
<DT>3.<DD>
If a target rule contains the `!' modifier, then the recipe is performed
sequentially for the list of outdated prerequisites and in parallel with the recipes of other targets.
<DT>4.<DD>
If a target has the .SEQUENTIAL attribute set then all of its prerequisites
are made sequentially relative to one another (as if MAXPROCESS=1), but in
parallel with other targets in the makefile.
</DL>
</DL>

<P>

Note:  If you specify a parallel make then
the order of target update and the order in which the associated recipes are
invoked will not correspond to that displayed by the -n flag.
<A NAME="lbBC">&nbsp;</A>
<H2>CONDITIONALS</H2>

<B>dmake</B>

supports a makefile construct called a <I>conditional</I>.  It allows
the user
to conditionally select portions of makefile text for input processing
and to discard other portions.  This becomes useful for
writing makefiles that are intended to function for more than one target
host and environment.  The conditional expression is specified as follows:
<P>
<DL COMPACT><DT><DD>
<PRE>
.IF  <I>expression</I>
   ... if text ...
.ELIF  <I>expression</I>
   ... if text ...
.ELSE
   ... else text ...
.END
</DL>
</PRE>

<P>
The .ELSE and .ELIF portions are optional, and the conditionals may be
nested (ie.  the text may contain another conditional).
.IF, .ELSE, and .END
may appear anywhere in the makefile, but a single conditional expression
may not span multiple makefiles.
<P>

<I>expression</I> can be one of the following forms:
<P>
String evaluation
<BR>

	&lt;text&gt; | &lt;text&gt; == &lt;text&gt; | &lt;text&gt; != &lt;text&gt;
<P>
Numeric evaluation
<BR>

	&lt;text&gt; &lt;= &lt;text&gt; | &lt;text&gt; &gt;= &lt;text&gt;
<P>
Boolean evaluation
<BR>

	( &lt;text&gt; ) | &lt;text&gt; || &lt;text&gt; | &lt;text&gt; &amp;&amp; &lt;text&gt;
<P>
where <I>text</I> is either text or a macro expression.  In any case,
before the comparison is made, the expression is expanded.  The text
portions are then selected and compared.  In the case of the numeric
comparisons enclosing quotes are removed after expanding the expressions
and the leading numerical parts are converted to an integer number. If no
numerical part is found this results to 0 (zero). The
string &quot;12ab&quot; for example evaluates to the number 12.
Expressions can be nested with () and the use of || or &amp;&amp;.
White space at the start and
end of the text portion is discarded before the comparison.  This means
that a macro that evaluates to nothing but white space is considered a
NULL value for the purpose of the comparison.
In the first case the expression evaluates TRUE if the text is not NULL
otherwise it evaluates FALSE.  The remaining two cases both evaluate the
expression on the basis of a string comparison.
If a macro expression needs to be equated to a NULL string then compare it to
the value of the macro $(NULL).
You can use the $(shell ...) macro to construct more complex test expressions.
<A NAME="lbBD">&nbsp;</A>
<H2>EXAMPLES</H2>

<DL COMPACT><DT><DD>
<PRE>

# A simple example showing how to use make
#
prgm : a.o b.o
        cc a.o b.o -o prgm
a.o : a.c g.h
        cc a.c -o $@
b.o : b.c g.h
        cc b.c -o $@
</PRE>

</DL>

<P>
In the previous
example prgm is remade only if a.o and/or b.o is out of date with
respect to prgm.
These dependencies can be stated more concisely
by using the inference rules defined in the standard startup file.
The default rule for making .o's from .c's looks something like this:
<P>
	%.o : %.c; cc -c $(CFLAGS) -o $@ $&lt;
<P>
Since there exists a rule (defined in the startup file)
for making .o's from .c's
<B>dmake</B> will use that rule
for manufacturing a .o from a .c and we can specify our dependencies
more concisely.
<P>
<DL COMPACT><DT><DD>
<PRE>
prgm : a.o b.o
        cc -o prgm $&lt;
a.o b.o : g.h
</PRE>

</DL>

<P>
A more general way to say the above using the new macro expansions
would be:
<P>
<DL COMPACT><DT><DD>
<PRE>
SRC = a b
OBJ = {$(SRC)}.o

prgm : $(OBJ)
        cc -o $@ $&lt;

$(OBJ) : g.h
</PRE>

</DL>

<P>
If we want to keep the objects in a separate directory, called
objdir, then we would write
something like this.
<P>
<DL COMPACT><DT><DD>
<PRE>
SRC = a b
OBJ = {$(SRC)}.o

prgm : $(OBJ)
        cc $&lt; -o $@

$(OBJ) : g.h
%.o : %.c
        $(CC) -c $(CFLAGS) -o $(@:f) $&lt;
        mv $(@:f) objdir

.SOURCE.o : objdir   # tell dmake to look here for .o's
</PRE>

</DL>

<P>
An example of building library members would go something like this:
(NOTE:  The same rules as above will be used to produce .o's from .c's)
<P>
<DL COMPACT><DT><DD>
<PRE>
SRC	= a b
LIB	= lib
LIBm	= { $(SRC) }.o

prgm: $(LIB)
        cc -o $@ $(LIB)

$(LIB) .LIBRARY : $(LIBm)
        ar rv $@ $&lt;
        rm $&lt;
</PRE>

</DL>

<P>
Finally, suppose that each of the source files in the previous example had
the `:' character in their target name.  Then we would write the above example
as:
<P>
<DL COMPACT><DT><DD>
<PRE>
SRC	= f:a f:b
LIB	= lib
LIBm	= &quot;{ $(SRC) }.o&quot;         # put quotes around each token

prgm: $(LIB)
        cc -o $@ $(LIB)

$(LIB) .LIBRARY : $(LIBm)
        ar rv $@ $&lt;
        rm $&lt;
</PRE>

</DL>

<A NAME="lbBE">&nbsp;</A>
<H2>COMPATIBILITY</H2>

There are two notable differences between 
<B>dmake</B>

and the standard version of BSD UNIX 4.2/4.3 Make.
<DL COMPACT><DT><DD>
<DL COMPACT>
<DT>1.<DD>
BSD UNIX 4.2/4.3 Make supports wild card filename expansion for
prerequisite names.  Thus if a directory contains a.h, b.h and c.h, then a
line like
<P>
	target: *.h
<P>
will cause UNIX make to expand the *.h into &quot;a.h b.h c.h&quot;.  <B>dmake</B>
does not support this type of filename expansion.
<DT>2.<DD>
Unlike UNIX make, touching a library member causes <B>dmake</B>
to search the library for the member name and to update the library time stamp.
This is only implemented in the UNIX version.
MSDOS and other versions may not have librarians that keep file time stamps,
as a result <B>dmake</B> touches the library file itself, and prints a warning.
</DL>
</DL>

<P>

<B>dmake</B> is not compatible with GNU Make.  In particular it does not
understand GNU Make's macro expansions that query the file system.
<P>

<B>dmake</B>

is fully compatible with SYSV AUGMAKE, and supports the following AUGMAKE
features:
<DL COMPACT><DT><DD>
<DL COMPACT>
<DT>1.<DD>
GNU Make style <B>include</B>, and <B>if/else/endif</B> directives are allowed
in non-group recipes.
Thus, the word <B>include</B> appearing at
the start of a line that is not part of a gruop recipe will be mapped
to the &quot;.INCLUDE&quot; directive that <B>damke</B> uses.
Similarly, the words <B>ifeq</B>,<B>ifneq</B>,<B>elif</B>,<B>else</B>,
and <B>endif</B> are mapped to their corresponding <B>dmake</B> equivalents.
<DT>2.<DD>
The macro modifier expression $(macro:str=sub) is understood and is equivalent
to the expression $(macro:s/str/sub), with the restriction that str must match
the following regular expression:
<P>
	str[ |\t][ |\t]*
<P>
(ie. str only matches at the end of a token where str is a suffix and is
terminated by a space, a tab, or end of line)
Normally <I>sub</I> is expanded before the substitution is made, if you specify
-A on the command line then sub is not expanded.
<DT>3.<DD>
The macro % is defined to be $@ (ie. $% expands to the same value as $@).
<DT>4.<DD>
The AUGMAKE notion of libraries is handled correctly.
<DT>5.<DD>
Directories are always made if you specify <B>-A</B>.  This is consistent
with other UNIX versions of Make.
<DT>6.<DD>
Makefiles that utilize virtual targets to force making of other targets work
as expected if AUGMAKE special target handling is enabled.  For example:
<P>
<PRE>
	FRC:
	myprog.o : myprog.c $(FRC) ; ...
</PRE>

<P>
Works as expected if you issue the command
<P>
	'<B>dmake</B> -A FRC=FRC'
<P>
but fails with a 'don't know how to make FRC'
error message if you do not specify AUGMAKE special target handling via
the -A flag (or by setting AUGMAKE:=yes internally).
</DL>
</DL>

<A NAME="lbBF">&nbsp;</A>
<H2>LIMITS</H2>

In some environments the length of an argument string is restricted.
(e.g. MSDOS command line arguments cannot be longer than 128 bytes if you are
using the standard command.com command interpreter as your shell,
<B>dmake</B>

text diversions may help in these situations.)
<A NAME="lbBG">&nbsp;</A>
<H2>PORTABILITY</H2>

To write makefiles that can be moved from one environment to another requires
some forethought.  In particular you must define as macros all those things
that may be different in the new environment.
<B>dmake</B>

has two facilities that help to support writing portable makefiles, recursive
macros and conditional expressions.  The recursive macros, allow one to define
environment configurations that allow different environments for similar types
of operating systems.  For example the same make script can be used for SYSV and
BSD but with different macro definitions.
<P>

To write a makefile that is portable between UNIX and MSDOS requires both
features since in almost all cases you will need to define new recipes for
making targets.  The recipes will probably be quite different since the
capabilities of the tools on each machine are different.  Different
macros will be needed to help handle the smaller differences in the two
environments.
<A NAME="lbBH">&nbsp;</A>
<H2>FILES</H2>

Makefile, makefile, startup.mk (use dmake -V to tell you where the startup
file is)
<A NAME="lbBI">&nbsp;</A>
<H2>SEE ALSO</H2>

<A HREF="http://localhost/cgi-bin/man/man2html?1+sh">sh</A>(1), <A HREF="http://localhost/cgi-bin/man/man2html?1+csh">csh</A>(1), <A HREF="http://localhost/cgi-bin/man/man2html?1+touch">touch</A>(1), <A HREF="http://localhost/cgi-bin/man/man2html?1+f77">f77</A>(1), <A HREF="http://localhost/cgi-bin/man/man2html?1+pc">pc</A>(1), <A HREF="http://localhost/cgi-bin/man/man2html?1+cc">cc</A>(1)
<BR>

S.I. Feldman  <I>Make - A Program for Maintaining Computer Programs</I>
<A NAME="lbBJ">&nbsp;</A>
<H2>AUTHOR</H2>

Dennis Vadura, <A HREF="mailto:dvadura@wticorp.com">dvadura@wticorp.com</A>
<BR>

Many thanks to Carl Seger for his helpful suggestions,
and to Trevor John Thompson for his many excellent ideas and
informative bug reports.  Many thanks also go to those on the
NET that have helped in making <B>dmake</B> one of the best Make tools
available.
<A NAME="lbBK">&nbsp;</A>
<H2>BUGS</H2>

Some system commands return non-zero status inappropriately.
Use
<B>-i</B>

(`-' within the makefile) to overcome the difficulty.
<P>

Some systems do not have easily accessible
time stamps for library members (MSDOS, AMIGA, etc)
for these <B>dmake</B> uses the time stamp of the library instead and prints
a warning the first time it does so.  This is almost always ok, except when
multiple makefiles update a single library file.  In these instances it is
possible to miss an update if one is not careful.
<P>

This man page is way too long.
<A NAME="lbBL">&nbsp;</A>
<H2>WARNINGS</H2>

Rules supported by <A HREF="http://localhost/cgi-bin/man/man2html?1+make">make</A>(1) may not work if transitive closure is turned off
(-T, .NOINFER).
<P>

PWD from csh/ksh will cause problems if a cd operation is performed and
-e or -E option is used.
<P>

Using internal macros such as COMMAND, may wreak havoc if you don't understand
their functionality.
<P>

<HR>
<A NAME="index">&nbsp;</A><H2>Index</H2>
<DL>
<DT><A HREF="#lbAB">NAME</A><DD>
<DT><A HREF="#lbAC">SYNOPSIS</A><DD>
<DT><A HREF="#lbAD">DESCRIPTION</A><DD>
<DT><A HREF="#lbAE">OPTIONS</A><DD>
<DT><A HREF="#lbAF">INDEX</A><DD>
<DT><A HREF="#lbAG">STARTUP</A><DD>
<DT><A HREF="#lbAH">SYNTAX</A><DD>
<DT><A HREF="#lbAI">ATTRIBUTES</A><DD>
<DT><A HREF="#lbAJ">MACROS</A><DD>
<DT><A HREF="#lbAK">RULES AND TARGETS</A><DD>
<DT><A HREF="#lbAL">RECIPES</A><DD>
<DT><A HREF="#lbAM">BUILTIN COMMANDS</A><DD>
<DT><A HREF="#lbAN">TEXT DIVERSIONS</A><DD>
<DT><A HREF="#lbAO">SPECIAL TARGETS</A><DD>
<DT><A HREF="#lbAP">SPECIAL MACROS</A><DD>
<DT><A HREF="#lbAQ">CONTROL MACROS</A><DD>
<DT><A HREF="#lbAR">RUNTIME MACROS</A><DD>
<DT><A HREF="#lbAS">FUNCTION MACROS</A><DD>
<DT><A HREF="#lbAT">CONDITIONAL MACROS</A><DD>
<DT><A HREF="#lbAU">DYNAMIC PREREQUISITES</A><DD>
<DT><A HREF="#lbAV">BINDING TARGETS</A><DD>
<DT><A HREF="#lbAW">PERCENT(%) RULES AND MAKING INFERENCES</A><DD>
<DT><A HREF="#lbAX">AUGMAKE META RULES</A><DD>
<DT><A HREF="#lbAY">MAKING TARGETS</A><DD>
<DT><A HREF="#lbAZ">MAKING LIBRARIES</A><DD>
<DT><A HREF="#lbBA">KEEP STATE</A><DD>
<DT><A HREF="#lbBB">MULTI PROCESSING</A><DD>
<DT><A HREF="#lbBC">CONDITIONALS</A><DD>
<DT><A HREF="#lbBD">EXAMPLES</A><DD>
<DT><A HREF="#lbBE">COMPATIBILITY</A><DD>
<DT><A HREF="#lbBF">LIMITS</A><DD>
<DT><A HREF="#lbBG">PORTABILITY</A><DD>
<DT><A HREF="#lbBH">FILES</A><DD>
<DT><A HREF="#lbBI">SEE ALSO</A><DD>
<DT><A HREF="#lbBJ">AUTHOR</A><DD>
<DT><A HREF="#lbBK">BUGS</A><DD>
<DT><A HREF="#lbBL">WARNINGS</A><DD>
</DL>
<HR>
This document was created by man2html from the dmake manual page.
</body>
</HTML>
