[comp.sources.misc] v19i036: dmake - dmake version 3.7, Part15/37

dvadura@watdragon.waterloo.edu (Dennis Vadura) (05/12/91)

Submitted-by: Dennis Vadura <dvadura@watdragon.waterloo.edu>
Posting-number: Volume 19, Issue 36
Archive-name: dmake/part15
Supersedes: dmake-3.6: Volume 15, Issue 52-77

---- Cut Here and feed the following to sh ----
#!/bin/sh
# this is dmake.shar.15 (part 15 of a multipart archive)
# do not concatenate these parts, unpack them in order with /bin/sh
# file dmake/man/dmake.nc continued
#
if test ! -r _shar_seq_.tmp; then
	echo 'Please unpack part 1 first!'
	exit 1
fi
(read Scheck
 if test "$Scheck" != 15; then
	echo Please unpack part "$Scheck" next!
	exit 1
 else
	exit 0
 fi
) < _shar_seq_.tmp || exit 1
if test -f _shar_wnt_.tmp; then
sed 's/^X//' << 'SHAR_EOF' >> 'dmake/man/dmake.nc' &&
X
X
X
Version 3.70                    UW                             42
X
X
X
X
DMAKE(p)             Unsupported Free Software            DMAKE(p)
X
X
X
X     .NOSTATE attribute will have a record written into the state
X     file indicating the target's name, the current directory,
X     the command used to update the target, and which, if any, ::
X     rule is being used.  When you make this target again if any
X     of this information does not match the previous settings and
X     the target is not out dated it will still be re-made.  The
X     assumption is that one of the conditions above has changed
X     and that we wish to remake the target.  For example, state
X     keeping is used in the maintenance of dmake to test compile
X     different versions of the source using different compilers.
X     Changing the compiler causes the compilation flags to be
X     modified and hence all sources to be recompiled.
X
X     The state file is an ascii file and is portable, however it
X     is not in human readable form as the entries represent hash
X     keys of the above information.
X
X     The Sun Microsystem's Make construct
X
X          .KEEP_STATE :
X
X     is recognized and is mapped to .KEEP_STATE:=_state.mk.  The
X     dmake version of state keeping does not include scanning C
X     source files for dependencies like Sun Make.  This is
X     specific to C programs and it was felt that it does not
X     belong in make.  dmake instead provides the tool, cdepend,
X     to scan C source files and to produce depedency information.
X     Users are free to modify cdepend to produce other dependency
X     files.  (NOTE: cdepend does not come with the distribution
X     at this time, but will be available in a patch in the near
X     future)
X
MULTI PROCESSING
X     If the architecture supports it then dmake is capable of
X     making a target's prerequisites in parallel.  dmake will
X     make as much in parallel as it can and use a number of child
X     processes up to the maximum specified by MAXPROCESS or by
X     the value supplied to the -P command line flag.  A parallel
X     make is enabled by setting the value of MAXPROCESS (either
X     directly or via -P option) to a value which is > 1.  dmake
X     guarantees that all dependencies as specified in the
X     makefile are honored.  A target will not be made until all
X     of its prerequisites have been made.  If a parallel make is
X     being performed then the following restrictions on parallel-
X     ism are enforced.
X
X          1.   Individual recipe lines in a non-group recipe are
X               performed sequentially in the order in which they
X               are specified within the makefile and in parallel
X               with the recipes of other targets.
X
X
X
X
X
Version 3.70                    UW                             43
X
X
X
X
DMAKE(p)             Unsupported Free Software            DMAKE(p)
X
X
X
X          2.   If a target contains multiple recipe definitions
X               (cf. :: rules) then these are performed sequen-
X               tially in the order in which the :: rules are
X               specified within the makefile and in parallel with
X               the recipes of other targets.
X
X          3.   If a target rule contains the `!' modifier, then
X               the recipe is performed sequentially for the list
X               of outdated prerequisites and in parallel with the
X               recipes of other targets.
X
X          4.   If a target has the .SEQUENTIAL attribute set then
X               all of its prerequisites are made sequentially
X               relative to one another (as if MAXPROCESS=1), but
X               in parallel with other targets in the makefile.
X
X     Note:  If you specify a parallel make then the order of tar-
X     get update and the order in which the associated recipes are
X     invoked will not correspond to that displayed by the -n
X     flag.
X
CONDITIONALS
X     dmake supports a makefile construct called a conditional.
X     It allows the user to conditionally select portions of
X     makefile text for input processing and to discard other por-
X     tions.  This becomes useful for writing makefiles that are
X     intended to function for more than one target host and
X     environment.  The conditional expression is specified as
X     follows:
X
X          .IF  expression
X             ... if text ...
X          .ELIF  expression
X             ... if text ...
X          .ELSE
X             ... else text ...
X          .END
X
X     The .ELSE and .ELIF portions are optional, and the condi-
X     tionals may be nested (ie.  the text may contain another
X     conditional).  .IF, .ELSE, and .END may appear anywhere in
X     the makefile, but a single conditional expression may not
X     span multiple makefiles.
X
X     expression can be one of the following three forms:
X
X          <text> | <text> == <text> | <text> != <text>
X
X     where text is either text or a macro expression.  In any
X     case, before the comparison is made, the expression is
X     expanded.  The text portions are then selected and compared.
X     White space at the start and end of the text portion is
X
X
X
Version 3.70                    UW                             44
X
X
X
X
DMAKE(p)             Unsupported Free Software            DMAKE(p)
X
X
X
X     discarded before the comparison.  This means that a macro
X     that evaluates to nothing but white space is considered a
X     NULL value for the purpose of the comparison.  In the first
X     case the expression evaluates TRUE if the text is not NULL
X     otherwise it evaluates FALSE.  The remaining two cases both
X     evaluate the expression on the basis of a string comparison.
X     If a macro expression needs to be equated to a NULL string
X     then compare it to the value of the macro $(NULL).  You can
X     use the $(shell ...) macro to construct more complex test
X     expressions.
X
EXAMPLES
X          # A simple example showing how to use make
X          #
X          prgm : a.o b.o
X               cc a.o b.o -o prgm
X          a.o : a.c g.h
X               cc a.c -o $@
X          b.o : b.c g.h
X               cc b.c -o $@
X
X     In the previous example prgm is remade only if a.o and/or
X     b.o is out of date with respect to prgm.  These dependencies
X     can be stated more concisely by using the inference rules
X     defined in the standard startup file.  The default rule for
X     making .o's from .c's looks something like this:
X
X          %.o : %.c; cc -c $(CFLAGS) -o $@ $<
X
X     Since there exists a rule (defined in the startup file) for
X     making .o's from .c's dmake will use that rule for manufac-
X     turing a .o from a .c and we can specify our dependencies
X     more concisely.
X
X          prgm : a.o b.o
X               cc -o prgm $<
X          a.o b.o : g.h
X
X     A more general way to say the above using the new macro
X     expansions would be:
X
X          SRC = a b
X          OBJ = {$(SRC)}.o
X
X          prgm : $(OBJ)
X               cc -o $@ $<
X
X          $(OBJ) : g.h
X
X     If we want to keep the objects in a separate directory,
X     called objdir, then we would write something like this.
X
X
X
X
Version 3.70                    UW                             45
X
X
X
X
DMAKE(p)             Unsupported Free Software            DMAKE(p)
X
X
X
X          SRC = a b
X          OBJ = {$(SRC)}.o
X
X          prgm : $(OBJ)
X               cc $< -o $@
X
X          $(OBJ) : g.h
X          %.o : %.c
X               $(CC) -c $(CFLAGS) -o $(@:f) $<
X               mv $(@:f) objdir
X
X          .SOURCE.o : objdir       # tell make to look here for .o's
X
X     An example of building library members would go something
X     like this: (NOTE:  The same rules as above will be used to
X     produce .o's from .c's)
X
X          SRC  = a b
X          LIB  = lib
X          LIBm = { $(SRC) }.o
X
X          prgm: $(LIB)
X               cc -o $@ $(LIB)
X
X          $(LIB) .LIBRARY : $(LIBm)
X               ar rv $@ $<
X               rm $<
X
X     Finally, suppose that each of the source files in the previ-
X     ous example had the `:' character in their target name.
X     Then we would write the above example as:
X
X          SRC  = f:a f:b
X          LIB  = lib
X          LIBm = "{ $(SRC) }.o"         # put quotes around each token
X
X          prgm: $(LIB)
X               cc -o $@ $(LIB)
X
X          $(LIB) .LIBRARY : $(LIBm)
X               ar rv $@ $<
X               rm $<
X
COMPATIBILITY
X     There are two notable differences between dmake and the
X     standard version of BSD UNIX 4.2/4.3 Make.
X
X          1. BSD UNIX 4.2/4.3 Make supports wild card filename
X             expansion for prerequisite names.  Thus if a direc-
X             tory contains a.h, b.h and c.h, then a line like
X
X                  target: *.h
X
X
X
Version 3.70                    UW                             46
X
X
X
X
DMAKE(p)             Unsupported Free Software            DMAKE(p)
X
X
X
X             will cause UNIX make to expand the *.h into "a.h b.h
X             c.h".  dmake does not support this type of filename
X             expansion.
X
X          2. Unlike UNIX make, touching a library member causes
X             dmake to search the library for the member name and
X             to update the library time stamp.  This is only
X             implemented in the UNIX version.  MSDOS and other
X             versions may not have librarians that keep file time
X             stamps, as a result dmake touches the library file
X             itself, and prints a warning.
X
X     dmake is not compatible with GNU Make.  In particular it
X     does not understand GNU Make's macro expansions that query
X     the file system.
X
X     dmake is fully compatible with SYSV AUGMAKE, and supports
X     the following AUGMAKE features:
X
X          1. The word include appearing at the start of a line
X             can be used instead of the ".INCLUDE :" construct
X             understood by dmake.
X
X          2. The macro modifier expression $(macro:str=sub) is
X             understood and is equivalent to the expression
X             $(macro:s/str/sub), with the restriction that str
X             must match the following regular expression:
X
X                  str[ |\t][ |\t]*
X
X             (ie. str only matches at the end of a token where
X             str is a suffix and is terminated by a space, a tab,
X             or end of line)
X
X          3. The macro % is defined to be $@ (ie. $% expands to
X             the same value as $@).
X
X          4. The AUGMAKE notion of libraries is handled
X             correctly.
X
X          5. When defining special targets for the inference
X             rules and the AUGMAKE special target handling is
X             enabled then the special target .X is equivalent to
X             the %-rule "% : %.X".
X
X          6. Directories are always made if you specify -A.  This
X             is consistent with other UNIX versions of Make.
X
X          7. Makefiles that utilize virtual targets to force mak-
X             ing of other targets work as expected if AUGMAKE
X             special target handling is enabled.  For example:
X
X
X
X
Version 3.70                    UW                             47
X
X
X
X
DMAKE(p)             Unsupported Free Software            DMAKE(p)
X
X
X
X                  FRC:
X                  myprog.o : myprog.c $(FRC) ; ...
X
X             Works as expected if you issue the command
X
X                  'dmake -A FRC=FRC'
X
X             but fails with a 'don't know how to make FRC' error
X             message if you do not specify AUGMAKE special target
X             handling via the -A flag (or by setting AUGMAKE:=yes
X             internally).
X
LIMITS
X     In some environments the length of an argument string is
X     restricted.  (e.g. MSDOS command line arguments cannot be
X     longer than 128 bytes if you are using the standard
X     command.com command interpreter as your shell, dmake text
X     diversions may help in these situations.)
X
PORTABILITY
X     To write makefiles that can be moved from one environment to
X     another requires some forethought.  In particular you must
X     define as macros all those things that may be different in
X     the new environment.  dmake has two facilities that help to
X     support writing portable makefiles, recursive macros and
X     conditional expressions.  The recursive macros, allow one to
X     define environment configurations that allow different
X     environments for similar types of operating systems.  For
X     example the same make script can be used for SYSV and BSD
X     but with different macro definitions.
X
X     To write a makefile that is portable between UNIX and MSDOS
X     requires both features since in almost all cases you will
X     need to define new recipes for making targets.  The recipes
X     will probably be quite different since the capabilities of
X     the tools on each machine are different.  Different macros
X     will be needed to help handle the smaller differences in the
X     two environments.
X
X     NOTE:  Unlike UNIX, MSDOS does maintain cd requests cross
X     single recipe lines.  This is not portable, and your
X     makefiles will not work the same way if you depend on it.
X     Use the .IF ... .ELSE ... .END conditionals to supply dif-
X     ferent make scripts as necessary.
X
FILES
X     Makefile, makefile, startup.mk (use dmake -V to tell you
X     where the startup file is)
X
SEE ALSO
X     sh(1), csh(1), touch(1), f77(1), pc(1), cc(1)
X     S.I. Feldman  Make - A Program for Maintaining Computer
X
X
X
Version 3.70                    UW                             48
X
X
X
X
DMAKE(p)             Unsupported Free Software            DMAKE(p)
X
X
X
X     Programs
X
AUTHOR
X     Dennis Vadura, CS Dept. University of Waterloo.
X     dvadura@watdragon.uwaterloo.ca
X     Many thanks to Carl Seger for his helpful suggestions, and
X     to Trevor John Thompson for his many excellent ideas and
X     informative bug reports.
X
BUGS
X     Some system commands return non-zero status inappropriately.
X     Use -i (`-' within the makefile) to overcome the difficulty.
X
X     Some systems do not have easily accessible time stamps for
X     library members (MSDOS, AMIGA, etc) for these dmake uses the
X     time stamp of the library instead and prints a warning the
X     first time it does so.  This is almost always ok, except
X     when multiple makefiles update a single library file.  In
X     these instances it is possible to miss an update if one is
X     not careful.
X
X     This man page is way too long.
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
Version 3.70                    UW                             49
SHAR_EOF
chmod 0640 dmake/man/dmake.nc ||
echo 'restore of dmake/man/dmake.nc failed'
Wc_c="`wc -c < 'dmake/man/dmake.nc'`"
test 117216 -eq "$Wc_c" ||
	echo 'dmake/man/dmake.nc: original size 117216, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= dmake/man/dmake.p ==============
if test -f 'dmake/man/dmake.p' -a X"$1" != X"-c"; then
	echo 'x - skipping dmake/man/dmake.p (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
sed 's/^X//' << 'SHAR_EOF' > 'dmake/man/dmake.p' &&
X
X
X
X
DMAKE(p)             Unsupported Free Software            DMAKE(p)
X
X
X
NNAAMMEE
X     ddmmaakkee - maintain program groups, or interdependent files
X
SSYYNNOOPPSSIISS
X     ddmmaakkee [-AceEhiknpqrsStTuVx] [-v{dfimt}] [-P#] [-{f|C|K}
X     file] [macro[*][+][:]=_v_a_l_u_e ...] [target ...]
X
DDEESSCCRRIIPPTTIIOONN
X     ddmmaakkee executes commands found in an external file called a
X     _m_a_k_e_f_i_l_e to update one or more target names.  Each target
X     may depend on zero or more prerequisite targets.  If any of
X     the target's prerequisites is newer than the target or if
X     the target itself does not exist, then ddmmaakkee will attempt to
X     make the target.
X
X     If no --ff command line option is present then ddmmaakkee searches
X     for an existing _m_a_k_e_f_i_l_e from the list of prerequisites
X     specified for the special target _._M_A_K_E_F_I_L_E_S (see the STARTUP
X     section for more details).  If "-" is the name of the file
X     specified to the --ff flag then ddmmaakkee uses standard input as
X     the source of the makefile text.
X
X     Any macro definitions (arguments with embedded "=" signs)
X     that appear on the command line are processed first and
X     supersede definitions for macros of the same name found
X     within the makefile.  In general it is impossible for defin-
X     itions found inside the makefile to redefine a macro defined
X     on the command line, see the MACROS section for an excep-
X     tion.
X
X     If no _t_a_r_g_e_t names are specified on the command line, then
X     ddmmaakkee uses the first non-special target found in the
X     makefile as the default target.  See the SSPPEECCIIAALL TTAARRGGEETTSS
X     section for the list of special targets and their function.
X     ddmmaakkee is a re-implementation of the UNIX Make utility with
X     significant enhancements.  Makefiles written for most previ-
X     ous versions of _M_a_k_e will be handled correctly by ddmmaakkee..
X     Known differences between ddmmaakkee and other versions of make
X     are discussed in the CCOOMMPPAATTIIBBIILLIITTYY section found at the end
X     of this document.
X
OOPPTTIIOONNSS
X     --AA   Enable AUGMAKE special inference rule transformations
X          (see the "PERCENT(%) RULES" section), these are set to
X          off by default.
X
X     --cc   Use non-standard comment stripping.  If you specify --cc
X          then ddmmaakkee will treat any ## character as a start of
X          comment character wherever it may appear unless it is
X          escaped by a \.
X
X
X
X
X
Version 3.70                    UW                              1
X
X
X
X
DMAKE(p)             Unsupported Free Software            DMAKE(p)
X
X
X
X     --CC [[++]]ffiillee
X          This option writes to _f_i_l_e a copy of standard output
X          and standard error from any child processes and from
X          the ddmmaakkee process itself.  If you specify a ++ prior to
X          the file name then the text is appended to the previous
X          contents of _f_i_l_e.  This option is active in the MSDOS
X          implementation only and is ignored by non-MSDOS ver-
X          sions of ddmmaakkee..
X
X     --ee   Read the environment and define all strings of the form
X          'EENNVV--VVAARR=_e_v_a_l_u_e' defined within as macros whose name is
X          EENNVV--VVAARR, and whose value is '_e_v_a_l_u_e'.  The environment
X          is processed prior to processing the user specified
X          makefile thereby allowing definitions in the makefile
X          to override definitions in the environment.
X
X     --EE   Same as -e, except that the environment is processed
X          after the user specified makefile has been processed
X          (thus definitions in the environment override defini-
X          tions in the makefile).  The -e and -E options are
X          mutually exclusive.  If both are given the latter takes
X          effect.
X
X     --ff ffiillee
X          Use ffiillee as the source for the makefile text.  Only one
X          --ff option is allowed.
X
X     --hh   Print the command summary for ddmmaakkee.
X
X     --ii   Tells ddmmaakkee to ignore errors, and continue making other
X          targets.  This is equivalent to the .IGNORE attribute
X          or macro.
X
X     --KK ffiillee
X          Turns on ..KKEEEEPP__SSTTAATTEE state tracking and tells ddmmaakkee to
X          use _f_i_l_e as the state file.
X
X     --kk   Causes ddmmaakkee to ignore errors caused by command execu-
X          tion and to make all targets not depending on targets
X          that could not be made. Ordinarily ddmmaakkee stops after a
X          command returns a non-zero status, specifying --kk causes
X          ddmmaakkee to ignore the error and continue to make as much
X          as possible.
X
X     --nn   Causes ddmmaakkee to print out what it would have executed,
X          but does not actually execute the commands.  A special
X          check is made for the string "$(MAKE)" inside a recipe
X          line, if found, the line is expanded and invoked,
X          thereby enabling recursive makes to give a full
X          description of all that they will do.  The check for
X          "$(MAKE)" is disabled inside group recipes.
X
X
X
X
Version 3.70                    UW                              2
X
X
X
X
DMAKE(p)             Unsupported Free Software            DMAKE(p)
X
X
X
X     --pp   Print out a version of the digested makefile in human
X          readable form.  (useful for debugging, but cannot be
X          re-read by ddmmaakkee)
X
X     --PP##  On systems that support multi-processing cause ddmmaakkee to
X          use _# concurrent child processes to make targets.  See
X          the "MULTI PROCESSING" section for more information.
X
X     --qq   Check and see if the target is up to date.  Exits with
X          code 0 if up to date, 1 otherwise.
X
X     --rr   Tells ddmmaakkee not to read the initial startup makefile,
X          see STARTUP section for more details.
X
X     --ss   Tells ddmmaakkee to do all its work silently and not echo
X          the commands it is executing to stdout (also suppresses
X          warnings).  This  is equivalent to the .SILENT attri-
X          bute or macro.
X
X     --SS   Force sequential execution of recipes on architectures
X          which support concurrent makes.  For backward compati-
X          bility with old makefiles that have nasty side-effect
X          prerequisite dependencies.
X
X     --tt   Causes ddmmaakkee to touch the targets and bring them up to
X          date without executing any commands.
X
X     --TT   Tells ddmmaakkee to not perform transitive closure on the
X          inference graph.
X
X     --uu   Force an unconditional update.  (ie. do everything that
X          would be done if everything that a target depended on
X          was out of date)
X
X     --vv[[ddffiimmtt]]
X          Verbose flag, when making targets print to stdout what
X          we are going to make and what we think its time stamp
X          is.  The optional flags [[ddffiimmtt]] can be used to restrict
X          the information that is displayed.  In the absence of
X          any optional flags all are assumed to be given (ie. --vv
X          is equivalent to --vvddffiimmtt).  The meanings of the
X          optional flags are:
X
X          dd    Notify of change directory operations only.
X
X          ff    Notify of file I/O operations only.
X
X          ii    Notify of inference algorithm operation only.
X
X          mm    Notify of target update operations only.
X
X
X
X
X
Version 3.70                    UW                              3
X
X
X
X
DMAKE(p)             Unsupported Free Software            DMAKE(p)
X
X
X
X          tt    Keep any temporary files created; normally they
X               are automatically deleted.
X
X     --VV   Print the version of ddmmaakkee, and values of builtin mac-
X          ros.
X
X     --xx   Upon processing the user makefile export all non-
X          internally defined macros to the user's environment.
X          This option together with the -e option allows SYSV
X          AUGMAKE recursive makes to function as expected.
X
IINNDDEEXX
X     Here is a list of the sections that follow and a short
X     description of each.  Perhaps you won't have to read the
X     whole man page to find what you need.
X
X     SSTTAARRTTUUPP            Describes ddmmaakkee initialization.
X
X     SSYYNNTTAAXX             Describes the syntax of makefile expres-
X                        sions.
X
X     AATTTTRRIIBBUUTTEESS         Describes the notion of attributes and
X                        how they are used when making targets.
X
X     MMAACCRROOSS             Defining and expanding macros.
X
X     RRUULLEESS AANNDD TTAARRGGEETTSS  How to define targets and their prere-
X                        quisites.
X
X     RREECCIIPPEESS            How to tell ddmmaakkee how to make a target.
X
X     TTEEXXTT DDIIVVEERRSSIIOONNSS    How to use text diversions in recipes and
X                        macro expansions.
X
X     SSPPEECCIIAALL TTAARRGGEETTSS    Some targets are special.
X
X     SSPPEECCIIAALL MMAACCRROOSS     Macros used by ddmmaakkee to alter the pro-
X                        cessing of the makefile, and those
X                        defined by ddmmaakkee for the user.
X
X     CCOONNTTRROOLL MMAACCRROOSS     Itemized list of special control macros.
X
X     RRUUNN--TTIIMMEE MMAACCRROOSS    Discussion of special run-time macros
X                        such as $@ and $<.
X
X     FFUUNNCCTTIIOONN MMAACCRROOSS    GNU style function macros, only $(mktmp
X                        ...) for now.
X
X     DDYYNNAAMMIICC PPRREERREEQQUUIISSIITTEESS
X                        Processing of prerequisites which contain
X                        macro expansions in their name.
X
X
X
X
Version 3.70                    UW                              4
X
X
X
X
DMAKE(p)             Unsupported Free Software            DMAKE(p)
X
X
X
X     BBIINNDDIINNGG TTAARRGGEETTSS    The rules that ddmmaakkee uses to bind a tar-
X                        get to an existing file in the file sys-
X                        tem.
X
X     PPEERRCCEENNTT((%%)) RRUULLEESS   Specification of recipes to be used by
X                        the inference algorithm.
X
X     MMAAKKIINNGG IINNFFEERREENNCCEESS  The rules that ddmmaakkee uses when inferring
X                        how to make a target which has no expli-
X                        cit recipe.  This and the previous sec-
X                        tion are really a single section in the
X                        text.
X
X     MMAAKKIINNGG TTAARRGGEETTSS     How ddmmaakkee makes targets other than
X                        libraries.
X
X     MMAAKKIINNGG LLIIBBRRAARRIIEESS   How ddmmaakkee makes libraries.
X
X     KKEEEEPP SSTTAATTEE         A discussion of how .KEEP_STATE works.
X
X     MMUULLTTII PPRROOCCEESSSSIINNGG   Discussion of ddmmaakkee''ss parallel make
X                        facilities for architectures that support
X                        them.
X
X     CCOONNDDIITTIIOONNAALLSS       Conditional expressions which control the
X                        processing of the makefile.
X
X     EEXXAAMMPPLLEESS           Some hopefully useful examples.
X
X     CCOOMMPPAATTIIBBIILLIITTYY      How ddmmaakkee compares with previous versions
X                        of make.
X
X     LLIIMMIITTSS             Limitations of ddmmaakkee.
X
X     PPOORRTTAABBIILLIITTYY        Comments on writing portable makefiles.
X
X     FFIILLEESS              Files used by ddmmaakkee.
X
X     SSEEEE AALLSSOO           Other related programs, and man pages.
X
X     AAUUTTHHOORR             The guy responsible for this thing.
X
X     BBUUGGSS               Hope not.
X
SSTTAARRTTUUPP
X     When ddmmaakkee begins execution it first processes the command
X     line and then processes an initial startup-makefile.  This
X     is followed by an attempt to locate and process a user sup-
X     plied makefile.  The startup file defines the default values
X     of all required control macros and the set of default rules
X     for making targets and inferences.  When searching for the
X     startup makefile, ddmmaakkee searches the following locations, in
X
X
X
Version 3.70                    UW                              5
X
X
X
X
DMAKE(p)             Unsupported Free Software            DMAKE(p)
X
X
X
X     the order specified, until a startup file is located:
X
X          1.   The location given as the value of the macro MAK-
X               ESTARTUP defined on the command line.
X
X          2.   The location given as the value of the environment
X               variable MAKESTARTUP defined in the current
X               environment.
X
X          3.   The location given as the value of the macro MAK-
X               ESTARTUP defined internally within ddmmaakkee.
X
X     The above search is disabled by specifying the -r option on
X     the command line.  An error is issued if a startup makefile
X     cannot be found and the -r option was not specified.  A user
X     may substitute a custom startup file by defining the MAKES-
X     TARTUP environment variable or by redefining the MAKESTARTUP
X     macro on the command line.  To determine where ddmmaakkee looks
X     for the default startup file, check your environment or
X     issue the command _"_d_m_a_k_e _-_V_".
X
X     A similar search is performed to locate a default user
X     makefile when no --ff command line option is specified.  By
X     default, the prerequisite list of the special target
X     .MAKEFILES specifies the names of possible makefiles and the
X     search order that ddmmaakkee should use to determine if one
X     exists.  A typical definition for this target is:
X
X          .MAKEFILES : makefile.mk Makefile makefile
X
X     ddmmaakkee will first look for makefile.mk and then the others.
X     If a prerequisite cannot be found ddmmaakkee will try to make it
X     before going on to the next prerequisite.  For example,
X     makefile.mk can be checked out of an RCS file if the proper
X     rules for doing so are defined in the startup file.
X
SSYYNNTTAAXX
X     This section is a summary of the syntax of makefile state-
X     ments.  The description is given in a style similar to BNF,
X     where { } enclose items that may appear zero or more times,
X     and [ ] enclose items that are optional.  Alternative pro-
X     ductions for a left hand side are indicated by '->', and
X     newlines are significant.  All symbols in bboolldd type are text
X     or names representing text supplied by the user.
X
X
X
X          Makefile -> { Statement }
X
X          Statement -> Macro-Definition
X                    -> Conditional
X                    -> Rule-Definition
X
X
X
Version 3.70                    UW                              6
X
X
X
X
DMAKE(p)             Unsupported Free Software            DMAKE(p)
X
X
X
X                    -> Attribute-Definition
X
X          Macro-Definition -> MMAACCRROO == LLIINNEE
X                           -> MMAACCRROO **== LLIINNEE
X                           -> MMAACCRROO ::== LLIINNEE
X                           -> MMAACCRROO **::== LLIINNEE
X                           -> MMAACCRROO ++== LLIINNEE
X                           -> MMAACCRROO ++::== LLIINNEE
X
X          Conditional ->  ..IIFF expression
X                             Makefile
X                          [ ..EELLIIFF expression
X                             Makefile ]
X                          [ ..EELLSSEE
X                             Makefile ]
X                          ..EENNDD
X
X          expression -> LLIINNEE
X                     -> SSTTRRIINNGG ==== LLIINNEE
X                     -> SSTTRRIINNGG !!== LLIINNEE
X
X
X          Rule-Definition ->  target-definition
X                                 [ recipe ]
X
X          target-definition -> targets [attrs] op { PPRREERREEQQUUIISSIITTEE } [;; rcp-line]
X
X          targets -> target { targets }
X                  -> ""target"" { targets }
X
X          target -> special-target
X                 -> TTAARRGGEETT
X
X          attrs -> attribute { attrs }
X                -> ""attribute"" { attrs }
X
X          op -> :: { modifier }
X
X          modifier -> ::
X                   -> ^^
X                   -> !!
X                   -> --
X
X          recipe -> { TTAABB rcp-line }
X                 -> [@@][%%][--] [[
X                       { LLIINNEE }
X                    ]]
X
X          rcp-line -> [@@][%%][--][++] LLIINNEE
X
X
X
X
X
X
Version 3.70                    UW                              7
X
X
X
X
DMAKE(p)             Unsupported Free Software            DMAKE(p)
X
X
X
X          Attribute-Definition -> attrs :: targets
X
X
X          attribute -> ..EEPPIILLOOGG
X                    -> ..IIGGNNOORREE
X                    -> ..LLIIBBRRAARRYY
X                    -> ..MMKKSSAARRGGSS
X                    -> ..NNOOIINNFFEERR
X                    -> ..NNOOSSTTAATTEE
X                    -> ..PPHHOONNYY
X                    -> ..PPRREECCIIOOUUSS
X                    -> ..PPRROOLLOOGG
X                    -> ..SSEETTDDIIRR==_p_a_t_h
X                    -> ..SSIILLEENNTT
X                    -> ..SSEEQQUUEENNTTIIAALL
X                    -> ..SSWWAAPP
X                    -> ..UUSSEESSHHEELLLL
X                    -> ..SSYYMMBBOOLL
X                    -> ..UUPPDDAATTEEAALLLL
X
X          special-target -> ..EERRRROORR
X                         -> ..EEXXPPOORRTT
X                         -> ..GGRROOUUPPEEPPIILLOOGG
X                         -> ..GGRROOUUPPPPRROOLLOOGG
X                         -> ..IIMMPPOORRTT
X                         -> ..IINNCCLLUUDDEE
X                         -> ..IINNCCLLUUDDEEDDIIRRSS
X                         -> ..MMAAKKEEFFIILLEESS
X                         -> ..RREEMMOOVVEE
X                         -> ..SSOOUURRCCEE
X                         -> ..SSOOUURRCCEE.._s_u_f_f_i_x
X                         -> ._s_u_f_f_i_x_1._s_u_f_f_i_x_2
X
X
X     Where, TTAABB represents a <tab> character, SSTTRRIINNGG represents
X     an arbitrary sequence of characters, and LLIINNEE represents a
X     possibly empty sequence of characters terminated by a non-
X     escaped (not immediately preceded by a backslash '\') new-
X     line character.  MMAACCRROO, PPRREERREEQQUUIISSIITTEE, and TTAARRGGEETT each
X     represent a string of characters not including space or tab
X     which respectively form the name of a macro, prerequisite or
X     target.  The name may itself be a macro expansion expres-
X     sion.  A LLIINNEE can be continued over several physical lines
X     by terminating it with a single backslash character.  Com-
X     ments are initiated by the pound ## character and extend to
X     the end of line.  All comment text is discarded, a '#' may
X     be placed into the makefile text by escaping it with '\'
X     (ie. \# translates to # when it is parsed).  An exception to
X     this occurs when a # is seen inside a recipe line that
X     begins with a <tab> or is inside a group recipe.  If you
X     specify the --cc command line switch then this behavior is
X     disabled and ddmmaakkee will treat all # characters as start of
X
X
X
Version 3.70                    UW                              8
X
X
X
X
DMAKE(p)             Unsupported Free Software            DMAKE(p)
X
X
X
X     comment indicators unless they are escaped by \.  A set of
X     continued lines may be commented out by placing a single #
X     at the start of the first line.  A continued line cannot
X     span more than one makefile.
X
X     wwhhiittee ssppaaccee is defined to be any combination of <space>,
X     <tab>, and the sequence \<nl> when \<nl> is used to ter-
X     minate a LINE.  When processing mmaaccrroo definition lines, any
X     amount of white space is allowed on either side of the macro
X     operator (=, *=, :=, *:=, += or +:=), and white space is
X     stripped from both before and after the macro value string.
X     The sequence \<nl> is treated as white space during recipe
X     expansion and is deleted from the final recipe string.  You
X     must escape the \<nl> with another \ in order to get a \ at
X     the end of a recipe line.  The \<nl> sequence is deleted
X     from macro values when they are expanded.
X
X     When processing ttaarrggeett definition lines, the recipe for a
X     target must, in general, follow the first definition of the
X     target (See the RULES AND TARGETS section for an exception),
X     and the recipe may not span across multiple makefiles.  Any
X     targets and prerequisites found on a target definition line
X     are taken to be white space separated tokens.  The rule
X     operator (_o_p in SYNTAX section) is also considered to be a
X     token but does not require white space to precede or follow
X     it.  Since the rule operator begins with a `:', traditional
X     versions of make do not allow the `:' character to form a
X     valid target name.  ddmmaakkee allows `:' to be present in
X     target/prerequisite names as long as the entire
X     target/prerequisite name is quoted.  For example:
X
X          a:fred : test
X
X     would be parsed as TARGET = a, PREREQUISITES={fred, :,
X     test}, which is not what was intended.  To fix this you must
X     write:
X
X          "a:fred" : test
X
X     Which will be parsed as expected.  See the EXAMPLES section
X     for how to apply "" quoting to a list of targets.
X
AATTTTRRIIBBUUTTEESS
X     ddmmaakkee defines several target attributes.  Attributes may be
X     assigned to a single target, a group of targets, or to all
X     targets in the makefile.  Attributes are used to modify
X     ddmmaakkee actions during target update.  The recognized attri-
X     butes are:
X
X
X     ..EEPPIILLOOGG     Insert shell epilog code when executing a group
X                 recipe associated with any target having this
X
X
X
Version 3.70                    UW                              9
X
X
X
X
DMAKE(p)             Unsupported Free Software            DMAKE(p)
X
X
X
X                 attribute set.
X
X     ..IIGGNNOORREE     Ignore an error when trying to make any target
X                 with this attribute set.
X
X     ..LLIIBBRRAARRYY    Target is a library.
X
X     ..MMKKSSAARRGGSS    If running in an MSDOS environment then use MKS
X                 extended argument passing conventions to pass
X                 arguments to commands.  Non-MSDOS environments
X                 ignore this attribute.
X
X     ..NNOOIINNFFEERR    Any target with this attribute set will not be
X                 subjected to transitive closure if it is
X                 inferred as a prerequisite of a target whose
X                 recipe and prerequisites are being inferred.
X                 (i.e. the inference algorithm will not use any
X                 prerequisite with this attribute set, as a tar-
X                 get) If specified as '.NOINFER:' (ie. with no
SHAR_EOF
true || echo 'restore of dmake/man/dmake.p failed'
fi
echo 'End of part 15, continue with part 16'
echo 16 > _shar_seq_.tmp
exit 0

exit 0 # Just in case...
-- 
Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
Sterling Software, IMD           UUCP:     uunet!sparky!kent
Phone:    (402) 291-8300         FAX:      (402) 291-4362
Please send comp.sources.misc-related mail to kent@uunet.uu.net.