1.\" $NetBSD: make.1,v 1.226 2013/11/07 18:50:46 dholland Exp $ 2.\" 3.\" Copyright (c) 1990, 1993 4.\" The Regents of the University of California. All rights reserved. 5.\" 6.\" Redistribution and use in source and binary forms, with or without 7.\" modification, are permitted provided that the following conditions 8.\" are met: 9.\" 1. Redistributions of source code must retain the above copyright 10.\" notice, this list of conditions and the following disclaimer. 11.\" 2. Redistributions in binary form must reproduce the above copyright 12.\" notice, this list of conditions and the following disclaimer in the 13.\" documentation and/or other materials provided with the distribution. 14.\" 3. Neither the name of the University nor the names of its contributors 15.\" may be used to endorse or promote products derived from this software 16.\" without specific prior written permission. 17.\" 18.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 19.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 22.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28.\" SUCH DAMAGE. 29.\" 30.\" from: @(#)make.1 8.4 (Berkeley) 3/19/94 31.\" 32.Dd October 25, 2013 33.Dt MAKE 1 34.Os 35.Sh NAME 36.Nm bmake 37.Nd maintain program dependencies 38.Sh SYNOPSIS 39.Nm 40.Op Fl BeikNnqrstWwX 41.Op Fl C Ar directory 42.Op Fl D Ar variable 43.Op Fl d Ar flags 44.Op Fl f Ar makefile 45.Op Fl I Ar directory 46.Op Fl J Ar private 47.Op Fl j Ar max_jobs 48.Op Fl m Ar directory 49.Op Fl T Ar file 50.Op Fl V Ar variable 51.Op Ar variable=value 52.Op Ar target ... 53.Sh DESCRIPTION 54.Nm 55is a program designed to simplify the maintenance of other programs. 56Its input is a list of specifications as to the files upon which programs 57and other files depend. 58If no 59.Fl f Ar makefile 60makefile option is given, 61.Nm 62will try to open 63.Ql Pa makefile 64then 65.Ql Pa Makefile 66in order to find the specifications. 67If the file 68.Ql Pa .depend 69exists, it is read (see 70.Xr mkdep 1 ) . 71.Pp 72This manual page is intended as a reference document only. 73For a more thorough description of 74.Nm 75and makefiles, please refer to 76.%T "PMake \- A Tutorial" . 77.Pp 78.Nm 79will prepend the contents of the 80.Va MAKEFLAGS 81environment variable to the command line arguments before parsing them. 82.Pp 83The options are as follows: 84.Bl -tag -width Ds 85.It Fl B 86Try to be backwards compatible by executing a single shell per command and 87by executing the commands to make the sources of a dependency line in sequence. 88.It Fl C Ar directory 89Change to 90.Ar directory 91before reading the makefiles or doing anything else. 92If multiple 93.Fl C 94options are specified, each is interpreted relative to the previous one: 95.Fl C Pa / Fl C Pa etc 96is equivalent to 97.Fl C Pa /etc . 98.It Fl D Ar variable 99Define 100.Ar variable 101to be 1, in the global context. 102.It Fl d Ar [-]flags 103Turn on debugging, and specify which portions of 104.Nm 105are to print debugging information. 106Unless the flags are preceded by 107.Ql \- 108they are added to the 109.Va MAKEFLAGS 110environment variable and will be processed by any child make processes. 111By default, debugging information is printed to standard error, 112but this can be changed using the 113.Ar F 114debugging flag. 115The debugging output is always unbuffered; in addition, if debugging 116is enabled but debugging output is not directed to standard output, 117then the standard output is line buffered. 118.Ar Flags 119is one or more of the following: 120.Bl -tag -width Ds 121.It Ar A 122Print all possible debugging information; 123equivalent to specifying all of the debugging flags. 124.It Ar a 125Print debugging information about archive searching and caching. 126.It Ar C 127Print debugging information about current working directory. 128.It Ar c 129Print debugging information about conditional evaluation. 130.It Ar d 131Print debugging information about directory searching and caching. 132.It Ar e 133Print debugging information about failed commands and targets. 134.It Ar F Ns Oo Sy \&+ Oc Ns Ar filename 135Specify where debugging output is written. 136This must be the last flag, because it consumes the remainder of 137the argument. 138If the character immediately after the 139.Ql F 140flag is 141.Ql \&+ , 142then the file will be opened in append mode; 143otherwise the file will be overwritten. 144If the file name is 145.Ql stdout 146or 147.Ql stderr 148then debugging output will be written to the 149standard output or standard error output file descriptors respectively 150(and the 151.Ql \&+ 152option has no effect). 153Otherwise, the output will be written to the named file. 154If the file name ends 155.Ql .%d 156then the 157.Ql %d 158is replaced by the pid. 159.It Ar f 160Print debugging information about loop evaluation. 161.It Ar "g1" 162Print the input graph before making anything. 163.It Ar "g2" 164Print the input graph after making everything, or before exiting 165on error. 166.It Ar "g3" 167Print the input graph before exiting on error. 168.It Ar j 169Print debugging information about running multiple shells. 170.It Ar l 171Print commands in Makefiles regardless of whether or not they are prefixed by 172.Ql @ 173or other "quiet" flags. 174Also known as "loud" behavior. 175.It Ar M 176Print debugging information about "meta" mode decisions about targets. 177.It Ar m 178Print debugging information about making targets, including modification 179dates. 180.It Ar n 181Don't delete the temporary command scripts created when running commands. 182These temporary scripts are created in the directory 183referred to by the 184.Ev TMPDIR 185environment variable, or in 186.Pa /tmp 187if 188.Ev TMPDIR 189is unset or set to the empty string. 190The temporary scripts are created by 191.Xr mkstemp 3 , 192and have names of the form 193.Pa makeXXXXXX . 194.Em NOTE : 195This can create many files in 196.Ev TMPDIR 197or 198.Pa /tmp , 199so use with care. 200.It Ar p 201Print debugging information about makefile parsing. 202.It Ar s 203Print debugging information about suffix-transformation rules. 204.It Ar t 205Print debugging information about target list maintenance. 206.It Ar V 207Force the 208.Fl V 209option to print raw values of variables. 210.It Ar v 211Print debugging information about variable assignment. 212.It Ar w 213Print entering and leaving directory messages, pre and post processing. 214.It Ar x 215Run shell commands with 216.Fl x 217so the actual commands are printed as they are executed. 218.El 219.It Fl e 220Specify that environment variables override macro assignments within 221makefiles. 222.It Fl f Ar makefile 223Specify a makefile to read instead of the default 224.Ql Pa makefile . 225If 226.Ar makefile 227is 228.Ql Fl , 229standard input is read. 230Multiple makefiles may be specified, and are read in the order specified. 231.It Fl I Ar directory 232Specify a directory in which to search for makefiles and included makefiles. 233The system makefile directory (or directories, see the 234.Fl m 235option) is automatically included as part of this list. 236.It Fl i 237Ignore non-zero exit of shell commands in the makefile. 238Equivalent to specifying 239.Ql Fl 240before each command line in the makefile. 241.It Fl J Ar private 242This option should 243.Em not 244be specified by the user. 245.Pp 246When the 247.Ar j 248option is in use in a recursive build, this option is passed by a make 249to child makes to allow all the make processes in the build to 250cooperate to avoid overloading the system. 251.It Fl j Ar max_jobs 252Specify the maximum number of jobs that 253.Nm 254may have running at any one time. 255The value is saved in 256.Va .MAKE.JOBS . 257Turns compatibility mode off, unless the 258.Ar B 259flag is also specified. 260When compatibility mode is off, all commands associated with a 261target are executed in a single shell invocation as opposed to the 262traditional one shell invocation per line. 263This can break traditional scripts which change directories on each 264command invocation and then expect to start with a fresh environment 265on the next line. 266It is more efficient to correct the scripts rather than turn backwards 267compatibility on. 268.It Fl k 269Continue processing after errors are encountered, but only on those targets 270that do not depend on the target whose creation caused the error. 271.It Fl m Ar directory 272Specify a directory in which to search for sys.mk and makefiles included 273via the 274.Ao Ar file Ac Ns -style 275include statement. 276The 277.Fl m 278option can be used multiple times to form a search path. 279This path will override the default system include path: /usr/share/mk. 280Furthermore the system include path will be appended to the search path used 281for 282.Qo Ar file Qc Ns -style 283include statements (see the 284.Fl I 285option). 286.Pp 287If a file or directory name in the 288.Fl m 289argument (or the 290.Ev MAKESYSPATH 291environment variable) starts with the string 292.Qq \&.../ 293then 294.Nm 295will search for the specified file or directory named in the remaining part 296of the argument string. 297The search starts with the current directory of 298the Makefile and then works upward towards the root of the filesystem. 299If the search is successful, then the resulting directory replaces the 300.Qq \&.../ 301specification in the 302.Fl m 303argument. 304If used, this feature allows 305.Nm 306to easily search in the current source tree for customized sys.mk files 307(e.g., by using 308.Qq \&.../mk/sys.mk 309as an argument). 310.It Fl n 311Display the commands that would have been executed, but do not 312actually execute them unless the target depends on the .MAKE special 313source (see below). 314.It Fl N 315Display the commands which would have been executed, but do not 316actually execute any of them; useful for debugging top-level makefiles 317without descending into subdirectories. 318.It Fl q 319Do not execute any commands, but exit 0 if the specified targets are 320up-to-date and 1, otherwise. 321.It Fl r 322Do not use the built-in rules specified in the system makefile. 323.It Fl s 324Do not echo any commands as they are executed. 325Equivalent to specifying 326.Ql Ic @ 327before each command line in the makefile. 328.It Fl T Ar tracefile 329When used with the 330.Fl j 331flag, 332append a trace record to 333.Ar tracefile 334for each job started and completed. 335.It Fl t 336Rather than re-building a target as specified in the makefile, create it 337or update its modification time to make it appear up-to-date. 338.It Fl V Ar variable 339Print 340.Nm Ns 's 341idea of the value of 342.Ar variable , 343in the global context. 344Do not build any targets. 345Multiple instances of this option may be specified; 346the variables will be printed one per line, 347with a blank line for each null or undefined variable. 348If 349.Ar variable 350contains a 351.Ql \&$ 352then the value will be expanded before printing. 353.It Fl W 354Treat any warnings during makefile parsing as errors. 355.It Fl X 356Don't export variables passed on the command line to the environment 357individually. 358Variables passed on the command line are still exported 359via the 360.Va MAKEFLAGS 361environment variable. 362This option may be useful on systems which have a small limit on the 363size of command arguments. 364.It Ar variable=value 365Set the value of the variable 366.Ar variable 367to 368.Ar value . 369Normally, all values passed on the command line are also exported to 370sub-makes in the environment. 371The 372.Fl X 373flag disables this behavior. 374Variable assignments should follow options for POSIX compatibility 375but no ordering is enforced. 376.El 377.Pp 378There are seven different types of lines in a makefile: file dependency 379specifications, shell commands, variable assignments, include statements, 380conditional directives, for loops, and comments. 381.Pp 382In general, lines may be continued from one line to the next by ending 383them with a backslash 384.Pq Ql \e . 385The trailing newline character and initial whitespace on the following 386line are compressed into a single space. 387.Sh FILE DEPENDENCY SPECIFICATIONS 388Dependency lines consist of one or more targets, an operator, and zero 389or more sources. 390This creates a relationship where the targets 391.Dq depend 392on the sources 393and are usually created from them. 394The exact relationship between the target and the source is determined 395by the operator that separates them. 396The three operators are as follows: 397.Bl -tag -width flag 398.It Ic \&: 399A target is considered out-of-date if its modification time is less than 400those of any of its sources. 401Sources for a target accumulate over dependency lines when this operator 402is used. 403The target is removed if 404.Nm 405is interrupted. 406.It Ic \&! 407Targets are always re-created, but not until all sources have been 408examined and re-created as necessary. 409Sources for a target accumulate over dependency lines when this operator 410is used. 411The target is removed if 412.Nm 413is interrupted. 414.It Ic \&:: 415If no sources are specified, the target is always re-created. 416Otherwise, a target is considered out-of-date if any of its sources has 417been modified more recently than the target. 418Sources for a target do not accumulate over dependency lines when this 419operator is used. 420The target will not be removed if 421.Nm 422is interrupted. 423.El 424.Pp 425Targets and sources may contain the shell wildcard values 426.Ql \&? , 427.Ql * , 428.Ql [] , 429and 430.Ql {} . 431The values 432.Ql \&? , 433.Ql * , 434and 435.Ql [] 436may only be used as part of the final 437component of the target or source, and must be used to describe existing 438files. 439The value 440.Ql {} 441need not necessarily be used to describe existing files. 442Expansion is in directory order, not alphabetically as done in the shell. 443.Sh SHELL COMMANDS 444Each target may have associated with it a series of shell commands, normally 445used to create the target. 446Each of the commands in this script 447.Em must 448be preceded by a tab. 449While any target may appear on a dependency line, only one of these 450dependencies may be followed by a creation script, unless the 451.Ql Ic \&:: 452operator is used. 453.Pp 454If the first characters of the command line are any combination of 455.Ql Ic @ , 456.Ql Ic + , 457or 458.Ql Ic \- , 459the command is treated specially. 460A 461.Ql Ic @ 462causes the command not to be echoed before it is executed. 463A 464.Ql Ic + 465causes the command to be executed even when 466.Fl n 467is given. 468This is similar to the effect of the .MAKE special source, 469except that the effect can be limited to a single line of a script. 470A 471.Ql Ic \- 472causes any non-zero exit status of the command line to be ignored. 473.Pp 474When 475.Nm 476is run in jobs mode with 477.Fl j Ar max_jobs , 478the entire script for the target is fed to a 479single instance of the shell. 480.Pp 481In compatibility (non-jobs) mode, each command is run in a separate process. 482If the command contains any shell meta characters 483.Pq Ql #=|^(){};&<>*?[]:$`\e\en 484it will be passed to the shell, otherwise 485.Nm 486will attempt direct execution. 487.Pp 488Since 489.Nm 490will 491.Xr chdir 2 492to 493.Ql Va .OBJDIR 494before executing any targets, each child process 495starts with that as its current working directory. 496.Pp 497Makefiles should be written so that the mode of 498.Nm 499operation does not change their behavior. 500For example, any command which needs to use 501.Dq cd 502or 503.Dq chdir , 504without side-effect should be put in parenthesis: 505.Bd -literal -offset indent 506 507avoid-chdir-side-effects: 508 @echo Building $@ in `pwd` 509 @(cd ${.CURDIR} && ${.MAKE} $@) 510 @echo Back in `pwd` 511 512ensure-one-shell-regardless-of-mode: 513 @echo Building $@ in `pwd`; \\ 514 (cd ${.CURDIR} && ${.MAKE} $@); \\ 515 echo Back in `pwd` 516.Ed 517.Sh VARIABLE ASSIGNMENTS 518Variables in make are much like variables in the shell, and, by tradition, 519consist of all upper-case letters. 520.Ss Variable assignment modifiers 521The five operators that can be used to assign values to variables are as 522follows: 523.Bl -tag -width Ds 524.It Ic \&= 525Assign the value to the variable. 526Any previous value is overridden. 527.It Ic \&+= 528Append the value to the current value of the variable. 529.It Ic \&?= 530Assign the value to the variable if it is not already defined. 531.It Ic \&:= 532Assign with expansion, i.e. expand the value before assigning it 533to the variable. 534Normally, expansion is not done until the variable is referenced. 535.Em NOTE : 536References to undefined variables are 537.Em not 538expanded. 539This can cause problems when variable modifiers are used. 540.It Ic \&!= 541Expand the value and pass it to the shell for execution and assign 542the result to the variable. 543Any newlines in the result are replaced with spaces. 544.El 545.Pp 546Any white-space before the assigned 547.Ar value 548is removed; if the value is being appended, a single space is inserted 549between the previous contents of the variable and the appended value. 550.Pp 551Variables are expanded by surrounding the variable name with either 552curly braces 553.Pq Ql {} 554or parentheses 555.Pq Ql () 556and preceding it with 557a dollar sign 558.Pq Ql \&$ . 559If the variable name contains only a single letter, the surrounding 560braces or parentheses are not required. 561This shorter form is not recommended. 562.Pp 563If the variable name contains a dollar, then the name itself is expanded first. 564This allows almost arbitrary variable names, however names containing dollar, 565braces, parenthesis, or whitespace are really best avoided! 566.Pp 567If the result of expanding a variable contains a dollar sign 568.Pq Ql \&$ 569the string is expanded again. 570.Pp 571Variable substitution occurs at three distinct times, depending on where 572the variable is being used. 573.Bl -enum 574.It 575Variables in dependency lines are expanded as the line is read. 576.It 577Variables in shell commands are expanded when the shell command is 578executed. 579.It 580.Dq .for 581loop index variables are expanded on each loop iteration. 582Note that other variables are not expanded inside loops so 583the following example code: 584.Bd -literal -offset indent 585 586.Dv .for i in 1 2 3 587a+= ${i} 588j= ${i} 589b+= ${j} 590.Dv .endfor 591 592all: 593 @echo ${a} 594 @echo ${b} 595 596.Ed 597will print: 598.Bd -literal -offset indent 5991 2 3 6003 3 3 601 602.Ed 603Because while ${a} contains 604.Dq 1 2 3 605after the loop is executed, ${b} 606contains 607.Dq ${j} ${j} ${j} 608which expands to 609.Dq 3 3 3 610since after the loop completes ${j} contains 611.Dq 3 . 612.El 613.Ss Variable classes 614The four different classes of variables (in order of increasing precedence) 615are: 616.Bl -tag -width Ds 617.It Environment variables 618Variables defined as part of 619.Nm Ns 's 620environment. 621.It Global variables 622Variables defined in the makefile or in included makefiles. 623.It Command line variables 624Variables defined as part of the command line. 625.It Local variables 626Variables that are defined specific to a certain target. 627The seven local variables are as follows: 628.Bl -tag -width ".ARCHIVE" 629.It Va .ALLSRC 630The list of all sources for this target; also known as 631.Ql Va \&\*[Gt] . 632.It Va .ARCHIVE 633The name of the archive file. 634.It Va .IMPSRC 635In suffix-transformation rules, the name/path of the source from which the 636target is to be transformed (the 637.Dq implied 638source); also known as 639.Ql Va \&\*[Lt] . 640It is not defined in explicit rules. 641.It Va .MEMBER 642The name of the archive member. 643.It Va .OODATE 644The list of sources for this target that were deemed out-of-date; also 645known as 646.Ql Va \&? . 647.It Va .PREFIX 648The file prefix of the target, containing only the file portion, no suffix 649or preceding directory components; also known as 650.Ql Va * . 651.It Va .TARGET 652The name of the target; also known as 653.Ql Va @ . 654.El 655.Pp 656The shorter forms 657.Ql Va @ , 658.Ql Va \&? , 659.Ql Va \&\*[Lt] , 660.Ql Va \&\*[Gt] , 661and 662.Ql Va * 663are permitted for backward 664compatibility with historical makefiles and are not recommended. 665The six variables 666.Ql Va "@F" , 667.Ql Va "@D" , 668.Ql Va "\*[Lt]F" , 669.Ql Va "\*[Lt]D" , 670.Ql Va "*F" , 671and 672.Ql Va "*D" 673are permitted for compatibility with 674.At V 675makefiles and are not recommended. 676.Pp 677Four of the local variables may be used in sources on dependency lines 678because they expand to the proper value for each target on the line. 679These variables are 680.Ql Va .TARGET , 681.Ql Va .PREFIX , 682.Ql Va .ARCHIVE , 683and 684.Ql Va .MEMBER . 685.El 686.Ss Additional built-in variables 687In addition, 688.Nm 689sets or knows about the following variables: 690.Bl -tag -width .MAKEOVERRIDES 691.It Va \&$ 692A single dollar sign 693.Ql \&$ , 694i.e. 695.Ql \&$$ 696expands to a single dollar 697sign. 698.It Va .ALLTARGETS 699The list of all targets encountered in the Makefile. 700If evaluated during 701Makefile parsing, lists only those targets encountered thus far. 702.It Va .CURDIR 703A path to the directory where 704.Nm 705was executed. 706Refer to the description of 707.Ql Ev PWD 708for more details. 709.It Ev MAKE 710The name that 711.Nm 712was executed with 713.Pq Va argv[0] . 714For compatibility 715.Nm 716also sets 717.Va .MAKE 718with the same value. 719The preferred variable to use is the environment variable 720.Ev MAKE 721because it is more compatible with other versions of 722.Nm 723and cannot be confused with the special target with the same name. 724.It Va .MAKE.DEPENDFILE 725Names the makefile (default 726.Ql Pa .depend ) 727from which generated dependencies are read. 728.It Va .MAKE.EXPAND_VARIABLES 729A boolean that controls the default behavior of the 730.Fl V 731option. 732.It Va .MAKE.EXPORTED 733The list of variables exported by 734.Nm . 735.It Va .MAKE.JOBS 736The argument to the 737.Fl j 738option. 739.It Va .MAKE.JOB.PREFIX 740If 741.Nm 742is run with 743.Ar j 744then output for each target is prefixed with a token 745.Ql --- target --- 746the first part of which can be controlled via 747.Va .MAKE.JOB.PREFIX . 748If 749.Va .MAKE.JOB.PREFIX 750is empty, no token is printed. 751.br 752For example: 753.Li .MAKE.JOB.PREFIX=${.newline}---${.MAKE:T}[${.MAKE.PID}] 754would produce tokens like 755.Ql ---make[1234] target --- 756making it easier to track the degree of parallelism being achieved. 757.It Ev MAKEFLAGS 758The environment variable 759.Ql Ev MAKEFLAGS 760may contain anything that 761may be specified on 762.Nm Ns 's 763command line. 764Anything specified on 765.Nm Ns 's 766command line is appended to the 767.Ql Ev MAKEFLAGS 768variable which is then 769entered into the environment for all programs which 770.Nm 771executes. 772.It Va .MAKE.LEVEL 773The recursion depth of 774.Nm . 775The initial instance of 776.Nm 777will be 0, and an incremented value is put into the environment 778to be seen by the next generation. 779This allows tests like: 780.Li .if ${.MAKE.LEVEL} == 0 781to protect things which should only be evaluated in the initial instance of 782.Nm . 783.It Va .MAKE.MAKEFILE_PREFERENCE 784The ordered list of makefile names 785(default 786.Ql Pa makefile , 787.Ql Pa Makefile ) 788that 789.Nm 790will look for. 791.It Va .MAKE.MAKEFILES 792The list of makefiles read by 793.Nm , 794which is useful for tracking dependencies. 795Each makefile is recorded only once, regardless of the number of times read. 796.It Va .MAKE.MODE 797Processed after reading all makefiles. 798Can affect the mode that 799.Nm 800runs in. 801It can contain a number of keywords: 802.Bl -hang -width ignore-cmd 803.It Pa compat 804Like 805.Fl B , 806puts 807.Nm 808into "compat" mode. 809.It Pa meta 810Puts 811.Nm 812into "meta" mode, where meta files are created for each target 813to capture the command run, the output generated and if 814.Xr filemon 4 815is available, the system calls which are of interest to 816.Nm . 817The captured output can be very useful when diagnosing errors. 818.It Pa curdirOk= Ar bf 819Normally 820.Nm 821will not create .meta files in 822.Ql Va .CURDIR . 823This can be overridden by setting 824.Va bf 825to a value which represents True. 826.It Pa env 827For debugging, it can be useful to inlcude the environment 828in the .meta file. 829.It Pa verbose 830If in "meta" mode, print a clue about the target being built. 831This is useful if the build is otherwise running silently. 832The message printed the value of: 833.Va .MAKE.META.PREFIX . 834.It Pa ignore-cmd 835Some makefiles have commands which are simply not stable. 836This keyword causes them to be ignored for 837determining whether a target is out of date in "meta" mode. 838See also 839.Ic .NOMETA_CMP . 840.It Pa silent= Ar bf 841If 842.Va bf 843is True, when a .meta file is created, mark the target 844.Ic .SILENT . 845.El 846.It Va .MAKE.META.BAILIWICK 847In "meta" mode, provides a list of prefixes which 848match the directories controlled by 849.Nm . 850If a file that was generated outside of 851.Va .OBJDIR 852but within said bailiwick is missing, 853the current target is considered out-of-date. 854.It Va .MAKE.META.CREATED 855In "meta" mode, this variable contains a list of all the meta files 856updated. 857If not empty, it can be used to trigger processing of 858.Va .MAKE.META.FILES . 859.It Va .MAKE.META.FILES 860In "meta" mode, this variable contains a list of all the meta files 861used (updated or not). 862This list can be used to process the meta files to extract dependency 863information. 864.It Va .MAKE.META.IGNORE_PATHS 865Provides a list of path prefixes that should be ignored; 866because the contents are expected to change over time. 867The default list includes: 868.Ql Pa /dev /etc /proc /tmp /var/run /var/tmp 869.It Va .MAKE.META.PREFIX 870Defines the message printed for each meta file updated in "meta verbose" mode. 871The default value is: 872.Dl Building ${.TARGET:H:tA}/${.TARGET:T} 873.It Va .MAKEOVERRIDES 874This variable is used to record the names of variables assigned to 875on the command line, so that they may be exported as part of 876.Ql Ev MAKEFLAGS . 877This behaviour can be disabled by assigning an empty value to 878.Ql Va .MAKEOVERRIDES 879within a makefile. 880Extra variables can be exported from a makefile 881by appending their names to 882.Ql Va .MAKEOVERRIDES . 883.Ql Ev MAKEFLAGS 884is re-exported whenever 885.Ql Va .MAKEOVERRIDES 886is modified. 887.It Va .MAKE.PATH_FILEMON 888If 889.Nm 890was built with 891.Xr filemon 4 892support, this is set to the path of the device node. 893This allows makefiles to test for this support. 894.It Va .MAKE.PID 895The process-id of 896.Nm . 897.It Va .MAKE.PPID 898The parent process-id of 899.Nm . 900.It Va MAKE_PRINT_VAR_ON_ERROR 901When 902.Nm 903stops due to an error, it prints its name and the value of 904.Ql Va .CURDIR 905as well as the value of any variables named in 906.Ql Va MAKE_PRINT_VAR_ON_ERROR . 907.It Va .newline 908This variable is simply assigned a newline character as its value. 909This allows expansions using the 910.Cm \&:@ 911modifier to put a newline between 912iterations of the loop rather than a space. 913For example, the printing of 914.Ql Va MAKE_PRINT_VAR_ON_ERROR 915could be done as ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@}. 916.It Va .OBJDIR 917A path to the directory where the targets are built. 918Its value is determined by trying to 919.Xr chdir 2 920to the following directories in order and using the first match: 921.Bl -enum 922.It 923.Ev ${MAKEOBJDIRPREFIX}${.CURDIR} 924.Pp 925(Only if 926.Ql Ev MAKEOBJDIRPREFIX 927is set in the environment or on the command line.) 928.It 929.Ev ${MAKEOBJDIR} 930.Pp 931(Only if 932.Ql Ev MAKEOBJDIR 933is set in the environment or on the command line.) 934.It 935.Ev ${.CURDIR} Ns Pa /obj. Ns Ev ${MACHINE} 936.It 937.Ev ${.CURDIR} Ns Pa /obj 938.It 939.Pa /usr/obj/ Ns Ev ${.CURDIR} 940.It 941.Ev ${.CURDIR} 942.El 943.Pp 944Variable expansion is performed on the value before it's used, 945so expressions such as 946.Dl ${.CURDIR:S,^/usr/src,/var/obj,} 947may be used. 948This is especially useful with 949.Ql Ev MAKEOBJDIR . 950.Pp 951.Ql Va .OBJDIR 952may be modified in the makefile as a global variable. 953In all cases, 954.Nm 955will 956.Xr chdir 2 957to 958.Ql Va .OBJDIR 959and set 960.Ql Ev PWD 961to that directory before executing any targets. 962. 963.It Va .PARSEDIR 964A path to the directory of the current 965.Ql Pa Makefile 966being parsed. 967.It Va .PARSEFILE 968The basename of the current 969.Ql Pa Makefile 970being parsed. 971This variable and 972.Ql Va .PARSEDIR 973are both set only while the 974.Ql Pa Makefiles 975are being parsed. 976If you want to retain their current values, assign them to a variable 977using assignment with expansion: 978.Pq Ql Cm \&:= . 979.It Va .PATH 980A variable that represents the list of directories that 981.Nm 982will search for files. 983The search list should be updated using the target 984.Ql Va .PATH 985rather than the variable. 986.It Ev PWD 987Alternate path to the current directory. 988.Nm 989normally sets 990.Ql Va .CURDIR 991to the canonical path given by 992.Xr getcwd 3 . 993However, if the environment variable 994.Ql Ev PWD 995is set and gives a path to the current directory, then 996.Nm 997sets 998.Ql Va .CURDIR 999to the value of 1000.Ql Ev PWD 1001instead. 1002This behaviour is disabled if 1003.Ql Ev MAKEOBJDIRPREFIX 1004is set or 1005.Ql Ev MAKEOBJDIR 1006contains a variable transform. 1007.Ql Ev PWD 1008is set to the value of 1009.Ql Va .OBJDIR 1010for all programs which 1011.Nm 1012executes. 1013.It Ev .TARGETS 1014The list of targets explicitly specified on the command line, if any. 1015.It Ev VPATH 1016Colon-separated 1017.Pq Dq \&: 1018lists of directories that 1019.Nm 1020will search for files. 1021The variable is supported for compatibility with old make programs only, 1022use 1023.Ql Va .PATH 1024instead. 1025.El 1026.Ss Variable modifiers 1027Variable expansion may be modified to select or modify each word of the 1028variable (where a 1029.Dq word 1030is white-space delimited sequence of characters). 1031The general format of a variable expansion is as follows: 1032.Pp 1033.Dl ${variable[:modifier[:...]]} 1034.Pp 1035Each modifier begins with a colon, 1036which may be escaped with a backslash 1037.Pq Ql \e . 1038.Pp 1039A set of modifiers can be specified via a variable, as follows: 1040.Pp 1041.Dl modifier_variable=modifier[:...] 1042.Dl ${variable:${modifier_variable}[:...]} 1043.Pp 1044In this case the first modifier in the modifier_variable does not 1045start with a colon, since that must appear in the referencing 1046variable. 1047If any of the modifiers in the modifier_variable contain a dollar sign 1048.Pq Ql $ , 1049these must be doubled to avoid early expansion. 1050.Pp 1051The supported modifiers are: 1052.Bl -tag -width EEE 1053.It Cm \&:E 1054Replaces each word in the variable with its suffix. 1055.It Cm \&:H 1056Replaces each word in the variable with everything but the last component. 1057.It Cm \&:M Ns Ar pattern 1058Select only those words that match 1059.Ar pattern . 1060The standard shell wildcard characters 1061.Pf ( Ql * , 1062.Ql \&? , 1063and 1064.Ql Oo Oc ) 1065may 1066be used. 1067The wildcard characters may be escaped with a backslash 1068.Pq Ql \e . 1069As a consequence of the way values are split into words, matched, 1070and then joined, a construct like 1071.Dl ${VAR:M*} 1072will normalise the inter-word spacing, removing all leading and 1073trailing space, and converting multiple consecutive spaces 1074to single spaces. 1075. 1076.It Cm \&:N Ns Ar pattern 1077This is identical to 1078.Ql Cm \&:M , 1079but selects all words which do not match 1080.Ar pattern . 1081.It Cm \&:O 1082Order every word in variable alphabetically. 1083To sort words in 1084reverse order use the 1085.Ql Cm \&:O:[-1..1] 1086combination of modifiers. 1087.It Cm \&:Ox 1088Randomize words in variable. 1089The results will be different each time you are referring to the 1090modified variable; use the assignment with expansion 1091.Pq Ql Cm \&:= 1092to prevent such behaviour. 1093For example, 1094.Bd -literal -offset indent 1095LIST= uno due tre quattro 1096RANDOM_LIST= ${LIST:Ox} 1097STATIC_RANDOM_LIST:= ${LIST:Ox} 1098 1099all: 1100 @echo "${RANDOM_LIST}" 1101 @echo "${RANDOM_LIST}" 1102 @echo "${STATIC_RANDOM_LIST}" 1103 @echo "${STATIC_RANDOM_LIST}" 1104.Ed 1105may produce output similar to: 1106.Bd -literal -offset indent 1107quattro due tre uno 1108tre due quattro uno 1109due uno quattro tre 1110due uno quattro tre 1111.Ed 1112.It Cm \&:Q 1113Quotes every shell meta-character in the variable, so that it can be passed 1114safely through recursive invocations of 1115.Nm . 1116.It Cm \&:R 1117Replaces each word in the variable with everything but its suffix. 1118.It Cm \&:gmtime 1119The value is a format string for 1120.Xr strftime 3 , 1121using the current 1122.Xr gmtime 3 . 1123.It Cm \&:hash 1124Compute a 32bit hash of the value and encode it as hex digits. 1125.It Cm \&:localtime 1126The value is a format string for 1127.Xr strftime 3 , 1128using the current 1129.Xr localtime 3 . 1130.It Cm \&:tA 1131Attempt to convert variable to an absolute path using 1132.Xr realpath 3 , 1133if that fails, the value is unchanged. 1134.It Cm \&:tl 1135Converts variable to lower-case letters. 1136.It Cm \&:ts Ns Ar c 1137Words in the variable are normally separated by a space on expansion. 1138This modifier sets the separator to the character 1139.Ar c . 1140If 1141.Ar c 1142is omitted, then no separator is used. 1143The common escapes (including octal numeric codes), work as expected. 1144.It Cm \&:tu 1145Converts variable to upper-case letters. 1146.It Cm \&:tW 1147Causes the value to be treated as a single word 1148(possibly containing embedded white space). 1149See also 1150.Ql Cm \&:[*] . 1151.It Cm \&:tw 1152Causes the value to be treated as a sequence of 1153words delimited by white space. 1154See also 1155.Ql Cm \&:[@] . 1156.Sm off 1157.It Cm \&:S No \&/ Ar old_string No \&/ Ar new_string No \&/ Op Cm 1gW 1158.Sm on 1159Modify the first occurrence of 1160.Ar old_string 1161in the variable's value, replacing it with 1162.Ar new_string . 1163If a 1164.Ql g 1165is appended to the last slash of the pattern, all occurrences 1166in each word are replaced. 1167If a 1168.Ql 1 1169is appended to the last slash of the pattern, only the first word 1170is affected. 1171If a 1172.Ql W 1173is appended to the last slash of the pattern, 1174then the value is treated as a single word 1175(possibly containing embedded white space). 1176If 1177.Ar old_string 1178begins with a caret 1179.Pq Ql ^ , 1180.Ar old_string 1181is anchored at the beginning of each word. 1182If 1183.Ar old_string 1184ends with a dollar sign 1185.Pq Ql \&$ , 1186it is anchored at the end of each word. 1187Inside 1188.Ar new_string , 1189an ampersand 1190.Pq Ql \*[Am] 1191is replaced by 1192.Ar old_string 1193(without any 1194.Ql ^ 1195or 1196.Ql \&$ ) . 1197Any character may be used as a delimiter for the parts of the modifier 1198string. 1199The anchoring, ampersand and delimiter characters may be escaped with a 1200backslash 1201.Pq Ql \e . 1202.Pp 1203Variable expansion occurs in the normal fashion inside both 1204.Ar old_string 1205and 1206.Ar new_string 1207with the single exception that a backslash is used to prevent the expansion 1208of a dollar sign 1209.Pq Ql \&$ , 1210not a preceding dollar sign as is usual. 1211.Sm off 1212.It Cm \&:C No \&/ Ar pattern No \&/ Ar replacement No \&/ Op Cm 1gW 1213.Sm on 1214The 1215.Cm \&:C 1216modifier is just like the 1217.Cm \&:S 1218modifier except that the old and new strings, instead of being 1219simple strings, are an extended regular expression (see 1220.Xr regex 3 ) 1221string 1222.Ar pattern 1223and an 1224.Xr ed 1 Ns \-style 1225string 1226.Ar replacement . 1227Normally, the first occurrence of the pattern 1228.Ar pattern 1229in each word of the value is substituted with 1230.Ar replacement . 1231The 1232.Ql 1 1233modifier causes the substitution to apply to at most one word; the 1234.Ql g 1235modifier causes the substitution to apply to as many instances of the 1236search pattern 1237.Ar pattern 1238as occur in the word or words it is found in; the 1239.Ql W 1240modifier causes the value to be treated as a single word 1241(possibly containing embedded white space). 1242Note that 1243.Ql 1 1244and 1245.Ql g 1246are orthogonal; the former specifies whether multiple words are 1247potentially affected, the latter whether multiple substitutions can 1248potentially occur within each affected word. 1249.It Cm \&:T 1250Replaces each word in the variable with its last component. 1251.It Cm \&:u 1252Remove adjacent duplicate words (like 1253.Xr uniq 1 ) . 1254.Sm off 1255.It Cm \&:\&? Ar true_string Cm \&: Ar false_string 1256.Sm on 1257If the variable name (not its value), when parsed as a .if conditional 1258expression, evaluates to true, return as its value the 1259.Ar true_string , 1260otherwise return the 1261.Ar false_string . 1262Since the variable name is used as the expression, \&:\&? must be the 1263first modifier after the variable name itself - which will, of course, 1264usually contain variable expansions. 1265A common error is trying to use expressions like 1266.Dl ${NUMBERS:M42:?match:no} 1267which actually tests defined(NUMBERS), 1268to determine is any words match "42" you need to use something like: 1269.Dl ${"${NUMBERS:M42}" != \&"\&":?match:no} . 1270.It Ar :old_string=new_string 1271This is the 1272.At V 1273style variable substitution. 1274It must be the last modifier specified. 1275If 1276.Ar old_string 1277or 1278.Ar new_string 1279do not contain the pattern matching character 1280.Ar % 1281then it is assumed that they are 1282anchored at the end of each word, so only suffixes or entire 1283words may be replaced. 1284Otherwise 1285.Ar % 1286is the substring of 1287.Ar old_string 1288to be replaced in 1289.Ar new_string . 1290.Pp 1291Variable expansion occurs in the normal fashion inside both 1292.Ar old_string 1293and 1294.Ar new_string 1295with the single exception that a backslash is used to prevent the 1296expansion of a dollar sign 1297.Pq Ql \&$ , 1298not a preceding dollar sign as is usual. 1299.Sm off 1300.It Cm \&:@ Ar temp Cm @ Ar string Cm @ 1301.Sm on 1302This is the loop expansion mechanism from the OSF Development 1303Environment (ODE) make. 1304Unlike 1305.Cm \&.for 1306loops expansion occurs at the time of 1307reference. 1308Assign 1309.Ar temp 1310to each word in the variable and evaluate 1311.Ar string . 1312The ODE convention is that 1313.Ar temp 1314should start and end with a period. 1315For example. 1316.Dl ${LINKS:@.LINK.@${LN} ${TARGET} ${.LINK.}@} 1317.Pp 1318However a single character variable is often more readable: 1319.Dl ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@} 1320.It Cm \&:U Ns Ar newval 1321If the variable is undefined 1322.Ar newval 1323is the value. 1324If the variable is defined, the existing value is returned. 1325This is another ODE make feature. 1326It is handy for setting per-target CFLAGS for instance: 1327.Dl ${_${.TARGET:T}_CFLAGS:U${DEF_CFLAGS}} 1328If a value is only required if the variable is undefined, use: 1329.Dl ${VAR:D:Unewval} 1330.It Cm \&:D Ns Ar newval 1331If the variable is defined 1332.Ar newval 1333is the value. 1334.It Cm \&:L 1335The name of the variable is the value. 1336.It Cm \&:P 1337The path of the node which has the same name as the variable 1338is the value. 1339If no such node exists or its path is null, then the 1340name of the variable is used. 1341In order for this modifier to work, the name (node) must at least have 1342appeared on the rhs of a dependency. 1343.Sm off 1344.It Cm \&:\&! Ar cmd Cm \&! 1345.Sm on 1346The output of running 1347.Ar cmd 1348is the value. 1349.It Cm \&:sh 1350If the variable is non-empty it is run as a command and the output 1351becomes the new value. 1352.It Cm \&::= Ns Ar str 1353The variable is assigned the value 1354.Ar str 1355after substitution. 1356This modifier and its variations are useful in 1357obscure situations such as wanting to set a variable when shell commands 1358are being parsed. 1359These assignment modifiers always expand to 1360nothing, so if appearing in a rule line by themselves should be 1361preceded with something to keep 1362.Nm 1363happy. 1364.Pp 1365The 1366.Ql Cm \&:: 1367helps avoid false matches with the 1368.At V 1369style 1370.Cm \&:= 1371modifier and since substitution always occurs the 1372.Cm \&::= 1373form is vaguely appropriate. 1374.It Cm \&::?= Ns Ar str 1375As for 1376.Cm \&::= 1377but only if the variable does not already have a value. 1378.It Cm \&::+= Ns Ar str 1379Append 1380.Ar str 1381to the variable. 1382.It Cm \&::!= Ns Ar cmd 1383Assign the output of 1384.Ar cmd 1385to the variable. 1386.It Cm \&:\&[ Ns Ar range Ns Cm \&] 1387Selects one or more words from the value, 1388or performs other operations related to the way in which the 1389value is divided into words. 1390.Pp 1391Ordinarily, a value is treated as a sequence of words 1392delimited by white space. 1393Some modifiers suppress this behaviour, 1394causing a value to be treated as a single word 1395(possibly containing embedded white space). 1396An empty value, or a value that consists entirely of white-space, 1397is treated as a single word. 1398For the purposes of the 1399.Ql Cm \&:[] 1400modifier, the words are indexed both forwards using positive integers 1401(where index 1 represents the first word), 1402and backwards using negative integers 1403(where index \-1 represents the last word). 1404.Pp 1405The 1406.Ar range 1407is subjected to variable expansion, and the expanded result is 1408then interpreted as follows: 1409.Bl -tag -width index 1410.\" :[n] 1411.It Ar index 1412Selects a single word from the value. 1413.\" :[start..end] 1414.It Ar start Ns Cm \&.. Ns Ar end 1415Selects all words from 1416.Ar start 1417to 1418.Ar end , 1419inclusive. 1420For example, 1421.Ql Cm \&:[2..-1] 1422selects all words from the second word to the last word. 1423If 1424.Ar start 1425is greater than 1426.Ar end , 1427then the words are output in reverse order. 1428For example, 1429.Ql Cm \&:[-1..1] 1430selects all the words from last to first. 1431.\" :[*] 1432.It Cm \&* 1433Causes subsequent modifiers to treat the value as a single word 1434(possibly containing embedded white space). 1435Analogous to the effect of 1436\&"$*\&" 1437in Bourne shell. 1438.\" :[0] 1439.It 0 1440Means the same as 1441.Ql Cm \&:[*] . 1442.\" :[*] 1443.It Cm \&@ 1444Causes subsequent modifiers to treat the value as a sequence of words 1445delimited by white space. 1446Analogous to the effect of 1447\&"$@\&" 1448in Bourne shell. 1449.\" :[#] 1450.It Cm \&# 1451Returns the number of words in the value. 1452.El \" :[range] 1453.El 1454.Sh INCLUDE STATEMENTS, CONDITIONALS AND FOR LOOPS 1455Makefile inclusion, conditional structures and for loops reminiscent 1456of the C programming language are provided in 1457.Nm . 1458All such structures are identified by a line beginning with a single 1459dot 1460.Pq Ql \&. 1461character. 1462Files are included with either 1463.Cm \&.include Aq Ar file 1464or 1465.Cm \&.include Pf \*q Ar file Ns \*q . 1466Variables between the angle brackets or double quotes are expanded 1467to form the file name. 1468If angle brackets are used, the included makefile is expected to be in 1469the system makefile directory. 1470If double quotes are used, the including makefile's directory and any 1471directories specified using the 1472.Fl I 1473option are searched before the system 1474makefile directory. 1475For compatibility with other versions of 1476.Nm 1477.Ql include file ... 1478is also accepted. 1479If the include statement is written as 1480.Cm .-include 1481or as 1482.Cm .sinclude 1483then errors locating and/or opening include files are ignored. 1484.Pp 1485Conditional expressions are also preceded by a single dot as the first 1486character of a line. 1487The possible conditionals are as follows: 1488.Bl -tag -width Ds 1489.It Ic .error Ar message 1490The message is printed along with the name of the makefile and line number, 1491then 1492.Nm 1493will exit. 1494.It Ic .export Ar variable ... 1495Export the specified global variable. 1496If no variable list is provided, all globals are exported 1497except for internal variables (those that start with 1498.Ql \&. ) . 1499This is not affected by the 1500.Fl X 1501flag, so should be used with caution. 1502For compatibility with other 1503.Nm 1504programs 1505.Ql export variable=value 1506is also accepted. 1507.Pp 1508Appending a variable name to 1509.Va .MAKE.EXPORTED 1510is equivalent to exporting a variable. 1511.It Ic .export-env Ar variable ... 1512The same as 1513.Ql .export , 1514except that the variable is not appended to 1515.Va .MAKE.EXPORTED . 1516This allows exporting a value to the environment which is different from that 1517used by 1518.Nm 1519internally. 1520.It Ic .info Ar message 1521The message is printed along with the name of the makefile and line number. 1522.It Ic .undef Ar variable 1523Un-define the specified global variable. 1524Only global variables may be un-defined. 1525.It Ic .unexport Ar variable ... 1526The opposite of 1527.Ql .export . 1528The specified global 1529.Va variable 1530will be removed from 1531.Va .MAKE.EXPORTED . 1532If no variable list is provided, all globals are unexported, 1533and 1534.Va .MAKE.EXPORTED 1535deleted. 1536.It Ic .unexport-env 1537Unexport all globals previously exported and 1538clear the environment inherited from the parent. 1539This operation will cause a memory leak of the original environment, 1540so should be used sparingly. 1541Testing for 1542.Va .MAKE.LEVEL 1543being 0, would make sense. 1544Also note that any variables which originated in the parent environment 1545should be explicitly preserved if desired. 1546For example: 1547.Bd -literal -offset indent 1548.Li .if ${.MAKE.LEVEL} == 0 1549PATH := ${PATH} 1550.Li .unexport-env 1551.Li .export PATH 1552.Li .endif 1553.Pp 1554.Ed 1555Would result in an environment containing only 1556.Ql Ev PATH , 1557which is the minimal useful environment. 1558Actually 1559.Ql Ev .MAKE.LEVEL 1560will also be pushed into the new environment. 1561.It Ic .warning Ar message 1562The message prefixed by 1563.Ql Pa warning: 1564is printed along with the name of the makefile and line number. 1565.It Ic \&.if Oo \&! Oc Ns Ar expression Op Ar operator expression ... 1566Test the value of an expression. 1567.It Ic .ifdef Oo \&! Oc Ns Ar variable Op Ar operator variable ... 1568Test the value of a variable. 1569.It Ic .ifndef Oo \&! Oc Ns Ar variable Op Ar operator variable ... 1570Test the value of a variable. 1571.It Ic .ifmake Oo \&! Oc Ns Ar target Op Ar operator target ... 1572Test the target being built. 1573.It Ic .ifnmake Oo \&! Ns Oc Ar target Op Ar operator target ... 1574Test the target being built. 1575.It Ic .else 1576Reverse the sense of the last conditional. 1577.It Ic .elif Oo \&! Ns Oc Ar expression Op Ar operator expression ... 1578A combination of 1579.Ql Ic .else 1580followed by 1581.Ql Ic .if . 1582.It Ic .elifdef Oo \&! Oc Ns Ar variable Op Ar operator variable ... 1583A combination of 1584.Ql Ic .else 1585followed by 1586.Ql Ic .ifdef . 1587.It Ic .elifndef Oo \&! Oc Ns Ar variable Op Ar operator variable ... 1588A combination of 1589.Ql Ic .else 1590followed by 1591.Ql Ic .ifndef . 1592.It Ic .elifmake Oo \&! Oc Ns Ar target Op Ar operator target ... 1593A combination of 1594.Ql Ic .else 1595followed by 1596.Ql Ic .ifmake . 1597.It Ic .elifnmake Oo \&! Oc Ns Ar target Op Ar operator target ... 1598A combination of 1599.Ql Ic .else 1600followed by 1601.Ql Ic .ifnmake . 1602.It Ic .endif 1603End the body of the conditional. 1604.El 1605.Pp 1606The 1607.Ar operator 1608may be any one of the following: 1609.Bl -tag -width "Cm XX" 1610.It Cm \&|\&| 1611Logical OR. 1612.It Cm \&\*[Am]\*[Am] 1613Logical 1614.Tn AND ; 1615of higher precedence than 1616.Dq \&|\&| . 1617.El 1618.Pp 1619As in C, 1620.Nm 1621will only evaluate a conditional as far as is necessary to determine 1622its value. 1623Parentheses may be used to change the order of evaluation. 1624The boolean operator 1625.Ql Ic \&! 1626may be used to logically negate an entire 1627conditional. 1628It is of higher precedence than 1629.Ql Ic \&\*[Am]\*[Am] . 1630.Pp 1631The value of 1632.Ar expression 1633may be any of the following: 1634.Bl -tag -width defined 1635.It Ic defined 1636Takes a variable name as an argument and evaluates to true if the variable 1637has been defined. 1638.It Ic make 1639Takes a target name as an argument and evaluates to true if the target 1640was specified as part of 1641.Nm Ns 's 1642command line or was declared the default target (either implicitly or 1643explicitly, see 1644.Va .MAIN ) 1645before the line containing the conditional. 1646.It Ic empty 1647Takes a variable, with possible modifiers, and evaluates to true if 1648the expansion of the variable would result in an empty string. 1649.It Ic exists 1650Takes a file name as an argument and evaluates to true if the file exists. 1651The file is searched for on the system search path (see 1652.Va .PATH ) . 1653.It Ic target 1654Takes a target name as an argument and evaluates to true if the target 1655has been defined. 1656.It Ic commands 1657Takes a target name as an argument and evaluates to true if the target 1658has been defined and has commands associated with it. 1659.El 1660.Pp 1661.Ar Expression 1662may also be an arithmetic or string comparison. 1663Variable expansion is 1664performed on both sides of the comparison, after which the integral 1665values are compared. 1666A value is interpreted as hexadecimal if it is 1667preceded by 0x, otherwise it is decimal; octal numbers are not supported. 1668The standard C relational operators are all supported. 1669If after 1670variable expansion, either the left or right hand side of a 1671.Ql Ic == 1672or 1673.Ql Ic "!=" 1674operator is not an integral value, then 1675string comparison is performed between the expanded 1676variables. 1677If no relational operator is given, it is assumed that the expanded 1678variable is being compared against 0 or an empty string in the case 1679of a string comparison. 1680.Pp 1681When 1682.Nm 1683is evaluating one of these conditional expressions, and it encounters 1684a (white-space separated) word it doesn't recognize, either the 1685.Dq make 1686or 1687.Dq defined 1688expression is applied to it, depending on the form of the conditional. 1689If the form is 1690.Ql Ic .ifdef , 1691.Ql Ic .ifndef , 1692or 1693.Ql Ic .if 1694the 1695.Dq defined 1696expression is applied. 1697Similarly, if the form is 1698.Ql Ic .ifmake 1699or 1700.Ql Ic .ifnmake , the 1701.Dq make 1702expression is applied. 1703.Pp 1704If the conditional evaluates to true the parsing of the makefile continues 1705as before. 1706If it evaluates to false, the following lines are skipped. 1707In both cases this continues until a 1708.Ql Ic .else 1709or 1710.Ql Ic .endif 1711is found. 1712.Pp 1713For loops are typically used to apply a set of rules to a list of files. 1714The syntax of a for loop is: 1715.Pp 1716.Bl -tag -compact -width Ds 1717.It Ic \&.for Ar variable Oo Ar variable ... Oc Ic in Ar expression 1718.It Aq make-rules 1719.It Ic \&.endfor 1720.El 1721.Pp 1722After the for 1723.Ic expression 1724is evaluated, it is split into words. 1725On each iteration of the loop, one word is taken and assigned to each 1726.Ic variable , 1727in order, and these 1728.Ic variables 1729are substituted into the 1730.Ic make-rules 1731inside the body of the for loop. 1732The number of words must come out even; that is, if there are three 1733iteration variables, the number of words provided must be a multiple 1734of three. 1735.Sh COMMENTS 1736Comments begin with a hash 1737.Pq Ql \&# 1738character, anywhere but in a shell 1739command line, and continue to the end of an unescaped new line. 1740.Sh SPECIAL SOURCES (ATTRIBUTES) 1741.Bl -tag -width .IGNOREx 1742.It Ic .EXEC 1743Target is never out of date, but always execute commands anyway. 1744.It Ic .IGNORE 1745Ignore any errors from the commands associated with this target, exactly 1746as if they all were preceded by a dash 1747.Pq Ql \- . 1748.\" .It Ic .INVISIBLE 1749.\" XXX 1750.\" .It Ic .JOIN 1751.\" XXX 1752.It Ic .MADE 1753Mark all sources of this target as being up-to-date. 1754.It Ic .MAKE 1755Execute the commands associated with this target even if the 1756.Fl n 1757or 1758.Fl t 1759options were specified. 1760Normally used to mark recursive 1761.Nm Ns s . 1762.It Ic .META 1763Create a meta file for the target, even if it is flagged as 1764.Ic .PHONY , 1765.Ic .MAKE , 1766or 1767.Ic .SPECIAL . 1768Usage in conjunction with 1769.Ic .MAKE 1770is the most likely case. 1771In "meta" mode, the target is out-of-date if the meta file is missing. 1772.It Ic .NOMETA 1773Do not create a meta file for the target. 1774Meta files are also not created for 1775.Ic .PHONY , 1776.Ic .MAKE , 1777or 1778.Ic .SPECIAL 1779targets. 1780.It Ic .NOMETA_CMP 1781Ignore differences in commands when deciding if target is out of date. 1782This is useful if the command contains a value which always changes. 1783If the number of commands change, though, the target will still be out of date. 1784The same effect applies to any command line that uses the variable 1785.Va .OODATE , 1786which can be used for that purpose even when not otherwise needed or desired: 1787.Bd -literal -offset indent 1788 1789skip-compare-for-some: 1790 @echo this will be compared 1791 @echo this will not ${.OODATE:M.NOMETA_CMP} 1792 @echo this will also be compared 1793 1794.Ed 1795The 1796.Cm \&:M 1797pattern suppresses any expansion of the unwanted variable. 1798.It Ic .NOPATH 1799Do not search for the target in the directories specified by 1800.Ic .PATH . 1801.It Ic .NOTMAIN 1802Normally 1803.Nm 1804selects the first target it encounters as the default target to be built 1805if no target was specified. 1806This source prevents this target from being selected. 1807.It Ic .OPTIONAL 1808If a target is marked with this attribute and 1809.Nm 1810can't figure out how to create it, it will ignore this fact and assume 1811the file isn't needed or already exists. 1812.It Ic .PHONY 1813The target does not 1814correspond to an actual file; it is always considered to be out of date, 1815and will not be created with the 1816.Fl t 1817option. 1818Suffix-transformation rules are not applied to 1819.Ic .PHONY 1820targets. 1821.It Ic .PRECIOUS 1822When 1823.Nm 1824is interrupted, it normally removes any partially made targets. 1825This source prevents the target from being removed. 1826.It Ic .RECURSIVE 1827Synonym for 1828.Ic .MAKE . 1829.It Ic .SILENT 1830Do not echo any of the commands associated with this target, exactly 1831as if they all were preceded by an at sign 1832.Pq Ql @ . 1833.It Ic .USE 1834Turn the target into 1835.Nm Ns 's 1836version of a macro. 1837When the target is used as a source for another target, the other target 1838acquires the commands, sources, and attributes (except for 1839.Ic .USE ) 1840of the 1841source. 1842If the target already has commands, the 1843.Ic .USE 1844target's commands are appended 1845to them. 1846.It Ic .USEBEFORE 1847Exactly like 1848.Ic .USE , 1849but prepend the 1850.Ic .USEBEFORE 1851target commands to the target. 1852.It Ic .WAIT 1853If 1854.Ic .WAIT 1855appears in a dependency line, the sources that precede it are 1856made before the sources that succeed it in the line. 1857Since the dependents of files are not made until the file itself 1858could be made, this also stops the dependents being built unless they 1859are needed for another branch of the dependency tree. 1860So given: 1861.Bd -literal 1862x: a .WAIT b 1863 echo x 1864a: 1865 echo a 1866b: b1 1867 echo b 1868b1: 1869 echo b1 1870 1871.Ed 1872the output is always 1873.Ql a , 1874.Ql b1 , 1875.Ql b , 1876.Ql x . 1877.br 1878The ordering imposed by 1879.Ic .WAIT 1880is only relevant for parallel makes. 1881.El 1882.Sh SPECIAL TARGETS 1883Special targets may not be included with other targets, i.e. they must be 1884the only target specified. 1885.Bl -tag -width .BEGINx 1886.It Ic .BEGIN 1887Any command lines attached to this target are executed before anything 1888else is done. 1889.It Ic .DEFAULT 1890This is sort of a 1891.Ic .USE 1892rule for any target (that was used only as a 1893source) that 1894.Nm 1895can't figure out any other way to create. 1896Only the shell script is used. 1897The 1898.Ic .IMPSRC 1899variable of a target that inherits 1900.Ic .DEFAULT Ns 's 1901commands is set 1902to the target's own name. 1903.It Ic .END 1904Any command lines attached to this target are executed after everything 1905else is done. 1906.It Ic .ERROR 1907Any command lines attached to this target are executed when another target fails. 1908The 1909.Ic .ERROR_TARGET 1910variable is set to the target that failed. 1911See also 1912.Ic MAKE_PRINT_VAR_ON_ERROR . 1913.It Ic .IGNORE 1914Mark each of the sources with the 1915.Ic .IGNORE 1916attribute. 1917If no sources are specified, this is the equivalent of specifying the 1918.Fl i 1919option. 1920.It Ic .INTERRUPT 1921If 1922.Nm 1923is interrupted, the commands for this target will be executed. 1924.It Ic .MAIN 1925If no target is specified when 1926.Nm 1927is invoked, this target will be built. 1928.It Ic .MAKEFLAGS 1929This target provides a way to specify flags for 1930.Nm 1931when the makefile is used. 1932The flags are as if typed to the shell, though the 1933.Fl f 1934option will have 1935no effect. 1936.\" XXX: NOT YET!!!! 1937.\" .It Ic .NOTPARALLEL 1938.\" The named targets are executed in non parallel mode. 1939.\" If no targets are 1940.\" specified, then all targets are executed in non parallel mode. 1941.It Ic .NOPATH 1942Apply the 1943.Ic .NOPATH 1944attribute to any specified sources. 1945.It Ic .NOTPARALLEL 1946Disable parallel mode. 1947.It Ic .NO_PARALLEL 1948Synonym for 1949.Ic .NOTPARALLEL , 1950for compatibility with other pmake variants. 1951.It Ic .ORDER 1952The named targets are made in sequence. 1953This ordering does not add targets to the list of targets to be made. 1954Since the dependents of a target do not get built until the target itself 1955could be built, unless 1956.Ql a 1957is built by another part of the dependency graph, 1958the following is a dependency loop: 1959.Bd -literal 1960\&.ORDER: b a 1961b: a 1962.Ed 1963.Pp 1964The ordering imposed by 1965.Ic .ORDER 1966is only relevant for parallel makes. 1967.\" XXX: NOT YET!!!! 1968.\" .It Ic .PARALLEL 1969.\" The named targets are executed in parallel mode. 1970.\" If no targets are 1971.\" specified, then all targets are executed in parallel mode. 1972.It Ic .PATH 1973The sources are directories which are to be searched for files not 1974found in the current directory. 1975If no sources are specified, any previously specified directories are 1976deleted. 1977If the source is the special 1978.Ic .DOTLAST 1979target, then the current working 1980directory is searched last. 1981.It Ic .PATH. Ns Va suffix 1982Like 1983.Ic .PATH 1984but applies only to files with a particular suffix. 1985The suffix must have been previously declared with 1986.Ic .SUFFIXES . 1987.It Ic .PHONY 1988Apply the 1989.Ic .PHONY 1990attribute to any specified sources. 1991.It Ic .PRECIOUS 1992Apply the 1993.Ic .PRECIOUS 1994attribute to any specified sources. 1995If no sources are specified, the 1996.Ic .PRECIOUS 1997attribute is applied to every 1998target in the file. 1999.It Ic .SHELL 2000Sets the shell that 2001.Nm 2002will use to execute commands. 2003The sources are a set of 2004.Ar field=value 2005pairs. 2006.Bl -tag -width hasErrCtls 2007.It Ar name 2008This is the minimal specification, used to select one of the builtin 2009shell specs; 2010.Ar sh , 2011.Ar ksh , 2012and 2013.Ar csh . 2014.It Ar path 2015Specifies the path to the shell. 2016.It Ar hasErrCtl 2017Indicates whether the shell supports exit on error. 2018.It Ar check 2019The command to turn on error checking. 2020.It Ar ignore 2021The command to disable error checking. 2022.It Ar echo 2023The command to turn on echoing of commands executed. 2024.It Ar quiet 2025The command to turn off echoing of commands executed. 2026.It Ar filter 2027The output to filter after issuing the 2028.Ar quiet 2029command. 2030It is typically identical to 2031.Ar quiet . 2032.It Ar errFlag 2033The flag to pass the shell to enable error checking. 2034.It Ar echoFlag 2035The flag to pass the shell to enable command echoing. 2036.It Ar newline 2037The string literal to pass the shell that results in a single newline 2038character when used outside of any quoting characters. 2039.El 2040Example: 2041.Bd -literal 2042\&.SHELL: name=ksh path=/bin/ksh hasErrCtl=true \e 2043 check="set \-e" ignore="set +e" \e 2044 echo="set \-v" quiet="set +v" filter="set +v" \e 2045 echoFlag=v errFlag=e newline="'\en'" 2046.Ed 2047.It Ic .SILENT 2048Apply the 2049.Ic .SILENT 2050attribute to any specified sources. 2051If no sources are specified, the 2052.Ic .SILENT 2053attribute is applied to every 2054command in the file. 2055.It Ic .STALE 2056This target gets run when a dependency file contains stale entries, having 2057.Va .ALLSRC 2058set to the name of that dependency file. 2059.It Ic .SUFFIXES 2060Each source specifies a suffix to 2061.Nm . 2062If no sources are specified, any previously specified suffixes are deleted. 2063It allows the creation of suffix-transformation rules. 2064.Pp 2065Example: 2066.Bd -literal 2067\&.SUFFIXES: .o 2068\&.c.o: 2069 cc \-o ${.TARGET} \-c ${.IMPSRC} 2070.Ed 2071.El 2072.Sh ENVIRONMENT 2073.Nm 2074uses the following environment variables, if they exist: 2075.Ev MACHINE , 2076.Ev MACHINE_ARCH , 2077.Ev MAKE , 2078.Ev MAKEFLAGS , 2079.Ev MAKEOBJDIR , 2080.Ev MAKEOBJDIRPREFIX , 2081.Ev MAKESYSPATH , 2082.Ev PWD , 2083and 2084.Ev TMPDIR . 2085.Pp 2086.Ev MAKEOBJDIRPREFIX 2087and 2088.Ev MAKEOBJDIR 2089may only be set in the environment or on the command line to 2090.Nm 2091and not as makefile variables; 2092see the description of 2093.Ql Va .OBJDIR 2094for more details. 2095.Sh FILES 2096.Bl -tag -width /usr/share/mk -compact 2097.It .depend 2098list of dependencies 2099.It Makefile 2100list of dependencies 2101.It makefile 2102list of dependencies 2103.It sys.mk 2104system makefile 2105.It /usr/share/mk 2106system makefile directory 2107.El 2108.Sh COMPATIBILITY 2109The basic make syntax is compatible between different versions of make, 2110however the special variables, variable modifiers and conditionals are not. 2111.Pp 2112The way that parallel makes are scheduled changed in 2113NetBSD 4.0 2114so that .ORDER and .WAIT apply recursively to the dependent nodes. 2115The algorithms used may change again in the future. 2116.Pp 2117The way that .for loop variables are substituted changed after 2118NetBSD 5.0 2119so that they still appear to be variable expansions. 2120In particular this stops them being treated as syntax, and removes some 2121obscure problems using them in .if statements. 2122.Sh SEE ALSO 2123.Xr mkdep 1 2124.Sh HISTORY 2125.Nm 2126is derived from NetBSD 2127.Xr make 1 . 2128It uses autoconf to facilitate portability to other platforms. 2129.Pp 2130A 2131make 2132command appeared in 2133.At v7 . 2134This 2135make 2136implementation is based on Adam De Boor's pmake program which was written 2137for Sprite at Berkeley. 2138It was designed to be a parallel distributed make running jobs on different 2139machines using a daemon called 2140.Dq customs . 2141.Pp 2142Historically the target/dependency 2143.Dq FRC 2144has been used to FoRCe rebuilding (since the target/dependency 2145does not exist... unless someone creates an 2146.Dq FRC 2147file). 2148.Sh BUGS 2149The 2150make 2151syntax is difficult to parse without actually acting of the data. 2152For instance finding the end of a variable use should involve scanning each 2153the modifiers using the correct terminator for each field. 2154In many places 2155make 2156just counts {} and () in order to find the end of a variable expansion. 2157.Pp 2158There is no way of escaping a space character in a filename. 2159