dvadura@watdragon.waterloo.edu (Dennis Vadura) (06/30/91)
Submitted-by: Dennis Vadura <dvadura@watdragon.waterloo.edu>
Posting-number: Volume 20, Issue 77
Archive-name: dmake/patch02b
Patch-To: dmake: Volume 19, Issue 22-58
#!/bin/sh
# This is a shell archive (produced by shar 3.49)
# To extract the files from this archive, save it to a file, remove
# everything above the "!/bin/sh" line above, and type "sh file_name".
#
# made 06/28/1991 13:56 UTC by dvadura@watdragon
# Source directory /u2/dvadura/src/generic/dmake/dist/addresses
#
# existing files will NOT be overwritten unless -c is specified
#
# This is part 1 of a multipart archive
# do not concatenate these parts, unpack them in order with /bin/sh
#
# This shar contains:
# length mode name
# ------ ---------- ------------------------------------------
# 404337 -rw-r----- dm37p2
#
if test -r _shar_seq_.tmp; then
echo 'Must unpack archives in sequence!'
echo Please unpack part `cat _shar_seq_.tmp` next
exit 1
fi
# ============= dm37p2 ==============
if test -f 'dm37p2' -a X"$1" != X"-c"; then
echo 'x - skipping dm37p2 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting dm37p2 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'dm37p2' &&
X#!/bin/sh
X# dodiff: Directory tree maintainer (v1.1)
X#
X# DMAKE 3.7 PATCH #2
X# ------------------
X# Priority: Medium
X#
X# Prerequisite: dmake 3.7 patch level 1 full distribution.
X#
X# Location: You can obtain a copy of the patch from watmsg.uwaterloo.edu
X# via anonymous ftp from the directory pub/dmake. The file is
X# dmake37-patch2.Z. The patch is also submitted for posting
X# to comp.sources.misc.
X#
X# Application: Change directory to the source directory containing the
X# dmake sources and run the patch through /bin/sh. It constructs
X# any required subdirectories and applies the patch program as
X# needed to apply patches to files. If you obtain the patch
X# files from a news group then you must first build the patch
X# source by running all parts of the patch through unshar or
X# /bin/sh.
X#
X# Acknowledgment: Thanks to everyone who wrote with suggestions or bug fixes.
X# In most cases your fixes and/or suggestions were
X# incorporated into the sources. Your continued input makes
X# dmake a better tool.
X#
X#
X# DETAILS OF FIXES:
X# -----------------
X# - Fixed a bug in function.c. If you used a $(shell ...) macro in a line
X# which got expanded from within the input buffer Buffer (eg. in a rule
X# definition) nasty things could happen since _exec_shell re-used Buffer
X# when it shouldn't have.
X#
X# - Made sure that -v and -n flags do not take effect across a $(shell ...)
X# macro expansion. This ensures that $(shell ...) recipes are always
X# executed when the macro is expanded and never contain noise from a -v
X# flag. Dunno how I missed this the first time around.
X#
X# - Fixed a bug that set Current_target to NULL when making successive recipe
X# lines individually. This meant that temp files were being deleted late,
X# possibly from the wrong places, and hence not deleted at all.
X#
X# - Fixed several inference bugs. Nothing too major:
X#
X# 1. a recipe of the form
X# %.foo:
X# @[
X# stuff ...
X# ]
X# didn't get the group recipe attribute attached to the %.foo node
X# so when the inference algorithm was run it failed to attach the
X# correct attribute to go along with the new recipe.
X#
X# 2. Inference algorithm now marks for REMOVAL, ALL intermediate nodes
X# (it did this before too -- but by luck), and marks ALL nodes as
X# TARGETS, and all but the first node as being INFERRED. I doubt
X# that anyone will notice these changes. I had to have a really
X# screwy makefile to find the bug.
X#
X# - Fixed $(shell ...) macro so that it can be nested to arbitrary depths.
X# It uses a single temporary file for the purpose and keeps reusing it for
X# each nested instance. Works like a charm.
X#
X# - Fixed bug in rulparse.c where an attribute flag variable was of type
X# int and not t_attr as it should be. This caused problems on 16-bit
X# machines (reported by lots of people).
X#
X# - Fixed a bug reported by paul@halserv2.hal.com, dmake.c line 373, would
X# dereference a NULL pointer if the hash table didn't contain an entry.
X#
X# - Fixed a bug reported by paul@halserv2.hal.com, rulparse.c line 949
X# would dereference a NULL pointer if it tried to match a certain sequence
X# of %-meta rules.
X#
X# - Fixed a bug reported by paul@halserv2.hal.com, make.c, the SET_TOKEN
X# call was getting called with a NULL pointer.
X#
X# - Minor tweaks to the OS/2 scripts as reported by Frank Waley. Should make
X# MSC compiles work now.
X#
X# - Changed sysvr4/stdarg.h to ensure that va_dcl is defined.
X#
X# - Modified man page. The diffs would have been bigger than the source so
X# I just included new copies.
X#
X#
X#
X# DETAILS OF ADDITIONS/CHANGES:
X# -----------------------------
X# - Added a sysvr3/pwd directory along with getcwd.c. The reason for this
X# addition is to hopefully eliminate once and for all the annoying
X# "lost a child" bug. If you see this bug appear then remake dmake with
X#
X# make sysvr3pwd
X# or make xenixpwd
X#
X# Both create a version of dmake that uses a local version of getcwd rather
X# than the C-library version. Thanks to Gwyn Dyer for providing the code
X# to getcwd.c. I used his version as it compiled on a xenix machine and
X# seemed to be the more widely used one. Thanks to all that sent me copies
X# of it. I hope this gets rid of the lost child issue once and for all.
X#
X# - The MSDOS version now behaves identically to the UNIX versions when
X# running recipes containing embedded cd calls. I changed dmake to restore
X# the directory it was in prior to invoking a child process.
X#
X# The following recipe will now behave identically under UNIX and DOS
X#
X# all:
X# cd foo; make ...
X# cd fee; make ...
X#
X# Previously to this change, the DOS version of DMAKE would have been in
X# the foo directory after the first line of the recipe, and would not
X# find fee.
X#
X# - Added the -B flag. This is in response to several requests at supporting
X# spaces in front of recipe lines. This does not come without a price.
X# By default the flag is off and tabs are required to start recipe lines
X# unless it is a group recipe. If you turn the flag on, either through
X# supplying -B on the command line or by putting ".NOTABS := y" in the
X# makefile then when dmake scans non-group recipes they are terminated at
X# the first line that is only white space or contains no leading white space
X# and is either a macro definition or a rule definition.
X#
X# Consider the following makefile:
X#
X# all:
X# <tab> echo hi there
X# <space>echo e:test
X# <tab> echo hello
X#
X# By default the recipe for all is simply: "echo hi there", and the remaining
X# two lines are parsed as a new rule definition with the associated recipe
X# being "echo hello". If you supply -B, then the recipe for 'all' is all
X# three lines above, since the second recipe line now begins with a space.
X#
X# If you change the makefile to contain:
X#
X# all:
X# <tab> echo hi there
X#
X# <space>echo e:test
X# <tab> echo hi there
X#
X# then the -B flag has no visible effect. The makefile is parsed the
X# same in both cases as the first recipe is terminated by the empty line.
X# or a valid recipe rule.
X#
X# If you now change the makefile to contain:
X#
X# all:
X# <tab> echo hi there
X#
X# <tab> echo e:test
X# <tab> echo hi there
X#
X# then by default all three lines form the recipe for 'all'.
X# Specifying -B terminates the first recipe after the first line and begins
X# a new rule definition with the line "echo e:test".
X#
X# In summary:
X# By default: (no -B) a recipe is terminated by a line containing some
X# text that does not begin with a <tab>.
X#
X# Specify -B: A recipe is terminated by a line that is only white space
X# or by a line containg text that contains NO leading
X# white space.
X#
X# You can use the .NOTABS macro to set/reset this behaviour at will from
X# within a makefile. See the man page.
X#
X# - Added OSRELEASE=coherent targets and directories to support Coherent
X# systems. Patches provided by David Fenyes (dfenyes@thesis1.med.uth.tmc.edu).
X#
X# - Added OSRELEASE=msdos OSENVIRONMENT=ztcdos targets and directories to
X# support making of dmake using Zortech C++ 2.1. Patches provided by
X# David Engel (ods@utdallas.edu).
X#
X# Remove Obsolete files from distribution
X
X# Now use a shar archive to add any new files to the distribution
X# This is a shell archive (produced by shar 3.49)
X# To extract the files from this archive, save it to a file, remove
X# everything above the "!/bin/sh" line above, and type "sh file_name".
X#
X# made 06/28/1991 13:27 UTC by dvadura@watdragon
X# Source directory /u2/dvadura/src/generic/dmake/src
X#
X# existing files will NOT be overwritten unless -c is specified
X#
X# This shar contains:
X# length mode name
X# ------ ---------- ------------------------------------------
X# 125864 -rw-r----- man/dmake.p
X# 98450 -r--r----- man/dmake.tf
X# 1976 -r--r----- msdos/ztcdos/config.h
X# 1990 -rw-r----- msdos/ztcdos/config.mk
X# 473 -r--r----- msdos/ztcdos/environ.c
X# 1 -rw-r----- msdos/ztcdos/lib.rsp
X# 1 -rw-r----- msdos/ztcdos/libswp.rsp
X# 3232 -rw-r----- msdos/ztcdos/mk.bat
X# 3235 -rw-r----- msdos/ztcdos/mkswp.bat
X# 614 -rw-r----- msdos/ztcdos/obj.rsp
X# 626 -rw-r----- msdos/ztcdos/objswp.rsp
X# 5417 -rw-r----- msdos/ztcdos/public.h
X# 3861 -rw-r----- msdos/ztcdos/startup.mk
X# 1738 -r--r----- msdos/ztcdos/tempnam.c
X# 1940 -r--r--r-- unix/coherent/config.h
X# 765 -rw-r--r-- unix/coherent/config.mk
X# 306 -r--r--r-- unix/coherent/getcwd.c
X# 2405 -rw-r--r-- unix/coherent/make.sh
X# 5318 -rw-r----- unix/coherent/public.h
X# 3221 -rw-r--r-- unix/coherent/startup.mk
X# 469 -r--r--r-- unix/coherent/stdarg.h
X# 346 -r--r--r-- unix/coherent/stdlib.h
X# 133 -r--r--r-- unix/coherent/time.h
X# 4312 -r--r--r-- unix/coherent/vfprintf.c
X# 559 -rw-r----- unix/sysvr3/pwd/config.mk
X# 5834 -r--r----- unix/sysvr3/pwd/getcwd.c
X# 2739 -rw-r----- unix/sysvr3/pwd/make.sh
X# 5318 -rw-r----- unix/sysvr3/pwd/public.h
X# 3221 -rw-r----- unix/sysvr3/pwd/startup.mk
X#
X# ============= man/dmake.p ==============
Xif test ! -d 'man'; then
X echo 'x - creating directory man'
X mkdir 'man'
Xfi
Xif test -f 'man/dmake.p' -a X != X; then
X echo 'x - skipping man/dmake.p (File already exists)'
Xelse
Xecho 'x - extracting man/dmake.p (Text)'
Xsed 's/^X//' << 'SHAR_EOF' > 'man/dmake.p' &&
XX
XX
XX
XX
XDMAKE(p) Unsupported Free Software DMAKE(p)
XX
XX
XX
XNNAAMMEE
XX ddmmaakkee - maintain program groups, or interdependent files
XX
XSSYYNNOOPPSSIISS
XX ddmmaakkee [-ABceEhiknpqrsStTuVx] [-v{dfimt}] [-P#] [-{f|C|K}
XX file] [macro[*][+][:]=_v_a_l_u_e ...] [target ...]
XX
XDDEESSCCRRIIPPTTIIOONN
XX ddmmaakkee executes commands found in an external file called a
XX _m_a_k_e_f_i_l_e to update one or more target names. Each target
XX may depend on zero or more prerequisite targets. If any of
XX the target's prerequisites is newer than the target or if
XX the target itself does not exist, then ddmmaakkee will attempt to
XX make the target.
XX
XX If no --ff command line option is present then ddmmaakkee searches
XX for an existing _m_a_k_e_f_i_l_e from the list of prerequisites
XX specified for the special target _._M_A_K_E_F_I_L_E_S (see the STARTUP
XX section for more details). If "-" is the name of the file
XX specified to the --ff flag then ddmmaakkee uses standard input as
XX the source of the makefile text.
XX
XX Any macro definitions (arguments with embedded "=" signs)
XX that appear on the command line are processed first and
XX supersede definitions for macros of the same name found
XX within the makefile. In general it is impossible for defin-
XX itions found inside the makefile to redefine a macro defined
XX on the command line, see the MACROS section for an excep-
XX tion.
XX
XX If no _t_a_r_g_e_t names are specified on the command line, then
XX ddmmaakkee uses the first non-special target found in the
XX makefile as the default target. See the SSPPEECCIIAALL TTAARRGGEETTSS
XX section for the list of special targets and their function.
XX ddmmaakkee is a re-implementation of the UNIX Make utility with
XX significant enhancements. Makefiles written for most previ-
XX ous versions of _M_a_k_e will be handled correctly by ddmmaakkee..
XX Known differences between ddmmaakkee and other versions of make
XX are discussed in the CCOOMMPPAATTIIBBIILLIITTYY section found at the end
XX of this document.
XX
XOOPPTTIIOONNSS
XX --AA Enable AUGMAKE special inference rule transformations
XX (see the "PERCENT(%) RULES" section), these are set to
XX off by default.
XX
XX --BB Enable the use of spaces instead of <tabs> to begin
XX recipe lines. This flag equivalent to the .NOTABS spe-
XX cial macro and is further described below.
XX
XX --cc Use non-standard comment stripping. If you specify --cc
XX then ddmmaakkee will treat any ## character as a start of
XX
XX
XX
XVersion 3.70 UW 1
XX
XX
XX
XX
XDMAKE(p) Unsupported Free Software DMAKE(p)
XX
XX
XX
XX comment character wherever it may appear unless it is
XX escaped by a \.
XX
XX --CC [[++]]ffiillee
XX This option writes to _f_i_l_e a copy of standard output
XX and standard error from any child processes and from
XX the ddmmaakkee process itself. If you specify a ++ prior to
XX the file name then the text is appended to the previous
XX contents of _f_i_l_e. This option is active in the MSDOS
XX implementation only and is ignored by non-MSDOS ver-
XX sions of ddmmaakkee..
XX
XX --ee Read the environment and define all strings of the form
XX 'EENNVV--VVAARR=_e_v_a_l_u_e' defined within as macros whose name is
XX EENNVV--VVAARR, and whose value is '_e_v_a_l_u_e'. The environment
XX is processed prior to processing the user specified
XX makefile thereby allowing definitions in the makefile
XX to override definitions in the environment.
XX
XX --EE Same as -e, except that the environment is processed
XX after the user specified makefile has been processed
XX (thus definitions in the environment override defini-
XX tions in the makefile). The -e and -E options are
XX mutually exclusive. If both are given the latter takes
XX effect.
XX
XX --ff ffiillee
XX Use ffiillee as the source for the makefile text. Only one
XX --ff option is allowed.
XX
XX --hh Print the command summary for ddmmaakkee.
XX
XX --ii Tells ddmmaakkee to ignore errors, and continue making other
XX targets. This is equivalent to the .IGNORE attribute
XX or macro.
XX
XX --KK ffiillee
XX Turns on ..KKEEEEPP__SSTTAATTEE state tracking and tells ddmmaakkee to
XX use _f_i_l_e as the state file.
XX
XX --kk Causes ddmmaakkee to ignore errors caused by command execu-
XX tion and to make all targets not depending on targets
XX that could not be made. Ordinarily ddmmaakkee stops after a
XX command returns a non-zero status, specifying --kk causes
XX ddmmaakkee to ignore the error and continue to make as much
XX as possible.
XX
XX --nn Causes ddmmaakkee to print out what it would have executed,
XX but does not actually execute the commands. A special
XX check is made for the string "$(MAKE)" inside a recipe
XX line, if found, the line is expanded and invoked,
XX thereby enabling recursive makes to give a full
XX
XX
XX
XVersion 3.70 UW 2
XX
XX
XX
XX
XDMAKE(p) Unsupported Free Software DMAKE(p)
XX
XX
XX
XX description of all that they will do. The check for
XX "$(MAKE)" is disabled inside group recipes.
XX
XX --pp Print out a version of the digested makefile in human
XX readable form. (useful for debugging, but cannot be
XX re-read by ddmmaakkee)
XX
XX --PP## On systems that support multi-processing cause ddmmaakkee to
XX use _# concurrent child processes to make targets. See
XX the "MULTI PROCESSING" section for more information.
XX
XX --qq Check and see if the target is up to date. Exits with
XX code 0 if up to date, 1 otherwise.
XX
XX --rr Tells ddmmaakkee not to read the initial startup makefile,
XX see STARTUP section for more details.
XX
XX --ss Tells ddmmaakkee to do all its work silently and not echo
XX the commands it is executing to stdout (also suppresses
XX warnings). This is equivalent to the .SILENT attri-
XX bute or macro.
XX
XX --SS Force sequential execution of recipes on architectures
XX which support concurrent makes. For backward compati-
XX bility with old makefiles that have nasty side-effect
XX prerequisite dependencies.
XX
XX --tt Causes ddmmaakkee to touch the targets and bring them up to
XX date without executing any commands.
XX
XX --TT Tells ddmmaakkee to not perform transitive closure on the
XX inference graph.
XX
XX --uu Force an unconditional update. (ie. do everything that
XX would be done if everything that a target depended on
XX was out of date)
XX
XX --vv[[ddffiimmtt]]
XX Verbose flag, when making targets print to stdout what
XX we are going to make and what we think its time stamp
XX is. The optional flags [[ddffiimmtt]] can be used to restrict
XX the information that is displayed. In the absence of
XX any optional flags all are assumed to be given (ie. --vv
XX is equivalent to --vvddffiimmtt). The meanings of the
XX optional flags are:
XX
XX dd Notify of change directory operations only.
XX
XX ff Notify of file I/O operations only.
XX
XX ii Notify of inference algorithm operation only.
XX
XX
XX
XX
XVersion 3.70 UW 3
XX
XX
XX
XX
XDMAKE(p) Unsupported Free Software DMAKE(p)
XX
XX
XX
XX mm Notify of target update operations only.
XX
XX tt Keep any temporary files created; normally they
XX are automatically deleted.
XX
XX --VV Print the version of ddmmaakkee, and values of builtin mac-
XX ros.
XX
XX --xx Upon processing the user makefile export all non-
XX internally defined macros to the user's environment.
XX This option together with the -e option allows SYSV
XX AUGMAKE recursive makes to function as expected.
XX
XIINNDDEEXX
XX Here is a list of the sections that follow and a short
XX description of each. Perhaps you won't have to read the
XX whole man page to find what you need.
XX
XX SSTTAARRTTUUPP Describes ddmmaakkee initialization.
XX
XX SSYYNNTTAAXX Describes the syntax of makefile expres-
XX sions.
XX
XX AATTTTRRIIBBUUTTEESS Describes the notion of attributes and
XX how they are used when making targets.
XX
XX MMAACCRROOSS Defining and expanding macros.
XX
XX RRUULLEESS AANNDD TTAARRGGEETTSS How to define targets and their prere-
XX quisites.
XX
XX RREECCIIPPEESS How to tell ddmmaakkee how to make a target.
XX
XX TTEEXXTT DDIIVVEERRSSIIOONNSS How to use text diversions in recipes and
XX macro expansions.
XX
XX SSPPEECCIIAALL TTAARRGGEETTSS Some targets are special.
XX
XX SSPPEECCIIAALL MMAACCRROOSS Macros used by ddmmaakkee to alter the pro-
XX cessing of the makefile, and those
XX defined by ddmmaakkee for the user.
XX
XX CCOONNTTRROOLL MMAACCRROOSS Itemized list of special control macros.
XX
XX RRUUNN--TTIIMMEE MMAACCRROOSS Discussion of special run-time macros
XX such as $@ and $<.
XX
XX FFUUNNCCTTIIOONN MMAACCRROOSS GNU style function macros, only $(mktmp
XX ...) for now.
XX
XX DDYYNNAAMMIICC PPRREERREEQQUUIISSIITTEESS
XX Processing of prerequisites which contain
XX
XX
XX
XVersion 3.70 UW 4
XX
XX
XX
XX
XDMAKE(p) Unsupported Free Software DMAKE(p)
XX
XX
XX
XX macro expansions in their name.
XX
XX BBIINNDDIINNGG TTAARRGGEETTSS The rules that ddmmaakkee uses to bind a tar-
XX get to an existing file in the file sys-
XX tem.
XX
XX PPEERRCCEENNTT((%%)) RRUULLEESS Specification of recipes to be used by
XX the inference algorithm.
XX
XX MMAAKKIINNGG IINNFFEERREENNCCEESS The rules that ddmmaakkee uses when inferring
XX how to make a target which has no expli-
XX cit recipe. This and the previous sec-
XX tion are really a single section in the
XX text.
XX
XX MMAAKKIINNGG TTAARRGGEETTSS How ddmmaakkee makes targets other than
XX libraries.
XX
XX MMAAKKIINNGG LLIIBBRRAARRIIEESS How ddmmaakkee makes libraries.
XX
XX KKEEEEPP SSTTAATTEE A discussion of how .KEEP_STATE works.
XX
XX MMUULLTTII PPRROOCCEESSSSIINNGG Discussion of ddmmaakkee''ss parallel make
XX facilities for architectures that support
XX them.
XX
XX CCOONNDDIITTIIOONNAALLSS Conditional expressions which control the
XX processing of the makefile.
XX
XX EEXXAAMMPPLLEESS Some hopefully useful examples.
XX
XX CCOOMMPPAATTIIBBIILLIITTYY How ddmmaakkee compares with previous versions
XX of make.
XX
XX LLIIMMIITTSS Limitations of ddmmaakkee.
XX
XX PPOORRTTAABBIILLIITTYY Comments on writing portable makefiles.
XX
XX FFIILLEESS Files used by ddmmaakkee.
XX
XX SSEEEE AALLSSOO Other related programs, and man pages.
XX
XX AAUUTTHHOORR The guy responsible for this thing.
XX
XX BBUUGGSS Hope not.
XX
XSSTTAARRTTUUPP
XX When ddmmaakkee begins execution it first processes the command
XX line and then processes an initial startup-makefile. This
XX is followed by an attempt to locate and process a user sup-
XX plied makefile. The startup file defines the default values
XX of all required control macros and the set of default rules
XX
XX
XX
XVersion 3.70 UW 5
XX
XX
XX
XX
XDMAKE(p) Unsupported Free Software DMAKE(p)
XX
XX
XX
XX for making targets and inferences. When searching for the
XX startup makefile, ddmmaakkee searches the following locations, in
XX the order specified, until a startup file is located:
XX
XX 1. The location given as the value of the macro MAK-
XX ESTARTUP defined on the command line.
XX
XX 2. The location given as the value of the environment
XX variable MAKESTARTUP defined in the current
XX environment.
XX
XX 3. The location given as the value of the macro MAK-
XX ESTARTUP defined internally within ddmmaakkee.
XX
XX The above search is disabled by specifying the -r option on
XX the command line. An error is issued if a startup makefile
XX cannot be found and the -r option was not specified. A user
XX may substitute a custom startup file by defining the MAKES-
XX TARTUP environment variable or by redefining the MAKESTARTUP
XX macro on the command line. To determine where ddmmaakkee looks
XX for the default startup file, check your environment or
XX issue the command _"_d_m_a_k_e _-_V_".
XX
XX A similar search is performed to locate a default user
XX makefile when no --ff command line option is specified. By
XX default, the prerequisite list of the special target
XX .MAKEFILES specifies the names of possible makefiles and the
XX search order that ddmmaakkee should use to determine if one
XX exists. A typical definition for this target is:
XX
XX .MAKEFILES : makefile.mk Makefile makefile
XX
XX ddmmaakkee will first look for makefile.mk and then the others.
XX If a prerequisite cannot be found ddmmaakkee will try to make it
XX before going on to the next prerequisite. For example,
XX makefile.mk can be checked out of an RCS file if the proper
XX rules for doing so are defined in the startup file.
XX
XSSYYNNTTAAXX
XX This section is a summary of the syntax of makefile state-
XX ments. The description is given in a style similar to BNF,
XX where { } enclose items that may appear zero or more times,
XX and [ ] enclose items that are optional. Alternative pro-
XX ductions for a left hand side are indicated by '->', and
XX newlines are significant. All symbols in bboolldd type are text
XX or names representing text supplied by the user.
XX
XX
XX
XX Makefile -> { Statement }
XX
XX
XX
XX
XX
XVersion 3.70 UW 6
XX
XX
XX
XX
XDMAKE(p) Unsupported Free Software DMAKE(p)
XX
XX
XX
XX Statement -> Macro-Definition
XX -> Conditional
XX -> Rule-Definition
XX -> Attribute-Definition
XX
XX Macro-Definition -> MMAACCRROO == LLIINNEE
XX -> MMAACCRROO **== LLIINNEE
XX -> MMAACCRROO ::== LLIINNEE
XX -> MMAACCRROO **::== LLIINNEE
XX -> MMAACCRROO ++== LLIINNEE
XX -> MMAACCRROO ++::== LLIINNEE
XX
XX Conditional -> ..IIFF expression
XX Makefile
XX [ ..EELLIIFF expression
XX Makefile ]
XX [ ..EELLSSEE
XX Makefile ]
XX ..EENNDD
XX
XX expression -> LLIINNEE
XX -> SSTTRRIINNGG ==== LLIINNEE
XX -> SSTTRRIINNGG !!== LLIINNEE
XX
XX
XX Rule-Definition -> target-definition
XX [ recipe ]
XX
XX target-definition -> targets [attrs] op { PPRREERREEQQUUIISSIITTEE } [;; rcp-line]
XX
XX targets -> target { targets }
XX -> ""target"" { targets }
XX
XX target -> special-target
XX -> TTAARRGGEETT
XX
XX attrs -> attribute { attrs }
XX -> ""attribute"" { attrs }
XX
XX op -> :: { modifier }
XX
XX modifier -> ::
XX -> ^^
XX -> !!
XX -> --
XX
XX recipe -> { TTAABB rcp-line }
XX -> [@@][%%][--] [[
XX { LLIINNEE }
XX ]]
XX
XX
XX
XX
XX
XVersion 3.70 UW 7
XX
XX
XX
XX
XDMAKE(p) Unsupported Free Software DMAKE(p)
XX
XX
XX
XX rcp-line -> [@@][%%][--][++] LLIINNEE
XX
XX
XX Attribute-Definition -> attrs :: targets
XX
XX
XX attribute -> ..EEPPIILLOOGG
XX -> ..IIGGNNOORREE
XX -> ..LLIIBBRRAARRYY
XX -> ..MMKKSSAARRGGSS
XX -> ..NNOOIINNFFEERR
XX -> ..NNOOSSTTAATTEE
XX -> ..PPHHOONNYY
XX -> ..PPRREECCIIOOUUSS
XX -> ..PPRROOLLOOGG
XX -> ..SSEETTDDIIRR==_p_a_t_h
XX -> ..SSIILLEENNTT
XX -> ..SSEEQQUUEENNTTIIAALL
XX -> ..SSWWAAPP
XX -> ..UUSSEESSHHEELLLL
XX -> ..SSYYMMBBOOLL
XX -> ..UUPPDDAATTEEAALLLL
XX
XX special-target -> ..EERRRROORR
XX -> ..EEXXPPOORRTT
XX -> ..GGRROOUUPPEEPPIILLOOGG
XX -> ..GGRROOUUPPPPRROOLLOOGG
XX -> ..IIMMPPOORRTT
XX -> ..IINNCCLLUUDDEE
XX -> ..IINNCCLLUUDDEEDDIIRRSS
XX -> ..MMAAKKEEFFIILLEESS
XX -> ..RREEMMOOVVEE
XX -> ..SSOOUURRCCEE
XX -> ..SSOOUURRCCEE.._s_u_f_f_i_x
XX -> ._s_u_f_f_i_x_1._s_u_f_f_i_x_2
XX
XX
XX Where, TTAABB represents a <tab> character, SSTTRRIINNGG represents
XX an arbitrary sequence of characters, and LLIINNEE represents a
XX possibly empty sequence of characters terminated by a non-
XX escaped (not immediately preceded by a backslash '\') new-
XX line character. MMAACCRROO, PPRREERREEQQUUIISSIITTEE, and TTAARRGGEETT each
XX represent a string of characters not including space or tab
XX which respectively form the name of a macro, prerequisite or
XX target. The name may itself be a macro expansion expres-
XX sion. A LLIINNEE can be continued over several physical lines
XX by terminating it with a single backslash character. Com-
XX ments are initiated by the pound ## character and extend to
XX the end of line. All comment text is discarded, a '#' may
XX be placed into the makefile text by escaping it with '\'
XX (ie. \# translates to # when it is parsed). An exception to
XX this occurs when a # is seen inside a recipe line that
XX
XX
XX
XVersion 3.70 UW 8
XX
XX
XX
XX
XDMAKE(p) Unsupported Free Software DMAKE(p)
XX
XX
XX
XX begins with a <tab> or is inside a group recipe. If you
XX specify the --cc command line switch then this behavior is
XX disabled and ddmmaakkee will treat all # characters as start of
XX comment indicators unless they are escaped by \. A set of
XX continued lines may be commented out by placing a single #
XX at the start of the first line. A continued line cannot
XX span more than one makefile.
XX
XX wwhhiittee ssppaaccee is defined to be any combination of <space>,
XX <tab>, and the sequence \<nl> when \<nl> is used to ter-
XX minate a LINE. When processing mmaaccrroo definition lines, any
XX amount of white space is allowed on either side of the macro
XX operator (=, *=, :=, *:=, += or +:=), and white space is
XX stripped from both before and after the macro value string.
XX The sequence \<nl> is treated as white space during recipe
XX expansion and is deleted from the final recipe string. You
XX must escape the \<nl> with another \ in order to get a \ at
XX the end of a recipe line. The \<nl> sequence is deleted
XX from macro values when they are expanded.
XX
XX When processing ttaarrggeett definition lines, the recipe for a
XX target must, in general, follow the first definition of the
XX target (See the RULES AND TARGETS section for an exception),
XX and the recipe may not span across multiple makefiles. Any
XX targets and prerequisites found on a target definition line
XX are taken to be white space separated tokens. The rule
XX operator (_o_p in SYNTAX section) is also considered to be a
XX token but does not require white space to precede or follow
XX it. Since the rule operator begins with a `:', traditional
XX versions of make do not allow the `:' character to form a
XX valid target name. ddmmaakkee allows `:' to be present in
XX target/prerequisite names as long as the entire
XX target/prerequisite name is quoted. For example:
XX
XX a:fred : test
XX
XX would be parsed as TARGET = a, PREREQUISITES={fred, :,
XX test}, which is not what was intended. To fix this you must
XX write:
XX
XX "a:fred" : test
XX
XX Which will be parsed as expected. See the EXAMPLES section
XX for how to apply "" quoting to a list of targets.
XX
XAATTTTRRIIBBUUTTEESS
XX ddmmaakkee defines several target attributes. Attributes may be
XX assigned to a single target, a group of targets, or to all
XX targets in the makefile. Attributes are used to modify
XX ddmmaakkee actions during target update. The recognized attri-
XX butes are:
XX
XX
XX
XX
XVersion 3.70 UW 9
XX
XX
XX
XX
XDMAKE(p) Unsupported Free Software DMAKE(p)
XX
XX
XX
XX ..EEPPIILLOOGG Insert shell epilog code when executing a group
XX recipe associated with any target having this
XX attribute set.
XX
XX ..IIGGNNOORREE Ignore an error when trying to make any target
XX with this attribute set.
XX
XX ..LLIIBBRRAARRYY Target is a library.
XX
XX ..MMKKSSAARRGGSS If running in an MSDOS environment then use MKS
XX extended argument passing conventions to pass
XX arguments to commands. Non-MSDOS environments
XX ignore this attribute.
XX
XX ..NNOOIINNFFEERR Any target with this attribute set will not be
XX subjected to transitive closure if it is
XX inferred as a prerequisite of a target whose
XX recipe and prerequisites are being inferred.
XX (i.e. the inference algorithm will not use any
XX prerequisite with this attribute set, as a tar-
XX get) If specified as '.NOINFER:' (ie. with no
XX prerequisites or targets) then the effect is
XX equivalent to specifying --TT on the command line.
XX
XX ..NNOOSSTTAATTEE Any target with this attribute set will not have
XX command line flag information stored in the
XX state file if .KEEP_STATE has been enabled.
XX
XX ..PPHHOONNYY Any target with this attribute set will have its
XX recipe executed each time the target is made
XX even if a file matching the target name can be
XX located. Any targets that have a .PHONY attri-
XX buted target as a prerequisite will be made each
XX time the .PHONY attributed prerequisite is made.
XX
XX ..PPRREECCIIOOUUSS Do not remove associated target under any cir-
XX cumstances. Set by default for any targets
XX whose corresponding files exist in the file sys-
XX tem prior to the execution of ddmmaakkee.
XX
XX ..PPRROOLLOOGG Insert shell prolog code when executing a group
XX recipe associated with any target having this
XX attribute set.
XX
XX ..SSEEQQUUEENNTTIIAALL Force a sequential make of the associated
XX target's prerequisites.
XX
XX ..SSEETTDDIIRR Change current working directory to specified
XX directory when making the associated target.
XX You must specify the directory at the time the
XX attribute is specified. To do this simply give
XX _._S_E_T_D_I_R_=_p_a_t_h as the attribute. _p_a_t_h is expanded
XX
XX
XX
XVersion 3.70 UW 10
XX
XX
XX
XX
XDMAKE(p) Unsupported Free Software DMAKE(p)
XX
XX
XX
XX and the result is used as the value of the
XX directory to change to. If path is surrounded
XX by single quotes then path is not expanded, and
XX is used literally as the directory name. If the
XX _p_a_t_h contains any `:' characters then the entire
SHAR_EOF
true || echo 'restore of dm37p2 failed'
fi
echo 'End of part 1'
echo 'File dm37p2 is continued in part 2'
echo 2 > _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.