dvadura@watdragon.waterloo.edu (Dennis Vadura) (07/27/90)
Posting-number: Volume 14, Issue 20 Submitted-by: dvadura@watdragon.waterloo.edu (Dennis Vadura) Archive-name: dmake/part10 #!/bin/sh # this is part 10 of a multipart archive # do not concatenate these parts, unpack them in order with /bin/sh # file man/dmake.p continued # CurArch=10 if test ! -r s2_seq_.tmp then echo "Please unpack part 1 first!" exit 1; fi ( read Scheck if test "$Scheck" != $CurArch then echo "Please unpack part $Scheck next!" exit 1; else exit 0; fi ) < s2_seq_.tmp || exit 1 echo "x - Continuing file man/dmake.p" sed 's/^X//' << 'SHAR_EOF' >> man/dmake.p X X X XVersion 3.50 UW 10 X X X X XDMAKE(p) Unsupported Software DMAKE(p) X X X X assignment allows macro values to grow: X X MACRO += LINE X X adds the value of LINE to the previous value of MACRO X separating the two by a single space (LINE is not expanded). X The final form: X X MACRO +:= LINE X X is similar to ++==, with the difference that the value of LINE X is expanded before being added to the previous value of X MACRO. X X When ddmmaakkee defines a non-environment macro it strips leading X and trailing white space from the macro value. Macros X imported from the environment via either the .IMPORT special X target (see the SPECIAL TARGETS section), or the --ee, or --EE X flags are an exception to this rule. Their values are X always taken literally and white space is never stripped. X In addition, macros defined using the .IMPORT special target X do not have their values expanded when they are used within X a makefile. In contrast, environment macros that are X imported due to the specification of the --ee or --EE flags are X subject to expansion when used. X X To specify a macro expansion enclose the name in () or {} X and precede it with a dollar sign $. Thus $(TEST) X represents an expansion of the macro variable named TEST. X If TEST is defined then $(TEST) is replaced by its expanded X value. If TEST is not defined then $(TEST) expands to the X NULL string (this is equivalent to defining a macro as X 'TEST=' ). A short form may be used for single character X named macros. In this case the parentheses are optional, X and $(I) is equivalent to $I. Macro expansion is recursive, X hence if the value string contains an expression represent- X ing a macro expansion, the expansion is performed. Circular X macro expansions are detected and cause an error to be X issued. X X When defining a macro the given macro name is first expanded X before being used to define the macro. Thus it is possible X to define macros whose names depend on values of other mac- X ros. For example, suppose X X CWD = $(PWD:b) X X is defined, then the value of $(CWD) is the name of the X current directory. This can be used to define macros X specific to this directory, for example: X X _$(CWD).prt = list of files to print... X X X XVersion 3.50 UW 11 X X X X XDMAKE(p) Unsupported Software DMAKE(p) X X X X The actual name of the defined macro is a function of the X current directory. A construct such as this is useful when X processing a hierarchy of directories using .SETDIR attri- X buted targets and a collection of small distributed makefile X stubs. X X Macro variables may be defined within the makefile, on the X command line, or imported from the environment. X X ddmmaakkee supports several non-standard macro expansions: The X first is of the form: X X _$_(_m_a_c_r_o___n_a_m_e_:_m_o_d_i_f_i_e_r___l_i_s_t_:_m_o_d_i_f_i_e_r___l_i_s_t_:_._._._) X X where _m_o_d_i_f_i_e_r___l_i_s_t is chosen from the set { D or d, F or f, X B or b, S or s, T or t } and X X d - directory portion of all path names X f - file (including suffix) portion of path names X b - file (not including suffix) portion of path names X s - simple pattern substitution X t - tokenization. X X Thus if we have the example: X X test = d1/d2/d3/a.out f.out d1/k.out X X The following macro expansions produce the values on the X right of '-->' after expansion. X X $(test:d) --> d1/d2/d3/ d1/ X $(test:b) --> a f k X $(test:f) --> a.out f.out k.out X ${test:db} --> d1/d2/d3/a f d1/k X ${test:s/out/in/:f} --> a.in f.in k.in X $(test:f:t"+") --> a.out+f.out+k.out X X If a token ends in a string composed from the value of the X macro DIRBRKSTR (ie. ends in a directory separator string, X e.g. '/' in UNIX) and you use the ::dd modifier then the X expansion returns the directory name less the final direc- X tory separator string. Thus successive pairs of :d modif- X iers each remove a level of directory in the token string. X X The tokenization modifier takes all white space separated X tokens from the macro value and separates them by the quoted X separator string. The separator string may contain the fol- X lowing escape codes \a => <bel>, \b => <backspace>, \f => X <formfeed>, \n => <nl>, \r => <cr>, \t => <tab>, \v => X <vertical tab>, \" => ", and \xxx => <xxx> where xxx is the X octal representation of a character. Thus the expansion: X X X X XVersion 3.50 UW 12 X X X X XDMAKE(p) Unsupported Software DMAKE(p) X X X X $(test:f:t"+\n") X X gives: X X a.out+ X f.out+ X k.out X X The second non-standard form of macro expansion allows for X recursive macros. It is possible to specify a $(_m_a_c_r_o___n_a_m_e) X or ${_m_a_c_r_o___n_a_m_e} expansion where _m_a_c_r_o___n_a_m_e contains more $( X ... ) or ${ ... } macro expansions itself. X X For example $(CC$(_HOST)$(_COMPILER)) will first expand X CC$(_HOST)$(_COMPILER) to get a result and use that result X as the name of the macro to expand. This is useful for X writing a makefile for more than one target environment. As X an example consider the following hypothetical case. Suppose X that _HOST and _COMPILER are imported from the environment X and are set to represent the host machine type and the host X compiler respectively. X X CFLAGS_VAX_CC = -c -O # _HOST == "_VAX", _COMPILER == "_CC" X CFLAGS_PC_MSC = -c -ML # _HOST == "_PC", _COMPILER == "_MSC" X X # redefine CFLAGS macro as: X X CFLAGS := $(CFLAGS$(_HOST)$(_COMPILER)) X X This causes CFLAGS to take on a value that corresponds to X the environment in which the make is being invoked. X X The final non-standard macro expansion is of the form: X X string1{token_list}string2 X X where string1, string2 and token_list are expanded. After X expansion, string1 is prepended to each token found in X token_list and string2 is appended to each resulting token X from the previous prepend. string1 and string2 are not del- X imited by white space whereas the tokens in token_list are. X A null token in the token list is specified using "". Thus X using another example we have: X X test/{f1 f2}.o --> test/f1.o test/f2.o X test/ {f1 f2}.o --> test/ f1.o f2.o X test/{f1 f2} .o --> test/f1 test/f2 .o X test/{ f1 "f2" "" }.o --> test/f1.o test/f2.o X test/.o X X and X X X X XVersion 3.50 UW 13 X X X X XDMAKE(p) Unsupported Software DMAKE(p) X X X X test/{ d1 d2 }/{ f1 f2 }.o --> test/d1/f1.o X test/d1/f2.o X test/d2/f1.o X test/d2/f2.o X X See the SPECIAL MACROS section for a description of the spe- X cial macros that ddmmaakkee defines and understands. X XRRUULLEESS AANNDD TTAARRGGEETTSS X A makefile contains a series of entries that specify depen- X dencies. Such entries are called _t_a_r_g_e_t_/_p_r_e_r_e_q_u_i_s_i_t_e or X _r_u_l_e definitions. Each rule definition is optionally fol- X lowed by a set of lines that provide a recipe for updating X any targets defined by the rule. Whenever ddmmaakkee attempts to X bring a target up to date and an explicit recipe is provided X with a rule defining the target, that recipe is used to X update the target. A rule definition begins with a line X having the following syntax: X X _<_t_a_r_g_e_t_s_> [_<_a_t_t_r_i_b_u_t_e_s_>] _<_r_u_l_e_o_p_> [_<_p_r_e_r_e_q_u_i_s_i_t_e_s_>] [;_<_r_e_c_i_p_e_>] X X _t_a_r_g_e_t_s is a non-empty list of targets. If the target is a X special target (see SPECIAL TARGETS section below) then it X must appear alone on the rule line. For example: X X .IMPORT .ERROR : ... X X is not allowed since both .IMPORT and .ERROR are special X targets. Special targets are not used in the construction X of the dependency graph and will not be made. X X _a_t_t_r_i_b_u_t_e_s is a possibly empty list of attributes. Any X attribute defined in the ATTRIBUTES section above may be X specified. All attributes will be applied to the list of X named targets in the rule definition. No other targets will X be affected. X X X NOTE: As stated earlier, if both the target list and X prerequisite list are empty but the attributes list X is not, then the specified attributes affect all X targets in the makefile. X X X _r_u_l_e_o_p is a separator which is used to identify the targets X from the prerequisites. Optionally it also provides a X facility for modifying the way in which ddmmaakkee handles the X making of the associated targets. In its simplest form the X operator is a single ':', and need not be separated by white X space from its neighboring tokens. It may additionally be X followed by any of the modifiers { !, ^, -, : }, where: X X X X XVersion 3.50 UW 14 X X X X XDMAKE(p) Unsupported Software DMAKE(p) X X X X !! says execute the recipe for the associated targets once X for each out of date prerequisite. Ordinarily the X recipe is executed once for all out of date prere- X quisites at the same time. X X ^^ says to insert the specified prerequisites, if any, X before any other prerequisites already associated with X the specified targets. In general, it is not useful to X specify ^ with an empty list of prerequisites. X X -- says to clear the previous list of prerequisites before X adding the new prerequisites. Thus, X X .SUFFIXES : X .SUFFIXES : .a .b X X can be replaced by X X .SUFFIXES :- .a .b X X however the old form still works as expected. NOTE: X .SUFFIXES is ignored by ddmmaakkee it is used here simply as X an example. X X :: When the rule operator is not modified by a second ':' X only one set of rules may be specified for making a X target. Multiple definitions may be used to add to the X list of prerequisites that a target depends on. How- X ever, if a target is multiply defined only one defini- X tion may specify a recipe for making the target. X X When a target's rule operator is modified by a second X ':' (:: for example) then this definition may not be X the only definition with a recipe for the target. X There may be other :: target definition lines that X specify a different set of prerequisites with a dif- X ferent recipe for updating the target. Any such target X is made if any of the definitions find it to be out of X date with respect to the related prerequisites and uses X the corresponding recipe to update the target. X X In the following simple example, each rule has a `::' X _r_u_l_e_o_p. In such an operator we call the first `:' the X operator, and the second `:' the modifier. X X a.o :: a.c b.h X first recipe for making a.o X X a.o :: a.y b.h X second recipe for making a.o X X If a.o is found to be out of date with respect to a.c X X X XVersion 3.50 UW 15 X X X X XDMAKE(p) Unsupported Software DMAKE(p) X X X X then the first recipe is used to make a.o. If it is X found out of date with respect to a.y then the second X recipe is used. If a.o is out of date with respect to X b.h then both recipes are invoked to make a.o. In the X last case the order of invocation corresponds to the X order in which the rule definitions appear in the X makefile. X X Targets defined using a single `:' operator with a recipe X may be redefined again with a new recipe by using a `:' X operator with a `:' modifier. This is equivalent to a tar- X get having been initially defined with a rule using a `:' X modifier. Once a target is defined using a `:' modifier it X may not be defined again with a recipe using only the `:' X operator with no `:' modifier. In both cases the use of a X `:' modifier creates a new list of prerequisites and makes X it the current prerequisite list for the target. The `:' X operator with no recipe always modifies the current list of X prerequisites. Thus assuming each of the following defini- X tions has a recipe attached, then: X X joe : fred ... (1) X joe :: more ... (2) X X and X X joe :: fred ... (3) X joe :: more ... (4) X X are legal and mean: add the recipe associated with (2), or X (4) to the set of recipes for joe, placing them after exist- X ing recipes for making joe. The construct: X X joe :: fred ... (5) X joe : more ... (6) X X and X X joe : fred ... (7) X joe : more ... (8) X X are errors since we have two sets of perfectly good recipes X for making the target. X X _p_r_e_r_e_q_u_i_s_i_t_e_s is a possibly empty list of targets that must X be brought up to date before making the current target. X X _r_e_c_i_p_e is a short form and allows the user to specify short X rule definitions on a single line. It is taken to be the X first recipe line in a larger recipe if additional lines X follow the rule definition. If the semi-colon is present X but the recipe line is empty (ie. null string) then it is X X X XVersion 3.50 UW 16 X X X X XDMAKE(p) Unsupported Software DMAKE(p) X X X X taken to be an empty rule. Any target so defined causes the X _D_o_n_'_t _k_n_o_w _h_o_w _t_o _m_a_k_e _._._. error message to be suppressed X when ddmmaakkee tries to make the target and fails. This silence X is maintained for rules that are terminated by a semicolon X and have no following recipe lines, for targets listed on X the command line, and for the first target found in the X makefile. X XRREECCIIPPEESS X The traditional format used by most versions of Make defines X the recipe lines as arbitrary strings that may contain macro X expansions. They follow a rule definition line and may be X spaced apart by comment or blank lines. The list of recipe X lines defining the recipe is terminated by a new target X definition, a macro definition, or end-of-file. Each recipe X line MMUUSSTT begin with a <<TTAABB>> character which may optionally X be followed with one or both of the characters _'_-_@_'. The X _'_-_' indicates that non-zero exit values (ie. errors) are to X be ignored when this recipe line is executed, and the _'_@_' X indicates that the recipe line should NOT be echoed to the X terminal prior to being executed. Both switches are off by X default (ie. by default, errors are significant and commands X are echoed). Global settings activated via command line X options or special attribute or target names may also affect X these settings. An example recipe: X X target : X first recipe line X second recipe line, executed independently of the first. X @a recipe line that is not echoed X -and one that has errors ignored. X X The second and new format of the recipe block begins the X block with the character '[' (the open group character) in X the last non-white space position of a line, and terminates X the block with the character ']' (the close group character) X in the first non-white space position of a line. In this X form each recipe line need not have a leading TAB. This is X called a recipe group. Groups so defined are fed intact as X a single unit to a shell for execution whenever the X corresponding target needs to be updated. If the open group X character '[' is preceded by one or both of - or @ then they X apply to the entire group in the same way that the - and @ X apply to single recipe lines. See the MAKING TARGETS sec- X tion for a description of how ddmmaakkee invokes recipes. Here X is an example of a group recipe: X X target : X [ X first recipe line X second recipe line X all of these recipe lines are fed to a X X X XVersion 3.50 UW 17 X X X X XDMAKE(p) Unsupported Software DMAKE(p) X X X X single copy of a shell for execution. X ] X X XTTEEXXTT DDIIVVEERRSSIIOONNSS X ddmmaakkee supports the notion of text diversions in recipes. If X a recipe line contains the character sequence <<++ it is X recognized and a text diversion is started. This causes X ddmmaakkee to open a temporary file and to copy into that file X all text that is found up to but not including the text X diversion termination sequence ++>>. Any diversions started X with a <<++ must be terminated with a corresponding ++>>; the X terminating ++>> may appear on the same or on a subsequent X recipe line. Nesting of diversions is not supported. X New-lines provided in the recipe that forms the text of a X diversion are inserted into the resulting temporary file at X the appropriate locations. The diversion text may contain X the same escape codes as those described in the MACROS sec- X tion. X X The primary use of diversions is on systems (like MSDOS) X that do not support long command lines. The diversion makes X it possible to produce a temporary file containing the argu- X ments which can then be supplied to a utility via the tem- X porary file. X X Here are some examples: X X all: X cat <+this is a X test of the text diversion+> X X The above will cause ddmmaakkee to execute the command: X X cat /tmp/mk12294AA X X and the contents of the temporary file will be the text X found between the <<++ and ++>> strings of the above recipe. X X OBJ = fred.obj mary.obj joe.obj X all : $(OBJ) X link @<+$(^:t"+\n")\n+> X X The result of making `all' in the second example is the com- X mand: X X link @/tmp/mk02394AA X X where the temporary file contains: X X fred.obj+ X mary.obj+ X X X XVersion 3.50 UW 18 X X X X XDMAKE(p) Unsupported Software DMAKE(p) X X X X joe.obj X X The last line of the file is terminated by a new-line which X is inserted due to the \n placed immediately before the ++>> X text diversion terminator. X X If the environment variable TMPDIR is defined then the tem- X porary file is created in the directory specified by that X variable. A makefile can change where temporary files are X created by defining a macro named TMPDIR and exporting it X using the .EXPORT special target. X XSSPPEECCIIAALL TTAARRGGEETTSS X This section describes the special targets that are recog- X nized by ddmmaakkee. Some are affected by attributes and others X are not. X X ..EERRRROORR If defined then the recipe associated with X this target is executed whenever an error con- X dition is detected by ddmmaakkee. All attributes X that can be used with any other target may be X used with this target. Any prerequisites of X this target will be brought up to date during X it's processing. NOTE: errors will be X ignored while making this target, in extreme X cases this may cause some problems. X X ..EEXXPPOORRTT All prerequisites associated with this target X are assumed to correspond to macro names and X they and their values are exported to the X environment as environment strings at the X point in the makefile at which this target X appears. Any attributes specified with this X target are ignored. Only macros which have X been assigned a value in the makefile prior to X the export directive are exported, macros as X yet undefined are not exported. X X ..IIMMPPOORRTT Prerequisite names specified for this target X are searched for in the environment and X defined as macros with their value taken from X the environment. If the name cannot be found X in the environment an error message is issued. X .IMPORT accepts the .IGNORE attribute. When X given, it causes ddmmaakkee to ignore the above X error. See the MACROS section for a descrip- X tion of the processing of imported macro X values. X X ..IINNCCLLUUDDEE Parse another makefile just as if it had been X located at the point of the .INCLUDE in the X current makefile. The list of prerequisites X X X XVersion 3.50 UW 19 X X X X XDMAKE(p) Unsupported Software DMAKE(p) X X X X gives the list of makefiles to try to read. X If the list contains multiple makefiles then X they are read in order from left to right. X The following search rules are used when try- X ing to locate the file. If the filename is X surrounded by " or just by itself then it is X searched for in the current directory. If it X is not found it is then searched for in each X of the directories specified for the .INCLU- X DEDIRS special target. If the file name is X surrounded by < and >, (ie. X <my_spiffy_new_makefile>) then it is searched X for only in the directories given by the X .INCLUDEDIRS special target. In both cases if X the file name is a fully qualified name start- X ing at the root of the file system then it is X only searched for once, and the .INCLUDEDIRS X list is ignored. .INCLUDE accepts the .IGNORE X and .SETDIR attributes. If .IGNORE attribute X is given and the file cannot be found then X ddmmaakkee continues processing, otherwise an error X message is generated. The .SETDIR attribute X causes ddmmaakkee to change directories to the X specified directory prior to attempting the X include operation. X X ..IINNCCLLUUDDEEDDIIRRSS The list of prerequisites specified for this X target defines the set of directories to X search when trying to include a makefile. X X ..MMAAKKEEFFIILLEESS The list of prerequisites is the set of files X to try to read as the default makefile. By X default this target is defined as: X X .MAKEFILES : makefile.mk Makefile X makefile X X X ..SSOOUURRCCEE The prerequisite list of this target defines a X set of directories to check when trying to X locate a target file name. See the section on X BINDING of targets for more information. X X ..SSOOUURRCCEE..ssuuffff The same as .SOURCE, except that the X .SOURCE.suff list is searched first when try- X ing to locate a file matching the a target X whose name ends in the suffix .suff. X X ..RREEMMOOVVEE The recipe of this target is used whenever X ddmmaakkee needs to remove intermediate targets X that were made but do not need to be kept X around. Such targets result from the X X X XVersion 3.50 UW 20 X X X X XDMAKE(p) Unsupported Software DMAKE(p) X X X X application of transitive closure on the X dependency graph. X X In addition to the special targets above, several other X forms of targets are recognized and are considered special, X their exact form and use is defined in the sections that X follow. X XSSPPEECCIIAALL MMAACCRROOSS X ddmmaakkee defines a number of special macros. They are divided X into two classes: control macros and run-time macros. The X control macros are used by ddmmaakkee to configure it's actions, X and are the preferred method of doing so. In the case when X a control macro has the same function as a special target or X attribute they share the same name as the special target or X attribute. The run-time macros are defined when ddmmaakkee makes X targets and may be used by the user inside recipes. We X first give the control macros and their meanings. X X To use the control macros simply assign them a value just X like any other macro. The control macros are divided into X three groups: string valued macros, character valued macros, X and boolean valued macros. X X The following are all of the string valued macros. This X list is also divided into three groups. The first group X gives the string valued macros that are defined internally X and cannot be directly set by the user. X X DDIIRRBBRRKKSSTTRR Contains the string of chars used to terminate X the name of a directory in a pathname. Under X UNIX it's value is "/", under MSDOS it's value X is "/\:". X X IINNCCDDEEPPTTHH This macro's value is a string of digits X representing the current depth of makefile X inclusion. In the first makefile level this X value is zero. X X MMFFLLAAGGSS Is the list of flags that were given on the X command line including a leading switch char- X acter. The -f flag is not included in this X list. X X MMAAKKEECCMMDD Is the name with which ddmmaakkee was invoked. X X MMAAKKEEDDIIRR Is the full path to the initial directory in X which ddmmaakkee was invoked. X X MMAAKKEEFFIILLEE Contains the string "-f _m_a_k_e_f_i_l_e" where, X _m_a_k_e_f_i_l_e is the name of initial user makefile X that was first read. X X X XVersion 3.50 UW 21 X X X X XDMAKE(p) Unsupported Software DMAKE(p) X X X X MMAAKKEEFFLLAAGGSS Is the same as $(MFLAGS) but has no leading X switch character. (ie. MFLAGS = -$(MAKEFLAGS)) X X MMAAKKEEMMAACCRROOSS Contains the complete list of macro expres- X sions that were specified on the command line. X X MMAAXXPPRROOCCEESSSSLLIIMMIITT X Is a numeric string representing the maximum X number of processes that ddmmaakkee can use when X making targets in the parallel mode. X X NNUULLLL Is permanently defined to be the NULL string. X This is useful when comparing a conditional X expression to an NULL value. X X PPWWDD Is the full path to the current directory in X which make is executing. X X TTMMDD Stands for "To Make Dir", and is the path from X the present directory (value of $(PWD)) to the X directory that ddmmaakkee was started up in (value X of $(MAKEDIR)). This macro is modified when X .SETDIR attributes are processed. X X X The second group of string valued macros control ddmmaakkee X behavior and may be set by the user. X X ..SSEETTDDIIRR If this macro is assigned a value then ddmmaakkee X will change to the directory given by that X value before making any targets. This macro X is equivalent to the .SETDIR attribute. X Thus the two lines: X X .SETDIR=fred/hello : X X .SETDIR := fred/hello X X are completely equivalent. The difference X being that the first is processed as a rule X definition and the other as a macro. X X AAUUGGMMAAKKEE If set to a non NULL value will enable the X transformation of special meta targets to X support special AUGMAKE inferences. X X DDIIRRSSEEPPSSTTRR Contains the string that is used to separate X directory components when path names are X constructed. It is defined with a default X value at startup. X X X X X XVersion 3.50 UW 22 X X X X XDMAKE(p) Unsupported Software DMAKE(p) X X X X GGRROOUUPPFFLLAAGGSS This macro gives the set of flags to pass to X the shell when invoking it to execute a X group recipe. The value of the macro is the X list of flags with a leading switch indica- X tor. (ie. `-' under UNIX) X X GGRROOUUPPSSHHEELLLL This macro defines the full path to the exe- X cutable image to be used as the shell when X processing group recipes. This macro must X be defined if group recipes are used. It is X assigned a default value in the startup X makefile. Under UNIX this value is /bin/sh. X X GGRROOUUPPSSUUFFFFIIXX If defined, this macro gives the string to X use as a suffix when creating group recipe X files to be handed to the command inter- X preter. For example, if it is defined as X .sh, then all temporary files created by X ddmmaakkee will end in the suffix .sh. Under X MSDOS if you are using command.com as your X GROUPSHELL, then this suffix must be set to X .bat in order for group recipes to work X correctly. X X MMAAKKEE It is defined in the startup file by X default. The string $(MAKE) is recognized X when using the -n option for single line X recipes. Initially this macro is defined to X have the value "$(MAKECMD) $(MFLAGS)". X X MMAAKKEESSTTAARRTTUUPP This macro defines the full path to the ini- X tial startup makefile. Use the --VV command X line option to discover it's initial value. X X MMAAXXLLIINNEELLEENNGGTTHH This macro defines the maximum size of a X single line of makefile input text. The X size is specified as a number, the default X value is defined internally and is shown via X the --VV option. A buffer of this size plus 2 X is allocated for reading makefile text. The X buffer is freed before any targets are made, X thereby allowing files containing long input X lines to be processed without consuming X memory during the actual make. X X MMAAXXPPRROOCCEESSSS Specify the maximum number of child X processes to use when making targets. The X default value of this macro is "1" and it's X value cannot exceed the value of the macro X MAXPROCESSLIMIT. Setting the value of MAX- X PROCESS on the command line or in the X makefile is equivalent to supplying a X X X XVersion 3.50 UW 23 X X X X XDMAKE(p) Unsupported Software DMAKE(p) X X X X corresponding value to the -P flag on the X command line. X X PPRREEPP This macro defines the number of iterations X to be expanded automatically when processing X % rule definitions of the form: X X % : %.suff X X See the sections on PERCENT(%) RULES for X details on how PREP is used. X X SSHHEELLLL This macro defines the full path to the exe- X cutable image to be used as the shell when X processing single line recipes. This macro X must be defined if recipes requiring the X shell for execution are to be used. It is X assigned a default value in the startup X makefile. Under UNIX this value is /bin/sh. X X SSHHEELLLLFFLLAAGGSS This macro gives the set of flags to pass to X the shell when invoking it to execute a sin- X gle line recipe. The value of the macro is X the list of flags with a leading switch X indicator. (ie. `-' under UNIX) X X SSHHEELLLLMMEETTAASS Each time ddmmaakkee executes a single recipe X line (not a group recipe) the line is X searched for any occurrence of a character X defined in the value of SHELLMETAS. If such X a character is found the recipe line is X defined to require a shell to ensure it's X correct execution. In such instances a X shell is used to invoke the recipe line. If X no match is found the recipe line is exe- X cuted without the use of a shell. X X X There is only one character valued macro defined by ddmmaakkee: X SSWWIITTCCHHAARR contains the switch character used to introduce X options on command lines. On UNIX it's value is '-', on X MSDOS it's value may be '/' or '-'. The macro is internally X defined and is not user setable. X X All boolean macros currently understood by ddmmaakkee correspond X directly to the previously defined attributes. These macros X provide a second way to apply global attributes, and X represent the preferred method of doing so. They are used X by assigning them a value. If the value is not a NULL X string then the boolean condition is set to on. If the X value is a NULL string then the condition is set to off. X There are five conditions defined and they correspond X X X XVersion 3.50 UW 24 X X X X XDMAKE(p) Unsupported Software DMAKE(p) X X X X directly to the attributes of the same name. Their meanings X are defined in the ATTRIBUTES section above. The macros X are: ..EEPPIILLOOGG, ..IIGGNNOORREE, ..PPRREECCIIOOUUSS, ..PPRROOLLOOGG, and ..SSIILLEENNTT. X Assigning any of these a non NULL value will turn on the X corresponding attribute on a global scale. X X The second class of macros is the run-time macros. These X macros are defined when ddmmaakkee is making targets, and may X take on different values for each target. $$@@ is defined to X be the full target name, $$?? is the list of all out of date X prerequisites, $$&& is the list of all prerequisites, $$>> is X the name of the library if the current target is a library X member, $$<< is the list of prerequisites specified in the X current rule (this includes any inferred prerequisites), $$** X is defined as $$((@@::ddbb)) when making targets with explicit X recipes and is defined as the value of % when making targets X whose recipe is the result of an inference. In the first X case $$** is the target name with no suffix, and in the latter X is the value of the matched % pattern from the associated X %-rule. $$^^ expands to the set of out of date prerequisites X taken from the current value of $$<<. In addition to these, SHAR_EOF echo "End of part 10" echo "File man/dmake.p is continued in part 11" echo "11" > s2_seq_.tmp exit 0