<HTML><head><TITLE>Manpage of DMAKE 4.9</TITLE>
</head><body>
<H1>DMAKE  Version 4.9</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>
-> <B>.WINPATH</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.
<DT><B>.WINPATH</B><DD>
Switch between default (POSIX) and Windows style path representation.
(This attribute is specific for cygwin dmake executables and non-cygwin
environments ignore this attribute.)
<P>
Under Cygwin it can be useful to generate Windows style paths (with
regular slashes) instead of the default cygwin style (POSIX) paths
for dmake's dynamic macros.
The affected macros are $@, $*, $&gt;, $?, $&lt;, $&amp;, $^ and $(PWD), $(MAKEDIR)
and $(TMD). This feature can be used to create DOS style path parameters
for native W32 programs from dynamic macros.
<P>
<B>Note</B> that the Windows style paths use regular slashes ('/') instead
of the usual Windows backslash ('\') as directory separator to avoid quoting
problems (after all it is still a cygwin <B>dmake</B>!) and cygwin, as well
as native Windows, programs should have no problems using this (c:/foo/bar)
path representation.
<P>
Example: Assuming the current target to be /tmp/mytarget the $@ macro
without .WINPATH active expands to:
<DL COMPACT><DT><DD>
<P>
<DL COMPACT><DT><DD>
/tmp/mytarget
<P>
</DL>

With .WINPATH set it expands to:
<P>
<DL COMPACT><DT><DD>
C:/cygwin/tmp/mytarget
</DL>

</DL>

</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 infered names of targets <B>:i</B> modifier returnes the actual filename
associated to the target, see BINDING TARGETS. If the value is not a target or
prerequisite the value is returned unchanged. For the following example:
<DL COMPACT><DT><DD>
test = aprog bprog
</DL>

If aprog and bprog are targets or prerequisits and they are bound
to /tmp/aprog and bprog (see .SOURCE special target) the macro expansion
has the following effect:
<DL COMPACT><DT><DD>
<P>


<PRE>

<DL COMPACT>
<DT>$(test:i)<DD>-> /tmp/aprog bprog
</DL>
</DL>
</PRE>

<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.  (The meaning of the runtime macro <B>$?</B> is changed, see
below in the
<B>RUNTIME MACROS</B>

section.) 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.
TMD will usually be a relative path with the following two exceptions. If the
relative path would go up until the root directory or if different drive
letters (DOS file system) make a relative path impossible the absolute path
from MAKEDIR is used.
<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; files are cached case insensitive.
By default it is set to &quot;no&quot; on Windows as the filesystems on
this operating system are case insensitive and set to &quot;yes&quot; for all
other operating systems. The default can be overriden, if desired.
<P>
<B>Note:</B> Using case insensitive directory caching on case sensitive
file systems is a <B>BAD</B> idea. If in doubt use case sensitive
directory caching even on case insensitive file systems as the
worst case in this scenario is that /foo/bar/ and /foo/BAR/ are
cached separately (with the same content) even though they are
the same directory. This would only happen if different targets
use different upper/lower case spellings for the same directory
and that is <B>never</B> a good idea.
<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>OOODMAKEMODE</B><DD>
This macro enables a special compatibility mode needed by the OpenOffice.org
build system. If set, the switch disables the removal of leading './' path
elements during target filename normalization (See BINDING TARGETS). If './'
appear in the pathname, but not at the beginning of it, they are still
removed by the normalization.
<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, except for the <B>!</B> ruleop, in
which case it is set to the current build
prerequisite instead.  <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
and multiple slashes are collapsed to one unless they are at the beginning
of the pathname. Leading slashes are normalized according to POSIX rules,
i.e. more than two leading slashes are reduced to one slash and a
leading '//' is kept as it might have a special meaning. 
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>
