summaryrefslogtreecommitdiff
path: root/bootstrap/bmake/make.1
diff options
context:
space:
mode:
Diffstat (limited to 'bootstrap/bmake/make.1')
-rw-r--r--bootstrap/bmake/make.11265
1 files changed, 0 insertions, 1265 deletions
diff --git a/bootstrap/bmake/make.1 b/bootstrap/bmake/make.1
deleted file mode 100644
index bfd8caf9e65..00000000000
--- a/bootstrap/bmake/make.1
+++ /dev/null
@@ -1,1265 +0,0 @@
-.\" $NetBSD: make.1,v 1.4 2005/05/16 09:18:27 rillig 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. All advertising materials mentioning features or use of this software
-.\" must display the following acknowledgement:
-.\" This product includes software developed by the University of
-.\" California, Berkeley and its contributors.
-.\" 4. 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 March 19, 1994
-.Dt MAKE 1
-.Os
-.Sh NAME
-.Nm make
-.Nd maintain program dependencies
-.Sh SYNOPSIS
-.Nm ""
-.Op Fl BeikNnqrstW
-.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 max_jobs
-.Ek
-.Bk -words
-.Op Fl J Ar private
-.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 the file
-.Ql Pa makefile
-exists, it is read for this list of specifications.
-If it does not exist, the file
-.Ql Pa Makefile
-is read.
-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
-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 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.
-.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 conditional evaluation.
-.It Ar d
-Print debugging information about directory searching and caching.
-.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 j
-Print debugging information about running multiple shells.
-.It Ar m
-Print debugging information about making targets, including modification
-dates.
-.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 environmental variables override macro assignments within
-makefiles.
-.It Fl f Ar makefile
-Specify a makefile to read instead of the default
-.Ql Pa makefile
-and
-If
-.Ar makefile
-is
-.Ql Fl ,
-standard input is read.
-Multiple makefile's 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.
-.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 <...> style. Multiple directories can be added 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 "..."-style inclusions (see the
-.Fl I
-option).
-.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.
-.It Fl W
-Treat any warnings during makefile parsing as errors.
-.It Ar variable=value
-Set the value of the variable
-.Ar variable
-to
-.Ar value .
-.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 ``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 or first two characters of the command line are
-.Ql Ic @
-and/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 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.
-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.
-.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
-Variable substitution occurs at two distinct times, depending on where
-the variable is being used.
-Variables in dependency lines are expanded as the line is read.
-Variables in shell commands are expanded when the shell command is
-executed.
-.Pp
-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 \&> .
-.It Va .ARCHIVE
-The name of the archive file.
-.It Va .IMPSRC
-The name/path of the source from which the target is to be transformed
-(the ``implied'' source); also known as
-.Ql Va \&< .
-.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 file, 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 \&>
-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 "<F" ,
-.Ql Va "<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 .
-.Pp
-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 .MAKE
-The name that
-.Nm
-was executed with
-.Pq Va argv[0]
-.It Va .CURDIR
-A path to the directory where
-.Nm
-was executed.
-.It Va .OBJDIR
-A path to the directory where the targets are built.
-.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 .PARSEFILE
-are both set only while the
-.Ql Pa Makefiles
-are being parsed.
-.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 .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 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.
-.Ql Ev PWD
-is set to the value of
-.Ql Va .OBJDIR
-for all programs which
-.Nm
-executes.
-.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 :@ 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}@}.
-.El
-.Pp
-Variable expansion may be modified to select or modify each word of the
-variable.
-A
-.Dq word
-is delimited by whitespace (which is not part of the word),
-unless the whitespace is inside single or double quotes, in which case
-it is preserved.
-The quotes are interpreted like in the Bourne shell.
-.Pp
-Example:
-.Bl -tag -width ABCDEFG
-.It Dv EXAMPLE_1= abc def g"hi jkl" 'm\ \ \ n'
-These are four words:
-.Dq Li abc ,
-.Dq Li def ,
-.Dq Li g"hi\ jkl" ,
-.Dq Li 'm\ \ \ n' .
-.El
-.Pp
-The general format of a variable expansion is as follows:
-.Pp
-.Dl {variable[:modifier[:...]]}
-.Pp
-Each modifier begins with a colon and one of the following
-special characters.
-The colon may be escaped with a backslash
-.Pq Ql \e .
-.Bl -tag -width Cm E\&
-.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 the rest of the modifier.
-The standard shell wildcard characters
-.Pf ( Ql * ,
-.Ql ? ,
-and
-.Ql Op )
-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
-the rest of the modifier.
-.It Cm O
-Order every word in variable alphabetically.
-.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.
-.Sm off
-.It Cm S No \&/ Ar old_string Xo
-.No \&/ Ar new_string
-.No \&/ Op Cm 1g
-.Xc
-.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
-.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 &
-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 Xo
-.No \&/ Ar replacement
-.No \&/ Op Cm 1g
-.Xc
-.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 )
-and an
-.Xr ed 1 Ns \-style
-replacement string. Normally, the first occurrence of the pattern in
-each word of the value is changed. 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 as occur in the word or words it is found in. 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 ).
-.It Cm ? Ar true_string Cm : Ar false_string
-If the variable evaluates to true, return as its value the
-.Ar true_string,
-otherwise return the
-.Ar false_string.
-.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
-.It Cm @ Ar temp Cm @ Xo
-.No Ar string Cm @
-.Xc
-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 Ar newval
-If the variable is undefined
-.Ar newval
-is the value. This is another ODE make feature. It is handy for
-setting per-target CFLAGS for instance:
-.Dl ${_${.TARGET:T}_CFLAGS:U${DEF_CFLAGS}}
-.It Cm D 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.
-.It Cm ! Ar cmd Cm !
-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 \&:= 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 apply modifiers to
-.Cm \&.for
-loop iteration variables which won't work due to the way
-.Cm \&.for
-loops are implemented. 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. As in:
-.Bd -literal
-use_foo: \&.USE
-\&.for i in ${\&.TARGET} ${\&.TARGET:R}\&.gz
- @: ${t::=$i}
- @echo t:R:T=${t:R:T}
-\&.endfor
-
-.Ed
-The double
-.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 \&:?= Ar str
-As for
-.Cm \&:=
-but only if the variable does not already have a value.
-.It Cm \&:+= Ar str
-Append
-.Ar str
-to the variable.
-.It Cm \&:!= Ar cmd
-Assign the output of
-.Ar cmd
-to the variable.
-.El
-.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 .undef Ar variable
-Un-define the specified global variable.
-Only global variables may be un-defined.
-.It Xo
-.Ic \&.if
-.Oo \&! Oc Ns Ar expression
-.Op Ar operator expression ...
-.Xc
-Test the value of an expression.
-.It Xo
-.Ic .ifdef
-.Oo \&! Oc Ns Ar variable
-.Op Ar operator variable ...
-.Xc
-Test the value of a variable.
-.It Xo
-.Ic .ifndef
-.Oo \&! Oc Ns Ar variable
-.Op Ar operator variable ...
-.Xc
-Test the value of a variable.
-.It Xo
-.Ic .ifmake
-.Oo \&! Oc Ns Ar target
-.Op Ar operator target ...
-.Xc
-Test the target being built.
-.It Xo
-.Ic .ifnmake
-.Oo \&! Oc Ar target
-.Op Ar operator target ...
-.Xc
-Test the target being built.
-.It Ic .else
-Reverse the sense of the last conditional.
-.It Xo
-.Ic .elif
-.Oo \&! Oc Ar expression
-.Op Ar operator expression ...
-.Xc
-A combination of
-.Ql Ic .else
-followed by
-.Ql Ic .if .
-.It Xo
-.Ic .elifdef
-.Oo \&! Oc Ns Ar variable
-.Op Ar operator variable ...
-.Xc
-A combination of
-.Ql Ic .else
-followed by
-.Ql Ic .ifdef .
-.It Xo
-.Ic .elifndef
-.Oo \&! Oc Ns Ar variable
-.Op Ar operator variable ...
-.Xc
-A combination of
-.Ql Ic .else
-followed by
-.Ql Ic .ifndef .
-.It Xo
-.Ic .elifmake
-.Oo \&! Oc Ns Ar target
-.Op Ar operator target ...
-.Xc
-A combination of
-.Ql Ic .else
-followed by
-.Ql Ic .ifmake .
-.It Xo
-.Ic .elifnmake
-.Oo \&! Oc Ns Ar target
-.Op Ar operator target ...
-.Xc
-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 \&&&
-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 \&&& .
-.Pp
-The value of
-.Ar expression
-may be any of the following:
-.Bl -tag -width Ic 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.
-.Pp
-When
-.Nm
-is evaluating one of these conditional expression, and it encounters
-a word it doesn't recognize, either the ``make'' or ``defined''
-expression is applied to it, depending on the form of the conditional.
-If the form is
-.Ql Ic .ifdef
-or
-.Ql Ic .ifndef ,
-the ``defined'' expression
-is applied.
-Similarly, if the form is
-.Ql Ic .ifmake
-or
-.Ql Ic .ifnmake , the ``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:
-.Bl -tag -width Ds
-.It Xo
-.Ic \&.for
-.Ar variable
-.Op Ar variable ...
-.Ic in
-.Ar expression
-.Xc
-.It Xo
-<make-rules>
-.Xc
-.It Xo
-.Ic \&.endfor
-.Xc
-.El
-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.
-.Pp
-.\" FIXME: .Ic is not the right markup, but it looks good.
-.Ic WARNING :
-Other than the way a
-.Dq word
-is interpreted by the modificators, a
-.Ic .for
-loop statement splits the expression at sequences of whitespace.
-Single quotes, double quotes and backslashes do not have a special
-meaning in this case.
-.Sh COMMENTS
-Comments begin with a hash
-.Pq Ql \&#
-character, anywhere but in a shell
-command line, and continue to the end of the line.
-.Sh SPECIAL SOURCES
-.Bl -tag -width Ic .IGNORE
-.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 .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 .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 .PRECIOUS
-When
-.Nm
-is interrupted, it removes any partially made targets.
-This source prevents the target from being removed.
-.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 special
-.Ic .WAIT
-source is appears in a dependency line, the sources that precede it are
-made before the sources that succeed it in the line. Loops are not being
-detected and targets that form loops will be silently ignored.
-.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 Ic .BEGIN
-.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 .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. Targets with this attribute are not
-searched for in the directories specified by
-.Ic .PATH .
-.It Ic .NOTPARALLEL
-Disable parallel mode.
-.It Ic .NO_PARALLEL
-Same as above, for compatibility with other pmake variants.
-.It Ic .ORDER
-The named targets are made in sequence.
-.\" 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. Targets with this attribute do not
-correspond to actual files; they are always considered to be out of date,
-and will not be created with the
-.Fl t
-option.
-.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 .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 previous specified suffixes are deleted.
-.El
-.Sh ENVIRONMENT
-.Nm
-utilizes the following environment variables, if they exist:
-.Ev MACHINE ,
-.Ev MACHINE_ARCH ,
-.Ev MAKE ,
-.Ev MAKEFLAGS ,
-.Ev MAKEOBJDIR ,
-.Ev MAKEOBJDIRPREFIX ,
-and
-.Ev PWD .
-.Pp
-If
-.Ev MAKEOBJDIRPREFIX
-is set, then
-.Nm
-will
-.Xr chdir 2
-to ${MAKEOBJDIRPREFIX}${.CURDIR} if it exists.
-Otherwise if
-.Ev MAKEOBJDIR
-and the named directory exists
-.Nm
-will
-.Xr chdir 2
-to it.
-These actions are taken before any makefiles are read which is why they
-need to be set in the environment.
-.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 SEE ALSO
-.Xr mkdep 1
-.Sh HISTORY
-A
-.Nm
-command appeared in
-.At v7 .