1*9f45a3c8SSimon J. Gerraty.\" $NetBSD: make.1,v 1.304 2022/01/29 20:54:58 sjg Exp $ 23955d011SMarcel Moolenaar.\" 33955d011SMarcel Moolenaar.\" Copyright (c) 1990, 1993 43955d011SMarcel Moolenaar.\" The Regents of the University of California. All rights reserved. 53955d011SMarcel Moolenaar.\" 63955d011SMarcel Moolenaar.\" Redistribution and use in source and binary forms, with or without 73955d011SMarcel Moolenaar.\" modification, are permitted provided that the following conditions 83955d011SMarcel Moolenaar.\" are met: 93955d011SMarcel Moolenaar.\" 1. Redistributions of source code must retain the above copyright 103955d011SMarcel Moolenaar.\" notice, this list of conditions and the following disclaimer. 113955d011SMarcel Moolenaar.\" 2. Redistributions in binary form must reproduce the above copyright 123955d011SMarcel Moolenaar.\" notice, this list of conditions and the following disclaimer in the 133955d011SMarcel Moolenaar.\" documentation and/or other materials provided with the distribution. 143955d011SMarcel Moolenaar.\" 3. Neither the name of the University nor the names of its contributors 153955d011SMarcel Moolenaar.\" may be used to endorse or promote products derived from this software 163955d011SMarcel Moolenaar.\" without specific prior written permission. 173955d011SMarcel Moolenaar.\" 183955d011SMarcel Moolenaar.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 193955d011SMarcel Moolenaar.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 203955d011SMarcel Moolenaar.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 213955d011SMarcel Moolenaar.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 223955d011SMarcel Moolenaar.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 233955d011SMarcel Moolenaar.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 243955d011SMarcel Moolenaar.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 253955d011SMarcel Moolenaar.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 263955d011SMarcel Moolenaar.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 273955d011SMarcel Moolenaar.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 283955d011SMarcel Moolenaar.\" SUCH DAMAGE. 293955d011SMarcel Moolenaar.\" 303955d011SMarcel Moolenaar.\" from: @(#)make.1 8.4 (Berkeley) 3/19/94 313955d011SMarcel Moolenaar.\" 32*9f45a3c8SSimon J. Gerraty.Dd January 28, 2022 3345447996SSimon J. Gerraty.Dt BMAKE 1 343955d011SMarcel Moolenaar.Os 353955d011SMarcel Moolenaar.Sh NAME 363955d011SMarcel Moolenaar.Nm bmake 373955d011SMarcel Moolenaar.Nd maintain program dependencies 383955d011SMarcel Moolenaar.Sh SYNOPSIS 393955d011SMarcel Moolenaar.Nm 40e2eeea75SSimon J. Gerraty.Op Fl BeikNnqrSstWwX 413955d011SMarcel Moolenaar.Op Fl C Ar directory 423955d011SMarcel Moolenaar.Op Fl D Ar variable 433955d011SMarcel Moolenaar.Op Fl d Ar flags 443955d011SMarcel Moolenaar.Op Fl f Ar makefile 453955d011SMarcel Moolenaar.Op Fl I Ar directory 463955d011SMarcel Moolenaar.Op Fl J Ar private 473955d011SMarcel Moolenaar.Op Fl j Ar max_jobs 483955d011SMarcel Moolenaar.Op Fl m Ar directory 493955d011SMarcel Moolenaar.Op Fl T Ar file 503955d011SMarcel Moolenaar.Op Fl V Ar variable 518695518cSSimon J. Gerraty.Op Fl v Ar variable 523955d011SMarcel Moolenaar.Op Ar variable=value 533955d011SMarcel Moolenaar.Op Ar target ... 543955d011SMarcel Moolenaar.Sh DESCRIPTION 553955d011SMarcel Moolenaar.Nm 563955d011SMarcel Moolenaaris a program designed to simplify the maintenance of other programs. 573955d011SMarcel MoolenaarIts input is a list of specifications as to the files upon which programs 583955d011SMarcel Moolenaarand other files depend. 593955d011SMarcel MoolenaarIf no 603955d011SMarcel Moolenaar.Fl f Ar makefile 613955d011SMarcel Moolenaarmakefile option is given, 623955d011SMarcel Moolenaar.Nm 633955d011SMarcel Moolenaarwill try to open 643955d011SMarcel Moolenaar.Ql Pa makefile 653955d011SMarcel Moolenaarthen 663955d011SMarcel Moolenaar.Ql Pa Makefile 673955d011SMarcel Moolenaarin order to find the specifications. 683955d011SMarcel MoolenaarIf the file 693955d011SMarcel Moolenaar.Ql Pa .depend 703955d011SMarcel Moolenaarexists, it is read (see 713955d011SMarcel Moolenaar.Xr mkdep 1 ) . 723955d011SMarcel Moolenaar.Pp 733955d011SMarcel MoolenaarThis manual page is intended as a reference document only. 743955d011SMarcel MoolenaarFor a more thorough description of 753955d011SMarcel Moolenaar.Nm 763955d011SMarcel Moolenaarand makefiles, please refer to 773955d011SMarcel Moolenaar.%T "PMake \- A Tutorial" . 783955d011SMarcel Moolenaar.Pp 793955d011SMarcel Moolenaar.Nm 803955d011SMarcel Moolenaarwill prepend the contents of the 813955d011SMarcel Moolenaar.Va MAKEFLAGS 823955d011SMarcel Moolenaarenvironment variable to the command line arguments before parsing them. 833955d011SMarcel Moolenaar.Pp 843955d011SMarcel MoolenaarThe options are as follows: 853955d011SMarcel Moolenaar.Bl -tag -width Ds 863955d011SMarcel Moolenaar.It Fl B 873955d011SMarcel MoolenaarTry to be backwards compatible by executing a single shell per command and 883955d011SMarcel Moolenaarby executing the commands to make the sources of a dependency line in sequence. 893955d011SMarcel Moolenaar.It Fl C Ar directory 903955d011SMarcel MoolenaarChange to 913955d011SMarcel Moolenaar.Ar directory 923955d011SMarcel Moolenaarbefore reading the makefiles or doing anything else. 933955d011SMarcel MoolenaarIf multiple 943955d011SMarcel Moolenaar.Fl C 953955d011SMarcel Moolenaaroptions are specified, each is interpreted relative to the previous one: 963955d011SMarcel Moolenaar.Fl C Pa / Fl C Pa etc 973955d011SMarcel Moolenaaris equivalent to 983955d011SMarcel Moolenaar.Fl C Pa /etc . 993955d011SMarcel Moolenaar.It Fl D Ar variable 1003955d011SMarcel MoolenaarDefine 1013955d011SMarcel Moolenaar.Ar variable 102dba7b0efSSimon J. Gerratyto be 1, in the global scope. 1033955d011SMarcel Moolenaar.It Fl d Ar [-]flags 1043955d011SMarcel MoolenaarTurn on debugging, and specify which portions of 1053955d011SMarcel Moolenaar.Nm 1063955d011SMarcel Moolenaarare to print debugging information. 1073955d011SMarcel MoolenaarUnless the flags are preceded by 1083955d011SMarcel Moolenaar.Ql \- 1093955d011SMarcel Moolenaarthey are added to the 1103955d011SMarcel Moolenaar.Va MAKEFLAGS 1113955d011SMarcel Moolenaarenvironment variable and will be processed by any child make processes. 1123955d011SMarcel MoolenaarBy default, debugging information is printed to standard error, 1133955d011SMarcel Moolenaarbut this can be changed using the 1143955d011SMarcel Moolenaar.Ar F 1153955d011SMarcel Moolenaardebugging flag. 1163955d011SMarcel MoolenaarThe debugging output is always unbuffered; in addition, if debugging 1173955d011SMarcel Moolenaaris enabled but debugging output is not directed to standard output, 1183955d011SMarcel Moolenaarthen the standard output is line buffered. 1193955d011SMarcel Moolenaar.Ar Flags 1203955d011SMarcel Moolenaaris one or more of the following: 1213955d011SMarcel Moolenaar.Bl -tag -width Ds 1223955d011SMarcel Moolenaar.It Ar A 1233955d011SMarcel MoolenaarPrint all possible debugging information; 1243955d011SMarcel Moolenaarequivalent to specifying all of the debugging flags. 1253955d011SMarcel Moolenaar.It Ar a 1263955d011SMarcel MoolenaarPrint debugging information about archive searching and caching. 1273955d011SMarcel Moolenaar.It Ar C 1283955d011SMarcel MoolenaarPrint debugging information about current working directory. 1293955d011SMarcel Moolenaar.It Ar c 1303955d011SMarcel MoolenaarPrint debugging information about conditional evaluation. 1313955d011SMarcel Moolenaar.It Ar d 1323955d011SMarcel MoolenaarPrint debugging information about directory searching and caching. 1333955d011SMarcel Moolenaar.It Ar e 1343955d011SMarcel MoolenaarPrint debugging information about failed commands and targets. 1353955d011SMarcel Moolenaar.It Ar F Ns Oo Sy \&+ Oc Ns Ar filename 1363955d011SMarcel MoolenaarSpecify where debugging output is written. 1373955d011SMarcel MoolenaarThis must be the last flag, because it consumes the remainder of 1383955d011SMarcel Moolenaarthe argument. 1393955d011SMarcel MoolenaarIf the character immediately after the 1403955d011SMarcel Moolenaar.Ql F 1413955d011SMarcel Moolenaarflag is 1423955d011SMarcel Moolenaar.Ql \&+ , 1433955d011SMarcel Moolenaarthen the file will be opened in append mode; 1443955d011SMarcel Moolenaarotherwise the file will be overwritten. 1453955d011SMarcel MoolenaarIf the file name is 1463955d011SMarcel Moolenaar.Ql stdout 1473955d011SMarcel Moolenaaror 1483955d011SMarcel Moolenaar.Ql stderr 1493955d011SMarcel Moolenaarthen debugging output will be written to the 1503955d011SMarcel Moolenaarstandard output or standard error output file descriptors respectively 1513955d011SMarcel Moolenaar(and the 1523955d011SMarcel Moolenaar.Ql \&+ 1533955d011SMarcel Moolenaaroption has no effect). 1543955d011SMarcel MoolenaarOtherwise, the output will be written to the named file. 1553955d011SMarcel MoolenaarIf the file name ends 1563955d011SMarcel Moolenaar.Ql .%d 1573955d011SMarcel Moolenaarthen the 1583955d011SMarcel Moolenaar.Ql %d 1593955d011SMarcel Moolenaaris replaced by the pid. 1603955d011SMarcel Moolenaar.It Ar f 1613955d011SMarcel MoolenaarPrint debugging information about loop evaluation. 1623955d011SMarcel Moolenaar.It Ar "g1" 1633955d011SMarcel MoolenaarPrint the input graph before making anything. 1643955d011SMarcel Moolenaar.It Ar "g2" 1653955d011SMarcel MoolenaarPrint the input graph after making everything, or before exiting 1663955d011SMarcel Moolenaaron error. 1673955d011SMarcel Moolenaar.It Ar "g3" 1683955d011SMarcel MoolenaarPrint the input graph before exiting on error. 1692c3632d1SSimon J. Gerraty.It Ar h 1702c3632d1SSimon J. GerratyPrint debugging information about hash table operations. 1713955d011SMarcel Moolenaar.It Ar j 1723955d011SMarcel MoolenaarPrint debugging information about running multiple shells. 1732c3632d1SSimon J. Gerraty.It Ar L 1742c3632d1SSimon J. GerratyTurn on lint checks. 1752c3632d1SSimon J. GerratyThis will throw errors for variable assignments that do not parse 1762c3632d1SSimon J. Gerratycorrectly, at the time of assignment so the file and line number 1772c3632d1SSimon J. Gerratyare available. 1783955d011SMarcel Moolenaar.It Ar l 1793955d011SMarcel MoolenaarPrint commands in Makefiles regardless of whether or not they are prefixed by 1803955d011SMarcel Moolenaar.Ql @ 1813955d011SMarcel Moolenaaror other "quiet" flags. 1823955d011SMarcel MoolenaarAlso known as "loud" behavior. 1833955d011SMarcel Moolenaar.It Ar M 1843955d011SMarcel MoolenaarPrint debugging information about "meta" mode decisions about targets. 1853955d011SMarcel Moolenaar.It Ar m 1863955d011SMarcel MoolenaarPrint debugging information about making targets, including modification 1873955d011SMarcel Moolenaardates. 1883955d011SMarcel Moolenaar.It Ar n 1893955d011SMarcel MoolenaarDon't delete the temporary command scripts created when running commands. 1903955d011SMarcel MoolenaarThese temporary scripts are created in the directory 1913955d011SMarcel Moolenaarreferred to by the 1923955d011SMarcel Moolenaar.Ev TMPDIR 1933955d011SMarcel Moolenaarenvironment variable, or in 1943955d011SMarcel Moolenaar.Pa /tmp 1953955d011SMarcel Moolenaarif 1963955d011SMarcel Moolenaar.Ev TMPDIR 1973955d011SMarcel Moolenaaris unset or set to the empty string. 1983955d011SMarcel MoolenaarThe temporary scripts are created by 1993955d011SMarcel Moolenaar.Xr mkstemp 3 , 2003955d011SMarcel Moolenaarand have names of the form 2013955d011SMarcel Moolenaar.Pa makeXXXXXX . 2023955d011SMarcel Moolenaar.Em NOTE : 2033955d011SMarcel MoolenaarThis can create many files in 2043955d011SMarcel Moolenaar.Ev TMPDIR 2053955d011SMarcel Moolenaaror 2063955d011SMarcel Moolenaar.Pa /tmp , 2073955d011SMarcel Moolenaarso use with care. 2083955d011SMarcel Moolenaar.It Ar p 2093955d011SMarcel MoolenaarPrint debugging information about makefile parsing. 2103955d011SMarcel Moolenaar.It Ar s 2113955d011SMarcel MoolenaarPrint debugging information about suffix-transformation rules. 2123955d011SMarcel Moolenaar.It Ar t 2133955d011SMarcel MoolenaarPrint debugging information about target list maintenance. 2143955d011SMarcel Moolenaar.It Ar V 2153955d011SMarcel MoolenaarForce the 2163955d011SMarcel Moolenaar.Fl V 2178695518cSSimon J. Gerratyoption to print raw values of variables, overriding the default behavior 2188695518cSSimon J. Gerratyset via 2198695518cSSimon J. Gerraty.Va .MAKE.EXPAND_VARIABLES . 2203955d011SMarcel Moolenaar.It Ar v 2213955d011SMarcel MoolenaarPrint debugging information about variable assignment. 2223955d011SMarcel Moolenaar.It Ar x 2233955d011SMarcel MoolenaarRun shell commands with 2243955d011SMarcel Moolenaar.Fl x 2253955d011SMarcel Moolenaarso the actual commands are printed as they are executed. 2263955d011SMarcel Moolenaar.El 2273955d011SMarcel Moolenaar.It Fl e 2283955d011SMarcel MoolenaarSpecify that environment variables override macro assignments within 2293955d011SMarcel Moolenaarmakefiles. 2303955d011SMarcel Moolenaar.It Fl f Ar makefile 2313955d011SMarcel MoolenaarSpecify a makefile to read instead of the default 2323955d011SMarcel Moolenaar.Ql Pa makefile . 2333955d011SMarcel MoolenaarIf 2343955d011SMarcel Moolenaar.Ar makefile 2353955d011SMarcel Moolenaaris 2363955d011SMarcel Moolenaar.Ql Fl , 2373955d011SMarcel Moolenaarstandard input is read. 2383955d011SMarcel MoolenaarMultiple makefiles may be specified, and are read in the order specified. 2393955d011SMarcel Moolenaar.It Fl I Ar directory 2403955d011SMarcel MoolenaarSpecify a directory in which to search for makefiles and included makefiles. 2413955d011SMarcel MoolenaarThe system makefile directory (or directories, see the 2423955d011SMarcel Moolenaar.Fl m 2433955d011SMarcel Moolenaaroption) is automatically included as part of this list. 2443955d011SMarcel Moolenaar.It Fl i 2453955d011SMarcel MoolenaarIgnore non-zero exit of shell commands in the makefile. 2463955d011SMarcel MoolenaarEquivalent to specifying 2473955d011SMarcel Moolenaar.Ql Fl 2483955d011SMarcel Moolenaarbefore each command line in the makefile. 2493955d011SMarcel Moolenaar.It Fl J Ar private 2503955d011SMarcel MoolenaarThis option should 2513955d011SMarcel Moolenaar.Em not 2523955d011SMarcel Moolenaarbe specified by the user. 2533955d011SMarcel Moolenaar.Pp 2543955d011SMarcel MoolenaarWhen the 2553955d011SMarcel Moolenaar.Ar j 2563955d011SMarcel Moolenaaroption is in use in a recursive build, this option is passed by a make 2573955d011SMarcel Moolenaarto child makes to allow all the make processes in the build to 2583955d011SMarcel Moolenaarcooperate to avoid overloading the system. 2593955d011SMarcel Moolenaar.It Fl j Ar max_jobs 2603955d011SMarcel MoolenaarSpecify the maximum number of jobs that 2613955d011SMarcel Moolenaar.Nm 2623955d011SMarcel Moolenaarmay have running at any one time. 2633955d011SMarcel MoolenaarThe value is saved in 2643955d011SMarcel Moolenaar.Va .MAKE.JOBS . 2653955d011SMarcel MoolenaarTurns compatibility mode off, unless the 2663955d011SMarcel Moolenaar.Ar B 2673955d011SMarcel Moolenaarflag is also specified. 2683955d011SMarcel MoolenaarWhen compatibility mode is off, all commands associated with a 2693955d011SMarcel Moolenaartarget are executed in a single shell invocation as opposed to the 2703955d011SMarcel Moolenaartraditional one shell invocation per line. 2713955d011SMarcel MoolenaarThis can break traditional scripts which change directories on each 2723955d011SMarcel Moolenaarcommand invocation and then expect to start with a fresh environment 2733955d011SMarcel Moolenaaron the next line. 2743955d011SMarcel MoolenaarIt is more efficient to correct the scripts rather than turn backwards 2753955d011SMarcel Moolenaarcompatibility on. 2763955d011SMarcel Moolenaar.It Fl k 2773955d011SMarcel MoolenaarContinue processing after errors are encountered, but only on those targets 2783955d011SMarcel Moolenaarthat do not depend on the target whose creation caused the error. 2793955d011SMarcel Moolenaar.It Fl m Ar directory 2803955d011SMarcel MoolenaarSpecify a directory in which to search for sys.mk and makefiles included 2813955d011SMarcel Moolenaarvia the 282ef0b2538SSimon J. Gerraty.Li \&< Ns Ar file Ns Li \&> Ns -style 2833955d011SMarcel Moolenaarinclude statement. 2843955d011SMarcel MoolenaarThe 2853955d011SMarcel Moolenaar.Fl m 2863955d011SMarcel Moolenaaroption can be used multiple times to form a search path. 2873955d011SMarcel MoolenaarThis path will override the default system include path: /usr/share/mk. 2883955d011SMarcel MoolenaarFurthermore the system include path will be appended to the search path used 2893955d011SMarcel Moolenaarfor 290ef0b2538SSimon J. Gerraty.Li \*q Ns Ar file Ns Li \*q Ns -style 2913955d011SMarcel Moolenaarinclude statements (see the 2923955d011SMarcel Moolenaar.Fl I 2933955d011SMarcel Moolenaaroption). 2943955d011SMarcel Moolenaar.Pp 2953955d011SMarcel MoolenaarIf a file or directory name in the 2963955d011SMarcel Moolenaar.Fl m 2973955d011SMarcel Moolenaarargument (or the 2983955d011SMarcel Moolenaar.Ev MAKESYSPATH 2993955d011SMarcel Moolenaarenvironment variable) starts with the string 3003955d011SMarcel Moolenaar.Qq \&.../ 3013955d011SMarcel Moolenaarthen 3023955d011SMarcel Moolenaar.Nm 3033955d011SMarcel Moolenaarwill search for the specified file or directory named in the remaining part 3043955d011SMarcel Moolenaarof the argument string. 3053955d011SMarcel MoolenaarThe search starts with the current directory of 3063955d011SMarcel Moolenaarthe Makefile and then works upward towards the root of the file system. 3073955d011SMarcel MoolenaarIf the search is successful, then the resulting directory replaces the 3083955d011SMarcel Moolenaar.Qq \&.../ 3093955d011SMarcel Moolenaarspecification in the 3103955d011SMarcel Moolenaar.Fl m 3113955d011SMarcel Moolenaarargument. 3123955d011SMarcel MoolenaarIf used, this feature allows 3133955d011SMarcel Moolenaar.Nm 3143955d011SMarcel Moolenaarto easily search in the current source tree for customized sys.mk files 3153955d011SMarcel Moolenaar(e.g., by using 3163955d011SMarcel Moolenaar.Qq \&.../mk/sys.mk 3173955d011SMarcel Moolenaaras an argument). 3183955d011SMarcel Moolenaar.It Fl n 3193955d011SMarcel MoolenaarDisplay the commands that would have been executed, but do not 3203955d011SMarcel Moolenaaractually execute them unless the target depends on the .MAKE special 3212c3632d1SSimon J. Gerratysource (see below) or the command is prefixed with 3222c3632d1SSimon J. Gerraty.Ql Ic + . 3233955d011SMarcel Moolenaar.It Fl N 3243955d011SMarcel MoolenaarDisplay the commands which would have been executed, but do not 3253955d011SMarcel Moolenaaractually execute any of them; useful for debugging top-level makefiles 3263955d011SMarcel Moolenaarwithout descending into subdirectories. 3273955d011SMarcel Moolenaar.It Fl q 3283955d011SMarcel MoolenaarDo not execute any commands, but exit 0 if the specified targets are 3293955d011SMarcel Moolenaarup-to-date and 1, otherwise. 3303955d011SMarcel Moolenaar.It Fl r 3313955d011SMarcel MoolenaarDo not use the built-in rules specified in the system makefile. 332e2eeea75SSimon J. Gerraty.It Fl S 333e2eeea75SSimon J. GerratyStop processing if an error is encountered. 334e2eeea75SSimon J. GerratyThis is the default behavior and the opposite of 335e2eeea75SSimon J. Gerraty.Fl k . 3363955d011SMarcel Moolenaar.It Fl s 3373955d011SMarcel MoolenaarDo not echo any commands as they are executed. 3383955d011SMarcel MoolenaarEquivalent to specifying 3393955d011SMarcel Moolenaar.Ql Ic @ 3403955d011SMarcel Moolenaarbefore each command line in the makefile. 3413955d011SMarcel Moolenaar.It Fl T Ar tracefile 3423955d011SMarcel MoolenaarWhen used with the 3433955d011SMarcel Moolenaar.Fl j 3443955d011SMarcel Moolenaarflag, 3453955d011SMarcel Moolenaarappend a trace record to 3463955d011SMarcel Moolenaar.Ar tracefile 3473955d011SMarcel Moolenaarfor each job started and completed. 3483955d011SMarcel Moolenaar.It Fl t 3493955d011SMarcel MoolenaarRather than re-building a target as specified in the makefile, create it 3503955d011SMarcel Moolenaaror update its modification time to make it appear up-to-date. 3513955d011SMarcel Moolenaar.It Fl V Ar variable 3528695518cSSimon J. GerratyPrint the value of 3538695518cSSimon J. Gerraty.Ar variable . 3543955d011SMarcel MoolenaarDo not build any targets. 3553955d011SMarcel MoolenaarMultiple instances of this option may be specified; 3563955d011SMarcel Moolenaarthe variables will be printed one per line, 3573955d011SMarcel Moolenaarwith a blank line for each null or undefined variable. 358dba7b0efSSimon J. GerratyThe value printed is extracted from the global scope after all 3598695518cSSimon J. Gerratymakefiles have been read. 3608695518cSSimon J. GerratyBy default, the raw variable contents (which may 3618695518cSSimon J. Gerratyinclude additional unexpanded variable references) are shown. 3623955d011SMarcel MoolenaarIf 3633955d011SMarcel Moolenaar.Ar variable 3643955d011SMarcel Moolenaarcontains a 3653955d011SMarcel Moolenaar.Ql \&$ 3668695518cSSimon J. Gerratythen the value will be recursively expanded to its complete resultant 3678695518cSSimon J. Gerratytext before printing. 3688695518cSSimon J. GerratyThe expanded value will also be printed if 3698695518cSSimon J. Gerraty.Va .MAKE.EXPAND_VARIABLES 3708695518cSSimon J. Gerratyis set to true and 3718695518cSSimon J. Gerratythe 3728695518cSSimon J. Gerraty.Fl dV 3738695518cSSimon J. Gerratyoption has not been used to override it. 3748695518cSSimon J. GerratyNote that loop-local and target-local variables, as well as values 3758695518cSSimon J. Gerratytaken temporarily by global variables during makefile processing, are 3768695518cSSimon J. Gerratynot accessible via this option. 3778695518cSSimon J. GerratyThe 3788695518cSSimon J. Gerraty.Fl dv 3798695518cSSimon J. Gerratydebug mode can be used to see these at the cost of generating 3808695518cSSimon J. Gerratysubstantial extraneous output. 3818695518cSSimon J. Gerraty.It Fl v Ar variable 3828695518cSSimon J. GerratyLike 3838695518cSSimon J. Gerraty.Fl V 3848695518cSSimon J. Gerratybut the variable is always expanded to its complete value. 3853955d011SMarcel Moolenaar.It Fl W 3863955d011SMarcel MoolenaarTreat any warnings during makefile parsing as errors. 387db29cad8SSimon J. Gerraty.It Fl w 388db29cad8SSimon J. GerratyPrint entering and leaving directory messages, pre and post processing. 3893955d011SMarcel Moolenaar.It Fl X 3903955d011SMarcel MoolenaarDon't export variables passed on the command line to the environment 3913955d011SMarcel Moolenaarindividually. 3923955d011SMarcel MoolenaarVariables passed on the command line are still exported 3933955d011SMarcel Moolenaarvia the 3943955d011SMarcel Moolenaar.Va MAKEFLAGS 3953955d011SMarcel Moolenaarenvironment variable. 3963955d011SMarcel MoolenaarThis option may be useful on systems which have a small limit on the 3973955d011SMarcel Moolenaarsize of command arguments. 3983955d011SMarcel Moolenaar.It Ar variable=value 3993955d011SMarcel MoolenaarSet the value of the variable 4003955d011SMarcel Moolenaar.Ar variable 4013955d011SMarcel Moolenaarto 4023955d011SMarcel Moolenaar.Ar value . 4033955d011SMarcel MoolenaarNormally, all values passed on the command line are also exported to 4043955d011SMarcel Moolenaarsub-makes in the environment. 4053955d011SMarcel MoolenaarThe 4063955d011SMarcel Moolenaar.Fl X 4073955d011SMarcel Moolenaarflag disables this behavior. 4083955d011SMarcel MoolenaarVariable assignments should follow options for POSIX compatibility 4093955d011SMarcel Moolenaarbut no ordering is enforced. 4103955d011SMarcel Moolenaar.El 4113955d011SMarcel Moolenaar.Pp 4123955d011SMarcel MoolenaarThere are seven different types of lines in a makefile: file dependency 4133955d011SMarcel Moolenaarspecifications, shell commands, variable assignments, include statements, 4143955d011SMarcel Moolenaarconditional directives, for loops, and comments. 4153955d011SMarcel Moolenaar.Pp 4163955d011SMarcel MoolenaarIn general, lines may be continued from one line to the next by ending 4173955d011SMarcel Moolenaarthem with a backslash 4183955d011SMarcel Moolenaar.Pq Ql \e . 4193955d011SMarcel MoolenaarThe trailing newline character and initial whitespace on the following 4203955d011SMarcel Moolenaarline are compressed into a single space. 4213955d011SMarcel Moolenaar.Sh FILE DEPENDENCY SPECIFICATIONS 4223955d011SMarcel MoolenaarDependency lines consist of one or more targets, an operator, and zero 4233955d011SMarcel Moolenaaror more sources. 4243955d011SMarcel MoolenaarThis creates a relationship where the targets 4253955d011SMarcel Moolenaar.Dq depend 4263955d011SMarcel Moolenaaron the sources 4272c3632d1SSimon J. Gerratyand are customarily created from them. 4282c3632d1SSimon J. GerratyA target is considered out-of-date if it does not exist, or if its 4292c3632d1SSimon J. Gerratymodification time is less than that of any of its sources. 4302c3632d1SSimon J. GerratyAn out-of-date target will be re-created, but not until all sources 4312c3632d1SSimon J. Gerratyhave been examined and themselves re-created as needed. 4322c3632d1SSimon J. GerratyThree operators may be used: 4333955d011SMarcel Moolenaar.Bl -tag -width flag 4343955d011SMarcel Moolenaar.It Ic \&: 4352c3632d1SSimon J. GerratyMany dependency lines may name this target but only one may have 4362c3632d1SSimon J. Gerratyattached shell commands. 4372c3632d1SSimon J. GerratyAll sources named in all dependency lines are considered together, 4382c3632d1SSimon J. Gerratyand if needed the attached shell commands are run to create or 4392c3632d1SSimon J. Gerratyre-create the target. 4402c3632d1SSimon J. GerratyIf 4413955d011SMarcel Moolenaar.Nm 4422c3632d1SSimon J. Gerratyis interrupted, the target is removed. 4433955d011SMarcel Moolenaar.It Ic \&! 4442c3632d1SSimon J. GerratyThe same, but the target is always re-created whether or not it is out 4452c3632d1SSimon J. Gerratyof date. 4463955d011SMarcel Moolenaar.It Ic \&:: 4472c3632d1SSimon J. GerratyAny dependency line may have attached shell commands, but each one 4482c3632d1SSimon J. Gerratyis handled independently: its sources are considered and the attached 4492c3632d1SSimon J. Gerratyshell commands are run if the target is out of date with respect to 4502c3632d1SSimon J. Gerraty(only) those sources. 4512c3632d1SSimon J. GerratyThus, different groups of the attached shell commands may be run 4522c3632d1SSimon J. Gerratydepending on the circumstances. 4532c3632d1SSimon J. GerratyFurthermore, unlike 4542c3632d1SSimon J. Gerraty.Ic \&:, 4552c3632d1SSimon J. Gerratyfor dependency lines with no sources, the attached shell 4562c3632d1SSimon J. Gerratycommands are always run. 4572c3632d1SSimon J. GerratyAlso unlike 4582c3632d1SSimon J. Gerraty.Ic \&:, 4592c3632d1SSimon J. Gerratythe target will not be removed if 4603955d011SMarcel Moolenaar.Nm 4613955d011SMarcel Moolenaaris interrupted. 4623955d011SMarcel Moolenaar.El 4632c3632d1SSimon J. GerratyAll dependency lines mentioning a particular target must use the same 4642c3632d1SSimon J. Gerratyoperator. 4653955d011SMarcel Moolenaar.Pp 4663955d011SMarcel MoolenaarTargets and sources may contain the shell wildcard values 4673955d011SMarcel Moolenaar.Ql \&? , 4683955d011SMarcel Moolenaar.Ql * , 4693955d011SMarcel Moolenaar.Ql [] , 4703955d011SMarcel Moolenaarand 4713955d011SMarcel Moolenaar.Ql {} . 4723955d011SMarcel MoolenaarThe values 4733955d011SMarcel Moolenaar.Ql \&? , 4743955d011SMarcel Moolenaar.Ql * , 4753955d011SMarcel Moolenaarand 4763955d011SMarcel Moolenaar.Ql [] 4773955d011SMarcel Moolenaarmay only be used as part of the final 4783955d011SMarcel Moolenaarcomponent of the target or source, and must be used to describe existing 4793955d011SMarcel Moolenaarfiles. 4803955d011SMarcel MoolenaarThe value 4813955d011SMarcel Moolenaar.Ql {} 4823955d011SMarcel Moolenaarneed not necessarily be used to describe existing files. 4833955d011SMarcel MoolenaarExpansion is in directory order, not alphabetically as done in the shell. 4843955d011SMarcel Moolenaar.Sh SHELL COMMANDS 485db29cad8SSimon J. GerratyEach target may have associated with it one or more lines of shell 486db29cad8SSimon J. Gerratycommands, normally 4873955d011SMarcel Moolenaarused to create the target. 488db29cad8SSimon J. GerratyEach of the lines in this script 4893955d011SMarcel Moolenaar.Em must 4903955d011SMarcel Moolenaarbe preceded by a tab. 491db29cad8SSimon J. Gerraty(For historical reasons, spaces are not accepted.) 492db29cad8SSimon J. GerratyWhile targets can appear in many dependency lines if desired, by 493db29cad8SSimon J. Gerratydefault only one of these rules may be followed by a creation 494db29cad8SSimon J. Gerratyscript. 495db29cad8SSimon J. GerratyIf the 4963955d011SMarcel Moolenaar.Ql Ic \&:: 497db29cad8SSimon J. Gerratyoperator is used, however, all rules may include scripts and the 498db29cad8SSimon J. Gerratyscripts are executed in the order found. 4993955d011SMarcel Moolenaar.Pp 500db29cad8SSimon J. GerratyEach line is treated as a separate shell command, unless the end of 501db29cad8SSimon J. Gerratyline is escaped with a backslash 502db29cad8SSimon J. Gerraty.Pq Ql \e 503db29cad8SSimon J. Gerratyin which case that line and the next are combined. 504db29cad8SSimon J. Gerraty.\" The escaped newline is retained and passed to the shell, which 505db29cad8SSimon J. Gerraty.\" normally ignores it. 506db29cad8SSimon J. Gerraty.\" However, the tab at the beginning of the following line is removed. 507db29cad8SSimon J. GerratyIf the first characters of the command are any combination of 5083955d011SMarcel Moolenaar.Ql Ic @ , 5093955d011SMarcel Moolenaar.Ql Ic + , 5103955d011SMarcel Moolenaaror 5113955d011SMarcel Moolenaar.Ql Ic \- , 5123955d011SMarcel Moolenaarthe command is treated specially. 5133955d011SMarcel MoolenaarA 5143955d011SMarcel Moolenaar.Ql Ic @ 5153955d011SMarcel Moolenaarcauses the command not to be echoed before it is executed. 5163955d011SMarcel MoolenaarA 5173955d011SMarcel Moolenaar.Ql Ic + 5183955d011SMarcel Moolenaarcauses the command to be executed even when 5193955d011SMarcel Moolenaar.Fl n 5203955d011SMarcel Moolenaaris given. 5213955d011SMarcel MoolenaarThis is similar to the effect of the .MAKE special source, 5223955d011SMarcel Moolenaarexcept that the effect can be limited to a single line of a script. 5233955d011SMarcel MoolenaarA 5243955d011SMarcel Moolenaar.Ql Ic \- 525db29cad8SSimon J. Gerratyin compatibility mode 5263955d011SMarcel Moolenaarcauses any non-zero exit status of the command line to be ignored. 5273cbdda60SSimon J. Gerraty.Pp 5283cbdda60SSimon J. GerratyWhen 5293cbdda60SSimon J. Gerraty.Nm 5303cbdda60SSimon J. Gerratyis run in jobs mode with 5313cbdda60SSimon J. Gerraty.Fl j Ar max_jobs , 5323cbdda60SSimon J. Gerratythe entire script for the target is fed to a 5333cbdda60SSimon J. Gerratysingle instance of the shell. 5343cbdda60SSimon J. GerratyIn compatibility (non-jobs) mode, each command is run in a separate process. 5353cbdda60SSimon J. GerratyIf the command contains any shell meta characters 5363cbdda60SSimon J. Gerraty.Pq Ql #=|^(){};&<>*?[]:$`\e\en 537db29cad8SSimon J. Gerratyit will be passed to the shell; otherwise 5383cbdda60SSimon J. Gerraty.Nm 5393cbdda60SSimon J. Gerratywill attempt direct execution. 540db29cad8SSimon J. GerratyIf a line starts with 541db29cad8SSimon J. Gerraty.Ql Ic \- 542db29cad8SSimon J. Gerratyand the shell has ErrCtl enabled then failure of the command line 543db29cad8SSimon J. Gerratywill be ignored as in compatibility mode. 544db29cad8SSimon J. GerratyOtherwise 545db29cad8SSimon J. Gerraty.Ql Ic \- 546db29cad8SSimon J. Gerratyaffects the entire job; 547db29cad8SSimon J. Gerratythe script will stop at the first command line that fails, 548db29cad8SSimon J. Gerratybut the target will not be deemed to have failed. 549db29cad8SSimon J. Gerraty.Pp 550db29cad8SSimon J. GerratyMakefiles should be written so that the mode of 551db29cad8SSimon J. Gerraty.Nm 552db29cad8SSimon J. Gerratyoperation does not change their behavior. 553db29cad8SSimon J. GerratyFor example, any command which needs to use 554db29cad8SSimon J. Gerraty.Dq cd 555db29cad8SSimon J. Gerratyor 556db29cad8SSimon J. Gerraty.Dq chdir 557db29cad8SSimon J. Gerratywithout potentially changing the directory for subsequent commands 558db29cad8SSimon J. Gerratyshould be put in parentheses so it executes in a subshell. 559db29cad8SSimon J. GerratyTo force the use of one shell, escape the line breaks so as to make 560db29cad8SSimon J. Gerratythe whole script one command. 561db29cad8SSimon J. GerratyFor example: 562db29cad8SSimon J. Gerraty.Bd -literal -offset indent 563db29cad8SSimon J. Gerratyavoid-chdir-side-effects: 564db29cad8SSimon J. Gerraty @echo Building $@ in `pwd` 565db29cad8SSimon J. Gerraty @(cd ${.CURDIR} && ${MAKE} $@) 566db29cad8SSimon J. Gerraty @echo Back in `pwd` 567db29cad8SSimon J. Gerraty 568db29cad8SSimon J. Gerratyensure-one-shell-regardless-of-mode: 569db29cad8SSimon J. Gerraty @echo Building $@ in `pwd`; \e 570db29cad8SSimon J. Gerraty (cd ${.CURDIR} && ${MAKE} $@); \e 571db29cad8SSimon J. Gerraty echo Back in `pwd` 572db29cad8SSimon J. Gerraty.Ed 5733cbdda60SSimon J. Gerraty.Pp 5743cbdda60SSimon J. GerratySince 5753cbdda60SSimon J. Gerraty.Nm 5763cbdda60SSimon J. Gerratywill 5773cbdda60SSimon J. Gerraty.Xr chdir 2 5783cbdda60SSimon J. Gerratyto 5793cbdda60SSimon J. Gerraty.Ql Va .OBJDIR 5803cbdda60SSimon J. Gerratybefore executing any targets, each child process 5813cbdda60SSimon J. Gerratystarts with that as its current working directory. 5823955d011SMarcel Moolenaar.Sh VARIABLE ASSIGNMENTS 5833955d011SMarcel MoolenaarVariables in make are much like variables in the shell, and, by tradition, 5843955d011SMarcel Moolenaarconsist of all upper-case letters. 5853955d011SMarcel Moolenaar.Ss Variable assignment modifiers 5863955d011SMarcel MoolenaarThe five operators that can be used to assign values to variables are as 5873955d011SMarcel Moolenaarfollows: 5883955d011SMarcel Moolenaar.Bl -tag -width Ds 5893955d011SMarcel Moolenaar.It Ic \&= 5903955d011SMarcel MoolenaarAssign the value to the variable. 5913955d011SMarcel MoolenaarAny previous value is overridden. 5923955d011SMarcel Moolenaar.It Ic \&+= 5933955d011SMarcel MoolenaarAppend the value to the current value of the variable. 5943955d011SMarcel Moolenaar.It Ic \&?= 5953955d011SMarcel MoolenaarAssign the value to the variable if it is not already defined. 5963955d011SMarcel Moolenaar.It Ic \&:= 5973955d011SMarcel MoolenaarAssign with expansion, i.e. expand the value before assigning it 5983955d011SMarcel Moolenaarto the variable. 5993955d011SMarcel MoolenaarNormally, expansion is not done until the variable is referenced. 6003955d011SMarcel Moolenaar.Em NOTE : 6013955d011SMarcel MoolenaarReferences to undefined variables are 6023955d011SMarcel Moolenaar.Em not 6033955d011SMarcel Moolenaarexpanded. 6043955d011SMarcel MoolenaarThis can cause problems when variable modifiers are used. 6053955d011SMarcel Moolenaar.It Ic \&!= 6063955d011SMarcel MoolenaarExpand the value and pass it to the shell for execution and assign 6073955d011SMarcel Moolenaarthe result to the variable. 6083955d011SMarcel MoolenaarAny newlines in the result are replaced with spaces. 6093955d011SMarcel Moolenaar.El 6103955d011SMarcel Moolenaar.Pp 6113955d011SMarcel MoolenaarAny white-space before the assigned 6123955d011SMarcel Moolenaar.Ar value 6133955d011SMarcel Moolenaaris removed; if the value is being appended, a single space is inserted 6143955d011SMarcel Moolenaarbetween the previous contents of the variable and the appended value. 6153955d011SMarcel Moolenaar.Pp 6163955d011SMarcel MoolenaarVariables are expanded by surrounding the variable name with either 6173955d011SMarcel Moolenaarcurly braces 6183955d011SMarcel Moolenaar.Pq Ql {} 6193955d011SMarcel Moolenaaror parentheses 6203955d011SMarcel Moolenaar.Pq Ql () 6213955d011SMarcel Moolenaarand preceding it with 6223955d011SMarcel Moolenaara dollar sign 6233955d011SMarcel Moolenaar.Pq Ql \&$ . 6243955d011SMarcel MoolenaarIf the variable name contains only a single letter, the surrounding 6253955d011SMarcel Moolenaarbraces or parentheses are not required. 6263955d011SMarcel MoolenaarThis shorter form is not recommended. 6273955d011SMarcel Moolenaar.Pp 6283955d011SMarcel MoolenaarIf the variable name contains a dollar, then the name itself is expanded first. 6293955d011SMarcel MoolenaarThis allows almost arbitrary variable names, however names containing dollar, 6302c3632d1SSimon J. Gerratybraces, parentheses, or whitespace are really best avoided! 6313955d011SMarcel Moolenaar.Pp 6323955d011SMarcel MoolenaarIf the result of expanding a variable contains a dollar sign 6333955d011SMarcel Moolenaar.Pq Ql \&$ 6343955d011SMarcel Moolenaarthe string is expanded again. 6353955d011SMarcel Moolenaar.Pp 6363955d011SMarcel MoolenaarVariable substitution occurs at three distinct times, depending on where 6373955d011SMarcel Moolenaarthe variable is being used. 6383955d011SMarcel Moolenaar.Bl -enum 6393955d011SMarcel Moolenaar.It 6403955d011SMarcel MoolenaarVariables in dependency lines are expanded as the line is read. 6413955d011SMarcel Moolenaar.It 6423955d011SMarcel MoolenaarVariables in shell commands are expanded when the shell command is 6433955d011SMarcel Moolenaarexecuted. 6443955d011SMarcel Moolenaar.It 6453955d011SMarcel Moolenaar.Dq .for 6463955d011SMarcel Moolenaarloop index variables are expanded on each loop iteration. 6473955d011SMarcel MoolenaarNote that other variables are not expanded inside loops so 6483955d011SMarcel Moolenaarthe following example code: 6493955d011SMarcel Moolenaar.Bd -literal -offset indent 6503955d011SMarcel Moolenaar 6513955d011SMarcel Moolenaar.Dv .for i in 1 2 3 6523955d011SMarcel Moolenaara+= ${i} 6533955d011SMarcel Moolenaarj= ${i} 6543955d011SMarcel Moolenaarb+= ${j} 6553955d011SMarcel Moolenaar.Dv .endfor 6563955d011SMarcel Moolenaar 6573955d011SMarcel Moolenaarall: 6583955d011SMarcel Moolenaar @echo ${a} 6593955d011SMarcel Moolenaar @echo ${b} 6603955d011SMarcel Moolenaar 6613955d011SMarcel Moolenaar.Ed 6623955d011SMarcel Moolenaarwill print: 6633955d011SMarcel Moolenaar.Bd -literal -offset indent 6643955d011SMarcel Moolenaar1 2 3 6653955d011SMarcel Moolenaar3 3 3 6663955d011SMarcel Moolenaar 6673955d011SMarcel Moolenaar.Ed 6683955d011SMarcel MoolenaarBecause while ${a} contains 6693955d011SMarcel Moolenaar.Dq 1 2 3 6703955d011SMarcel Moolenaarafter the loop is executed, ${b} 6713955d011SMarcel Moolenaarcontains 6723955d011SMarcel Moolenaar.Dq ${j} ${j} ${j} 6733955d011SMarcel Moolenaarwhich expands to 6743955d011SMarcel Moolenaar.Dq 3 3 3 6753955d011SMarcel Moolenaarsince after the loop completes ${j} contains 6763955d011SMarcel Moolenaar.Dq 3 . 6773955d011SMarcel Moolenaar.El 6783955d011SMarcel Moolenaar.Ss Variable classes 6793955d011SMarcel MoolenaarThe four different classes of variables (in order of increasing precedence) 6803955d011SMarcel Moolenaarare: 6813955d011SMarcel Moolenaar.Bl -tag -width Ds 6823955d011SMarcel Moolenaar.It Environment variables 6833955d011SMarcel MoolenaarVariables defined as part of 6843955d011SMarcel Moolenaar.Nm Ns 's 6853955d011SMarcel Moolenaarenvironment. 6863955d011SMarcel Moolenaar.It Global variables 6873955d011SMarcel MoolenaarVariables defined in the makefile or in included makefiles. 6883955d011SMarcel Moolenaar.It Command line variables 6893955d011SMarcel MoolenaarVariables defined as part of the command line. 6903955d011SMarcel Moolenaar.It Local variables 6913955d011SMarcel MoolenaarVariables that are defined specific to a certain target. 692db29cad8SSimon J. Gerraty.El 693db29cad8SSimon J. Gerraty.Pp 694*9f45a3c8SSimon J. GerratyLocal variables can be set on a dependency line, if 695*9f45a3c8SSimon J. Gerraty.Va .MAKE.TARGET_LOCAL_VARIABLES , 696*9f45a3c8SSimon J. Gerratyis not set to 697*9f45a3c8SSimon J. Gerraty.Ql false . 698*9f45a3c8SSimon J. GerratyThe rest of the line 699*9f45a3c8SSimon J. Gerraty(which will already have had Global variables expanded), 700*9f45a3c8SSimon J. Gerratyis the variable value. 701*9f45a3c8SSimon J. GerratyFor example: 702*9f45a3c8SSimon J. Gerraty.Bd -literal -offset indent 703*9f45a3c8SSimon J. GerratyCOMPILER_WRAPPERS+= ccache distcc icecc 704*9f45a3c8SSimon J. Gerraty 705*9f45a3c8SSimon J. Gerraty${OBJS}: .MAKE.META.CMP_FILTER=${COMPILER_WRAPPERS:S,^,N,} 706*9f45a3c8SSimon J. Gerraty.Ed 707*9f45a3c8SSimon J. Gerraty.Pp 708*9f45a3c8SSimon J. GerratyOnly the targets 709*9f45a3c8SSimon J. Gerraty.Ql ${OBJS} 710*9f45a3c8SSimon J. Gerratywill be impacted by that filter (in "meta" mode) and 711*9f45a3c8SSimon J. Gerratysimply enabling/disabling any of the wrappers will not render all 712*9f45a3c8SSimon J. Gerratyof those targets out-of-date. 713*9f45a3c8SSimon J. Gerraty.Pp 714*9f45a3c8SSimon J. Gerraty.Em NOTE : 715*9f45a3c8SSimon J. Gerratytarget local variable assignments behave differently in that; 716*9f45a3c8SSimon J. Gerraty.Bl -tag -width Ds -offset indent 717*9f45a3c8SSimon J. Gerraty.It Ic \&+= 718*9f45a3c8SSimon J. GerratyOnly appends to a previous local assignment 719*9f45a3c8SSimon J. Gerratyfor the same target and variable. 720*9f45a3c8SSimon J. Gerraty.It Ic \&:= 721*9f45a3c8SSimon J. GerratyIs redundant with respect to Global variables, 722*9f45a3c8SSimon J. Gerratywhich have already been expanded. 723*9f45a3c8SSimon J. Gerraty.El 724*9f45a3c8SSimon J. Gerraty.Pp 725*9f45a3c8SSimon J. GerratyThe seven built-in local variables are as follows: 726db29cad8SSimon J. Gerraty.Bl -tag -width ".ARCHIVE" -offset indent 7273955d011SMarcel Moolenaar.It Va .ALLSRC 7283955d011SMarcel MoolenaarThe list of all sources for this target; also known as 7298695518cSSimon J. Gerraty.Ql Va \&> . 7303955d011SMarcel Moolenaar.It Va .ARCHIVE 731db29cad8SSimon J. GerratyThe name of the archive file; also known as 732db29cad8SSimon J. Gerraty.Ql Va \&! . 7333955d011SMarcel Moolenaar.It Va .IMPSRC 7343955d011SMarcel MoolenaarIn suffix-transformation rules, the name/path of the source from which the 7353955d011SMarcel Moolenaartarget is to be transformed (the 7363955d011SMarcel Moolenaar.Dq implied 7373955d011SMarcel Moolenaarsource); also known as 7388695518cSSimon J. Gerraty.Ql Va \&< . 7393955d011SMarcel MoolenaarIt is not defined in explicit rules. 7403955d011SMarcel Moolenaar.It Va .MEMBER 741db29cad8SSimon J. GerratyThe name of the archive member; also known as 742db29cad8SSimon J. Gerraty.Ql Va % . 7433955d011SMarcel Moolenaar.It Va .OODATE 7443955d011SMarcel MoolenaarThe list of sources for this target that were deemed out-of-date; also 7453955d011SMarcel Moolenaarknown as 7463955d011SMarcel Moolenaar.Ql Va \&? . 7473955d011SMarcel Moolenaar.It Va .PREFIX 7483955d011SMarcel MoolenaarThe file prefix of the target, containing only the file portion, no suffix 7493955d011SMarcel Moolenaaror preceding directory components; also known as 7503955d011SMarcel Moolenaar.Ql Va * . 751db29cad8SSimon J. GerratyThe suffix must be one of the known suffixes declared with 752db29cad8SSimon J. Gerraty.Ic .SUFFIXES 753db29cad8SSimon J. Gerratyor it will not be recognized. 7543955d011SMarcel Moolenaar.It Va .TARGET 7553955d011SMarcel MoolenaarThe name of the target; also known as 7563955d011SMarcel Moolenaar.Ql Va @ . 7573bebe729SSimon J. GerratyFor compatibility with other makes this is an alias for 7583bebe729SSimon J. Gerraty.Ic .ARCHIVE 7593bebe729SSimon J. Gerratyin archive member rules. 7603955d011SMarcel Moolenaar.El 7613955d011SMarcel Moolenaar.Pp 7623955d011SMarcel MoolenaarThe shorter forms 7638695518cSSimon J. Gerraty.Ql ( Va > , 764db29cad8SSimon J. Gerraty.Ql Va \&! , 7658695518cSSimon J. Gerraty.Ql Va < , 766db29cad8SSimon J. Gerraty.Ql Va % , 7673955d011SMarcel Moolenaar.Ql Va \&? , 768db29cad8SSimon J. Gerraty.Ql Va * , 7693955d011SMarcel Moolenaarand 770db29cad8SSimon J. Gerraty.Ql Va @ ) 7713955d011SMarcel Moolenaarare permitted for backward 772db29cad8SSimon J. Gerratycompatibility with historical makefiles and legacy POSIX make and are 773db29cad8SSimon J. Gerratynot recommended. 774db29cad8SSimon J. Gerraty.Pp 775db29cad8SSimon J. GerratyVariants of these variables with the punctuation followed immediately by 776db29cad8SSimon J. Gerraty.Ql D 777db29cad8SSimon J. Gerratyor 778db29cad8SSimon J. Gerraty.Ql F , 779db29cad8SSimon J. Gerratye.g. 780db29cad8SSimon J. Gerraty.Ql Va $(@D) , 781db29cad8SSimon J. Gerratyare legacy forms equivalent to using the 782db29cad8SSimon J. Gerraty.Ql :H 7833955d011SMarcel Moolenaarand 784db29cad8SSimon J. Gerraty.Ql :T 785db29cad8SSimon J. Gerratymodifiers. 786db29cad8SSimon J. GerratyThese forms are accepted for compatibility with 7873955d011SMarcel Moolenaar.At V 788db29cad8SSimon J. Gerratymakefiles and POSIX but are not recommended. 7893955d011SMarcel Moolenaar.Pp 7903955d011SMarcel MoolenaarFour of the local variables may be used in sources on dependency lines 7913955d011SMarcel Moolenaarbecause they expand to the proper value for each target on the line. 7923955d011SMarcel MoolenaarThese variables are 7933955d011SMarcel Moolenaar.Ql Va .TARGET , 7943955d011SMarcel Moolenaar.Ql Va .PREFIX , 7953955d011SMarcel Moolenaar.Ql Va .ARCHIVE , 7963955d011SMarcel Moolenaarand 7973955d011SMarcel Moolenaar.Ql Va .MEMBER . 7983955d011SMarcel Moolenaar.Ss Additional built-in variables 7993955d011SMarcel MoolenaarIn addition, 8003955d011SMarcel Moolenaar.Nm 8013955d011SMarcel Moolenaarsets or knows about the following variables: 8023955d011SMarcel Moolenaar.Bl -tag -width .MAKEOVERRIDES 8033955d011SMarcel Moolenaar.It Va \&$ 8043955d011SMarcel MoolenaarA single dollar sign 8053955d011SMarcel Moolenaar.Ql \&$ , 8063955d011SMarcel Moolenaari.e. 8073955d011SMarcel Moolenaar.Ql \&$$ 8083955d011SMarcel Moolenaarexpands to a single dollar 8093955d011SMarcel Moolenaarsign. 8103955d011SMarcel Moolenaar.It Va .ALLTARGETS 8113955d011SMarcel MoolenaarThe list of all targets encountered in the Makefile. 8123955d011SMarcel MoolenaarIf evaluated during 8133955d011SMarcel MoolenaarMakefile parsing, lists only those targets encountered thus far. 8143955d011SMarcel Moolenaar.It Va .CURDIR 8153955d011SMarcel MoolenaarA path to the directory where 8163955d011SMarcel Moolenaar.Nm 8173955d011SMarcel Moolenaarwas executed. 8183955d011SMarcel MoolenaarRefer to the description of 8193955d011SMarcel Moolenaar.Ql Ev PWD 8203955d011SMarcel Moolenaarfor more details. 8215bcb7424SSimon J. Gerraty.It Va .INCLUDEDFROMDIR 8225bcb7424SSimon J. GerratyThe directory of the file this Makefile was included from. 8235bcb7424SSimon J. Gerraty.It Va .INCLUDEDFROMFILE 8245bcb7424SSimon J. GerratyThe filename of the file this Makefile was included from. 8253955d011SMarcel Moolenaar.It Ev MAKE 8263955d011SMarcel MoolenaarThe name that 8273955d011SMarcel Moolenaar.Nm 8283955d011SMarcel Moolenaarwas executed with 8293955d011SMarcel Moolenaar.Pq Va argv[0] . 8303955d011SMarcel MoolenaarFor compatibility 8313955d011SMarcel Moolenaar.Nm 8323955d011SMarcel Moolenaaralso sets 8333955d011SMarcel Moolenaar.Va .MAKE 8343955d011SMarcel Moolenaarwith the same value. 8353955d011SMarcel MoolenaarThe preferred variable to use is the environment variable 8363955d011SMarcel Moolenaar.Ev MAKE 8373955d011SMarcel Moolenaarbecause it is more compatible with other versions of 8383955d011SMarcel Moolenaar.Nm 8393955d011SMarcel Moolenaarand cannot be confused with the special target with the same name. 8403955d011SMarcel Moolenaar.It Va .MAKE.DEPENDFILE 8413955d011SMarcel MoolenaarNames the makefile (default 8423955d011SMarcel Moolenaar.Ql Pa .depend ) 8433955d011SMarcel Moolenaarfrom which generated dependencies are read. 8443955d011SMarcel Moolenaar.It Va .MAKE.EXPAND_VARIABLES 8453955d011SMarcel MoolenaarA boolean that controls the default behavior of the 8463955d011SMarcel Moolenaar.Fl V 8473955d011SMarcel Moolenaaroption. 8488695518cSSimon J. GerratyIf true, variable values printed with 8498695518cSSimon J. Gerraty.Fl V 8508695518cSSimon J. Gerratyare fully expanded; if false, the raw variable contents (which may 8518695518cSSimon J. Gerratyinclude additional unexpanded variable references) are shown. 8523955d011SMarcel Moolenaar.It Va .MAKE.EXPORTED 8533955d011SMarcel MoolenaarThe list of variables exported by 8543955d011SMarcel Moolenaar.Nm . 8553955d011SMarcel Moolenaar.It Va .MAKE.JOBS 8563955d011SMarcel MoolenaarThe argument to the 8573955d011SMarcel Moolenaar.Fl j 8583955d011SMarcel Moolenaaroption. 8593955d011SMarcel Moolenaar.It Va .MAKE.JOB.PREFIX 8603955d011SMarcel MoolenaarIf 8613955d011SMarcel Moolenaar.Nm 8623955d011SMarcel Moolenaaris run with 8633955d011SMarcel Moolenaar.Ar j 8643955d011SMarcel Moolenaarthen output for each target is prefixed with a token 8653955d011SMarcel Moolenaar.Ql --- target --- 8663955d011SMarcel Moolenaarthe first part of which can be controlled via 8673955d011SMarcel Moolenaar.Va .MAKE.JOB.PREFIX . 86851ee2c1cSSimon J. GerratyIf 86951ee2c1cSSimon J. Gerraty.Va .MAKE.JOB.PREFIX 87051ee2c1cSSimon J. Gerratyis empty, no token is printed. 8713955d011SMarcel Moolenaar.br 8723955d011SMarcel MoolenaarFor example: 8733955d011SMarcel Moolenaar.Li .MAKE.JOB.PREFIX=${.newline}---${.MAKE:T}[${.MAKE.PID}] 8743955d011SMarcel Moolenaarwould produce tokens like 8753955d011SMarcel Moolenaar.Ql ---make[1234] target --- 8763955d011SMarcel Moolenaarmaking it easier to track the degree of parallelism being achieved. 877*9f45a3c8SSimon J. Gerraty.It .MAKE.TARGET_LOCAL_VARIABLES 878*9f45a3c8SSimon J. GerratyIf set to 879*9f45a3c8SSimon J. Gerraty.Ql false , 880*9f45a3c8SSimon J. Gerratyapparent variable assignments in dependency lines are 881*9f45a3c8SSimon J. Gerratytreated as normal sources. 8823955d011SMarcel Moolenaar.It Ev MAKEFLAGS 8833955d011SMarcel MoolenaarThe environment variable 8843955d011SMarcel Moolenaar.Ql Ev MAKEFLAGS 8853955d011SMarcel Moolenaarmay contain anything that 8863955d011SMarcel Moolenaarmay be specified on 8873955d011SMarcel Moolenaar.Nm Ns 's 8883955d011SMarcel Moolenaarcommand line. 8893955d011SMarcel MoolenaarAnything specified on 8903955d011SMarcel Moolenaar.Nm Ns 's 8913955d011SMarcel Moolenaarcommand line is appended to the 8923955d011SMarcel Moolenaar.Ql Ev MAKEFLAGS 8933955d011SMarcel Moolenaarvariable which is then 8943955d011SMarcel Moolenaarentered into the environment for all programs which 8953955d011SMarcel Moolenaar.Nm 8963955d011SMarcel Moolenaarexecutes. 8973955d011SMarcel Moolenaar.It Va .MAKE.LEVEL 8983955d011SMarcel MoolenaarThe recursion depth of 8993955d011SMarcel Moolenaar.Nm . 9003955d011SMarcel MoolenaarThe initial instance of 9013955d011SMarcel Moolenaar.Nm 9023955d011SMarcel Moolenaarwill be 0, and an incremented value is put into the environment 9033955d011SMarcel Moolenaarto be seen by the next generation. 9043955d011SMarcel MoolenaarThis allows tests like: 9053955d011SMarcel Moolenaar.Li .if ${.MAKE.LEVEL} == 0 9063955d011SMarcel Moolenaarto protect things which should only be evaluated in the initial instance of 9073955d011SMarcel Moolenaar.Nm . 9083955d011SMarcel Moolenaar.It Va .MAKE.MAKEFILE_PREFERENCE 9093955d011SMarcel MoolenaarThe ordered list of makefile names 9103955d011SMarcel Moolenaar(default 9113955d011SMarcel Moolenaar.Ql Pa makefile , 9123955d011SMarcel Moolenaar.Ql Pa Makefile ) 9133955d011SMarcel Moolenaarthat 9143955d011SMarcel Moolenaar.Nm 9153955d011SMarcel Moolenaarwill look for. 9163955d011SMarcel Moolenaar.It Va .MAKE.MAKEFILES 9173955d011SMarcel MoolenaarThe list of makefiles read by 9183955d011SMarcel Moolenaar.Nm , 9193955d011SMarcel Moolenaarwhich is useful for tracking dependencies. 9203955d011SMarcel MoolenaarEach makefile is recorded only once, regardless of the number of times read. 9213955d011SMarcel Moolenaar.It Va .MAKE.MODE 9223955d011SMarcel MoolenaarProcessed after reading all makefiles. 9233955d011SMarcel MoolenaarCan affect the mode that 9243955d011SMarcel Moolenaar.Nm 9253955d011SMarcel Moolenaarruns in. 9263955d011SMarcel MoolenaarIt can contain a number of keywords: 927b778b302SSimon J. Gerraty.Bl -hang -width missing-filemon=bf. 9283955d011SMarcel Moolenaar.It Pa compat 9293955d011SMarcel MoolenaarLike 9303955d011SMarcel Moolenaar.Fl B , 9313955d011SMarcel Moolenaarputs 9323955d011SMarcel Moolenaar.Nm 9333955d011SMarcel Moolenaarinto "compat" mode. 9343955d011SMarcel Moolenaar.It Pa meta 9353955d011SMarcel MoolenaarPuts 9363955d011SMarcel Moolenaar.Nm 9373955d011SMarcel Moolenaarinto "meta" mode, where meta files are created for each target 9383955d011SMarcel Moolenaarto capture the command run, the output generated and if 9393955d011SMarcel Moolenaar.Xr filemon 4 9403955d011SMarcel Moolenaaris available, the system calls which are of interest to 9413955d011SMarcel Moolenaar.Nm . 9423955d011SMarcel MoolenaarThe captured output can be very useful when diagnosing errors. 9433955d011SMarcel Moolenaar.It Pa curdirOk= Ar bf 9443955d011SMarcel MoolenaarNormally 9453955d011SMarcel Moolenaar.Nm 9463955d011SMarcel Moolenaarwill not create .meta files in 9473955d011SMarcel Moolenaar.Ql Va .CURDIR . 9483955d011SMarcel MoolenaarThis can be overridden by setting 9493955d011SMarcel Moolenaar.Va bf 9503955d011SMarcel Moolenaarto a value which represents True. 951b778b302SSimon J. Gerraty.It Pa missing-meta= Ar bf 952b778b302SSimon J. GerratyIf 953b778b302SSimon J. Gerraty.Va bf 954b778b302SSimon J. Gerratyis True, then a missing .meta file makes the target out-of-date. 955b778b302SSimon J. Gerraty.It Pa missing-filemon= Ar bf 956b778b302SSimon J. GerratyIf 957b778b302SSimon J. Gerraty.Va bf 958b778b302SSimon J. Gerratyis True, then missing filemon data makes the target out-of-date. 959b778b302SSimon J. Gerraty.It Pa nofilemon 960b778b302SSimon J. GerratyDo not use 961b778b302SSimon J. Gerraty.Xr filemon 4 . 9623955d011SMarcel Moolenaar.It Pa env 963be19d90bSSimon J. GerratyFor debugging, it can be useful to include the environment 9643955d011SMarcel Moolenaarin the .meta file. 9653955d011SMarcel Moolenaar.It Pa verbose 9663955d011SMarcel MoolenaarIf in "meta" mode, print a clue about the target being built. 9673955d011SMarcel MoolenaarThis is useful if the build is otherwise running silently. 9683955d011SMarcel MoolenaarThe message printed the value of: 9693955d011SMarcel Moolenaar.Va .MAKE.META.PREFIX . 9703955d011SMarcel Moolenaar.It Pa ignore-cmd 9713955d011SMarcel MoolenaarSome makefiles have commands which are simply not stable. 9723955d011SMarcel MoolenaarThis keyword causes them to be ignored for 9733955d011SMarcel Moolenaardetermining whether a target is out of date in "meta" mode. 9743955d011SMarcel MoolenaarSee also 9753955d011SMarcel Moolenaar.Ic .NOMETA_CMP . 9763955d011SMarcel Moolenaar.It Pa silent= Ar bf 9773955d011SMarcel MoolenaarIf 9783955d011SMarcel Moolenaar.Va bf 9793955d011SMarcel Moolenaaris True, when a .meta file is created, mark the target 9803955d011SMarcel Moolenaar.Ic .SILENT . 9813955d011SMarcel Moolenaar.El 9823955d011SMarcel Moolenaar.It Va .MAKE.META.BAILIWICK 9833955d011SMarcel MoolenaarIn "meta" mode, provides a list of prefixes which 9843955d011SMarcel Moolenaarmatch the directories controlled by 9853955d011SMarcel Moolenaar.Nm . 9863955d011SMarcel MoolenaarIf a file that was generated outside of 9873955d011SMarcel Moolenaar.Va .OBJDIR 9883955d011SMarcel Moolenaarbut within said bailiwick is missing, 9893955d011SMarcel Moolenaarthe current target is considered out-of-date. 990*9f45a3c8SSimon J. Gerraty.It Va .MAKE.META.CMP_FILTER 991*9f45a3c8SSimon J. GerratyIn "meta" mode, it can (very rarely!) be useful to filter command 992*9f45a3c8SSimon J. Gerratylines before comparison. 993*9f45a3c8SSimon J. GerratyThis variable can be set to a set of modifiers that will be applied to 994*9f45a3c8SSimon J. Gerratyeach line of the old and new command that differ, if the filtered 995*9f45a3c8SSimon J. Gerratycommands still differ, the target is considered out-of-date. 9963955d011SMarcel Moolenaar.It Va .MAKE.META.CREATED 9973955d011SMarcel MoolenaarIn "meta" mode, this variable contains a list of all the meta files 9983955d011SMarcel Moolenaarupdated. 9993955d011SMarcel MoolenaarIf not empty, it can be used to trigger processing of 10003955d011SMarcel Moolenaar.Va .MAKE.META.FILES . 10013955d011SMarcel Moolenaar.It Va .MAKE.META.FILES 10023955d011SMarcel MoolenaarIn "meta" mode, this variable contains a list of all the meta files 10033955d011SMarcel Moolenaarused (updated or not). 10043955d011SMarcel MoolenaarThis list can be used to process the meta files to extract dependency 10053955d011SMarcel Moolenaarinformation. 100651ee2c1cSSimon J. Gerraty.It Va .MAKE.META.IGNORE_PATHS 100751ee2c1cSSimon J. GerratyProvides a list of path prefixes that should be ignored; 100851ee2c1cSSimon J. Gerratybecause the contents are expected to change over time. 100951ee2c1cSSimon J. GerratyThe default list includes: 101051ee2c1cSSimon J. Gerraty.Ql Pa /dev /etc /proc /tmp /var/run /var/tmp 1011e48f47ddSSimon J. Gerraty.It Va .MAKE.META.IGNORE_PATTERNS 1012e48f47ddSSimon J. GerratyProvides a list of patterns to match against pathnames. 1013e48f47ddSSimon J. GerratyIgnore any that match. 101495e3ed2cSSimon J. Gerraty.It Va .MAKE.META.IGNORE_FILTER 101595e3ed2cSSimon J. GerratyProvides a list of variable modifiers to apply to each pathname. 101695e3ed2cSSimon J. GerratyIgnore if the expansion is an empty string. 10173955d011SMarcel Moolenaar.It Va .MAKE.META.PREFIX 10183955d011SMarcel MoolenaarDefines the message printed for each meta file updated in "meta verbose" mode. 10193955d011SMarcel MoolenaarThe default value is: 10203955d011SMarcel Moolenaar.Dl Building ${.TARGET:H:tA}/${.TARGET:T} 10213955d011SMarcel Moolenaar.It Va .MAKEOVERRIDES 10223955d011SMarcel MoolenaarThis variable is used to record the names of variables assigned to 10233955d011SMarcel Moolenaaron the command line, so that they may be exported as part of 10243955d011SMarcel Moolenaar.Ql Ev MAKEFLAGS . 1025be19d90bSSimon J. GerratyThis behavior can be disabled by assigning an empty value to 10263955d011SMarcel Moolenaar.Ql Va .MAKEOVERRIDES 10273955d011SMarcel Moolenaarwithin a makefile. 10283955d011SMarcel MoolenaarExtra variables can be exported from a makefile 10293955d011SMarcel Moolenaarby appending their names to 10303955d011SMarcel Moolenaar.Ql Va .MAKEOVERRIDES . 10313955d011SMarcel Moolenaar.Ql Ev MAKEFLAGS 10323955d011SMarcel Moolenaaris re-exported whenever 10333955d011SMarcel Moolenaar.Ql Va .MAKEOVERRIDES 10343955d011SMarcel Moolenaaris modified. 10351748de26SSimon J. Gerraty.It Va .MAKE.PATH_FILEMON 10361748de26SSimon J. GerratyIf 10371748de26SSimon J. Gerraty.Nm 10381748de26SSimon J. Gerratywas built with 10391748de26SSimon J. Gerraty.Xr filemon 4 10401748de26SSimon J. Gerratysupport, this is set to the path of the device node. 10411748de26SSimon J. GerratyThis allows makefiles to test for this support. 10423955d011SMarcel Moolenaar.It Va .MAKE.PID 10433955d011SMarcel MoolenaarThe process-id of 10443955d011SMarcel Moolenaar.Nm . 10453955d011SMarcel Moolenaar.It Va .MAKE.PPID 10463955d011SMarcel MoolenaarThe parent process-id of 10473955d011SMarcel Moolenaar.Nm . 1048be19d90bSSimon J. Gerraty.It Va .MAKE.SAVE_DOLLARS 1049be19d90bSSimon J. Gerratyvalue should be a boolean that controls whether 1050be19d90bSSimon J. Gerraty.Ql $$ 1051be19d90bSSimon J. Gerratyare preserved when doing 1052be19d90bSSimon J. Gerraty.Ql := 1053be19d90bSSimon J. Gerratyassignments. 1054be19d90bSSimon J. GerratyThe default is false, for backwards compatibility. 1055be19d90bSSimon J. GerratySet to true for compatability with other makes. 1056be19d90bSSimon J. GerratyIf set to false, 1057be19d90bSSimon J. Gerraty.Ql $$ 1058be19d90bSSimon J. Gerratybecomes 1059be19d90bSSimon J. Gerraty.Ql $ 1060be19d90bSSimon J. Gerratyper normal evaluation rules. 106106b9b3e0SSimon J. Gerraty.It Va .MAKE.UID 106206b9b3e0SSimon J. GerratyThe user-id running 106306b9b3e0SSimon J. Gerraty.Nm . 106406b9b3e0SSimon J. Gerraty.It Va .MAKE.GID 106506b9b3e0SSimon J. GerratyThe group-id running 106606b9b3e0SSimon J. Gerraty.Nm . 10673955d011SMarcel Moolenaar.It Va MAKE_PRINT_VAR_ON_ERROR 10683955d011SMarcel MoolenaarWhen 10693955d011SMarcel Moolenaar.Nm 107095e3ed2cSSimon J. Gerratystops due to an error, it sets 107195e3ed2cSSimon J. Gerraty.Ql Va .ERROR_TARGET 107295e3ed2cSSimon J. Gerratyto the name of the target that failed, 107395e3ed2cSSimon J. Gerraty.Ql Va .ERROR_CMD 107495e3ed2cSSimon J. Gerratyto the commands of the failed target, 107595e3ed2cSSimon J. Gerratyand in "meta" mode, it also sets 107695e3ed2cSSimon J. Gerraty.Ql Va .ERROR_CWD 107795e3ed2cSSimon J. Gerratyto the 107895e3ed2cSSimon J. Gerraty.Xr getcwd 3 , 107995e3ed2cSSimon J. Gerratyand 108095e3ed2cSSimon J. Gerraty.Ql Va .ERROR_META_FILE 108195e3ed2cSSimon J. Gerratyto the path of the meta file (if any) describing the failed target. 108295e3ed2cSSimon J. GerratyIt then prints its name and the value of 10833955d011SMarcel Moolenaar.Ql Va .CURDIR 10843955d011SMarcel Moolenaaras well as the value of any variables named in 10853955d011SMarcel Moolenaar.Ql Va MAKE_PRINT_VAR_ON_ERROR . 10863955d011SMarcel Moolenaar.It Va .newline 10873955d011SMarcel MoolenaarThis variable is simply assigned a newline character as its value. 10883955d011SMarcel MoolenaarThis allows expansions using the 10893955d011SMarcel Moolenaar.Cm \&:@ 10903955d011SMarcel Moolenaarmodifier to put a newline between 10913955d011SMarcel Moolenaariterations of the loop rather than a space. 10923955d011SMarcel MoolenaarFor example, the printing of 10933955d011SMarcel Moolenaar.Ql Va MAKE_PRINT_VAR_ON_ERROR 10943955d011SMarcel Moolenaarcould be done as ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@}. 10953955d011SMarcel Moolenaar.It Va .OBJDIR 10963955d011SMarcel MoolenaarA path to the directory where the targets are built. 10973955d011SMarcel MoolenaarIts value is determined by trying to 10983955d011SMarcel Moolenaar.Xr chdir 2 10993955d011SMarcel Moolenaarto the following directories in order and using the first match: 11003955d011SMarcel Moolenaar.Bl -enum 11013955d011SMarcel Moolenaar.It 11023955d011SMarcel Moolenaar.Ev ${MAKEOBJDIRPREFIX}${.CURDIR} 11033955d011SMarcel Moolenaar.Pp 11043955d011SMarcel Moolenaar(Only if 11053955d011SMarcel Moolenaar.Ql Ev MAKEOBJDIRPREFIX 11063955d011SMarcel Moolenaaris set in the environment or on the command line.) 11073955d011SMarcel Moolenaar.It 11083955d011SMarcel Moolenaar.Ev ${MAKEOBJDIR} 11093955d011SMarcel Moolenaar.Pp 11103955d011SMarcel Moolenaar(Only if 11113955d011SMarcel Moolenaar.Ql Ev MAKEOBJDIR 11123955d011SMarcel Moolenaaris set in the environment or on the command line.) 11133955d011SMarcel Moolenaar.It 11143955d011SMarcel Moolenaar.Ev ${.CURDIR} Ns Pa /obj. Ns Ev ${MACHINE} 11153955d011SMarcel Moolenaar.It 11163955d011SMarcel Moolenaar.Ev ${.CURDIR} Ns Pa /obj 11173955d011SMarcel Moolenaar.It 11183955d011SMarcel Moolenaar.Pa /usr/obj/ Ns Ev ${.CURDIR} 11193955d011SMarcel Moolenaar.It 11203955d011SMarcel Moolenaar.Ev ${.CURDIR} 11213955d011SMarcel Moolenaar.El 11223955d011SMarcel Moolenaar.Pp 11233955d011SMarcel MoolenaarVariable expansion is performed on the value before it's used, 11243955d011SMarcel Moolenaarso expressions such as 11253955d011SMarcel Moolenaar.Dl ${.CURDIR:S,^/usr/src,/var/obj,} 11263955d011SMarcel Moolenaarmay be used. 11273955d011SMarcel MoolenaarThis is especially useful with 11283955d011SMarcel Moolenaar.Ql Ev MAKEOBJDIR . 11293955d011SMarcel Moolenaar.Pp 11303955d011SMarcel Moolenaar.Ql Va .OBJDIR 1131128a4105SSimon J. Gerratymay be modified in the makefile via the special target 1132128a4105SSimon J. Gerraty.Ql Ic .OBJDIR . 11333955d011SMarcel MoolenaarIn all cases, 11343955d011SMarcel Moolenaar.Nm 11353955d011SMarcel Moolenaarwill 11363955d011SMarcel Moolenaar.Xr chdir 2 1137128a4105SSimon J. Gerratyto the specified directory if it exists, and set 11383955d011SMarcel Moolenaar.Ql Va .OBJDIR 1139128a4105SSimon J. Gerratyand 11403955d011SMarcel Moolenaar.Ql Ev PWD 11413955d011SMarcel Moolenaarto that directory before executing any targets. 1142e2eeea75SSimon J. Gerraty.Pp 1143e2eeea75SSimon J. GerratyExcept in the case of an explicit 1144e2eeea75SSimon J. Gerraty.Ql Ic .OBJDIR 1145e2eeea75SSimon J. Gerratytarget, 1146e2eeea75SSimon J. Gerraty.Nm 1147e2eeea75SSimon J. Gerratywill check that the specified directory is writable and ignore it if not. 1148e2eeea75SSimon J. GerratyThis check can be skipped by setting the environment variable 1149e2eeea75SSimon J. Gerraty.Ql Ev MAKE_OBJDIR_CHECK_WRITABLE 1150e2eeea75SSimon J. Gerratyto "no". 11513955d011SMarcel Moolenaar. 11523955d011SMarcel Moolenaar.It Va .PARSEDIR 11533955d011SMarcel MoolenaarA path to the directory of the current 11543955d011SMarcel Moolenaar.Ql Pa Makefile 11553955d011SMarcel Moolenaarbeing parsed. 11563955d011SMarcel Moolenaar.It Va .PARSEFILE 11573955d011SMarcel MoolenaarThe basename of the current 11583955d011SMarcel Moolenaar.Ql Pa Makefile 11593955d011SMarcel Moolenaarbeing parsed. 11603955d011SMarcel MoolenaarThis variable and 11613955d011SMarcel Moolenaar.Ql Va .PARSEDIR 11623955d011SMarcel Moolenaarare both set only while the 11633955d011SMarcel Moolenaar.Ql Pa Makefiles 11643955d011SMarcel Moolenaarare being parsed. 11653955d011SMarcel MoolenaarIf you want to retain their current values, assign them to a variable 11663955d011SMarcel Moolenaarusing assignment with expansion: 11673955d011SMarcel Moolenaar.Pq Ql Cm \&:= . 11683955d011SMarcel Moolenaar.It Va .PATH 11693955d011SMarcel MoolenaarA variable that represents the list of directories that 11703955d011SMarcel Moolenaar.Nm 11713955d011SMarcel Moolenaarwill search for files. 11723955d011SMarcel MoolenaarThe search list should be updated using the target 11733955d011SMarcel Moolenaar.Ql Va .PATH 11743955d011SMarcel Moolenaarrather than the variable. 11753955d011SMarcel Moolenaar.It Ev PWD 11763955d011SMarcel MoolenaarAlternate path to the current directory. 11773955d011SMarcel Moolenaar.Nm 11783955d011SMarcel Moolenaarnormally sets 11793955d011SMarcel Moolenaar.Ql Va .CURDIR 11803955d011SMarcel Moolenaarto the canonical path given by 11813955d011SMarcel Moolenaar.Xr getcwd 3 . 11823955d011SMarcel MoolenaarHowever, if the environment variable 11833955d011SMarcel Moolenaar.Ql Ev PWD 11843955d011SMarcel Moolenaaris set and gives a path to the current directory, then 11853955d011SMarcel Moolenaar.Nm 11863955d011SMarcel Moolenaarsets 11873955d011SMarcel Moolenaar.Ql Va .CURDIR 11883955d011SMarcel Moolenaarto the value of 11893955d011SMarcel Moolenaar.Ql Ev PWD 11903955d011SMarcel Moolenaarinstead. 1191be19d90bSSimon J. GerratyThis behavior is disabled if 11923955d011SMarcel Moolenaar.Ql Ev MAKEOBJDIRPREFIX 11933955d011SMarcel Moolenaaris set or 11943955d011SMarcel Moolenaar.Ql Ev MAKEOBJDIR 11953955d011SMarcel Moolenaarcontains a variable transform. 11963955d011SMarcel Moolenaar.Ql Ev PWD 11973955d011SMarcel Moolenaaris set to the value of 11983955d011SMarcel Moolenaar.Ql Va .OBJDIR 11993955d011SMarcel Moolenaarfor all programs which 12003955d011SMarcel Moolenaar.Nm 12013955d011SMarcel Moolenaarexecutes. 12022c3632d1SSimon J. Gerraty.It Ev .SHELL 12032c3632d1SSimon J. GerratyThe pathname of the shell used to run target scripts. 12042c3632d1SSimon J. GerratyIt is read-only. 120512904384SSimon J. Gerraty.It Ev .SUFFIXES 120612904384SSimon J. GerratyThe list of known suffixes. 120712904384SSimon J. GerratyIt is read-only. 12083955d011SMarcel Moolenaar.It Ev .TARGETS 12093955d011SMarcel MoolenaarThe list of targets explicitly specified on the command line, if any. 12103955d011SMarcel Moolenaar.It Ev VPATH 12113955d011SMarcel MoolenaarColon-separated 12123955d011SMarcel Moolenaar.Pq Dq \&: 12133955d011SMarcel Moolenaarlists of directories that 12143955d011SMarcel Moolenaar.Nm 12153955d011SMarcel Moolenaarwill search for files. 12163955d011SMarcel MoolenaarThe variable is supported for compatibility with old make programs only, 12173955d011SMarcel Moolenaaruse 12183955d011SMarcel Moolenaar.Ql Va .PATH 12193955d011SMarcel Moolenaarinstead. 12203955d011SMarcel Moolenaar.El 12213955d011SMarcel Moolenaar.Ss Variable modifiers 12223955d011SMarcel MoolenaarVariable expansion may be modified to select or modify each word of the 12233955d011SMarcel Moolenaarvariable (where a 12243955d011SMarcel Moolenaar.Dq word 12253955d011SMarcel Moolenaaris white-space delimited sequence of characters). 12263955d011SMarcel MoolenaarThe general format of a variable expansion is as follows: 12273955d011SMarcel Moolenaar.Pp 12283955d011SMarcel Moolenaar.Dl ${variable[:modifier[:...]]} 12293955d011SMarcel Moolenaar.Pp 12303955d011SMarcel MoolenaarEach modifier begins with a colon, 12313955d011SMarcel Moolenaarwhich may be escaped with a backslash 12323955d011SMarcel Moolenaar.Pq Ql \e . 12333955d011SMarcel Moolenaar.Pp 12343955d011SMarcel MoolenaarA set of modifiers can be specified via a variable, as follows: 12353955d011SMarcel Moolenaar.Pp 12363955d011SMarcel Moolenaar.Dl modifier_variable=modifier[:...] 12373955d011SMarcel Moolenaar.Dl ${variable:${modifier_variable}[:...]} 12383955d011SMarcel Moolenaar.Pp 12393955d011SMarcel MoolenaarIn this case the first modifier in the modifier_variable does not 12403955d011SMarcel Moolenaarstart with a colon, since that must appear in the referencing 12413955d011SMarcel Moolenaarvariable. 12423955d011SMarcel MoolenaarIf any of the modifiers in the modifier_variable contain a dollar sign 12433955d011SMarcel Moolenaar.Pq Ql $ , 12443955d011SMarcel Moolenaarthese must be doubled to avoid early expansion. 12453955d011SMarcel Moolenaar.Pp 12463955d011SMarcel MoolenaarThe supported modifiers are: 12473955d011SMarcel Moolenaar.Bl -tag -width EEE 12483955d011SMarcel Moolenaar.It Cm \&:E 12493955d011SMarcel MoolenaarReplaces each word in the variable with its suffix. 12503955d011SMarcel Moolenaar.It Cm \&:H 12513955d011SMarcel MoolenaarReplaces each word in the variable with everything but the last component. 12523955d011SMarcel Moolenaar.It Cm \&:M Ns Ar pattern 12532c3632d1SSimon J. GerratySelects only those words that match 12543955d011SMarcel Moolenaar.Ar pattern . 12553955d011SMarcel MoolenaarThe standard shell wildcard characters 12563955d011SMarcel Moolenaar.Pf ( Ql * , 12573955d011SMarcel Moolenaar.Ql \&? , 12583955d011SMarcel Moolenaarand 12593955d011SMarcel Moolenaar.Ql Oo Oc ) 12603955d011SMarcel Moolenaarmay 12613955d011SMarcel Moolenaarbe used. 12623955d011SMarcel MoolenaarThe wildcard characters may be escaped with a backslash 12633955d011SMarcel Moolenaar.Pq Ql \e . 12640dede8b0SSimon J. GerratyAs a consequence of the way values are split into words, matched, 12650dede8b0SSimon J. Gerratyand then joined, a construct like 12660dede8b0SSimon J. Gerraty.Dl ${VAR:M*} 1267be19d90bSSimon J. Gerratywill normalize the inter-word spacing, removing all leading and 12680dede8b0SSimon J. Gerratytrailing space, and converting multiple consecutive spaces 12690dede8b0SSimon J. Gerratyto single spaces. 12700dede8b0SSimon J. Gerraty. 12713955d011SMarcel Moolenaar.It Cm \&:N Ns Ar pattern 12723955d011SMarcel MoolenaarThis is identical to 12733955d011SMarcel Moolenaar.Ql Cm \&:M , 12743955d011SMarcel Moolenaarbut selects all words which do not match 12753955d011SMarcel Moolenaar.Ar pattern . 12763955d011SMarcel Moolenaar.It Cm \&:O 12772c3632d1SSimon J. GerratyOrders every word in variable alphabetically. 127812904384SSimon J. Gerraty.It Cm \&:On 127912904384SSimon J. GerratyOrders every word in variable numerically. 128012904384SSimon J. GerratyA number followed by one of 128112904384SSimon J. Gerraty.Ql k , 128212904384SSimon J. Gerraty.Ql M 128312904384SSimon J. Gerratyor 128412904384SSimon J. Gerraty.Ql G 128512904384SSimon J. Gerratyis multiplied by the appropriate factor (1024 (k), 1048576 (M), or 128612904384SSimon J. Gerraty1073741824 (G)). 128712904384SSimon J. GerratyBoth upper- and lower-case letters are accepted. 1288ef0b2538SSimon J. Gerraty.It Cm \&:Or 12892c3632d1SSimon J. GerratyOrders every word in variable in reverse alphabetical order. 129012904384SSimon J. Gerraty.It Cm \&:Orn 129112904384SSimon J. GerratyOrders every word in variable in reverse numerical order. 12923955d011SMarcel Moolenaar.It Cm \&:Ox 12932c3632d1SSimon J. GerratyShuffles the words in variable. 12943955d011SMarcel MoolenaarThe results will be different each time you are referring to the 12953955d011SMarcel Moolenaarmodified variable; use the assignment with expansion 12963955d011SMarcel Moolenaar.Pq Ql Cm \&:= 1297be19d90bSSimon J. Gerratyto prevent such behavior. 12983955d011SMarcel MoolenaarFor example, 12993955d011SMarcel Moolenaar.Bd -literal -offset indent 13003955d011SMarcel MoolenaarLIST= uno due tre quattro 13013955d011SMarcel MoolenaarRANDOM_LIST= ${LIST:Ox} 13023955d011SMarcel MoolenaarSTATIC_RANDOM_LIST:= ${LIST:Ox} 13033955d011SMarcel Moolenaar 13043955d011SMarcel Moolenaarall: 13053955d011SMarcel Moolenaar @echo "${RANDOM_LIST}" 13063955d011SMarcel Moolenaar @echo "${RANDOM_LIST}" 13073955d011SMarcel Moolenaar @echo "${STATIC_RANDOM_LIST}" 13083955d011SMarcel Moolenaar @echo "${STATIC_RANDOM_LIST}" 13093955d011SMarcel Moolenaar.Ed 13103955d011SMarcel Moolenaarmay produce output similar to: 13113955d011SMarcel Moolenaar.Bd -literal -offset indent 13123955d011SMarcel Moolenaarquattro due tre uno 13133955d011SMarcel Moolenaartre due quattro uno 13143955d011SMarcel Moolenaardue uno quattro tre 13153955d011SMarcel Moolenaardue uno quattro tre 13163955d011SMarcel Moolenaar.Ed 13173955d011SMarcel Moolenaar.It Cm \&:Q 13183955d011SMarcel MoolenaarQuotes every shell meta-character in the variable, so that it can be passed 13192eae894cSSimon J. Gerratysafely to the shell. 13202eae894cSSimon J. Gerraty.It Cm \&:q 13212eae894cSSimon J. GerratyQuotes every shell meta-character in the variable, and also doubles 13222eae894cSSimon J. Gerraty.Sq $ 13232eae894cSSimon J. Gerratycharacters so that it can be passed 13243955d011SMarcel Moolenaarsafely through recursive invocations of 13253955d011SMarcel Moolenaar.Nm . 13262eae894cSSimon J. GerratyThis is equivalent to: 13272eae894cSSimon J. Gerraty.Sq \&:S/\e\&$/&&/g:Q . 13283955d011SMarcel Moolenaar.It Cm \&:R 13293955d011SMarcel MoolenaarReplaces each word in the variable with everything but its suffix. 13301ce939a7SSimon J. Gerraty.It Cm \&:range[=count] 13311ce939a7SSimon J. GerratyThe value is an integer sequence representing the words of the original 13321ce939a7SSimon J. Gerratyvalue, or the supplied 13331ce939a7SSimon J. Gerraty.Va count . 13341ce939a7SSimon J. Gerraty.It Cm \&:gmtime[=utc] 13353955d011SMarcel MoolenaarThe value is a format string for 13363955d011SMarcel Moolenaar.Xr strftime 3 , 13371ce939a7SSimon J. Gerratyusing 13383955d011SMarcel Moolenaar.Xr gmtime 3 . 13391ce939a7SSimon J. GerratyIf a 13401ce939a7SSimon J. Gerraty.Va utc 13411ce939a7SSimon J. Gerratyvalue is not provided or is 0, the current time is used. 13423955d011SMarcel Moolenaar.It Cm \&:hash 13432c3632d1SSimon J. GerratyComputes a 32-bit hash of the value and encode it as hex digits. 13441ce939a7SSimon J. Gerraty.It Cm \&:localtime[=utc] 13453955d011SMarcel MoolenaarThe value is a format string for 13463955d011SMarcel Moolenaar.Xr strftime 3 , 13471ce939a7SSimon J. Gerratyusing 13483955d011SMarcel Moolenaar.Xr localtime 3 . 13491ce939a7SSimon J. GerratyIf a 13501ce939a7SSimon J. Gerraty.Va utc 13511ce939a7SSimon J. Gerratyvalue is not provided or is 0, the current time is used. 13523955d011SMarcel Moolenaar.It Cm \&:tA 13532c3632d1SSimon J. GerratyAttempts to convert variable to an absolute path using 13543955d011SMarcel Moolenaar.Xr realpath 3 , 13553955d011SMarcel Moolenaarif that fails, the value is unchanged. 13563955d011SMarcel Moolenaar.It Cm \&:tl 13573955d011SMarcel MoolenaarConverts variable to lower-case letters. 13583955d011SMarcel Moolenaar.It Cm \&:ts Ns Ar c 13593955d011SMarcel MoolenaarWords in the variable are normally separated by a space on expansion. 13603955d011SMarcel MoolenaarThis modifier sets the separator to the character 13613955d011SMarcel Moolenaar.Ar c . 13623955d011SMarcel MoolenaarIf 13633955d011SMarcel Moolenaar.Ar c 13643955d011SMarcel Moolenaaris omitted, then no separator is used. 13652c3632d1SSimon J. GerratyThe common escapes (including octal numeric codes) work as expected. 13663955d011SMarcel Moolenaar.It Cm \&:tu 13673955d011SMarcel MoolenaarConverts variable to upper-case letters. 13683955d011SMarcel Moolenaar.It Cm \&:tW 13693955d011SMarcel MoolenaarCauses the value to be treated as a single word 13703955d011SMarcel Moolenaar(possibly containing embedded white space). 13713955d011SMarcel MoolenaarSee also 13723955d011SMarcel Moolenaar.Ql Cm \&:[*] . 13733955d011SMarcel Moolenaar.It Cm \&:tw 13743955d011SMarcel MoolenaarCauses the value to be treated as a sequence of 13753955d011SMarcel Moolenaarwords delimited by white space. 13763955d011SMarcel MoolenaarSee also 13773955d011SMarcel Moolenaar.Ql Cm \&:[@] . 13783955d011SMarcel Moolenaar.Sm off 13793955d011SMarcel Moolenaar.It Cm \&:S No \&/ Ar old_string No \&/ Ar new_string No \&/ Op Cm 1gW 13803955d011SMarcel Moolenaar.Sm on 13812c3632d1SSimon J. GerratyModifies the first occurrence of 13823955d011SMarcel Moolenaar.Ar old_string 13832c3632d1SSimon J. Gerratyin each word of the variable's value, replacing it with 13843955d011SMarcel Moolenaar.Ar new_string . 13853955d011SMarcel MoolenaarIf a 13863955d011SMarcel Moolenaar.Ql g 13872c3632d1SSimon J. Gerratyis appended to the last delimiter of the pattern, all occurrences 13883955d011SMarcel Moolenaarin each word are replaced. 13893955d011SMarcel MoolenaarIf a 13903955d011SMarcel Moolenaar.Ql 1 13912c3632d1SSimon J. Gerratyis appended to the last delimiter of the pattern, only the first occurrence 13923955d011SMarcel Moolenaaris affected. 13933955d011SMarcel MoolenaarIf a 13943955d011SMarcel Moolenaar.Ql W 13952c3632d1SSimon J. Gerratyis appended to the last delimiter of the pattern, 13963955d011SMarcel Moolenaarthen the value is treated as a single word 13973955d011SMarcel Moolenaar(possibly containing embedded white space). 13983955d011SMarcel MoolenaarIf 13993955d011SMarcel Moolenaar.Ar old_string 14003955d011SMarcel Moolenaarbegins with a caret 14013955d011SMarcel Moolenaar.Pq Ql ^ , 14023955d011SMarcel Moolenaar.Ar old_string 14033955d011SMarcel Moolenaaris anchored at the beginning of each word. 14043955d011SMarcel MoolenaarIf 14053955d011SMarcel Moolenaar.Ar old_string 14063955d011SMarcel Moolenaarends with a dollar sign 14073955d011SMarcel Moolenaar.Pq Ql \&$ , 14083955d011SMarcel Moolenaarit is anchored at the end of each word. 14093955d011SMarcel MoolenaarInside 14103955d011SMarcel Moolenaar.Ar new_string , 14113955d011SMarcel Moolenaaran ampersand 14128695518cSSimon J. Gerraty.Pq Ql & 14133955d011SMarcel Moolenaaris replaced by 14143955d011SMarcel Moolenaar.Ar old_string 14153955d011SMarcel Moolenaar(without any 14163955d011SMarcel Moolenaar.Ql ^ 14173955d011SMarcel Moolenaaror 14183955d011SMarcel Moolenaar.Ql \&$ ) . 14193955d011SMarcel MoolenaarAny character may be used as a delimiter for the parts of the modifier 14203955d011SMarcel Moolenaarstring. 14213955d011SMarcel MoolenaarThe anchoring, ampersand and delimiter characters may be escaped with a 14223955d011SMarcel Moolenaarbackslash 14233955d011SMarcel Moolenaar.Pq Ql \e . 14243955d011SMarcel Moolenaar.Pp 14253955d011SMarcel MoolenaarVariable expansion occurs in the normal fashion inside both 14263955d011SMarcel Moolenaar.Ar old_string 14273955d011SMarcel Moolenaarand 14283955d011SMarcel Moolenaar.Ar new_string 14293955d011SMarcel Moolenaarwith the single exception that a backslash is used to prevent the expansion 14303955d011SMarcel Moolenaarof a dollar sign 14313955d011SMarcel Moolenaar.Pq Ql \&$ , 14323955d011SMarcel Moolenaarnot a preceding dollar sign as is usual. 14333955d011SMarcel Moolenaar.Sm off 14343955d011SMarcel Moolenaar.It Cm \&:C No \&/ Ar pattern No \&/ Ar replacement No \&/ Op Cm 1gW 14353955d011SMarcel Moolenaar.Sm on 14363955d011SMarcel MoolenaarThe 14373955d011SMarcel Moolenaar.Cm \&:C 14383955d011SMarcel Moolenaarmodifier is just like the 14393955d011SMarcel Moolenaar.Cm \&:S 14403955d011SMarcel Moolenaarmodifier except that the old and new strings, instead of being 14410dede8b0SSimon J. Gerratysimple strings, are an extended regular expression (see 14423955d011SMarcel Moolenaar.Xr regex 3 ) 14433955d011SMarcel Moolenaarstring 14443955d011SMarcel Moolenaar.Ar pattern 14453955d011SMarcel Moolenaarand an 14463955d011SMarcel Moolenaar.Xr ed 1 Ns \-style 14473955d011SMarcel Moolenaarstring 14483955d011SMarcel Moolenaar.Ar replacement . 14493955d011SMarcel MoolenaarNormally, the first occurrence of the pattern 14503955d011SMarcel Moolenaar.Ar pattern 14513955d011SMarcel Moolenaarin each word of the value is substituted with 14523955d011SMarcel Moolenaar.Ar replacement . 14533955d011SMarcel MoolenaarThe 14543955d011SMarcel Moolenaar.Ql 1 14553955d011SMarcel Moolenaarmodifier causes the substitution to apply to at most one word; the 14563955d011SMarcel Moolenaar.Ql g 14573955d011SMarcel Moolenaarmodifier causes the substitution to apply to as many instances of the 14583955d011SMarcel Moolenaarsearch pattern 14593955d011SMarcel Moolenaar.Ar pattern 14603955d011SMarcel Moolenaaras occur in the word or words it is found in; the 14613955d011SMarcel Moolenaar.Ql W 14623955d011SMarcel Moolenaarmodifier causes the value to be treated as a single word 14633955d011SMarcel Moolenaar(possibly containing embedded white space). 14645bcb7424SSimon J. Gerraty.Pp 14655bcb7424SSimon J. GerratyAs for the 14665bcb7424SSimon J. Gerraty.Cm \&:S 14675bcb7424SSimon J. Gerratymodifier, the 14685bcb7424SSimon J. Gerraty.Ar pattern 14695bcb7424SSimon J. Gerratyand 14705bcb7424SSimon J. Gerraty.Ar replacement 14715bcb7424SSimon J. Gerratyare subjected to variable expansion before being parsed as 14725bcb7424SSimon J. Gerratyregular expressions. 14733955d011SMarcel Moolenaar.It Cm \&:T 14742c3632d1SSimon J. GerratyReplaces each word in the variable with its last path component. 14753955d011SMarcel Moolenaar.It Cm \&:u 14762c3632d1SSimon J. GerratyRemoves adjacent duplicate words (like 14773955d011SMarcel Moolenaar.Xr uniq 1 ) . 14783955d011SMarcel Moolenaar.Sm off 14793955d011SMarcel Moolenaar.It Cm \&:\&? Ar true_string Cm \&: Ar false_string 14803955d011SMarcel Moolenaar.Sm on 14813955d011SMarcel MoolenaarIf the variable name (not its value), when parsed as a .if conditional 14823955d011SMarcel Moolenaarexpression, evaluates to true, return as its value the 14833955d011SMarcel Moolenaar.Ar true_string , 14843955d011SMarcel Moolenaarotherwise return the 14853955d011SMarcel Moolenaar.Ar false_string . 14863955d011SMarcel MoolenaarSince the variable name is used as the expression, \&:\&? must be the 14873955d011SMarcel Moolenaarfirst modifier after the variable name itself - which will, of course, 14883955d011SMarcel Moolenaarusually contain variable expansions. 14893955d011SMarcel MoolenaarA common error is trying to use expressions like 14903955d011SMarcel Moolenaar.Dl ${NUMBERS:M42:?match:no} 14913955d011SMarcel Moolenaarwhich actually tests defined(NUMBERS), 14922c3632d1SSimon J. Gerratyto determine if any words match "42" you need to use something like: 14933955d011SMarcel Moolenaar.Dl ${"${NUMBERS:M42}" != \&"\&":?match:no} . 14943955d011SMarcel Moolenaar.It Ar :old_string=new_string 14953955d011SMarcel MoolenaarThis is the 14963955d011SMarcel Moolenaar.At V 14973955d011SMarcel Moolenaarstyle variable substitution. 14983955d011SMarcel MoolenaarIt must be the last modifier specified. 14993955d011SMarcel MoolenaarIf 15003955d011SMarcel Moolenaar.Ar old_string 15013955d011SMarcel Moolenaaror 15023955d011SMarcel Moolenaar.Ar new_string 15033955d011SMarcel Moolenaardo not contain the pattern matching character 15043955d011SMarcel Moolenaar.Ar % 15053955d011SMarcel Moolenaarthen it is assumed that they are 15063955d011SMarcel Moolenaaranchored at the end of each word, so only suffixes or entire 15073955d011SMarcel Moolenaarwords may be replaced. 15083955d011SMarcel MoolenaarOtherwise 15093955d011SMarcel Moolenaar.Ar % 15103955d011SMarcel Moolenaaris the substring of 15113955d011SMarcel Moolenaar.Ar old_string 15123955d011SMarcel Moolenaarto be replaced in 15133955d011SMarcel Moolenaar.Ar new_string . 1514ef0b2538SSimon J. GerratyIf only 1515ef0b2538SSimon J. Gerraty.Ar old_string 1516ef0b2538SSimon J. Gerratycontains the pattern matching character 1517ef0b2538SSimon J. Gerraty.Ar % , 1518ef0b2538SSimon J. Gerratyand 1519ef0b2538SSimon J. Gerraty.Ar old_string 1520ef0b2538SSimon J. Gerratymatches, then the result is the 1521ef0b2538SSimon J. Gerraty.Ar new_string . 1522ef0b2538SSimon J. GerratyIf only the 1523ef0b2538SSimon J. Gerraty.Ar new_string 1524ef0b2538SSimon J. Gerratycontains the pattern matching character 1525ef0b2538SSimon J. Gerraty.Ar % , 1526ef0b2538SSimon J. Gerratythen it is not treated specially and it is printed as a literal 1527ef0b2538SSimon J. Gerraty.Ar % 1528ef0b2538SSimon J. Gerratyon match. 1529ef0b2538SSimon J. GerratyIf there is more than one pattern matching character 1530ef0b2538SSimon J. Gerraty.Ar ( % ) 1531ef0b2538SSimon J. Gerratyin either the 1532ef0b2538SSimon J. Gerraty.Ar new_string 1533ef0b2538SSimon J. Gerratyor 1534ef0b2538SSimon J. Gerraty.Ar old_string , 1535ef0b2538SSimon J. Gerratyonly the first instance is treated specially (as the pattern character); 15362c3632d1SSimon J. Gerratyall subsequent instances are treated as regular characters. 15373955d011SMarcel Moolenaar.Pp 15383955d011SMarcel MoolenaarVariable expansion occurs in the normal fashion inside both 15393955d011SMarcel Moolenaar.Ar old_string 15403955d011SMarcel Moolenaarand 15413955d011SMarcel Moolenaar.Ar new_string 15423955d011SMarcel Moolenaarwith the single exception that a backslash is used to prevent the 15433955d011SMarcel Moolenaarexpansion of a dollar sign 15443955d011SMarcel Moolenaar.Pq Ql \&$ , 15453955d011SMarcel Moolenaarnot a preceding dollar sign as is usual. 15463955d011SMarcel Moolenaar.Sm off 15473955d011SMarcel Moolenaar.It Cm \&:@ Ar temp Cm @ Ar string Cm @ 15483955d011SMarcel Moolenaar.Sm on 15493955d011SMarcel MoolenaarThis is the loop expansion mechanism from the OSF Development 15503955d011SMarcel MoolenaarEnvironment (ODE) make. 15513955d011SMarcel MoolenaarUnlike 15523955d011SMarcel Moolenaar.Cm \&.for 15532c3632d1SSimon J. Gerratyloops, expansion occurs at the time of reference. 15542c3632d1SSimon J. GerratyAssigns 15553955d011SMarcel Moolenaar.Ar temp 15562c3632d1SSimon J. Gerratyto each word in the variable and evaluates 15573955d011SMarcel Moolenaar.Ar string . 15583955d011SMarcel MoolenaarThe ODE convention is that 15593955d011SMarcel Moolenaar.Ar temp 15603955d011SMarcel Moolenaarshould start and end with a period. 15613955d011SMarcel MoolenaarFor example. 15623955d011SMarcel Moolenaar.Dl ${LINKS:@.LINK.@${LN} ${TARGET} ${.LINK.}@} 15633955d011SMarcel Moolenaar.Pp 156451ee2c1cSSimon J. GerratyHowever a single character variable is often more readable: 15653955d011SMarcel Moolenaar.Dl ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@} 15661ce939a7SSimon J. Gerraty.It Cm \&:_[=var] 15672c3632d1SSimon J. GerratySaves the current variable value in 15681ce939a7SSimon J. Gerraty.Ql $_ 15691ce939a7SSimon J. Gerratyor the named 15701ce939a7SSimon J. Gerraty.Va var 15711ce939a7SSimon J. Gerratyfor later reference. 15721ce939a7SSimon J. GerratyExample usage: 15731ce939a7SSimon J. Gerraty.Bd -literal -offset indent 15741ce939a7SSimon J. GerratyM_cmpv.units = 1 1000 1000000 15751ce939a7SSimon J. GerratyM_cmpv = S,., ,g:_:range:@i@+ $${_:[-$$i]} \&\\ 15761ce939a7SSimon J. Gerraty\\* $${M_cmpv.units:[$$i]}@:S,^,expr 0 ,1:sh 15771ce939a7SSimon J. Gerraty 15781ce939a7SSimon J. Gerraty.Dv .if ${VERSION:${M_cmpv}} < ${3.1.12:L:${M_cmpv}} 15791ce939a7SSimon J. Gerraty 15801ce939a7SSimon J. Gerraty.Ed 15811ce939a7SSimon J. GerratyHere 15821ce939a7SSimon J. Gerraty.Ql $_ 15831ce939a7SSimon J. Gerratyis used to save the result of the 15841ce939a7SSimon J. Gerraty.Ql :S 15851ce939a7SSimon J. Gerratymodifier which is later referenced using the index values from 15861ce939a7SSimon J. Gerraty.Ql :range . 15873955d011SMarcel Moolenaar.It Cm \&:U Ns Ar newval 15882c3632d1SSimon J. GerratyIf the variable is undefined, 15893955d011SMarcel Moolenaar.Ar newval 15903955d011SMarcel Moolenaaris the value. 15913955d011SMarcel MoolenaarIf the variable is defined, the existing value is returned. 15923955d011SMarcel MoolenaarThis is another ODE make feature. 15933955d011SMarcel MoolenaarIt is handy for setting per-target CFLAGS for instance: 15943955d011SMarcel Moolenaar.Dl ${_${.TARGET:T}_CFLAGS:U${DEF_CFLAGS}} 15953955d011SMarcel MoolenaarIf a value is only required if the variable is undefined, use: 15963955d011SMarcel Moolenaar.Dl ${VAR:D:Unewval} 15973955d011SMarcel Moolenaar.It Cm \&:D Ns Ar newval 15982c3632d1SSimon J. GerratyIf the variable is defined, 15993955d011SMarcel Moolenaar.Ar newval 16003955d011SMarcel Moolenaaris the value. 16013955d011SMarcel Moolenaar.It Cm \&:L 16023955d011SMarcel MoolenaarThe name of the variable is the value. 16033955d011SMarcel Moolenaar.It Cm \&:P 16043955d011SMarcel MoolenaarThe path of the node which has the same name as the variable 16053955d011SMarcel Moolenaaris the value. 16063955d011SMarcel MoolenaarIf no such node exists or its path is null, then the 16073955d011SMarcel Moolenaarname of the variable is used. 16083955d011SMarcel MoolenaarIn order for this modifier to work, the name (node) must at least have 16093955d011SMarcel Moolenaarappeared on the rhs of a dependency. 16103955d011SMarcel Moolenaar.Sm off 16113955d011SMarcel Moolenaar.It Cm \&:\&! Ar cmd Cm \&! 16123955d011SMarcel Moolenaar.Sm on 16133955d011SMarcel MoolenaarThe output of running 16143955d011SMarcel Moolenaar.Ar cmd 16153955d011SMarcel Moolenaaris the value. 16163955d011SMarcel Moolenaar.It Cm \&:sh 16173955d011SMarcel MoolenaarIf the variable is non-empty it is run as a command and the output 16183955d011SMarcel Moolenaarbecomes the new value. 16193955d011SMarcel Moolenaar.It Cm \&::= Ns Ar str 16203955d011SMarcel MoolenaarThe variable is assigned the value 16213955d011SMarcel Moolenaar.Ar str 16223955d011SMarcel Moolenaarafter substitution. 16233955d011SMarcel MoolenaarThis modifier and its variations are useful in 16243955d011SMarcel Moolenaarobscure situations such as wanting to set a variable when shell commands 16253955d011SMarcel Moolenaarare being parsed. 16263955d011SMarcel MoolenaarThese assignment modifiers always expand to 16273955d011SMarcel Moolenaarnothing, so if appearing in a rule line by themselves should be 16283955d011SMarcel Moolenaarpreceded with something to keep 16293955d011SMarcel Moolenaar.Nm 16303955d011SMarcel Moolenaarhappy. 16313955d011SMarcel Moolenaar.Pp 16323955d011SMarcel MoolenaarThe 16333955d011SMarcel Moolenaar.Ql Cm \&:: 16343955d011SMarcel Moolenaarhelps avoid false matches with the 16353955d011SMarcel Moolenaar.At V 16363955d011SMarcel Moolenaarstyle 16373955d011SMarcel Moolenaar.Cm \&:= 16383955d011SMarcel Moolenaarmodifier and since substitution always occurs the 16393955d011SMarcel Moolenaar.Cm \&::= 16403955d011SMarcel Moolenaarform is vaguely appropriate. 16413955d011SMarcel Moolenaar.It Cm \&::?= Ns Ar str 16423955d011SMarcel MoolenaarAs for 16433955d011SMarcel Moolenaar.Cm \&::= 16443955d011SMarcel Moolenaarbut only if the variable does not already have a value. 16453955d011SMarcel Moolenaar.It Cm \&::+= Ns Ar str 16463955d011SMarcel MoolenaarAppend 16473955d011SMarcel Moolenaar.Ar str 16483955d011SMarcel Moolenaarto the variable. 16493955d011SMarcel Moolenaar.It Cm \&::!= Ns Ar cmd 16503955d011SMarcel MoolenaarAssign the output of 16513955d011SMarcel Moolenaar.Ar cmd 16523955d011SMarcel Moolenaarto the variable. 16533955d011SMarcel Moolenaar.It Cm \&:\&[ Ns Ar range Ns Cm \&] 16543955d011SMarcel MoolenaarSelects one or more words from the value, 16553955d011SMarcel Moolenaaror performs other operations related to the way in which the 16563955d011SMarcel Moolenaarvalue is divided into words. 16573955d011SMarcel Moolenaar.Pp 16583955d011SMarcel MoolenaarOrdinarily, a value is treated as a sequence of words 16593955d011SMarcel Moolenaardelimited by white space. 1660be19d90bSSimon J. GerratySome modifiers suppress this behavior, 16613955d011SMarcel Moolenaarcausing a value to be treated as a single word 16623955d011SMarcel Moolenaar(possibly containing embedded white space). 16633955d011SMarcel MoolenaarAn empty value, or a value that consists entirely of white-space, 16643955d011SMarcel Moolenaaris treated as a single word. 16653955d011SMarcel MoolenaarFor the purposes of the 16663955d011SMarcel Moolenaar.Ql Cm \&:[] 16673955d011SMarcel Moolenaarmodifier, the words are indexed both forwards using positive integers 16683955d011SMarcel Moolenaar(where index 1 represents the first word), 16693955d011SMarcel Moolenaarand backwards using negative integers 16703955d011SMarcel Moolenaar(where index \-1 represents the last word). 16713955d011SMarcel Moolenaar.Pp 16723955d011SMarcel MoolenaarThe 16733955d011SMarcel Moolenaar.Ar range 16743955d011SMarcel Moolenaaris subjected to variable expansion, and the expanded result is 16753955d011SMarcel Moolenaarthen interpreted as follows: 16763955d011SMarcel Moolenaar.Bl -tag -width index 16773955d011SMarcel Moolenaar.\" :[n] 16783955d011SMarcel Moolenaar.It Ar index 16793955d011SMarcel MoolenaarSelects a single word from the value. 16803955d011SMarcel Moolenaar.\" :[start..end] 16813955d011SMarcel Moolenaar.It Ar start Ns Cm \&.. Ns Ar end 16823955d011SMarcel MoolenaarSelects all words from 16833955d011SMarcel Moolenaar.Ar start 16843955d011SMarcel Moolenaarto 16853955d011SMarcel Moolenaar.Ar end , 16863955d011SMarcel Moolenaarinclusive. 16873955d011SMarcel MoolenaarFor example, 16883955d011SMarcel Moolenaar.Ql Cm \&:[2..-1] 16893955d011SMarcel Moolenaarselects all words from the second word to the last word. 16903955d011SMarcel MoolenaarIf 16913955d011SMarcel Moolenaar.Ar start 16923955d011SMarcel Moolenaaris greater than 16933955d011SMarcel Moolenaar.Ar end , 16943955d011SMarcel Moolenaarthen the words are output in reverse order. 16953955d011SMarcel MoolenaarFor example, 16963955d011SMarcel Moolenaar.Ql Cm \&:[-1..1] 16973955d011SMarcel Moolenaarselects all the words from last to first. 1698ef0b2538SSimon J. GerratyIf the list is already ordered, then this effectively reverses 1699ef0b2538SSimon J. Gerratythe list, but it is more efficient to use 1700ef0b2538SSimon J. Gerraty.Ql Cm \&:Or 1701ef0b2538SSimon J. Gerratyinstead of 1702ef0b2538SSimon J. Gerraty.Ql Cm \&:O:[-1..1] . 17033955d011SMarcel Moolenaar.\" :[*] 17043955d011SMarcel Moolenaar.It Cm \&* 17053955d011SMarcel MoolenaarCauses subsequent modifiers to treat the value as a single word 17063955d011SMarcel Moolenaar(possibly containing embedded white space). 17073955d011SMarcel MoolenaarAnalogous to the effect of 17083955d011SMarcel Moolenaar\&"$*\&" 17093955d011SMarcel Moolenaarin Bourne shell. 17103955d011SMarcel Moolenaar.\" :[0] 17113955d011SMarcel Moolenaar.It 0 17123955d011SMarcel MoolenaarMeans the same as 17133955d011SMarcel Moolenaar.Ql Cm \&:[*] . 17143955d011SMarcel Moolenaar.\" :[*] 17153955d011SMarcel Moolenaar.It Cm \&@ 17163955d011SMarcel MoolenaarCauses subsequent modifiers to treat the value as a sequence of words 17173955d011SMarcel Moolenaardelimited by white space. 17183955d011SMarcel MoolenaarAnalogous to the effect of 17193955d011SMarcel Moolenaar\&"$@\&" 17203955d011SMarcel Moolenaarin Bourne shell. 17213955d011SMarcel Moolenaar.\" :[#] 17223955d011SMarcel Moolenaar.It Cm \&# 17233955d011SMarcel MoolenaarReturns the number of words in the value. 17243955d011SMarcel Moolenaar.El \" :[range] 17253955d011SMarcel Moolenaar.El 17263955d011SMarcel Moolenaar.Sh INCLUDE STATEMENTS, CONDITIONALS AND FOR LOOPS 17273955d011SMarcel MoolenaarMakefile inclusion, conditional structures and for loops reminiscent 17283955d011SMarcel Moolenaarof the C programming language are provided in 17293955d011SMarcel Moolenaar.Nm . 17303955d011SMarcel MoolenaarAll such structures are identified by a line beginning with a single 17313955d011SMarcel Moolenaardot 17323955d011SMarcel Moolenaar.Pq Ql \&. 17333955d011SMarcel Moolenaarcharacter. 17343955d011SMarcel MoolenaarFiles are included with either 1735ef0b2538SSimon J. Gerraty.Cm \&.include \&< Ns Ar file Ns Cm \&> 17363955d011SMarcel Moolenaaror 1737ef0b2538SSimon J. Gerraty.Cm \&.include \&\*q Ns Ar file Ns Cm \&\*q . 17383955d011SMarcel MoolenaarVariables between the angle brackets or double quotes are expanded 17393955d011SMarcel Moolenaarto form the file name. 17403955d011SMarcel MoolenaarIf angle brackets are used, the included makefile is expected to be in 17413955d011SMarcel Moolenaarthe system makefile directory. 17423955d011SMarcel MoolenaarIf double quotes are used, the including makefile's directory and any 17433955d011SMarcel Moolenaardirectories specified using the 17443955d011SMarcel Moolenaar.Fl I 17453955d011SMarcel Moolenaaroption are searched before the system 17463955d011SMarcel Moolenaarmakefile directory. 17473955d011SMarcel MoolenaarFor compatibility with other versions of 17483955d011SMarcel Moolenaar.Nm 17493955d011SMarcel Moolenaar.Ql include file ... 17503955d011SMarcel Moolenaaris also accepted. 1751be19d90bSSimon J. Gerraty.Pp 17523955d011SMarcel MoolenaarIf the include statement is written as 17533955d011SMarcel Moolenaar.Cm .-include 17543955d011SMarcel Moolenaaror as 17553955d011SMarcel Moolenaar.Cm .sinclude 17563955d011SMarcel Moolenaarthen errors locating and/or opening include files are ignored. 17573955d011SMarcel Moolenaar.Pp 1758be19d90bSSimon J. GerratyIf the include statement is written as 1759be19d90bSSimon J. Gerraty.Cm .dinclude 1760be19d90bSSimon J. Gerratynot only are errors locating and/or opening include files ignored, 1761be19d90bSSimon J. Gerratybut stale dependencies within the included file will be ignored 1762be19d90bSSimon J. Gerratyjust like 1763be19d90bSSimon J. Gerraty.Va .MAKE.DEPENDFILE . 1764be19d90bSSimon J. Gerraty.Pp 17653955d011SMarcel MoolenaarConditional expressions are also preceded by a single dot as the first 17663955d011SMarcel Moolenaarcharacter of a line. 17673955d011SMarcel MoolenaarThe possible conditionals are as follows: 17683955d011SMarcel Moolenaar.Bl -tag -width Ds 17693955d011SMarcel Moolenaar.It Ic .error Ar message 17703955d011SMarcel MoolenaarThe message is printed along with the name of the makefile and line number, 17713955d011SMarcel Moolenaarthen 17723955d011SMarcel Moolenaar.Nm 17732c3632d1SSimon J. Gerratywill exit immediately. 17743955d011SMarcel Moolenaar.It Ic .export Ar variable ... 17753955d011SMarcel MoolenaarExport the specified global variable. 17763955d011SMarcel MoolenaarIf no variable list is provided, all globals are exported 17773955d011SMarcel Moolenaarexcept for internal variables (those that start with 17783955d011SMarcel Moolenaar.Ql \&. ) . 17793955d011SMarcel MoolenaarThis is not affected by the 17803955d011SMarcel Moolenaar.Fl X 17813955d011SMarcel Moolenaarflag, so should be used with caution. 17823955d011SMarcel MoolenaarFor compatibility with other 17833955d011SMarcel Moolenaar.Nm 17843955d011SMarcel Moolenaarprograms 17853955d011SMarcel Moolenaar.Ql export variable=value 17863955d011SMarcel Moolenaaris also accepted. 17873955d011SMarcel Moolenaar.Pp 17883955d011SMarcel MoolenaarAppending a variable name to 17893955d011SMarcel Moolenaar.Va .MAKE.EXPORTED 17903955d011SMarcel Moolenaaris equivalent to exporting a variable. 17913955d011SMarcel Moolenaar.It Ic .export-env Ar variable ... 17923955d011SMarcel MoolenaarThe same as 17933955d011SMarcel Moolenaar.Ql .export , 17943955d011SMarcel Moolenaarexcept that the variable is not appended to 17953955d011SMarcel Moolenaar.Va .MAKE.EXPORTED . 17963955d011SMarcel MoolenaarThis allows exporting a value to the environment which is different from that 17973955d011SMarcel Moolenaarused by 17983955d011SMarcel Moolenaar.Nm 17993955d011SMarcel Moolenaarinternally. 1800be19d90bSSimon J. Gerraty.It Ic .export-literal Ar variable ... 1801be19d90bSSimon J. GerratyThe same as 1802be19d90bSSimon J. Gerraty.Ql .export-env , 1803be19d90bSSimon J. Gerratyexcept that variables in the value are not expanded. 18043955d011SMarcel Moolenaar.It Ic .info Ar message 18053955d011SMarcel MoolenaarThe message is printed along with the name of the makefile and line number. 180606b9b3e0SSimon J. Gerraty.It Ic .undef Ar variable ... 180706b9b3e0SSimon J. GerratyUn-define the specified global variables. 180806b9b3e0SSimon J. GerratyOnly global variables can be un-defined. 18093955d011SMarcel Moolenaar.It Ic .unexport Ar variable ... 18103955d011SMarcel MoolenaarThe opposite of 18113955d011SMarcel Moolenaar.Ql .export . 18123955d011SMarcel MoolenaarThe specified global 18133955d011SMarcel Moolenaar.Va variable 18143955d011SMarcel Moolenaarwill be removed from 18153955d011SMarcel Moolenaar.Va .MAKE.EXPORTED . 18163955d011SMarcel MoolenaarIf no variable list is provided, all globals are unexported, 18173955d011SMarcel Moolenaarand 18183955d011SMarcel Moolenaar.Va .MAKE.EXPORTED 18193955d011SMarcel Moolenaardeleted. 18203955d011SMarcel Moolenaar.It Ic .unexport-env 18213955d011SMarcel MoolenaarUnexport all globals previously exported and 18223955d011SMarcel Moolenaarclear the environment inherited from the parent. 18233955d011SMarcel MoolenaarThis operation will cause a memory leak of the original environment, 18243955d011SMarcel Moolenaarso should be used sparingly. 18253955d011SMarcel MoolenaarTesting for 18263955d011SMarcel Moolenaar.Va .MAKE.LEVEL 18273955d011SMarcel Moolenaarbeing 0, would make sense. 18283955d011SMarcel MoolenaarAlso note that any variables which originated in the parent environment 18293955d011SMarcel Moolenaarshould be explicitly preserved if desired. 18303955d011SMarcel MoolenaarFor example: 18313955d011SMarcel Moolenaar.Bd -literal -offset indent 18323955d011SMarcel Moolenaar.Li .if ${.MAKE.LEVEL} == 0 18333955d011SMarcel MoolenaarPATH := ${PATH} 18343955d011SMarcel Moolenaar.Li .unexport-env 18353955d011SMarcel Moolenaar.Li .export PATH 18363955d011SMarcel Moolenaar.Li .endif 18373955d011SMarcel Moolenaar.Pp 18383955d011SMarcel Moolenaar.Ed 18393955d011SMarcel MoolenaarWould result in an environment containing only 18403955d011SMarcel Moolenaar.Ql Ev PATH , 18413955d011SMarcel Moolenaarwhich is the minimal useful environment. 18423955d011SMarcel MoolenaarActually 18433955d011SMarcel Moolenaar.Ql Ev .MAKE.LEVEL 18443955d011SMarcel Moolenaarwill also be pushed into the new environment. 18453955d011SMarcel Moolenaar.It Ic .warning Ar message 18463955d011SMarcel MoolenaarThe message prefixed by 18473955d011SMarcel Moolenaar.Ql Pa warning: 18483955d011SMarcel Moolenaaris printed along with the name of the makefile and line number. 18493955d011SMarcel Moolenaar.It Ic \&.if Oo \&! Oc Ns Ar expression Op Ar operator expression ... 18503955d011SMarcel MoolenaarTest the value of an expression. 18513955d011SMarcel Moolenaar.It Ic .ifdef Oo \&! Oc Ns Ar variable Op Ar operator variable ... 18523955d011SMarcel MoolenaarTest the value of a variable. 18533955d011SMarcel Moolenaar.It Ic .ifndef Oo \&! Oc Ns Ar variable Op Ar operator variable ... 18543955d011SMarcel MoolenaarTest the value of a variable. 18553955d011SMarcel Moolenaar.It Ic .ifmake Oo \&! Oc Ns Ar target Op Ar operator target ... 18563955d011SMarcel MoolenaarTest the target being built. 18573955d011SMarcel Moolenaar.It Ic .ifnmake Oo \&! Ns Oc Ar target Op Ar operator target ... 18583955d011SMarcel MoolenaarTest the target being built. 18593955d011SMarcel Moolenaar.It Ic .else 18603955d011SMarcel MoolenaarReverse the sense of the last conditional. 18613955d011SMarcel Moolenaar.It Ic .elif Oo \&! Ns Oc Ar expression Op Ar operator expression ... 18623955d011SMarcel MoolenaarA combination of 18633955d011SMarcel Moolenaar.Ql Ic .else 18643955d011SMarcel Moolenaarfollowed by 18653955d011SMarcel Moolenaar.Ql Ic .if . 18663955d011SMarcel Moolenaar.It Ic .elifdef Oo \&! Oc Ns Ar variable Op Ar operator variable ... 18673955d011SMarcel MoolenaarA combination of 18683955d011SMarcel Moolenaar.Ql Ic .else 18693955d011SMarcel Moolenaarfollowed by 18703955d011SMarcel Moolenaar.Ql Ic .ifdef . 18713955d011SMarcel Moolenaar.It Ic .elifndef Oo \&! Oc Ns Ar variable Op Ar operator variable ... 18723955d011SMarcel MoolenaarA combination of 18733955d011SMarcel Moolenaar.Ql Ic .else 18743955d011SMarcel Moolenaarfollowed by 18753955d011SMarcel Moolenaar.Ql Ic .ifndef . 18763955d011SMarcel Moolenaar.It Ic .elifmake Oo \&! Oc Ns Ar target Op Ar operator target ... 18773955d011SMarcel MoolenaarA combination of 18783955d011SMarcel Moolenaar.Ql Ic .else 18793955d011SMarcel Moolenaarfollowed by 18803955d011SMarcel Moolenaar.Ql Ic .ifmake . 18813955d011SMarcel Moolenaar.It Ic .elifnmake Oo \&! Oc Ns Ar target Op Ar operator target ... 18823955d011SMarcel MoolenaarA combination of 18833955d011SMarcel Moolenaar.Ql Ic .else 18843955d011SMarcel Moolenaarfollowed by 18853955d011SMarcel Moolenaar.Ql Ic .ifnmake . 18863955d011SMarcel Moolenaar.It Ic .endif 18873955d011SMarcel MoolenaarEnd the body of the conditional. 18883955d011SMarcel Moolenaar.El 18893955d011SMarcel Moolenaar.Pp 18903955d011SMarcel MoolenaarThe 18913955d011SMarcel Moolenaar.Ar operator 18923955d011SMarcel Moolenaarmay be any one of the following: 18933955d011SMarcel Moolenaar.Bl -tag -width "Cm XX" 18943955d011SMarcel Moolenaar.It Cm \&|\&| 18953955d011SMarcel MoolenaarLogical OR. 18968695518cSSimon J. Gerraty.It Cm \&&& 18973955d011SMarcel MoolenaarLogical 18983955d011SMarcel Moolenaar.Tn AND ; 18993955d011SMarcel Moolenaarof higher precedence than 19003955d011SMarcel Moolenaar.Dq \&|\&| . 19013955d011SMarcel Moolenaar.El 19023955d011SMarcel Moolenaar.Pp 19033955d011SMarcel MoolenaarAs in C, 19043955d011SMarcel Moolenaar.Nm 19053955d011SMarcel Moolenaarwill only evaluate a conditional as far as is necessary to determine 19063955d011SMarcel Moolenaarits value. 19073955d011SMarcel MoolenaarParentheses may be used to change the order of evaluation. 19083955d011SMarcel MoolenaarThe boolean operator 19093955d011SMarcel Moolenaar.Ql Ic \&! 19103955d011SMarcel Moolenaarmay be used to logically negate an entire 19113955d011SMarcel Moolenaarconditional. 19123955d011SMarcel MoolenaarIt is of higher precedence than 19138695518cSSimon J. Gerraty.Ql Ic \&&& . 19143955d011SMarcel Moolenaar.Pp 19153955d011SMarcel MoolenaarThe value of 19163955d011SMarcel Moolenaar.Ar expression 19173955d011SMarcel Moolenaarmay be any of the following: 19183955d011SMarcel Moolenaar.Bl -tag -width defined 19193955d011SMarcel Moolenaar.It Ic defined 19203955d011SMarcel MoolenaarTakes a variable name as an argument and evaluates to true if the variable 19213955d011SMarcel Moolenaarhas been defined. 19223955d011SMarcel Moolenaar.It Ic make 19233955d011SMarcel MoolenaarTakes a target name as an argument and evaluates to true if the target 19243955d011SMarcel Moolenaarwas specified as part of 19253955d011SMarcel Moolenaar.Nm Ns 's 19263955d011SMarcel Moolenaarcommand line or was declared the default target (either implicitly or 19273955d011SMarcel Moolenaarexplicitly, see 19283955d011SMarcel Moolenaar.Va .MAIN ) 19293955d011SMarcel Moolenaarbefore the line containing the conditional. 19303955d011SMarcel Moolenaar.It Ic empty 19313955d011SMarcel MoolenaarTakes a variable, with possible modifiers, and evaluates to true if 19323955d011SMarcel Moolenaarthe expansion of the variable would result in an empty string. 19333955d011SMarcel Moolenaar.It Ic exists 19343955d011SMarcel MoolenaarTakes a file name as an argument and evaluates to true if the file exists. 19353955d011SMarcel MoolenaarThe file is searched for on the system search path (see 19363955d011SMarcel Moolenaar.Va .PATH ) . 19373955d011SMarcel Moolenaar.It Ic target 19383955d011SMarcel MoolenaarTakes a target name as an argument and evaluates to true if the target 19393955d011SMarcel Moolenaarhas been defined. 19403955d011SMarcel Moolenaar.It Ic commands 19413955d011SMarcel MoolenaarTakes a target name as an argument and evaluates to true if the target 19423955d011SMarcel Moolenaarhas been defined and has commands associated with it. 19433955d011SMarcel Moolenaar.El 19443955d011SMarcel Moolenaar.Pp 19453955d011SMarcel Moolenaar.Ar Expression 19463955d011SMarcel Moolenaarmay also be an arithmetic or string comparison. 19473955d011SMarcel MoolenaarVariable expansion is 1948956e45f6SSimon J. Gerratyperformed on both sides of the comparison, after which the numerical 19493955d011SMarcel Moolenaarvalues are compared. 19503955d011SMarcel MoolenaarA value is interpreted as hexadecimal if it is 19513955d011SMarcel Moolenaarpreceded by 0x, otherwise it is decimal; octal numbers are not supported. 19523955d011SMarcel MoolenaarThe standard C relational operators are all supported. 19533955d011SMarcel MoolenaarIf after 19543955d011SMarcel Moolenaarvariable expansion, either the left or right hand side of a 19553955d011SMarcel Moolenaar.Ql Ic == 19563955d011SMarcel Moolenaaror 19573955d011SMarcel Moolenaar.Ql Ic "!=" 1958956e45f6SSimon J. Gerratyoperator is not a numerical value, then 19593955d011SMarcel Moolenaarstring comparison is performed between the expanded 19603955d011SMarcel Moolenaarvariables. 19613955d011SMarcel MoolenaarIf no relational operator is given, it is assumed that the expanded 19622c3632d1SSimon J. Gerratyvariable is being compared against 0, or an empty string in the case 19633955d011SMarcel Moolenaarof a string comparison. 19643955d011SMarcel Moolenaar.Pp 19653955d011SMarcel MoolenaarWhen 19663955d011SMarcel Moolenaar.Nm 19673955d011SMarcel Moolenaaris evaluating one of these conditional expressions, and it encounters 19683955d011SMarcel Moolenaara (white-space separated) word it doesn't recognize, either the 19693955d011SMarcel Moolenaar.Dq make 19703955d011SMarcel Moolenaaror 19713955d011SMarcel Moolenaar.Dq defined 19723955d011SMarcel Moolenaarexpression is applied to it, depending on the form of the conditional. 19733955d011SMarcel MoolenaarIf the form is 19743955d011SMarcel Moolenaar.Ql Ic .ifdef , 19753955d011SMarcel Moolenaar.Ql Ic .ifndef , 19763955d011SMarcel Moolenaaror 19773955d011SMarcel Moolenaar.Ql Ic .if 19783955d011SMarcel Moolenaarthe 19793955d011SMarcel Moolenaar.Dq defined 19803955d011SMarcel Moolenaarexpression is applied. 19813955d011SMarcel MoolenaarSimilarly, if the form is 19823955d011SMarcel Moolenaar.Ql Ic .ifmake 19833955d011SMarcel Moolenaaror 1984494f7191SSimon J. Gerraty.Ql Ic .ifnmake , 1985494f7191SSimon J. Gerratythe 19863955d011SMarcel Moolenaar.Dq make 19873955d011SMarcel Moolenaarexpression is applied. 19883955d011SMarcel Moolenaar.Pp 19893955d011SMarcel MoolenaarIf the conditional evaluates to true the parsing of the makefile continues 19903955d011SMarcel Moolenaaras before. 19913955d011SMarcel MoolenaarIf it evaluates to false, the following lines are skipped. 19923955d011SMarcel MoolenaarIn both cases this continues until a 19933955d011SMarcel Moolenaar.Ql Ic .else 19943955d011SMarcel Moolenaaror 19953955d011SMarcel Moolenaar.Ql Ic .endif 19963955d011SMarcel Moolenaaris found. 19973955d011SMarcel Moolenaar.Pp 19983955d011SMarcel MoolenaarFor loops are typically used to apply a set of rules to a list of files. 19993955d011SMarcel MoolenaarThe syntax of a for loop is: 20003955d011SMarcel Moolenaar.Pp 20013955d011SMarcel Moolenaar.Bl -tag -compact -width Ds 20023955d011SMarcel Moolenaar.It Ic \&.for Ar variable Oo Ar variable ... Oc Ic in Ar expression 20032c3632d1SSimon J. Gerraty.It Aq make-lines 20043955d011SMarcel Moolenaar.It Ic \&.endfor 20053955d011SMarcel Moolenaar.El 20063955d011SMarcel Moolenaar.Pp 20073955d011SMarcel MoolenaarAfter the for 20083955d011SMarcel Moolenaar.Ic expression 20093955d011SMarcel Moolenaaris evaluated, it is split into words. 20103955d011SMarcel MoolenaarOn each iteration of the loop, one word is taken and assigned to each 20113955d011SMarcel Moolenaar.Ic variable , 20123955d011SMarcel Moolenaarin order, and these 20133955d011SMarcel Moolenaar.Ic variables 20143955d011SMarcel Moolenaarare substituted into the 20152c3632d1SSimon J. Gerraty.Ic make-lines 20163955d011SMarcel Moolenaarinside the body of the for loop. 20173955d011SMarcel MoolenaarThe number of words must come out even; that is, if there are three 20183955d011SMarcel Moolenaariteration variables, the number of words provided must be a multiple 20193955d011SMarcel Moolenaarof three. 20203955d011SMarcel Moolenaar.Sh COMMENTS 20213955d011SMarcel MoolenaarComments begin with a hash 20223955d011SMarcel Moolenaar.Pq Ql \&# 20233955d011SMarcel Moolenaarcharacter, anywhere but in a shell 20243955d011SMarcel Moolenaarcommand line, and continue to the end of an unescaped new line. 20253955d011SMarcel Moolenaar.Sh SPECIAL SOURCES (ATTRIBUTES) 20263955d011SMarcel Moolenaar.Bl -tag -width .IGNOREx 20273955d011SMarcel Moolenaar.It Ic .EXEC 20283955d011SMarcel MoolenaarTarget is never out of date, but always execute commands anyway. 20293955d011SMarcel Moolenaar.It Ic .IGNORE 20303955d011SMarcel MoolenaarIgnore any errors from the commands associated with this target, exactly 20313955d011SMarcel Moolenaaras if they all were preceded by a dash 20323955d011SMarcel Moolenaar.Pq Ql \- . 20333955d011SMarcel Moolenaar.\" .It Ic .INVISIBLE 20343955d011SMarcel Moolenaar.\" XXX 20353955d011SMarcel Moolenaar.\" .It Ic .JOIN 20363955d011SMarcel Moolenaar.\" XXX 20373955d011SMarcel Moolenaar.It Ic .MADE 20383955d011SMarcel MoolenaarMark all sources of this target as being up-to-date. 20393955d011SMarcel Moolenaar.It Ic .MAKE 20403955d011SMarcel MoolenaarExecute the commands associated with this target even if the 20413955d011SMarcel Moolenaar.Fl n 20423955d011SMarcel Moolenaaror 20433955d011SMarcel Moolenaar.Fl t 20443955d011SMarcel Moolenaaroptions were specified. 20453955d011SMarcel MoolenaarNormally used to mark recursive 20460dede8b0SSimon J. Gerraty.Nm Ns s . 20473955d011SMarcel Moolenaar.It Ic .META 20483955d011SMarcel MoolenaarCreate a meta file for the target, even if it is flagged as 20493955d011SMarcel Moolenaar.Ic .PHONY , 20503955d011SMarcel Moolenaar.Ic .MAKE , 20513955d011SMarcel Moolenaaror 20523955d011SMarcel Moolenaar.Ic .SPECIAL . 20533955d011SMarcel MoolenaarUsage in conjunction with 20543955d011SMarcel Moolenaar.Ic .MAKE 20553955d011SMarcel Moolenaaris the most likely case. 20563955d011SMarcel MoolenaarIn "meta" mode, the target is out-of-date if the meta file is missing. 20573955d011SMarcel Moolenaar.It Ic .NOMETA 20583955d011SMarcel MoolenaarDo not create a meta file for the target. 20593955d011SMarcel MoolenaarMeta files are also not created for 20603955d011SMarcel Moolenaar.Ic .PHONY , 20613955d011SMarcel Moolenaar.Ic .MAKE , 20623955d011SMarcel Moolenaaror 20633955d011SMarcel Moolenaar.Ic .SPECIAL 20643955d011SMarcel Moolenaartargets. 20653955d011SMarcel Moolenaar.It Ic .NOMETA_CMP 20663955d011SMarcel MoolenaarIgnore differences in commands when deciding if target is out of date. 20673955d011SMarcel MoolenaarThis is useful if the command contains a value which always changes. 20683955d011SMarcel MoolenaarIf the number of commands change, though, the target will still be out of date. 20691748de26SSimon J. GerratyThe same effect applies to any command line that uses the variable 20701748de26SSimon J. Gerraty.Va .OODATE , 20711748de26SSimon J. Gerratywhich can be used for that purpose even when not otherwise needed or desired: 20721748de26SSimon J. Gerraty.Bd -literal -offset indent 20731748de26SSimon J. Gerraty 20741748de26SSimon J. Gerratyskip-compare-for-some: 20751748de26SSimon J. Gerraty @echo this will be compared 20761748de26SSimon J. Gerraty @echo this will not ${.OODATE:M.NOMETA_CMP} 20771748de26SSimon J. Gerraty @echo this will also be compared 20781748de26SSimon J. Gerraty 20791748de26SSimon J. Gerraty.Ed 20801748de26SSimon J. GerratyThe 20811748de26SSimon J. Gerraty.Cm \&:M 20821748de26SSimon J. Gerratypattern suppresses any expansion of the unwanted variable. 20833955d011SMarcel Moolenaar.It Ic .NOPATH 20843955d011SMarcel MoolenaarDo not search for the target in the directories specified by 20853955d011SMarcel Moolenaar.Ic .PATH . 20863955d011SMarcel Moolenaar.It Ic .NOTMAIN 20873955d011SMarcel MoolenaarNormally 20883955d011SMarcel Moolenaar.Nm 20893955d011SMarcel Moolenaarselects the first target it encounters as the default target to be built 20903955d011SMarcel Moolenaarif no target was specified. 20913955d011SMarcel MoolenaarThis source prevents this target from being selected. 20923955d011SMarcel Moolenaar.It Ic .OPTIONAL 20933955d011SMarcel MoolenaarIf a target is marked with this attribute and 20943955d011SMarcel Moolenaar.Nm 20953955d011SMarcel Moolenaarcan't figure out how to create it, it will ignore this fact and assume 20963955d011SMarcel Moolenaarthe file isn't needed or already exists. 20973955d011SMarcel Moolenaar.It Ic .PHONY 20983955d011SMarcel MoolenaarThe target does not 20993955d011SMarcel Moolenaarcorrespond to an actual file; it is always considered to be out of date, 21003955d011SMarcel Moolenaarand will not be created with the 21013955d011SMarcel Moolenaar.Fl t 21023955d011SMarcel Moolenaaroption. 21033955d011SMarcel MoolenaarSuffix-transformation rules are not applied to 21043955d011SMarcel Moolenaar.Ic .PHONY 21053955d011SMarcel Moolenaartargets. 21063955d011SMarcel Moolenaar.It Ic .PRECIOUS 21073955d011SMarcel MoolenaarWhen 21083955d011SMarcel Moolenaar.Nm 21093955d011SMarcel Moolenaaris interrupted, it normally removes any partially made targets. 21103955d011SMarcel MoolenaarThis source prevents the target from being removed. 21113955d011SMarcel Moolenaar.It Ic .RECURSIVE 21123955d011SMarcel MoolenaarSynonym for 21133955d011SMarcel Moolenaar.Ic .MAKE . 21143955d011SMarcel Moolenaar.It Ic .SILENT 21153955d011SMarcel MoolenaarDo not echo any of the commands associated with this target, exactly 21163955d011SMarcel Moolenaaras if they all were preceded by an at sign 21173955d011SMarcel Moolenaar.Pq Ql @ . 21183955d011SMarcel Moolenaar.It Ic .USE 21193955d011SMarcel MoolenaarTurn the target into 21203955d011SMarcel Moolenaar.Nm Ns 's 21213955d011SMarcel Moolenaarversion of a macro. 21223955d011SMarcel MoolenaarWhen the target is used as a source for another target, the other target 21233955d011SMarcel Moolenaaracquires the commands, sources, and attributes (except for 21243955d011SMarcel Moolenaar.Ic .USE ) 21253955d011SMarcel Moolenaarof the 21263955d011SMarcel Moolenaarsource. 21273955d011SMarcel MoolenaarIf the target already has commands, the 21283955d011SMarcel Moolenaar.Ic .USE 21293955d011SMarcel Moolenaartarget's commands are appended 21303955d011SMarcel Moolenaarto them. 21313955d011SMarcel Moolenaar.It Ic .USEBEFORE 21323955d011SMarcel MoolenaarExactly like 21333955d011SMarcel Moolenaar.Ic .USE , 21343955d011SMarcel Moolenaarbut prepend the 21353955d011SMarcel Moolenaar.Ic .USEBEFORE 21363955d011SMarcel Moolenaartarget commands to the target. 21373955d011SMarcel Moolenaar.It Ic .WAIT 21383955d011SMarcel MoolenaarIf 21393955d011SMarcel Moolenaar.Ic .WAIT 21403955d011SMarcel Moolenaarappears in a dependency line, the sources that precede it are 21413955d011SMarcel Moolenaarmade before the sources that succeed it in the line. 21423955d011SMarcel MoolenaarSince the dependents of files are not made until the file itself 21433955d011SMarcel Moolenaarcould be made, this also stops the dependents being built unless they 21443955d011SMarcel Moolenaarare needed for another branch of the dependency tree. 21453955d011SMarcel MoolenaarSo given: 21463955d011SMarcel Moolenaar.Bd -literal 21473955d011SMarcel Moolenaarx: a .WAIT b 21483955d011SMarcel Moolenaar echo x 21493955d011SMarcel Moolenaara: 21503955d011SMarcel Moolenaar echo a 21513955d011SMarcel Moolenaarb: b1 21523955d011SMarcel Moolenaar echo b 21533955d011SMarcel Moolenaarb1: 21543955d011SMarcel Moolenaar echo b1 21553955d011SMarcel Moolenaar 21563955d011SMarcel Moolenaar.Ed 21573955d011SMarcel Moolenaarthe output is always 21583955d011SMarcel Moolenaar.Ql a , 21593955d011SMarcel Moolenaar.Ql b1 , 21603955d011SMarcel Moolenaar.Ql b , 21613955d011SMarcel Moolenaar.Ql x . 21623955d011SMarcel Moolenaar.br 21633955d011SMarcel MoolenaarThe ordering imposed by 21643955d011SMarcel Moolenaar.Ic .WAIT 21653955d011SMarcel Moolenaaris only relevant for parallel makes. 21663955d011SMarcel Moolenaar.El 21673955d011SMarcel Moolenaar.Sh SPECIAL TARGETS 21683955d011SMarcel MoolenaarSpecial targets may not be included with other targets, i.e. they must be 21693955d011SMarcel Moolenaarthe only target specified. 21703955d011SMarcel Moolenaar.Bl -tag -width .BEGINx 21713955d011SMarcel Moolenaar.It Ic .BEGIN 21723955d011SMarcel MoolenaarAny command lines attached to this target are executed before anything 21733955d011SMarcel Moolenaarelse is done. 21743955d011SMarcel Moolenaar.It Ic .DEFAULT 21753955d011SMarcel MoolenaarThis is sort of a 21763955d011SMarcel Moolenaar.Ic .USE 21773955d011SMarcel Moolenaarrule for any target (that was used only as a 21783955d011SMarcel Moolenaarsource) that 21793955d011SMarcel Moolenaar.Nm 21803955d011SMarcel Moolenaarcan't figure out any other way to create. 21813955d011SMarcel MoolenaarOnly the shell script is used. 21823955d011SMarcel MoolenaarThe 21833955d011SMarcel Moolenaar.Ic .IMPSRC 21843955d011SMarcel Moolenaarvariable of a target that inherits 21853955d011SMarcel Moolenaar.Ic .DEFAULT Ns 's 21863955d011SMarcel Moolenaarcommands is set 21873955d011SMarcel Moolenaarto the target's own name. 218845447996SSimon J. Gerraty.It Ic .DELETE_ON_ERROR 218945447996SSimon J. GerratyIf this target is present in the makefile, it globally causes make to 219045447996SSimon J. Gerratydelete targets whose commands fail. 219145447996SSimon J. Gerraty(By default, only targets whose commands are interrupted during 219245447996SSimon J. Gerratyexecution are deleted. 219345447996SSimon J. GerratyThis is the historical behavior.) 219445447996SSimon J. GerratyThis setting can be used to help prevent half-finished or malformed 219545447996SSimon J. Gerratytargets from being left around and corrupting future rebuilds. 21963955d011SMarcel Moolenaar.It Ic .END 21973955d011SMarcel MoolenaarAny command lines attached to this target are executed after everything 21983955d011SMarcel Moolenaarelse is done. 21993955d011SMarcel Moolenaar.It Ic .ERROR 22003955d011SMarcel MoolenaarAny command lines attached to this target are executed when another target fails. 22013955d011SMarcel MoolenaarThe 22023955d011SMarcel Moolenaar.Ic .ERROR_TARGET 22033955d011SMarcel Moolenaarvariable is set to the target that failed. 22043955d011SMarcel MoolenaarSee also 22053955d011SMarcel Moolenaar.Ic MAKE_PRINT_VAR_ON_ERROR . 22063955d011SMarcel Moolenaar.It Ic .IGNORE 22073955d011SMarcel MoolenaarMark each of the sources with the 22083955d011SMarcel Moolenaar.Ic .IGNORE 22093955d011SMarcel Moolenaarattribute. 22103955d011SMarcel MoolenaarIf no sources are specified, this is the equivalent of specifying the 22113955d011SMarcel Moolenaar.Fl i 22123955d011SMarcel Moolenaaroption. 22133955d011SMarcel Moolenaar.It Ic .INTERRUPT 22143955d011SMarcel MoolenaarIf 22153955d011SMarcel Moolenaar.Nm 22163955d011SMarcel Moolenaaris interrupted, the commands for this target will be executed. 22173955d011SMarcel Moolenaar.It Ic .MAIN 22183955d011SMarcel MoolenaarIf no target is specified when 22193955d011SMarcel Moolenaar.Nm 22203955d011SMarcel Moolenaaris invoked, this target will be built. 22213955d011SMarcel Moolenaar.It Ic .MAKEFLAGS 22223955d011SMarcel MoolenaarThis target provides a way to specify flags for 22233955d011SMarcel Moolenaar.Nm 22243955d011SMarcel Moolenaarwhen the makefile is used. 22253955d011SMarcel MoolenaarThe flags are as if typed to the shell, though the 22263955d011SMarcel Moolenaar.Fl f 22273955d011SMarcel Moolenaaroption will have 22283955d011SMarcel Moolenaarno effect. 22293955d011SMarcel Moolenaar.\" XXX: NOT YET!!!! 22303955d011SMarcel Moolenaar.\" .It Ic .NOTPARALLEL 22313955d011SMarcel Moolenaar.\" The named targets are executed in non parallel mode. 22323955d011SMarcel Moolenaar.\" If no targets are 22333955d011SMarcel Moolenaar.\" specified, then all targets are executed in non parallel mode. 22343955d011SMarcel Moolenaar.It Ic .NOPATH 22353955d011SMarcel MoolenaarApply the 22363955d011SMarcel Moolenaar.Ic .NOPATH 22373955d011SMarcel Moolenaarattribute to any specified sources. 22383955d011SMarcel Moolenaar.It Ic .NOTPARALLEL 22393955d011SMarcel MoolenaarDisable parallel mode. 22403955d011SMarcel Moolenaar.It Ic .NO_PARALLEL 22413955d011SMarcel MoolenaarSynonym for 22423955d011SMarcel Moolenaar.Ic .NOTPARALLEL , 22433955d011SMarcel Moolenaarfor compatibility with other pmake variants. 2244128a4105SSimon J. Gerraty.It Ic .OBJDIR 2245128a4105SSimon J. GerratyThe source is a new value for 2246128a4105SSimon J. Gerraty.Ql Va .OBJDIR . 2247128a4105SSimon J. GerratyIf it exists, 2248128a4105SSimon J. Gerraty.Nm 2249128a4105SSimon J. Gerratywill 2250128a4105SSimon J. Gerraty.Xr chdir 2 2251128a4105SSimon J. Gerratyto it and update the value of 2252128a4105SSimon J. Gerraty.Ql Va .OBJDIR . 22533955d011SMarcel Moolenaar.It Ic .ORDER 22543955d011SMarcel MoolenaarThe named targets are made in sequence. 22553955d011SMarcel MoolenaarThis ordering does not add targets to the list of targets to be made. 22563955d011SMarcel MoolenaarSince the dependents of a target do not get built until the target itself 22573955d011SMarcel Moolenaarcould be built, unless 22583955d011SMarcel Moolenaar.Ql a 22593955d011SMarcel Moolenaaris built by another part of the dependency graph, 22603955d011SMarcel Moolenaarthe following is a dependency loop: 22613955d011SMarcel Moolenaar.Bd -literal 22623955d011SMarcel Moolenaar\&.ORDER: b a 22633955d011SMarcel Moolenaarb: a 22643955d011SMarcel Moolenaar.Ed 22653955d011SMarcel Moolenaar.Pp 22663955d011SMarcel MoolenaarThe ordering imposed by 22673955d011SMarcel Moolenaar.Ic .ORDER 22683955d011SMarcel Moolenaaris only relevant for parallel makes. 22693955d011SMarcel Moolenaar.\" XXX: NOT YET!!!! 22703955d011SMarcel Moolenaar.\" .It Ic .PARALLEL 22713955d011SMarcel Moolenaar.\" The named targets are executed in parallel mode. 22723955d011SMarcel Moolenaar.\" If no targets are 22733955d011SMarcel Moolenaar.\" specified, then all targets are executed in parallel mode. 22743955d011SMarcel Moolenaar.It Ic .PATH 22753955d011SMarcel MoolenaarThe sources are directories which are to be searched for files not 22763955d011SMarcel Moolenaarfound in the current directory. 22773955d011SMarcel MoolenaarIf no sources are specified, any previously specified directories are 22783955d011SMarcel Moolenaardeleted. 22793955d011SMarcel MoolenaarIf the source is the special 22803955d011SMarcel Moolenaar.Ic .DOTLAST 22813955d011SMarcel Moolenaartarget, then the current working 22823955d011SMarcel Moolenaardirectory is searched last. 22831bbe5942SSimon J. Gerraty.It Ic .PATH. Ns Va suffix 22841bbe5942SSimon J. GerratyLike 22851bbe5942SSimon J. Gerraty.Ic .PATH 22861bbe5942SSimon J. Gerratybut applies only to files with a particular suffix. 22871bbe5942SSimon J. GerratyThe suffix must have been previously declared with 22881bbe5942SSimon J. Gerraty.Ic .SUFFIXES . 22893955d011SMarcel Moolenaar.It Ic .PHONY 22903955d011SMarcel MoolenaarApply the 22913955d011SMarcel Moolenaar.Ic .PHONY 22923955d011SMarcel Moolenaarattribute to any specified sources. 22933955d011SMarcel Moolenaar.It Ic .PRECIOUS 22943955d011SMarcel MoolenaarApply the 22953955d011SMarcel Moolenaar.Ic .PRECIOUS 22963955d011SMarcel Moolenaarattribute to any specified sources. 22973955d011SMarcel MoolenaarIf no sources are specified, the 22983955d011SMarcel Moolenaar.Ic .PRECIOUS 22993955d011SMarcel Moolenaarattribute is applied to every 23003955d011SMarcel Moolenaartarget in the file. 23013955d011SMarcel Moolenaar.It Ic .SHELL 23023955d011SMarcel MoolenaarSets the shell that 23033955d011SMarcel Moolenaar.Nm 23043955d011SMarcel Moolenaarwill use to execute commands. 23053955d011SMarcel MoolenaarThe sources are a set of 23063955d011SMarcel Moolenaar.Ar field=value 23073955d011SMarcel Moolenaarpairs. 23083955d011SMarcel Moolenaar.Bl -tag -width hasErrCtls 23093955d011SMarcel Moolenaar.It Ar name 2310be19d90bSSimon J. GerratyThis is the minimal specification, used to select one of the built-in 23113955d011SMarcel Moolenaarshell specs; 23123955d011SMarcel Moolenaar.Ar sh , 23133955d011SMarcel Moolenaar.Ar ksh , 23143955d011SMarcel Moolenaarand 23153955d011SMarcel Moolenaar.Ar csh . 23163955d011SMarcel Moolenaar.It Ar path 23173955d011SMarcel MoolenaarSpecifies the path to the shell. 23183955d011SMarcel Moolenaar.It Ar hasErrCtl 23193955d011SMarcel MoolenaarIndicates whether the shell supports exit on error. 23203955d011SMarcel Moolenaar.It Ar check 23213955d011SMarcel MoolenaarThe command to turn on error checking. 23223955d011SMarcel Moolenaar.It Ar ignore 23233955d011SMarcel MoolenaarThe command to disable error checking. 23243955d011SMarcel Moolenaar.It Ar echo 23253955d011SMarcel MoolenaarThe command to turn on echoing of commands executed. 23263955d011SMarcel Moolenaar.It Ar quiet 23273955d011SMarcel MoolenaarThe command to turn off echoing of commands executed. 23283955d011SMarcel Moolenaar.It Ar filter 23293955d011SMarcel MoolenaarThe output to filter after issuing the 23303955d011SMarcel Moolenaar.Ar quiet 23313955d011SMarcel Moolenaarcommand. 23323955d011SMarcel MoolenaarIt is typically identical to 23333955d011SMarcel Moolenaar.Ar quiet . 23343955d011SMarcel Moolenaar.It Ar errFlag 23353955d011SMarcel MoolenaarThe flag to pass the shell to enable error checking. 23363955d011SMarcel Moolenaar.It Ar echoFlag 23373955d011SMarcel MoolenaarThe flag to pass the shell to enable command echoing. 23383955d011SMarcel Moolenaar.It Ar newline 23393955d011SMarcel MoolenaarThe string literal to pass the shell that results in a single newline 23403955d011SMarcel Moolenaarcharacter when used outside of any quoting characters. 23413955d011SMarcel Moolenaar.El 23423955d011SMarcel MoolenaarExample: 23433955d011SMarcel Moolenaar.Bd -literal 23443955d011SMarcel Moolenaar\&.SHELL: name=ksh path=/bin/ksh hasErrCtl=true \e 23453955d011SMarcel Moolenaar check="set \-e" ignore="set +e" \e 23463955d011SMarcel Moolenaar echo="set \-v" quiet="set +v" filter="set +v" \e 23473955d011SMarcel Moolenaar echoFlag=v errFlag=e newline="'\en'" 23483955d011SMarcel Moolenaar.Ed 23493955d011SMarcel Moolenaar.It Ic .SILENT 23503955d011SMarcel MoolenaarApply the 23513955d011SMarcel Moolenaar.Ic .SILENT 23523955d011SMarcel Moolenaarattribute to any specified sources. 23533955d011SMarcel MoolenaarIf no sources are specified, the 23543955d011SMarcel Moolenaar.Ic .SILENT 23553955d011SMarcel Moolenaarattribute is applied to every 23563955d011SMarcel Moolenaarcommand in the file. 23571748de26SSimon J. Gerraty.It Ic .STALE 23581748de26SSimon J. GerratyThis target gets run when a dependency file contains stale entries, having 23591748de26SSimon J. Gerraty.Va .ALLSRC 23601748de26SSimon J. Gerratyset to the name of that dependency file. 23613955d011SMarcel Moolenaar.It Ic .SUFFIXES 23623955d011SMarcel MoolenaarEach source specifies a suffix to 23633955d011SMarcel Moolenaar.Nm . 23643955d011SMarcel MoolenaarIf no sources are specified, any previously specified suffixes are deleted. 23653955d011SMarcel MoolenaarIt allows the creation of suffix-transformation rules. 23663955d011SMarcel Moolenaar.Pp 23673955d011SMarcel MoolenaarExample: 23683955d011SMarcel Moolenaar.Bd -literal 23693955d011SMarcel Moolenaar\&.SUFFIXES: .o 23703955d011SMarcel Moolenaar\&.c.o: 23713955d011SMarcel Moolenaar cc \-o ${.TARGET} \-c ${.IMPSRC} 23723955d011SMarcel Moolenaar.Ed 23733955d011SMarcel Moolenaar.El 23743955d011SMarcel Moolenaar.Sh ENVIRONMENT 23753955d011SMarcel Moolenaar.Nm 23763955d011SMarcel Moolenaaruses the following environment variables, if they exist: 23773955d011SMarcel Moolenaar.Ev MACHINE , 23783955d011SMarcel Moolenaar.Ev MACHINE_ARCH , 23793955d011SMarcel Moolenaar.Ev MAKE , 23803955d011SMarcel Moolenaar.Ev MAKEFLAGS , 23813955d011SMarcel Moolenaar.Ev MAKEOBJDIR , 23823955d011SMarcel Moolenaar.Ev MAKEOBJDIRPREFIX , 23833955d011SMarcel Moolenaar.Ev MAKESYSPATH , 23843955d011SMarcel Moolenaar.Ev PWD , 23853955d011SMarcel Moolenaarand 23863955d011SMarcel Moolenaar.Ev TMPDIR . 23873955d011SMarcel Moolenaar.Pp 23883955d011SMarcel Moolenaar.Ev MAKEOBJDIRPREFIX 23893955d011SMarcel Moolenaarand 23903955d011SMarcel Moolenaar.Ev MAKEOBJDIR 23913955d011SMarcel Moolenaarmay only be set in the environment or on the command line to 23923955d011SMarcel Moolenaar.Nm 23933955d011SMarcel Moolenaarand not as makefile variables; 23943955d011SMarcel Moolenaarsee the description of 23953955d011SMarcel Moolenaar.Ql Va .OBJDIR 23963955d011SMarcel Moolenaarfor more details. 23973955d011SMarcel Moolenaar.Sh FILES 23983955d011SMarcel Moolenaar.Bl -tag -width /usr/share/mk -compact 23993955d011SMarcel Moolenaar.It .depend 24003955d011SMarcel Moolenaarlist of dependencies 24013955d011SMarcel Moolenaar.It Makefile 24023955d011SMarcel Moolenaarlist of dependencies 24033955d011SMarcel Moolenaar.It makefile 24043955d011SMarcel Moolenaarlist of dependencies 24053955d011SMarcel Moolenaar.It sys.mk 24063955d011SMarcel Moolenaarsystem makefile 24073955d011SMarcel Moolenaar.It /usr/share/mk 24083955d011SMarcel Moolenaarsystem makefile directory 24093955d011SMarcel Moolenaar.El 24103955d011SMarcel Moolenaar.Sh COMPATIBILITY 2411db29cad8SSimon J. GerratyThe basic make syntax is compatible between different versions of make; 24123955d011SMarcel Moolenaarhowever the special variables, variable modifiers and conditionals are not. 2413db29cad8SSimon J. Gerraty.Ss Older versions 2414db29cad8SSimon J. GerratyAn incomplete list of changes in older versions of 2415db29cad8SSimon J. Gerraty.Nm : 24163955d011SMarcel Moolenaar.Pp 24173955d011SMarcel MoolenaarThe way that .for loop variables are substituted changed after 24183955d011SMarcel MoolenaarNetBSD 5.0 24193955d011SMarcel Moolenaarso that they still appear to be variable expansions. 24203955d011SMarcel MoolenaarIn particular this stops them being treated as syntax, and removes some 24213955d011SMarcel Moolenaarobscure problems using them in .if statements. 2422db29cad8SSimon J. Gerraty.Pp 2423db29cad8SSimon J. GerratyThe way that parallel makes are scheduled changed in 2424db29cad8SSimon J. GerratyNetBSD 4.0 2425db29cad8SSimon J. Gerratyso that .ORDER and .WAIT apply recursively to the dependent nodes. 2426db29cad8SSimon J. GerratyThe algorithms used may change again in the future. 2427db29cad8SSimon J. Gerraty.Ss Other make dialects 2428db29cad8SSimon J. GerratyOther make dialects (GNU make, SVR4 make, POSIX make, etc.) do not 2429db29cad8SSimon J. Gerratysupport most of the features of 2430db29cad8SSimon J. Gerraty.Nm 2431db29cad8SSimon J. Gerratyas described in this manual. 2432db29cad8SSimon J. GerratyMost notably: 2433db29cad8SSimon J. Gerraty.Bl -bullet -offset indent 2434db29cad8SSimon J. Gerraty.It 2435db29cad8SSimon J. GerratyThe 2436db29cad8SSimon J. Gerraty.Ic .WAIT 2437db29cad8SSimon J. Gerratyand 2438db29cad8SSimon J. Gerraty.Ic .ORDER 2439db29cad8SSimon J. Gerratydeclarations and most functionality pertaining to parallelization. 2440db29cad8SSimon J. Gerraty(GNU make supports parallelization but lacks these features needed to 2441db29cad8SSimon J. Gerratycontrol it effectively.) 2442db29cad8SSimon J. Gerraty.It 2443db29cad8SSimon J. GerratyDirectives, including for loops and conditionals and most of the 2444db29cad8SSimon J. Gerratyforms of include files. 2445db29cad8SSimon J. Gerraty(GNU make has its own incompatible and less powerful syntax for 2446db29cad8SSimon J. Gerratyconditionals.) 2447db29cad8SSimon J. Gerraty.It 2448db29cad8SSimon J. GerratyAll built-in variables that begin with a dot. 2449db29cad8SSimon J. Gerraty.It 2450db29cad8SSimon J. GerratyMost of the special sources and targets that begin with a dot, 2451db29cad8SSimon J. Gerratywith the notable exception of 2452db29cad8SSimon J. Gerraty.Ic .PHONY , 2453db29cad8SSimon J. Gerraty.Ic .PRECIOUS , 2454db29cad8SSimon J. Gerratyand 2455db29cad8SSimon J. Gerraty.Ic .SUFFIXES . 2456db29cad8SSimon J. Gerraty.It 2457db29cad8SSimon J. GerratyVariable modifiers, except for the 2458db29cad8SSimon J. Gerraty.Dl :old=new 2459db29cad8SSimon J. Gerratystring substitution, which does not portably support globbing with 2460db29cad8SSimon J. Gerraty.Ql % 2461db29cad8SSimon J. Gerratyand historically only works on declared suffixes. 2462db29cad8SSimon J. Gerraty.It 2463db29cad8SSimon J. GerratyThe 2464db29cad8SSimon J. Gerraty.Ic $> 2465db29cad8SSimon J. Gerratyvariable even in its short form; most makes support this functionality 2466db29cad8SSimon J. Gerratybut its name varies. 2467db29cad8SSimon J. Gerraty.El 2468db29cad8SSimon J. Gerraty.Pp 2469db29cad8SSimon J. GerratySome features are somewhat more portable, such as assignment with 2470db29cad8SSimon J. Gerraty.Ic += , 2471db29cad8SSimon J. Gerraty.Ic ?= , 2472db29cad8SSimon J. Gerratyand 2473db29cad8SSimon J. Gerraty.Ic != . 2474db29cad8SSimon J. GerratyThe 2475db29cad8SSimon J. Gerraty.Ic .PATH 2476db29cad8SSimon J. Gerratyfunctionality is based on an older feature 2477db29cad8SSimon J. Gerraty.Ic VPATH 2478db29cad8SSimon J. Gerratyfound in GNU make and many versions of SVR4 make; however, 2479db29cad8SSimon J. Gerratyhistorically its behavior is too ill-defined (and too buggy) to rely 2480db29cad8SSimon J. Gerratyupon. 2481db29cad8SSimon J. Gerraty.Pp 2482db29cad8SSimon J. GerratyThe 2483db29cad8SSimon J. Gerraty.Ic $@ 2484db29cad8SSimon J. Gerratyand 2485db29cad8SSimon J. Gerraty.Ic $< 2486db29cad8SSimon J. Gerratyvariables are more or less universally portable, as is the 2487db29cad8SSimon J. Gerraty.Ic $(MAKE) 2488db29cad8SSimon J. Gerratyvariable. 2489db29cad8SSimon J. GerratyBasic use of suffix rules (for files only in the current directory, 2490db29cad8SSimon J. Gerratynot trying to chain transformations together, etc.) is also reasonably 2491db29cad8SSimon J. Gerratyportable. 24923955d011SMarcel Moolenaar.Sh SEE ALSO 24933955d011SMarcel Moolenaar.Xr mkdep 1 24943955d011SMarcel Moolenaar.Sh HISTORY 24953955d011SMarcel Moolenaar.Nm 24963955d011SMarcel Moolenaaris derived from NetBSD 24973955d011SMarcel Moolenaar.Xr make 1 . 24983955d011SMarcel MoolenaarIt uses autoconf to facilitate portability to other platforms. 249993036677SSimon J. Gerraty.Pp 250093036677SSimon J. GerratyA 250193036677SSimon J. Gerratymake 250293036677SSimon J. Gerratycommand appeared in 250393036677SSimon J. Gerraty.At v7 . 250493036677SSimon J. GerratyThis 250593036677SSimon J. Gerratymake 250693036677SSimon J. Gerratyimplementation is based on Adam De Boor's pmake program which was written 250793036677SSimon J. Gerratyfor Sprite at Berkeley. 250893036677SSimon J. GerratyIt was designed to be a parallel distributed make running jobs on different 250993036677SSimon J. Gerratymachines using a daemon called 251093036677SSimon J. Gerraty.Dq customs . 251151ee2c1cSSimon J. Gerraty.Pp 251251ee2c1cSSimon J. GerratyHistorically the target/dependency 251351ee2c1cSSimon J. Gerraty.Dq FRC 251451ee2c1cSSimon J. Gerratyhas been used to FoRCe rebuilding (since the target/dependency 251551ee2c1cSSimon J. Gerratydoes not exist... unless someone creates an 251651ee2c1cSSimon J. Gerraty.Dq FRC 251751ee2c1cSSimon J. Gerratyfile). 251893036677SSimon J. Gerraty.Sh BUGS 251993036677SSimon J. GerratyThe 252093036677SSimon J. Gerratymake 2521ef0b2538SSimon J. Gerratysyntax is difficult to parse without actually acting on the data. 2522ef0b2538SSimon J. GerratyFor instance, finding the end of a variable's use should involve scanning 2523ef0b2538SSimon J. Gerratyeach of the modifiers, using the correct terminator for each field. 252493036677SSimon J. GerratyIn many places 252593036677SSimon J. Gerratymake 252693036677SSimon J. Gerratyjust counts {} and () in order to find the end of a variable expansion. 252793036677SSimon J. Gerraty.Pp 252893036677SSimon J. GerratyThere is no way of escaping a space character in a filename. 2529