diff options
Diffstat (limited to 'devel/bmake')
-rw-r--r-- | devel/bmake/files/bmake.1 | 19 | ||||
-rw-r--r-- | devel/bmake/files/bmake.cat1 | 16 | ||||
-rw-r--r-- | devel/bmake/files/make.1 | 1946 |
3 files changed, 30 insertions, 1951 deletions
diff --git a/devel/bmake/files/bmake.1 b/devel/bmake/files/bmake.1 index 76f511ce859..33840f33230 100644 --- a/devel/bmake/files/bmake.1 +++ b/devel/bmake/files/bmake.1 @@ -1,4 +1,4 @@ -.\" $NetBSD: bmake.1,v 1.7 2010/09/07 14:28:00 joerg Exp $ +.\" $NetBSD: bmake.1,v 1.8 2010/09/07 14:41:39 joerg Exp $ .\" .\" Copyright (c) 1990, 1993 .\" The Regents of the University of California. All rights reserved. @@ -30,7 +30,7 @@ .\" from: @(#)make.1 8.4 (Berkeley) 3/19/94 .\" .Dd June 30, 2010 -.Dt MAKE 1 +.Dt BMAKE 1 .Os .Sh NAME .Nm bmake @@ -1929,7 +1929,22 @@ obscure problems using them in .if statements. .Sh SEE ALSO .Xr mkdep 1 .Sh HISTORY +A +.Nm +command appeared in +.At v7 . .Nm is derived from NetBSD's .Xr make 1 . It uses autoconf to facilitate portability to other platforms. +.Sh BUGS +The +.Nm +syntax is difficult to parse without actually acting of the data. +For instance finding the end of a variable use should involve scanning each +the modifiers using the correct terminator for each field. +In many places +.Nm +just counts {} and () in order to find the end of a variable expansion. +.Pp +There is no way of escaping a space character in a filename. diff --git a/devel/bmake/files/bmake.cat1 b/devel/bmake/files/bmake.cat1 index a6df53d1063..986206322ab 100644 --- a/devel/bmake/files/bmake.cat1 +++ b/devel/bmake/files/bmake.cat1 @@ -1,4 +1,4 @@ -MAKE(1) NetBSD General Commands Manual MAKE(1) +BMAKE(1) NetBSD General Commands Manual BMAKE(1) NNAAMMEE bbmmaakkee -- maintain program dependencies @@ -1206,7 +1206,17 @@ SSEEEE AALLSSOO mkdep(1) HHIISSTTOORRYY - bbmmaakkee is derived from NetBSD's make(1). It uses autoconf to facilitate - portability to other platforms. + A bbmmaakkee command appeared in Version 7 AT&T UNIX. bbmmaakkee is derived from + NetBSD's make(1). It uses autoconf to facilitate portability to other + platforms. + +BBUUGGSS + The bbmmaakkee syntax is difficult to parse without actually acting of the + data. For instance finding the end of a variable use should involve + scanning each the modifiers using the correct terminator for each field. + In many places bbmmaakkee just counts {} and () in order to find the end of a + variable expansion. + + There is no way of escaping a space character in a filename. NetBSD 5.0 June 30, 2010 NetBSD 5.0 diff --git a/devel/bmake/files/make.1 b/devel/bmake/files/make.1 deleted file mode 100644 index e2e41f48afe..00000000000 --- a/devel/bmake/files/make.1 +++ /dev/null @@ -1,1946 +0,0 @@ -.\" $NetBSD: make.1,v 1.7 2010/09/07 14:28:00 joerg Exp $ -.\" -.\" Copyright (c) 1990, 1993 -.\" The Regents of the University of California. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" 3. Neither the name of the University nor the names of its contributors -.\" may be used to endorse or promote products derived from this software -.\" without specific prior written permission. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" from: @(#)make.1 8.4 (Berkeley) 3/19/94 -.\" -.Dd June 30, 2010 -.Dt MAKE 1 -.Os -.Sh NAME -.Nm make -.Nd maintain program dependencies -.Sh SYNOPSIS -.Nm -.Op Fl BeikNnqrstWX -.Bk -words -.Op Fl C Ar directory -.Ek -.Bk -words -.Op Fl D Ar variable -.Ek -.Bk -words -.Op Fl d Ar flags -.Ek -.Bk -words -.Op Fl f Ar makefile -.Ek -.Bk -words -.Op Fl I Ar directory -.Ek -.Bk -words -.Op Fl J Ar private -.Ek -.Bk -words -.Op Fl j Ar max_jobs -.Ek -.Bk -words -.Op Fl m Ar directory -.Ek -.Bk -words -.Op Fl T Ar file -.Ek -.Bk -words -.Op Fl V Ar variable -.Ek -.Op Ar variable=value -.Bk -words -.Op Ar target ... -.Ek -.Sh DESCRIPTION -.Nm -is a program designed to simplify the maintenance of other programs. -Its input is a list of specifications as to the files upon which programs -and other files depend. -If no -.Fl f Ar makefile -makefile option is given, -.Nm -will try to open -.Ql Pa makefile -then -.Ql Pa Makefile -in order to find the specifications. -If the file -.Ql Pa .depend -exists, it is read (see -.Xr mkdep 1 ) . -.Pp -This manual page is intended as a reference document only. -For a more thorough description of -.Nm -and makefiles, please refer to -.%T "Make \- A Tutorial" . -.Pp -.Nm -will prepend the contents of the -.Va MAKEFLAGS -environment variable to the command line arguments before parsing them. -.Pp -The options are as follows: -.Bl -tag -width Ds -.It Fl B -Try to be backwards compatible by executing a single shell per command and -by executing the commands to make the sources of a dependency line in sequence. -.It Fl C Ar directory -Change to -.Ar directory -before reading the makefiles or doing anything else. -If multiple -.Fl C -options are specified, each is interpreted relative to the previous one: -.Fl C Pa / Fl C Pa etc -is equivalent to -.Fl C Pa /etc . -.It Fl D Ar variable -Define -.Ar variable -to be 1, in the global context. -.It Fl d Ar [-]flags -Turn on debugging, and specify which portions of -.Nm -are to print debugging information. -Unless the flags are preceded by -.Ql - -they are added to the -.Va MAKEFLAGS -environment variable and will be processed by any child make processes. -By default, debugging information is printed to standard error, -but this can be changed using the -.Ar F -debugging flag. -The debugging output is always unbuffered; in addition, if debugging -is enabled but debugging output is not directed to standard output, -then the standard output is line buffered. -.Ar Flags -is one or more of the following: -.Bl -tag -width Ds -.It Ar A -Print all possible debugging information; -equivalent to specifying all of the debugging flags. -.It Ar a -Print debugging information about archive searching and caching. -.It Ar C -Print debugging information about current working directory. -.It Ar c -Print debugging information about conditional evaluation. -.It Ar d -Print debugging information about directory searching and caching. -.It Ar e -Print debugging information about failed commands and targets. -.It Ar F Ns Oo Sy \&+ Oc Ns Ar filename -Specify where debugging output is written. -This must be the last flag, because it consumes the remainder of -the argument. -If the character immediately after the -.Ql F -flag is -.Ql \&+ , -then the file will be opened in append mode; -otherwise the file will be overwritten. -If the file name is -.Ql stdout -or -.Ql stderr -then debugging output will be written to the -standard output or standard error output file descriptors respectively -(and the -.Ql \&+ -option has no effect). -Otherwise, the output will be written to the named file. -If the file name ends -.Ql .%d -then the -.Ql %d -is replaced by the pid. -.It Ar f -Print debugging information about loop evaluation. -.It Ar "g1" -Print the input graph before making anything. -.It Ar "g2" -Print the input graph after making everything, or before exiting -on error. -.It Ar "g3" -Print the input graph before exiting on error. -.It Ar j -Print debugging information about running multiple shells. -.It Ar l -Print commands in Makefiles regardless of whether or not they are prefixed by -.Ql @ -or other "quiet" flags. -Also known as "loud" behavior. -.It Ar m -Print debugging information about making targets, including modification -dates. -.It Ar n -Don't delete the temporary command scripts created when running commands. -These temporary scripts are created in the directory -referred to by the -.Ev TMPDIR -environment variable, or in -.Pa /tmp -if -.Ev TMPDIR -is unset or set to the empty string. -The temporary scripts are created by -.Xr mkstemp 3 , -and have names of the form -.Pa makeXXXXXX . -.Em NOTE : -This can create many files in -.Ev TMPDIR -or -.Pa /tmp , -so use with care. -.It Ar p -Print debugging information about makefile parsing. -.It Ar s -Print debugging information about suffix-transformation rules. -.It Ar t -Print debugging information about target list maintenance. -.It Ar v -Print debugging information about variable assignment. -.It Ar x -Run shell commands with -.Fl x -so the actual commands are printed as they are executed. -.El -.It Fl e -Specify that environment variables override macro assignments within -makefiles. -.It Fl f Ar makefile -Specify a makefile to read instead of the default -.Ql Pa makefile . -If -.Ar makefile -is -.Ql Fl , -standard input is read. -Multiple makefiles may be specified, and are read in the order specified. -.It Fl I Ar directory -Specify a directory in which to search for makefiles and included makefiles. -The system makefile directory (or directories, see the -.Fl m -option) is automatically included as part of this list. -.It Fl i -Ignore non-zero exit of shell commands in the makefile. -Equivalent to specifying -.Ql Fl -before each command line in the makefile. -.It Fl J Ar private -This option should -.Em not -be specified by the user. -.Pp -When the -.Ar j -option is in use in a recursive build, this option is passed by a make -to child makes to allow all the make processes in the build to -cooperate to avoid overloading the system. -.It Fl j Ar max_jobs -Specify the maximum number of jobs that -.Nm -may have running at any one time. -Turns compatibility mode off, unless the -.Ar B -flag is also specified. -When compatibility mode is off, all commands associated with a -target are executed in a single shell invocation as opposed to the -traditional one shell invocation per line. -This can break traditional scripts which change directories on each -command invocation and then expect to start with a fresh environment -on the next line. -It is more efficient to correct the scripts rather than turn backwards -compatibility on. -.It Fl k -Continue processing after errors are encountered, but only on those targets -that do not depend on the target whose creation caused the error. -.It Fl m Ar directory -Specify a directory in which to search for sys.mk and makefiles included -via the -.Ao Ar file Ac Ns -style -include statement. -The -.Fl m -option can be used multiple times to form a search path. -This path will override the default system include path: /usr/share/mk. -Furthermore the system include path will be appended to the search path used -for -.Qo Ar file Qc Ns -style -include statements (see the -.Fl I -option). -.Pp -If a file or directory name in the -.Fl m -argument (or the -.Ev MAKESYSPATH -environment variable) starts with the string -.Qq \&.../ -then -.Nm -will search for the specified file or directory named in the remaining part -of the argument string. -The search starts with the current directory of -the Makefile and then works upward towards the root of the filesystem. -If the search is successful, then the resulting directory replaces the -.Qq \&.../ -specification in the -.Fl m -argument. -If used, this feature allows -.Nm -to easily search in the current source tree for customized sys.mk files -(e.g., by using -.Qq \&.../mk/sys.mk -as an argument). -.It Fl n -Display the commands that would have been executed, but do not -actually execute them unless the target depends on the .MAKE special -source (see below). -.It Fl N -Display the commands which would have been executed, but do not -actually execute any of them; useful for debugging top-level makefiles -without descending into subdirectories. -.It Fl q -Do not execute any commands, but exit 0 if the specified targets are -up-to-date and 1, otherwise. -.It Fl r -Do not use the built-in rules specified in the system makefile. -.It Fl s -Do not echo any commands as they are executed. -Equivalent to specifying -.Ql Ic @ -before each command line in the makefile. -.It Fl T Ar tracefile -When used with the -.Fl j -flag, -append a trace record to -.Ar tracefile -for each job started and completed. -.It Fl t -Rather than re-building a target as specified in the makefile, create it -or update its modification time to make it appear up-to-date. -.It Fl V Ar variable -Print -.Nm Ns 's -idea of the value of -.Ar variable , -in the global context. -Do not build any targets. -Multiple instances of this option may be specified; -the variables will be printed one per line, -with a blank line for each null or undefined variable. -If -.Ar variable -contains a -.Ql \&$ -then the value will be expanded before printing. -.It Fl W -Treat any warnings during makefile parsing as errors. -.It Fl X -Don't export variables passed on the command line to the environment -individually. -Variables passed on the command line are still exported -via the -.Va MAKEFLAGS -environment variable. -This option may be useful on systems which have a small limit on the -size of command arguments. -.It Ar variable=value -Set the value of the variable -.Ar variable -to -.Ar value . -Normally, all values passed on the command line are also exported to -sub-makes in the environment. -The -.Fl X -flag disables this behavior. -Variable assignments should follow options for POSIX compatibility -but no ordering is enforced. -.El -.Pp -There are seven different types of lines in a makefile: file dependency -specifications, shell commands, variable assignments, include statements, -conditional directives, for loops, and comments. -.Pp -In general, lines may be continued from one line to the next by ending -them with a backslash -.Pq Ql \e . -The trailing newline character and initial whitespace on the following -line are compressed into a single space. -.Sh FILE DEPENDENCY SPECIFICATIONS -Dependency lines consist of one or more targets, an operator, and zero -or more sources. -This creates a relationship where the targets -.Dq depend -on the sources -and are usually created from them. -The exact relationship between the target and the source is determined -by the operator that separates them. -The three operators are as follows: -.Bl -tag -width flag -.It Ic \&: -A target is considered out-of-date if its modification time is less than -those of any of its sources. -Sources for a target accumulate over dependency lines when this operator -is used. -The target is removed if -.Nm -is interrupted. -.It Ic \&! -Targets are always re-created, but not until all sources have been -examined and re-created as necessary. -Sources for a target accumulate over dependency lines when this operator -is used. -The target is removed if -.Nm -is interrupted. -.It Ic \&:: -If no sources are specified, the target is always re-created. -Otherwise, a target is considered out-of-date if any of its sources has -been modified more recently than the target. -Sources for a target do not accumulate over dependency lines when this -operator is used. -The target will not be removed if -.Nm -is interrupted. -.El -.Pp -Targets and sources may contain the shell wildcard values -.Ql \&? , -.Ql * , -.Ql [] , -and -.Ql {} . -The values -.Ql \&? , -.Ql * , -and -.Ql [] -may only be used as part of the final -component of the target or source, and must be used to describe existing -files. -The value -.Ql {} -need not necessarily be used to describe existing files. -Expansion is in directory order, not alphabetically as done in the shell. -.Sh SHELL COMMANDS -Each target may have associated with it a series of shell commands, normally -used to create the target. -Each of the commands in this script -.Em must -be preceded by a tab. -While any target may appear on a dependency line, only one of these -dependencies may be followed by a creation script, unless the -.Ql Ic \&:: -operator is used. -.Pp -If the first characters of the command line are any combination of -.Ql Ic @ , -.Ql Ic + , -or -.Ql Ic \- , -the command is treated specially. -A -.Ql Ic @ -causes the command not to be echoed before it is executed. -A -.Ql Ic + -causes the command to be executed even when -.Fl n -is given. -This is similar to the effect of the .MAKE special source, -except that the effect can be limited to a single line of a script. -A -.Ql Ic \- -causes any non-zero exit status of the command line to be ignored. -.Sh VARIABLE ASSIGNMENTS -Variables in make are much like variables in the shell, and, by tradition, -consist of all upper-case letters. -.Ss Variable assignment modifiers -The five operators that can be used to assign values to variables are as -follows: -.Bl -tag -width Ds -.It Ic \&= -Assign the value to the variable. -Any previous value is overridden. -.It Ic \&+= -Append the value to the current value of the variable. -.It Ic \&?= -Assign the value to the variable if it is not already defined. -.It Ic \&:= -Assign with expansion, i.e. expand the value before assigning it -to the variable. -Normally, expansion is not done until the variable is referenced. -.Em NOTE : -References to undefined variables are -.Em not -expanded. -This can cause problems when variable modifiers are used. -.It Ic \&!= -Expand the value and pass it to the shell for execution and assign -the result to the variable. -Any newlines in the result are replaced with spaces. -.El -.Pp -Any white-space before the assigned -.Ar value -is removed; if the value is being appended, a single space is inserted -between the previous contents of the variable and the appended value. -.Pp -Variables are expanded by surrounding the variable name with either -curly braces -.Pq Ql {} -or parentheses -.Pq Ql () -and preceding it with -a dollar sign -.Pq Ql \&$ . -If the variable name contains only a single letter, the surrounding -braces or parentheses are not required. -This shorter form is not recommended. -.Pp -If the variable name contains a dollar, then the name itself is expanded first. -This allows almost arbitrary variable names, however names containing dollar, -braces, parenthesis, or whitespace are really best avoided! -.Pp -If the result of expanding a variable contains a dollar sign -.Pq Ql \&$ -the string is expanded again. -.Pp -Variable substitution occurs at three distinct times, depending on where -the variable is being used. -.Bl -enum -.It -Variables in dependency lines are expanded as the line is read. -.It -Variables in shell commands are expanded when the shell command is -executed. -.It -.Dq .for -loop index variables are expanded on each loop iteration. -Note that other variables are not expanded inside loops so -the following example code: -.Bd -literal -offset indent - -.Dv .for i in 1 2 3 -a+= ${i} -j= ${i} -b+= ${j} -.Dv .endfor - -all: - @echo ${a} - @echo ${b} - -.Ed -will print: -.Bd -literal -offset indent -1 2 3 -3 3 3 - -.Ed -Because while ${a} contains -.Dq 1 2 3 -after the loop is executed, ${b} -contains -.Dq ${j} ${j} ${j} -which expands to -.Dq 3 3 3 -since after the loop completes ${j} contains -.Dq 3 . -.El -.Ss Variable classes -The four different classes of variables (in order of increasing precedence) -are: -.Bl -tag -width Ds -.It Environment variables -Variables defined as part of -.Nm Ns 's -environment. -.It Global variables -Variables defined in the makefile or in included makefiles. -.It Command line variables -Variables defined as part of the command line. -.It Local variables -Variables that are defined specific to a certain target. -The seven local variables are as follows: -.Bl -tag -width ".ARCHIVE" -.It Va .ALLSRC -The list of all sources for this target; also known as -.Ql Va \&\*[Gt] . -.It Va .ARCHIVE -The name of the archive file. -.It Va .IMPSRC -In suffix-transformation rules, the name/path of the source from which the -target is to be transformed (the -.Dq implied -source); also known as -.Ql Va \&\*[Lt] . -It is not defined in explicit rules. -.It Va .MEMBER -The name of the archive member. -.It Va .OODATE -The list of sources for this target that were deemed out-of-date; also -known as -.Ql Va \&? . -.It Va .PREFIX -The file prefix of the target, containing only the file portion, no suffix -or preceding directory components; also known as -.Ql Va * . -.It Va .TARGET -The name of the target; also known as -.Ql Va @ . -.El -.Pp -The shorter forms -.Ql Va @ , -.Ql Va \&? , -.Ql Va \&\*[Lt] , -.Ql Va \&\*[Gt] , -and -.Ql Va * -are permitted for backward -compatibility with historical makefiles and are not recommended. -The six variables -.Ql Va "@F" , -.Ql Va "@D" , -.Ql Va "\*[Lt]F" , -.Ql Va "\*[Lt]D" , -.Ql Va "*F" , -and -.Ql Va "*D" -are permitted for compatibility with -.At V -makefiles and are not recommended. -.Pp -Four of the local variables may be used in sources on dependency lines -because they expand to the proper value for each target on the line. -These variables are -.Ql Va .TARGET , -.Ql Va .PREFIX , -.Ql Va .ARCHIVE , -and -.Ql Va .MEMBER . -.El -.Ss Additional built-in variables -In addition, -.Nm -sets or knows about the following variables: -.Bl -tag -width .MAKEOVERRIDES -.It Va \&$ -A single dollar sign -.Ql \&$ , -i.e. -.Ql \&$$ -expands to a single dollar -sign. -.It Va .ALLTARGETS -The list of all targets encountered in the Makefile. -If evaluated during -Makefile parsing, lists only those targets encountered thus far. -.It Va .CURDIR -A path to the directory where -.Nm -was executed. -Refer to the description of -.Ql Ev PWD -for more details. -.It Ev MAKE -The name that -.Nm -was executed with -.Pq Va argv[0] . -For compatibility -.Nm -also sets -.Va .MAKE -with the same value. -The preferred variable to use is the environment variable -.Ev MAKE -because it is more compatible with other versions of -.Nm -and cannot be confused with the special target with the same name. -.It Va .MAKE.DEPENDFILE -Names the makefile (default -.Ql Pa .depend ) -from which generated dependencies are read. -.It Va .MAKE.EXPORTED -The list of variables exported by -.Nm . -.It Va .MAKE.JOBS -The argument to the -.Fl j -option. -.It Va .MAKE.JOB.PREFIX -If -.Nm -is run with -.Ar j -then output for each target is prefixed with a token -.Ql --- target --- -the first part of which can be controlled via -.Va .MAKE.JOB.PREFIX . -.br -For example: -.Li .MAKE.JOB.PREFIX=${.newline}---${.MAKE:T}[${.MAKE.PID}] -would produce tokens like -.Ql ---make[1234] target --- -making it easier to track the degree of parallelism being achieved. -.It Ev MAKEFLAGS -The environment variable -.Ql Ev MAKEFLAGS -may contain anything that -may be specified on -.Nm Ns 's -command line. -Anything specified on -.Nm Ns 's -command line is appended to the -.Ql Ev MAKEFLAGS -variable which is then -entered into the environment for all programs which -.Nm -executes. -.It Va .MAKE.LEVEL -The recursion depth of -.Nm . -The initial instance of -.Nm -will be 0, and an incremented value is put into the environment -to be seen by the next generation. -This allows tests like: -.Li .if ${.MAKE.LEVEL} == 0 -to protect things which should only be evaluated in the initial instance of -.Nm . -.It Va .MAKE.MAKEFILE_PREFERENCE -The ordered list of makefile names -(default -.Ql Pa makefile , -.Ql Pa Makefile ) -that -.Nm -will look for. -.It Va .MAKE.MAKEFILES -The list of makefiles read by -.Nm , -which is useful for tracking dependencies. -Each makefile is recorded only once, regardless of the number of times read. -.It Va .MAKE.MODE -Processed after reading all makefiles. -Can affect the mode that -.Nm -runs in. -Currently just -.Ql Pa compat -mode. -.It Va .MAKEOVERRIDES -This variable is used to record the names of variables assigned to -on the command line, so that they may be exported as part of -.Ql Ev MAKEFLAGS . -This behaviour can be disabled by assigning an empty value to -.Ql Va .MAKEOVERRIDES -within a makefile. -Extra variables can be exported from a makefile -by appending their names to -.Ql Va .MAKEOVERRIDES . -.Ql Ev MAKEFLAGS -is re-exported whenever -.Ql Va .MAKEOVERRIDES -is modified. -.It Va .MAKE.PID -The process-id of -.Nm . -.It Va .MAKE.PPID -The parent process-id of -.Nm . -.It Va MAKE_PRINT_VAR_ON_ERROR -When -.Nm -stops due to an error, it prints its name and the value of -.Ql Va .CURDIR -as well as the value of any variables named in -.Ql Va MAKE_PRINT_VAR_ON_ERROR . -.It Va .newline -This variable is simply assigned a newline character as its value. -This allows expansions using the -.Cm \&:@ -modifier to put a newline between -iterations of the loop rather than a space. -For example, the printing of -.Ql Va MAKE_PRINT_VAR_ON_ERROR -could be done as ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@}. -.It Va .OBJDIR -A path to the directory where the targets are built. -Its value is determined by trying to -.Xr chdir 2 -to the following directories in order and using the first match: -.Bl -enum -.It -.Ev ${MAKEOBJDIRPREFIX}${.CURDIR} -.Pp -(Only if -.Ql Ev MAKEOBJDIRPREFIX -is set in the environment or on the command line.) -.It -.Ev ${MAKEOBJDIR} -.Pp -(Only if -.Ql Ev MAKEOBJDIR -is set in the environment or on the command line.) -.It -.Ev ${.CURDIR} Ns Pa /obj. Ns Ev ${MACHINE} -.It -.Ev ${.CURDIR} Ns Pa /obj -.It -.Pa /usr/obj/ Ns Ev ${.CURDIR} -.It -.Ev ${.CURDIR} -.El -.Pp -Variable expansion is performed on the value before it's used, -so expressions such as -.Dl ${.CURDIR:S,^/usr/src,/var/obj,} -may be used. -This is especially useful with -.Ql Ev MAKEOBJDIR . -.Pp -.Ql Va .OBJDIR -may be modified in the makefile as a global variable. -In all cases, -.Nm -will -.Xr chdir 2 -to -.Ql Va .OBJDIR -and set -.Ql Ev PWD -to that directory before executing any targets. -. -.It Va .PARSEDIR -A path to the directory of the current -.Ql Pa Makefile -being parsed. -.It Va .PARSEFILE -The basename of the current -.Ql Pa Makefile -being parsed. -This variable and -.Ql Va .PARSEDIR -are both set only while the -.Ql Pa Makefiles -are being parsed. -.It Va .PATH -A variable that represents the list of directories that -.Nm -will search for files. -The search list should be updated using the target -.Ql Va .PATH -rather than the variable. -.It Ev PWD -Alternate path to the current directory. -.Nm -normally sets -.Ql Va .CURDIR -to the canonical path given by -.Xr getcwd 3 . -However, if the environment variable -.Ql Ev PWD -is set and gives a path to the current directory, then -.Nm -sets -.Ql Va .CURDIR -to the value of -.Ql Ev PWD -instead. -This behaviour is disabled if -.Ql Ev MAKEOBJDIRPREFIX -is set or -.Ql Ev MAKEOBJDIR -contains a variable transform. -.Ql Ev PWD -is set to the value of -.Ql Va .OBJDIR -for all programs which -.Nm -executes. -.It Ev .TARGETS -The list of targets explicitly specified on the command line, if any. -.It Ev VPATH -Colon-separated -.Pq Dq \&: -lists of directories that -.Nm -will search for files. -The variable is supported for compatibility with old make programs only, -use -.Ql Va .PATH -instead. -.El -.Ss Variable modifiers -Variable expansion may be modified to select or modify each word of the -variable (where a -.Dq word -is white-space delimited sequence of characters). -The general format of a variable expansion is as follows: -.Pp -.Dl ${variable[:modifier[:...]]} -.Pp -Each modifier begins with a colon, -which may be escaped with a backslash -.Pq Ql \e . -.Pp -A set of modifiers can be specified via a variable, as follows: -.Pp -.Dl modifier_variable=modifier[:...] -.Dl ${variable:${modifier_variable}[:...]} -.Pp -In this case the first modifier in the modifier_variable does not -start with a colon, since that must appear in the referencing -variable. -If any of the modifiers in the modifier_variable contain a dollar sign -.Pq Ql $ , -these must be doubled to avoid early expansion. -.Pp -The supported modifiers are: -.Bl -tag -width EEE -.It Cm \&:E -Replaces each word in the variable with its suffix. -.It Cm \&:H -Replaces each word in the variable with everything but the last component. -.It Cm \&:M Ns Ar pattern -Select only those words that match -.Ar pattern . -The standard shell wildcard characters -.Pf ( Ql * , -.Ql \&? , -and -.Ql Oo Oc ) -may -be used. -The wildcard characters may be escaped with a backslash -.Pq Ql \e . -.It Cm \&:N Ns Ar pattern -This is identical to -.Ql Cm \&:M , -but selects all words which do not match -.Ar pattern . -.It Cm \&:O -Order every word in variable alphabetically. -To sort words in -reverse order use the -.Ql Cm \&:O:[-1..1] -combination of modifiers. -.It Cm \&:Ox -Randomize words in variable. -The results will be different each time you are referring to the -modified variable; use the assignment with expansion -.Pq Ql Cm \&:= -to prevent such behaviour. -For example, -.Bd -literal -offset indent -LIST= uno due tre quattro -RANDOM_LIST= ${LIST:Ox} -STATIC_RANDOM_LIST:= ${LIST:Ox} - -all: - @echo "${RANDOM_LIST}" - @echo "${RANDOM_LIST}" - @echo "${STATIC_RANDOM_LIST}" - @echo "${STATIC_RANDOM_LIST}" -.Ed -may produce output similar to: -.Bd -literal -offset indent -quattro due tre uno -tre due quattro uno -due uno quattro tre -due uno quattro tre -.Ed -.It Cm \&:Q -Quotes every shell meta-character in the variable, so that it can be passed -safely through recursive invocations of -.Nm . -.It Cm \&:R -Replaces each word in the variable with everything but its suffix. -.It Cm \&:tA -Attempt to convert variable to an absolute path using -.Xr realpath 3 , -if that fails, the value is unchanged. -.It Cm \&:tl -Converts variable to lower-case letters. -.It Cm \&:ts Ns Ar c -Words in the variable are normally separated by a space on expansion. -This modifier sets the separator to the character -.Ar c . -If -.Ar c -is omitted, then no separator is used. -The common escapes (including octal numeric codes), work as expected. -.It Cm \&:tu -Converts variable to upper-case letters. -.It Cm \&:tW -Causes the value to be treated as a single word -(possibly containing embedded white space). -See also -.Ql Cm \&:[*] . -.It Cm \&:tw -Causes the value to be treated as a sequence of -words delimited by white space. -See also -.Ql Cm \&:[@] . -.Sm off -.It Cm \&:S No \&/ Ar old_string No \&/ Ar new_string No \&/ Op Cm 1gW -.Sm on -Modify the first occurrence of -.Ar old_string -in the variable's value, replacing it with -.Ar new_string . -If a -.Ql g -is appended to the last slash of the pattern, all occurrences -in each word are replaced. -If a -.Ql 1 -is appended to the last slash of the pattern, only the first word -is affected. -If a -.Ql W -is appended to the last slash of the pattern, -then the value is treated as a single word -(possibly containing embedded white space). -If -.Ar old_string -begins with a caret -.Pq Ql ^ , -.Ar old_string -is anchored at the beginning of each word. -If -.Ar old_string -ends with a dollar sign -.Pq Ql \&$ , -it is anchored at the end of each word. -Inside -.Ar new_string , -an ampersand -.Pq Ql \*[Am] -is replaced by -.Ar old_string -(without any -.Ql ^ -or -.Ql \&$ ) . -Any character may be used as a delimiter for the parts of the modifier -string. -The anchoring, ampersand and delimiter characters may be escaped with a -backslash -.Pq Ql \e . -.Pp -Variable expansion occurs in the normal fashion inside both -.Ar old_string -and -.Ar new_string -with the single exception that a backslash is used to prevent the expansion -of a dollar sign -.Pq Ql \&$ , -not a preceding dollar sign as is usual. -.Sm off -.It Cm \&:C No \&/ Ar pattern No \&/ Ar replacement No \&/ Op Cm 1gW -.Sm on -The -.Cm \&:C -modifier is just like the -.Cm \&:S -modifier except that the old and new strings, instead of being -simple strings, are a regular expression (see -.Xr regex 3 ) -string -.Ar pattern -and an -.Xr ed 1 Ns \-style -string -.Ar replacement . -Normally, the first occurrence of the pattern -.Ar pattern -in each word of the value is substituted with -.Ar replacement . -The -.Ql 1 -modifier causes the substitution to apply to at most one word; the -.Ql g -modifier causes the substitution to apply to as many instances of the -search pattern -.Ar pattern -as occur in the word or words it is found in; the -.Ql W -modifier causes the value to be treated as a single word -(possibly containing embedded white space). -Note that -.Ql 1 -and -.Ql g -are orthogonal; the former specifies whether multiple words are -potentially affected, the latter whether multiple substitutions can -potentially occur within each affected word. -.It Cm \&:T -Replaces each word in the variable with its last component. -.It Cm \&:u -Remove adjacent duplicate words (like -.Xr uniq 1 ) . -.Sm off -.It Cm \&:\&? Ar true_string Cm \&: Ar false_string -.Sm on -If the variable name (not its value), when parsed as a .if conditional -expression, evaluates to true, return as its value the -.Ar true_string , -otherwise return the -.Ar false_string . -Since the variable name is used as the expression, \&:\&? must be the -first modifier after the variable name itself - which will, of course, -usually contain variable expansions. -A common error is trying to use expressions like -.Dl ${NUMBERS:M42:?match:no} -which actually tests defined(NUMBERS), -to determine is any words match "42" you need to use something like: -.Dl ${${NUMBERS:M42} != "":?match:no} . -.It Ar :old_string=new_string -This is the -.At V -style variable substitution. -It must be the last modifier specified. -If -.Ar old_string -or -.Ar new_string -do not contain the pattern matching character -.Ar % -then it is assumed that they are -anchored at the end of each word, so only suffixes or entire -words may be replaced. -Otherwise -.Ar % -is the substring of -.Ar old_string -to be replaced in -.Ar new_string . -.Pp -Variable expansion occurs in the normal fashion inside both -.Ar old_string -and -.Ar new_string -with the single exception that a backslash is used to prevent the -expansion of a dollar sign -.Pq Ql \&$ , -not a preceding dollar sign as is usual. -.Sm off -.It Cm \&:@ Ar temp Cm @ Ar string Cm @ -.Sm on -This is the loop expansion mechanism from the OSF Development -Environment (ODE) make. -Unlike -.Cm \&.for -loops expansion occurs at the time of -reference. -Assign -.Ar temp -to each word in the variable and evaluate -.Ar string . -The ODE convention is that -.Ar temp -should start and end with a period. -For example. -.Dl ${LINKS:@.LINK.@${LN} ${TARGET} ${.LINK.}@} -.It Cm \&:U Ns Ar newval -If the variable is undefined -.Ar newval -is the value. -If the variable is defined, the existing value is returned. -This is another ODE make feature. -It is handy for setting per-target CFLAGS for instance: -.Dl ${_${.TARGET:T}_CFLAGS:U${DEF_CFLAGS}} -If a value is only required if the variable is undefined, use: -.Dl ${VAR:D:Unewval} -.It Cm \&:D Ns Ar newval -If the variable is defined -.Ar newval -is the value. -.It Cm \&:L -The name of the variable is the value. -.It Cm \&:P -The path of the node which has the same name as the variable -is the value. -If no such node exists or its path is null, then the -name of the variable is used. -.Sm off -.It Cm \&:\&! Ar cmd Cm \&! -.Sm on -The output of running -.Ar cmd -is the value. -.It Cm \&:sh -If the variable is non-empty it is run as a command and the output -becomes the new value. -.It Cm \&::= Ns Ar str -The variable is assigned the value -.Ar str -after substitution. -This modifier and its variations are useful in -obscure situations such as wanting to set a variable when shell commands -are being parsed. -These assignment modifiers always expand to -nothing, so if appearing in a rule line by themselves should be -preceded with something to keep -.Nm -happy. -.Pp -The -.Ql Cm \&:: -helps avoid false matches with the -.At V -style -.Cm \&:= -modifier and since substitution always occurs the -.Cm \&::= -form is vaguely appropriate. -.It Cm \&::?= Ns Ar str -As for -.Cm \&::= -but only if the variable does not already have a value. -.It Cm \&::+= Ns Ar str -Append -.Ar str -to the variable. -.It Cm \&::!= Ns Ar cmd -Assign the output of -.Ar cmd -to the variable. -.It Cm \&:\&[ Ns Ar range Ns Cm \&] -Selects one or more words from the value, -or performs other operations related to the way in which the -value is divided into words. -.Pp -Ordinarily, a value is treated as a sequence of words -delimited by white space. -Some modifiers suppress this behaviour, -causing a value to be treated as a single word -(possibly containing embedded white space). -An empty value, or a value that consists entirely of white-space, -is treated as a single word. -For the purposes of the -.Ql Cm \&:[] -modifier, the words are indexed both forwards using positive integers -(where index 1 represents the first word), -and backwards using negative integers -(where index -1 represents the last word). -.Pp -The -.Ar range -is subjected to variable expansion, and the expanded result is -then interpreted as follows: -.Bl -tag -width index -.\" :[n] -.It Ar index -Selects a single word from the value. -.\" :[start..end] -.It Ar start Ns Cm \&.. Ns Ar end -Selects all words from -.Ar start -to -.Ar end , -inclusive. -For example, -.Ql Cm \&:[2..-1] -selects all words from the second word to the last word. -If -.Ar start -is greater than -.Ar end , -then the words are output in reverse order. -For example, -.Ql Cm \&:[-1..1] -selects all the words from last to first. -.\" :[*] -.It Cm \&* -Causes subsequent modifiers to treat the value as a single word -(possibly containing embedded white space). -Analogous to the effect of -\&"$*\&" -in Bourne shell. -.\" :[0] -.It 0 -Means the same as -.Ql Cm \&:[*] . -.\" :[*] -.It Cm \&@ -Causes subsequent modifiers to treat the value as a sequence of words -delimited by white space. -Analogous to the effect of -\&"$@\&" -in Bourne shell. -.\" :[#] -.It Cm \&# -Returns the number of words in the value. -.El \" :[range] -.El -.Sh INCLUDE STATEMENTS, CONDITIONALS AND FOR LOOPS -Makefile inclusion, conditional structures and for loops reminiscent -of the C programming language are provided in -.Nm . -All such structures are identified by a line beginning with a single -dot -.Pq Ql \&. -character. -Files are included with either -.Cm \&.include Aq Ar file -or -.Cm \&.include Pf \*q Ar file Ns \*q . -Variables between the angle brackets or double quotes are expanded -to form the file name. -If angle brackets are used, the included makefile is expected to be in -the system makefile directory. -If double quotes are used, the including makefile's directory and any -directories specified using the -.Fl I -option are searched before the system -makefile directory. -For compatibility with other versions of -.Nm -.Ql include file ... -is also accepted. -If the include statement is written as -.Cm .-include -or as -.Cm .sinclude -then errors locating and/or opening include files are ignored. -.Pp -Conditional expressions are also preceded by a single dot as the first -character of a line. -The possible conditionals are as follows: -.Bl -tag -width Ds -.It Ic .error Ar message -The message is printed along with the name of the makefile and line number, -then -.Nm -will exit. -.It Ic .export Ar variable ... -Export the specified global variable. -If no variable list is provided, all globals are exported -except for internal variables (those that start with -.Ql \&. ) . -This is not affected by the -.Fl X -flag, so should be used with caution. -.Pp -Appending a variable name to -.Va .MAKE.EXPORTED -is equivalent to exporting a variable. -.It Ic .export-env Ar variable ... -The same as -.Ql .export , -except that the variable is not appended to -.Va .MAKE.EXPORTED . -This allows exporting a value to the environment which is different from that -used by -.Nm -internally. -.It Ic .info Ar message -The message is printed along with the name of the makefile and line number. -.It Ic .undef Ar variable -Un-define the specified global variable. -Only global variables may be un-defined. -.It Ic .unexport Ar variable ... -The opposite of -.Ql .export . -The specified global -.Va variable -will be removed from -.Va .MAKE.EXPORTED . -If no variable list is provided, all globals are unexported, -and -.Va .MAKE.EXPORTED -deleted. -.It Ic .unexport-env -Unexport all globals previously exported and -clear the environment inherited from the parent. -This operation will cause a memory leak of the original environment, -so should be used sparingly. -Testing for -.Va .MAKE.LEVEL -being 0, would make sense. -Also note that any variables which originated in the parent environment -should be explicitly preserved if desired. -For example: -.Bd -literal -offset indent -.Li .if ${.MAKE.LEVEL} == 0 -PATH := ${PATH} -.Li .unexport-env -.Li .export PATH -.Li .endif -.Pp -.Ed -Would result in an environment containing only -.Ql Ev PATH , -which is the minimal useful environment. -Actually -.Ql Ev .MAKE.LEVEL -will also be pushed into the new environment. -.It Ic .warning Ar message -The message prefixed by -.Ql Pa warning: -is printed along with the name of the makefile and line number. -.It Ic \&.if Oo \&! Oc Ns Ar expression Op Ar operator expression ... -Test the value of an expression. -.It Ic .ifdef Oo \&! Oc Ns Ar variable Op Ar operator variable ... -Test the value of a variable. -.It Ic .ifndef Oo \&! Oc Ns Ar variable Op Ar operator variable ... -Test the value of a variable. -.It Ic .ifmake Oo \&! Oc Ns Ar target Op Ar operator target ... -Test the target being built. -.It Ic .ifnmake Oo \&! Ns Oc Ar target Op Ar operator target ... -Test the target being built. -.It Ic .else -Reverse the sense of the last conditional. -.It Ic .elif Oo \&! Ns Oc Ar expression Op Ar operator expression ... -A combination of -.Ql Ic .else -followed by -.Ql Ic .if . -.It Ic .elifdef Oo \&! Oc Ns Ar variable Op Ar operator variable ... -A combination of -.Ql Ic .else -followed by -.Ql Ic .ifdef . -.It Ic .elifndef Oo \&! Oc Ns Ar variable Op Ar operator variable ... -A combination of -.Ql Ic .else -followed by -.Ql Ic .ifndef . -.It Ic .elifmake Oo \&! Oc Ns Ar target Op Ar operator target ... -A combination of -.Ql Ic .else -followed by -.Ql Ic .ifmake . -.It Ic .elifnmake Oo \&! Oc Ns Ar target Op Ar operator target ... -A combination of -.Ql Ic .else -followed by -.Ql Ic .ifnmake . -.It Ic .endif -End the body of the conditional. -.El -.Pp -The -.Ar operator -may be any one of the following: -.Bl -tag -width "Cm XX" -.It Cm \&|\&| -Logical OR. -.It Cm \&\*[Am]\*[Am] -Logical -.Tn AND ; -of higher precedence than -.Dq \&|\&| . -.El -.Pp -As in C, -.Nm -will only evaluate a conditional as far as is necessary to determine -its value. -Parentheses may be used to change the order of evaluation. -The boolean operator -.Ql Ic \&! -may be used to logically negate an entire -conditional. -It is of higher precedence than -.Ql Ic \&\*[Am]\*[Am] . -.Pp -The value of -.Ar expression -may be any of the following: -.Bl -tag -width defined -.It Ic defined -Takes a variable name as an argument and evaluates to true if the variable -has been defined. -.It Ic make -Takes a target name as an argument and evaluates to true if the target -was specified as part of -.Nm Ns 's -command line or was declared the default target (either implicitly or -explicitly, see -.Va .MAIN ) -before the line containing the conditional. -.It Ic empty -Takes a variable, with possible modifiers, and evaluates to true if -the expansion of the variable would result in an empty string. -.It Ic exists -Takes a file name as an argument and evaluates to true if the file exists. -The file is searched for on the system search path (see -.Va .PATH ) . -.It Ic target -Takes a target name as an argument and evaluates to true if the target -has been defined. -.It Ic commands -Takes a target name as an argument and evaluates to true if the target -has been defined and has commands associated with it. -.El -.Pp -.Ar Expression -may also be an arithmetic or string comparison. -Variable expansion is -performed on both sides of the comparison, after which the integral -values are compared. -A value is interpreted as hexadecimal if it is -preceded by 0x, otherwise it is decimal; octal numbers are not supported. -The standard C relational operators are all supported. -If after -variable expansion, either the left or right hand side of a -.Ql Ic == -or -.Ql Ic "!=" -operator is not an integral value, then -string comparison is performed between the expanded -variables. -If no relational operator is given, it is assumed that the expanded -variable is being compared against 0 or an empty string in the case -of a string comparison. -.Pp -When -.Nm -is evaluating one of these conditional expressions, and it encounters -a (white-space separated) word it doesn't recognize, either the -.Dq make -or -.Dq defined -expression is applied to it, depending on the form of the conditional. -If the form is -.Ql Ic .ifdef , -.Ql Ic .ifndef , -or -.Ql Ic .if -the -.Dq defined -expression is applied. -Similarly, if the form is -.Ql Ic .ifmake -or -.Ql Ic .ifnmake , the -.Dq make -expression is applied. -.Pp -If the conditional evaluates to true the parsing of the makefile continues -as before. -If it evaluates to false, the following lines are skipped. -In both cases this continues until a -.Ql Ic .else -or -.Ql Ic .endif -is found. -.Pp -For loops are typically used to apply a set of rules to a list of files. -The syntax of a for loop is: -.Pp -.Bl -tag -compact -width Ds -.It Ic \&.for Ar variable Oo Ar variable ... Oc Ic in Ar expression -.It Aq make-rules -.It Ic \&.endfor -.El -.Pp -After the for -.Ic expression -is evaluated, it is split into words. -On each iteration of the loop, one word is taken and assigned to each -.Ic variable , -in order, and these -.Ic variables -are substituted into the -.Ic make-rules -inside the body of the for loop. -The number of words must come out even; that is, if there are three -iteration variables, the number of words provided must be a multiple -of three. -.Sh COMMENTS -Comments begin with a hash -.Pq Ql \&# -character, anywhere but in a shell -command line, and continue to the end of an unescaped new line. -.Sh SPECIAL SOURCES (ATTRIBUTES) -.Bl -tag -width .IGNOREx -.It Ic .EXEC -Target is never out of date, but always execute commands anyway. -.It Ic .IGNORE -Ignore any errors from the commands associated with this target, exactly -as if they all were preceded by a dash -.Pq Ql \- . -.\" .It Ic .INVISIBLE -.\" XXX -.\" .It Ic .JOIN -.\" XXX -.It Ic .MADE -Mark all sources of this target as being up-to-date. -.It Ic .MAKE -Execute the commands associated with this target even if the -.Fl n -or -.Fl t -options were specified. -Normally used to mark recursive -.Nm Ns 's . -.It Ic .NOPATH -Do not search for the target in the directories specified by -.Ic .PATH . -.It Ic .NOTMAIN -Normally -.Nm -selects the first target it encounters as the default target to be built -if no target was specified. -This source prevents this target from being selected. -.It Ic .OPTIONAL -If a target is marked with this attribute and -.Nm -can't figure out how to create it, it will ignore this fact and assume -the file isn't needed or already exists. -.It Ic .PHONY -The target does not -correspond to an actual file; it is always considered to be out of date, -and will not be created with the -.Fl t -option. -Suffix-transformation rules are not applied to -.Ic .PHONY -targets. -.It Ic .PRECIOUS -When -.Nm -is interrupted, it normally removes any partially made targets. -This source prevents the target from being removed. -.It Ic .RECURSIVE -Synonym for -.Ic .MAKE . -.It Ic .SILENT -Do not echo any of the commands associated with this target, exactly -as if they all were preceded by an at sign -.Pq Ql @ . -.It Ic .USE -Turn the target into -.Nm Ns 's -version of a macro. -When the target is used as a source for another target, the other target -acquires the commands, sources, and attributes (except for -.Ic .USE ) -of the -source. -If the target already has commands, the -.Ic .USE -target's commands are appended -to them. -.It Ic .USEBEFORE -Exactly like -.Ic .USE , -but prepend the -.Ic .USEBEFORE -target commands to the target. -.It Ic .WAIT -If -.Ic .WAIT -appears in a dependency line, the sources that precede it are -made before the sources that succeed it in the line. -Since the dependents of files are not made until the file itself -could be made, this also stops the dependents being built unless they -are needed for another branch of the dependency tree. -So given: -.Bd -literal -x: a .WAIT b - echo x -a: - echo a -b: b1 - echo b -b1: - echo b1 - -.Ed -the output is always -.Ql a , -.Ql b1 , -.Ql b , -.Ql x . -.br -The ordering imposed by -.Ic .WAIT -is only relevant for parallel makes. -.El -.Sh SPECIAL TARGETS -Special targets may not be included with other targets, i.e. they must be -the only target specified. -.Bl -tag -width .BEGINx -.It Ic .BEGIN -Any command lines attached to this target are executed before anything -else is done. -.It Ic .DEFAULT -This is sort of a -.Ic .USE -rule for any target (that was used only as a -source) that -.Nm -can't figure out any other way to create. -Only the shell script is used. -The -.Ic .IMPSRC -variable of a target that inherits -.Ic .DEFAULT Ns 's -commands is set -to the target's own name. -.It Ic .END -Any command lines attached to this target are executed after everything -else is done. -.It Ic .ERROR -Any command lines attached to this target are executed when another target fails. -The -.Ic .ERROR_TARGET -variable is set to the target that failed. -See also -.Ic MAKE_PRINT_VAR_ON_ERROR . -.It Ic .IGNORE -Mark each of the sources with the -.Ic .IGNORE -attribute. -If no sources are specified, this is the equivalent of specifying the -.Fl i -option. -.It Ic .INTERRUPT -If -.Nm -is interrupted, the commands for this target will be executed. -.It Ic .MAIN -If no target is specified when -.Nm -is invoked, this target will be built. -.It Ic .MAKEFLAGS -This target provides a way to specify flags for -.Nm -when the makefile is used. -The flags are as if typed to the shell, though the -.Fl f -option will have -no effect. -.\" XXX: NOT YET!!!! -.\" .It Ic .NOTPARALLEL -.\" The named targets are executed in non parallel mode. -.\" If no targets are -.\" specified, then all targets are executed in non parallel mode. -.It Ic .NOPATH -Apply the -.Ic .NOPATH -attribute to any specified sources. -.It Ic .NOTPARALLEL -Disable parallel mode. -.It Ic .NO_PARALLEL -Synonym for -.Ic .NOTPARALLEL , -for compatibility with other pmake variants. -.It Ic .ORDER -The named targets are made in sequence. -This ordering does not add targets to the list of targets to be made. -Since the dependents of a target do not get built until the target itself -could be built, unless -.Ql a -is built by another part of the dependency graph, -the following is a dependency loop: -.Bd -literal -\&.ORDER: a b -b: a -.Ed -.Pp -The ordering imposed by -.Ic .ORDER -is only relevant for parallel makes. -.\" XXX: NOT YET!!!! -.\" .It Ic .PARALLEL -.\" The named targets are executed in parallel mode. -.\" If no targets are -.\" specified, then all targets are executed in parallel mode. -.It Ic .PATH -The sources are directories which are to be searched for files not -found in the current directory. -If no sources are specified, any previously specified directories are -deleted. -If the source is the special -.Ic .DOTLAST -target, then the current working -directory is searched last. -.It Ic .PHONY -Apply the -.Ic .PHONY -attribute to any specified sources. -.It Ic .PRECIOUS -Apply the -.Ic .PRECIOUS -attribute to any specified sources. -If no sources are specified, the -.Ic .PRECIOUS -attribute is applied to every -target in the file. -.It Ic .SHELL -Sets the shell that -.Nm -will use to execute commands. -The sources are a set of -.Ar field=value -pairs. -.Bl -tag -width hasErrCtls -.It Ar name -This is the minimal specification, used to select one of the builtin -shell specs; -.Ar sh , -.Ar ksh , -and -.Ar csh . -.It Ar path -Specifies the path to the shell. -.It Ar hasErrCtl -Indicates whether the shell supports exit on error. -.It Ar check -The command to turn on error checking. -.It Ar ignore -The command to disable error checking. -.It Ar echo -The command to turn on echoing of commands executed. -.It Ar quiet -The command to turn off echoing of commands executed. -.It Ar filter -The output to filter after issuing the -.Ar quiet -command. -It is typically identical to -.Ar quiet . -.It Ar errFlag -The flag to pass the shell to enable error checking. -.It Ar echoFlag -The flag to pass the shell to enable command echoing. -.It Ar newline -The string literal to pass the shell that results in a single newline -character when used outside of any quoting characters. -.El -Example: -.Bd -literal -\&.SHELL: name=ksh path=/bin/ksh hasErrCtl=true \e - check="set -e" ignore="set +e" \e - echo="set -v" quiet="set +v" filter="set +v" \e - echoFlag=v errFlag=e newline="'\en'" -.Ed -.It Ic .SILENT -Apply the -.Ic .SILENT -attribute to any specified sources. -If no sources are specified, the -.Ic .SILENT -attribute is applied to every -command in the file. -.It Ic .SUFFIXES -Each source specifies a suffix to -.Nm . -If no sources are specified, any previously specified suffixes are deleted. -It allows the creation of suffix-transformation rules. -.Pp -Example: -.Bd -literal -\&.SUFFIXES: .o -\&.c.o: - cc -o ${.TARGET} -c ${.IMPSRC} -.Ed -.El -.Sh ENVIRONMENT -.Nm -uses the following environment variables, if they exist: -.Ev MACHINE , -.Ev MACHINE_ARCH , -.Ev MAKE , -.Ev MAKEFLAGS , -.Ev MAKEOBJDIR , -.Ev MAKEOBJDIRPREFIX , -.Ev MAKESYSPATH , -.Ev PWD , -and -.Ev TMPDIR . -.Pp -.Ev MAKEOBJDIRPREFIX -and -.Ev MAKEOBJDIR -may only be set in the environment or on the command line to -.Nm -and not as makefile variables; -see the description of -.Ql Va .OBJDIR -for more details. -.Sh FILES -.Bl -tag -width /usr/share/mk -compact -.It .depend -list of dependencies -.It Makefile -list of dependencies -.It makefile -list of dependencies -.It sys.mk -system makefile -.It /usr/share/mk -system makefile directory -.El -.Sh COMPATIBILITY -The basic make syntax is compatible between different versions of make, -however the special variables, variable modifiers and conditionals are not. -.Pp -The way that parallel makes are scheduled changed in -.Nx 4.0 -so that .ORDER and .WAIT apply recursively to the dependant nodes. -The algorithms used may change again in the future. -.Pp -The way that .for loop variables are substituted changed after -.Nx 5.0 -so that they still appear to be variable expansions. -In particular this stops them being treated as syntax, and removes some -obscure problems using them in .if statements. -.Sh SEE ALSO -.Xr mkdep 1 -.Sh HISTORY -A -.Nm -command appeared in -.At v7 . -.Sh BUGS -The -.Nm -syntax is difficult to parse without actually acting of the data. -For instance finding the end of a variable use should involve scanning each -the modifiers using the correct terminator for each field. -In many places -.Nm -just counts {} and () in order to find the end of a variable expansion. -.Pp -There is no way of escaping a space character in a filename. |