Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 25 Oct 2012 23:18:06 +0000 (UTC)
From:      "Simon J. Gerraty" <sjg@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r242102 - in head: contrib/bmake usr.bin/bmake
Message-ID:  <201210252318.q9PNI6IQ069461@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: sjg
Date: Thu Oct 25 23:18:05 2012
New Revision: 242102
URL: http://svn.freebsd.org/changeset/base/242102

Log:
  Merge bmake-20121010
  
  Approved by:	marcel (mentor)

Modified:
  head/contrib/bmake/ChangeLog
  head/contrib/bmake/Makefile.in
  head/contrib/bmake/bmake.1
  head/contrib/bmake/bmake.cat1
  head/contrib/bmake/bsd.after-import.mk
  head/contrib/bmake/compat.c
  head/contrib/bmake/make.1
  head/usr.bin/bmake/Makefile
Directory Properties:
  head/contrib/bmake/   (props changed)

Modified: head/contrib/bmake/ChangeLog
==============================================================================
--- head/contrib/bmake/ChangeLog	Thu Oct 25 22:54:29 2012	(r242101)
+++ head/contrib/bmake/ChangeLog	Thu Oct 25 23:18:05 2012	(r242102)
@@ -1,3 +1,27 @@
+2012-10-10  Simon J. Gerraty  <sjg@bad.crufty.net>
+
+	* Makefile.in (MAKE_VERSION): 20121010
+	  o protect syntax that only bmake parses correctly.
+	  o remove auto setting of FORCE_MACHINE, use configure's
+	    --with-force-machine=whatever if that is desired.
+	
+2012-10-08  Simon J. Gerraty  <sjg@bad.crufty.net>
+
+	* Makefile.in: do not lose history from make.1 when generating bmake.1
+
+2012-10-07  Simon J. Gerraty  <sjg@bad.crufty.net>
+
+	* Makefile.in (MAKE_VERSION): 20121007
+	  Merge with NetBSD make, pick up
+	  o compat.c: ignore empty commands - same as jobs mode.
+	  o make.1: document meta chars that cause use of shell
+
+2012-09-11  Simon J. Gerraty  <sjg@bad.crufty.net>
+
+	* Makefile.in (MAKE_VERSION): bump version to 20120911
+	* bsd.after-import.mk: include Makefile.inc early and allow it to
+	  override PROG
+
 2012-08-31  Simon J. Gerraty  <sjg@bad.crufty.net>
 
 	* Makefile.in (MAKE_VERSION): bump version to 20120831

Modified: head/contrib/bmake/Makefile.in
==============================================================================
--- head/contrib/bmake/Makefile.in	Thu Oct 25 22:54:29 2012	(r242101)
+++ head/contrib/bmake/Makefile.in	Thu Oct 25 23:18:05 2012	(r242102)
@@ -1,7 +1,7 @@
 #	$NetBSD: Makefile,v 1.56 2012/05/30 21:54:23 sjg Exp $
 #	@(#)Makefile	5.2 (Berkeley) 12/28/90
 
-#	$Id: Makefile.in,v 1.170 2012/08/31 06:46:22 sjg Exp $
+#	$Id: Makefile.in,v 1.174 2012/10/10 18:46:24 sjg Exp $
 
 PROG=	bmake
 SRCS=	arch.c buf.c compat.c cond.c dir.c for.c hash.c job.c main.c \
@@ -21,7 +21,7 @@ srcdir= @srcdir@
 CC?= @CC@
 
 # Base version on src date
-MAKE_VERSION= 20120831
+MAKE_VERSION= 20121010
 MACHINE=@machine@
 MACHINE_ARCH=@machine_arch@
 DEFAULT_SYS_PATH = @default_sys_path@
@@ -71,10 +71,9 @@ SUBDIR=	PSD.doc
 .endif
 .endif
 
+.if defined(.PARSEDIR) 
+# we cannot rely on anything but bmake to parse this correctly.
 .if empty(isBSD44:M${OS})
-# XXX not sure if we still want this given that configure
-# lets us force or not the definition of MACHINE.
-CFLAGS_main.o+= "-DFORCE_MACHINE=\"${MACHINE}\""
 MANTARGET=cat
 INSTALL?=${srcdir}/install-sh
 .if (${MACHINE} == "sun386")
@@ -85,7 +84,7 @@ SRCS+= sigcompat.c
 CFLAGS+= -DSIGNAL_FLAGS=SA_RESTART
 .endif
 .endif
-.if defined(.PARSEDIR)
+
 .if make(obj) || make(clean)
 SUBDIR+= unit-tests
 .endif
@@ -104,14 +103,18 @@ EXTRACT_MAN=no
 
 MAN=${PROG}.1
 .if (${PROG} != "make")
-${MAN}:	make.1
-	@echo making ${PROG}.1
-	@sed -e 's/^.Nx/NetBSD/' -e '/^.Nm/s/make/${PROG}/' -e '/^.Sh HISTORY/,$$d' ${srcdir}/make.1 > $@
-	@(echo ".Sh HISTORY"; \
-	echo ".Nm"; \
+my.history: ${MAKEFILE}
+	@(echo ".Nm"; \
 	echo "is derived from NetBSD"; \
 	echo ".Xr make 1 ."; \
-	echo It uses autoconf to facilitate portability to other platforms.) >> $@
+	echo "It uses autoconf to facilitate portability to other platforms."; \
+	echo ".Pp") > $@
+
+${MAN}:	make.1 my.history
+	@echo making ${PROG}.1
+	@sed -e 's/^.Nx/NetBSD/' -e '/^.Nm/s/make/${PROG}/' \
+	-e '/^.Sh HISTORY/rmy.history' \
+	-e '/^.Sh HISTORY/,$$s,^.Nm,make,' ${.CURDIR}/make.1 > $@
 
 .endif
 

Modified: head/contrib/bmake/bmake.1
==============================================================================
--- head/contrib/bmake/bmake.1	Thu Oct 25 22:54:29 2012	(r242101)
+++ head/contrib/bmake/bmake.1	Thu Oct 25 23:18:05 2012	(r242102)
@@ -1,4 +1,4 @@
-.\"	$NetBSD: make.1,v 1.206 2012/08/30 22:35:37 wiz Exp $
+.\"	$NetBSD: make.1,v 1.209 2012/10/08 15:09:48 christos Exp $
 .\"
 .\" Copyright (c) 1990, 1993
 .\"	The Regents of the University of California.  All rights reserved.
@@ -29,7 +29,7 @@
 .\"
 .\"	from: @(#)make.1	8.4 (Berkeley) 3/19/94
 .\"
-.Dd August 30, 2012
+.Dd October 8, 2012
 .Dt MAKE 1
 .Os
 .Sh NAME
@@ -2042,6 +2042,13 @@ or
 To be compatible with Makefiles that do this, one can use
 .Fl B
 to disable this behavior.
+.Pp
+In compatibility mode, each command is run in a separate process.
+If the command contains any shell meta characters
+.Pq Ql #=|^(){};&<>*?[]:$`\e\en
+it will be passed to the shell, otherwise
+.Nm
+will attempt direct execution.
 .Sh SEE ALSO
 .Xr mkdep 1
 .Sh HISTORY
@@ -2049,3 +2056,26 @@ to disable this behavior.
 is derived from NetBSD
 .Xr make 1 .
 It uses autoconf to facilitate portability to other platforms.
+.Pp
+A
+make
+command appeared in
+.At v7 .
+This
+make
+implementation is based on Adam De Boor's pmake program which was written
+for Sprite at Berkeley.
+It was designed to be a parallel distributed make running jobs on different
+machines using a daemon called
+.Dq customs .
+.Sh BUGS
+The
+make
+syntax is difficult to parse without actually acting of the data.
+For instance finding the end of a variable use should involve scanning each
+the modifiers using the correct terminator for each field.
+In many places
+make
+just counts {} and () in order to find the end of a variable expansion.
+.Pp
+There is no way of escaping a space character in a filename.

Modified: head/contrib/bmake/bmake.cat1
==============================================================================
--- head/contrib/bmake/bmake.cat1	Thu Oct 25 22:54:29 2012	(r242101)
+++ head/contrib/bmake/bmake.cat1	Thu Oct 25 23:18:05 2012	(r242102)
@@ -1301,1321 +1301,30 @@ CCOOMMPPAATTIIBBIILLIITTYY
      ``chdir''.  To be compatible with Makefiles that do this, one can use --BB
      to disable this behavior.
 
+     In compatibility mode, each command is run in a separate process.  If the
+     command contains any shell meta characters (`#=|^(){};&<>*?[]:$`\\n') it
+     will be passed to the shell, otherwise bbmmaakkee will attempt direct execu-
+     tion.
+
 SSEEEE AALLSSOO
      mkdep(1)
 
 HHIISSTTOORRYY
      bbmmaakkee is derived from NetBSD make(1).  It uses autoconf to facilitate
-MAKE(1)                 NetBSD General Commands Manual                 MAKE(1)
-
      portability to other platforms.
 
-NNAAMMEE
-     bbmmaakkee -- maintain program dependencies
-
-SSYYNNOOPPSSIISS
-     bbmmaakkee [--BBeeiikkNNnnqqrrssttWWXX] [--CC _d_i_r_e_c_t_o_r_y] [--DD _v_a_r_i_a_b_l_e] [--dd _f_l_a_g_s]
-           [--ff _m_a_k_e_f_i_l_e] [--II _d_i_r_e_c_t_o_r_y] [--JJ _p_r_i_v_a_t_e] [--jj _m_a_x___j_o_b_s]
-           [--mm _d_i_r_e_c_t_o_r_y] [--TT _f_i_l_e] [--VV _v_a_r_i_a_b_l_e] [_v_a_r_i_a_b_l_e_=_v_a_l_u_e]
-           [_t_a_r_g_e_t _._._.]
-
-DDEESSCCRRIIPPTTIIOONN
-     bbmmaakkee is a program designed to simplify the maintenance of other pro-
-     grams.  Its input is a list of specifications as to the files upon which
-     programs and other files depend.  If no --ff _m_a_k_e_f_i_l_e makefile option is
-     given, bbmmaakkee will try to open `_m_a_k_e_f_i_l_e' then `_M_a_k_e_f_i_l_e' in order to find
-     the specifications.  If the file `_._d_e_p_e_n_d' exists, it is read (see
-     mkdep(1)).
-
-     This manual page is intended as a reference document only.  For a more
-     thorough description of bbmmaakkee and makefiles, please refer to _P_M_a_k_e _- _A
-     _T_u_t_o_r_i_a_l.
-
-     bbmmaakkee will prepend the contents of the _M_A_K_E_F_L_A_G_S environment variable to
-     the command line arguments before parsing them.
-
-     The options are as follows:
-
-     --BB      Try to be backwards compatible by executing a single shell per
-             command and by executing the commands to make the sources of a
-             dependency line in sequence.
-
-     --CC _d_i_r_e_c_t_o_r_y
-             Change to _d_i_r_e_c_t_o_r_y before reading the makefiles or doing any-
-             thing else.  If multiple --CC options are specified, each is inter-
-             preted relative to the previous one: --CC _/ --CC _e_t_c is equivalent to
-             --CC _/_e_t_c.
-
-     --DD _v_a_r_i_a_b_l_e
-             Define _v_a_r_i_a_b_l_e to be 1, in the global context.
-
-     --dd _[_-_]_f_l_a_g_s
-             Turn on debugging, and specify which portions of bbmmaakkee are to
-             print debugging information.  Unless the flags are preceded by
-             `-' they are added to the _M_A_K_E_F_L_A_G_S environment variable and will
-             be processed by any child make processes.  By default, debugging
-             information is printed to standard error, but this can be changed
-             using the _F debugging flag.  The debugging output is always
-             unbuffered; in addition, if debugging is enabled but debugging
-             output is not directed to standard output, then the standard out-
-             put is line buffered.  _F_l_a_g_s is one or more of the following:
-
-             _A       Print all possible debugging information; equivalent to
-                     specifying all of the debugging flags.
-
-             _a       Print debugging information about archive searching and
-                     caching.
-
-             _C       Print debugging information about current working direc-
-                     tory.
-
-             _c       Print debugging information about conditional evaluation.
-
-             _d       Print debugging information about directory searching and
-                     caching.
-
-             _e       Print debugging information about failed commands and
-                     targets.
-
-             _F[++]_f_i_l_e_n_a_m_e
-                     Specify where debugging output is written.  This must be
-                     the last flag, because it consumes the remainder of the
-                     argument.  If the character immediately after the `F'
-                     flag is `+', then the file will be opened in append mode;
-                     otherwise the file will be overwritten.  If the file name
-                     is `stdout' or `stderr' then debugging output will be
-                     written to the standard output or standard error output
-                     file descriptors respectively (and the `+' option has no
-                     effect).  Otherwise, the output will be written to the
-                     named file.  If the file name ends `.%d' then the `%d' is
-                     replaced by the pid.
-
-             _f       Print debugging information about loop evaluation.
-
-             _g_1      Print the input graph before making anything.
-
-             _g_2      Print the input graph after making everything, or before
-                     exiting on error.
-
-             _g_3      Print the input graph before exiting on error.
-
-             _j       Print debugging information about running multiple
-                     shells.
-
-             _l       Print commands in Makefiles regardless of whether or not
-                     they are prefixed by `@' or other "quiet" flags.  Also
-                     known as "loud" behavior.
-
-             _M       Print debugging information about "meta" mode decisions
-                     about targets.
-
-             _m       Print debugging information about making targets, includ-
-                     ing modification dates.
-
-             _n       Don't delete the temporary command scripts created when
-                     running commands.  These temporary scripts are created in
-                     the directory referred to by the TMPDIR environment vari-
-                     able, or in _/_t_m_p if TMPDIR is unset or set to the empty
-                     string.  The temporary scripts are created by mkstemp(3),
-                     and have names of the form _m_a_k_e_X_X_X_X_X_X.  _N_O_T_E: This can
-                     create many files in TMPDIR or _/_t_m_p, so use with care.
-
-             _p       Print debugging information about makefile parsing.
-
-             _s       Print debugging information about suffix-transformation
-                     rules.
-
-             _t       Print debugging information about target list mainte-
-                     nance.
-
-             _V       Force the --VV option to print raw value of variables.
-
-             _v       Print debugging information about variable assignment.
-
-             _x       Run shell commands with --xx so the actual commands are
-                     printed as they are executed.
-
-     --ee      Specify that environment variables override macro assignments
-             within makefiles.
-
-     --ff _m_a_k_e_f_i_l_e
-             Specify a makefile to read instead of the default `_m_a_k_e_f_i_l_e'.  If
-             _m_a_k_e_f_i_l_e is `--', standard input is read.  Multiple makefiles may
-             be specified, and are read in the order specified.
-
-     --II _d_i_r_e_c_t_o_r_y
-             Specify a directory in which to search for makefiles and included
-             makefiles.  The system makefile directory (or directories, see
-             the --mm option) is automatically included as part of this list.
-
-     --ii      Ignore non-zero exit of shell commands in the makefile.  Equiva-
-             lent to specifying `--' before each command line in the makefile.
-
-     --JJ _p_r_i_v_a_t_e
-             This option should _n_o_t be specified by the user.
-
-             When the _j option is in use in a recursive build, this option is
-             passed by a make to child makes to allow all the make processes
-             in the build to cooperate to avoid overloading the system.
-
-     --jj _m_a_x___j_o_b_s
-             Specify the maximum number of jobs that bbmmaakkee may have running at
-             any one time.  The value is saved in _._M_A_K_E_._J_O_B_S.  Turns compati-
-             bility mode off, unless the _B flag is also specified.  When com-
-             patibility mode is off, all commands associated with a target are
-             executed in a single shell invocation as opposed to the tradi-
-             tional one shell invocation per line.  This can break traditional
-             scripts which change directories on each command invocation and
-             then expect to start with a fresh environment on the next line.
-             It is more efficient to correct the scripts rather than turn
-             backwards compatibility on.
-
-     --kk      Continue processing after errors are encountered, but only on
-             those targets that do not depend on the target whose creation
-             caused the error.
-
-     --mm _d_i_r_e_c_t_o_r_y
-             Specify a directory in which to search for sys.mk and makefiles
-             included via the <_f_i_l_e>-style include statement.  The --mm option
-             can be used multiple times to form a search path.  This path will
-             override the default system include path: /usr/share/mk.  Fur-
-             thermore the system include path will be appended to the search
-             path used for "_f_i_l_e"-style include statements (see the --II
-             option).
-
-             If a file or directory name in the --mm argument (or the
-             MAKESYSPATH environment variable) starts with the string ".../"
-             then bbmmaakkee will search for the specified file or directory named
-             in the remaining part of the argument string.  The search starts
-             with the current directory of the Makefile and then works upward
-             towards the root of the filesystem.  If the search is successful,
-             then the resulting directory replaces the ".../" specification in
-             the --mm argument.  If used, this feature allows bbmmaakkee to easily
-             search in the current source tree for customized sys.mk files
-             (e.g., by using ".../mk/sys.mk" as an argument).
-
-     --nn      Display the commands that would have been executed, but do not
-             actually execute them unless the target depends on the .MAKE spe-
-             cial source (see below).
-
-     --NN      Display the commands which would have been executed, but do not
-             actually execute any of them; useful for debugging top-level
-             makefiles without descending into subdirectories.
-
-     --qq      Do not execute any commands, but exit 0 if the specified targets
-             are up-to-date and 1, otherwise.
-
-     --rr      Do not use the built-in rules specified in the system makefile.
-
-     --ss      Do not echo any commands as they are executed.  Equivalent to
-             specifying `@@' before each command line in the makefile.
-
-     --TT _t_r_a_c_e_f_i_l_e
-             When used with the --jj flag, append a trace record to _t_r_a_c_e_f_i_l_e
-             for each job started and completed.
-
-     --tt      Rather than re-building a target as specified in the makefile,
-             create it or update its modification time to make it appear up-
-             to-date.
-
-     --VV _v_a_r_i_a_b_l_e
-             Print bbmmaakkee's idea of the value of _v_a_r_i_a_b_l_e, in the global con-
-             text.  Do not build any targets.  Multiple instances of this
-             option may be specified; the variables will be printed one per
-             line, with a blank line for each null or undefined variable.  If
-             _v_a_r_i_a_b_l_e contains a `$' then the value will be expanded before
-             printing.
-
-     --WW      Treat any warnings during makefile parsing as errors.
-
-     --XX      Don't export variables passed on the command line to the environ-
-             ment individually.  Variables passed on the command line are
-             still exported via the _M_A_K_E_F_L_A_G_S environment variable.  This
-             option may be useful on systems which have a small limit on the
-             size of command arguments.
-
-     _v_a_r_i_a_b_l_e_=_v_a_l_u_e
-             Set the value of the variable _v_a_r_i_a_b_l_e to _v_a_l_u_e.  Normally, all
-             values passed on the command line are also exported to sub-makes
-             in the environment.  The --XX flag disables this behavior.  Vari-
-             able assignments should follow options for POSIX compatibility
-             but no ordering is enforced.
-
-     There are seven different types of lines in a makefile: file dependency
-     specifications, shell commands, variable assignments, include statements,
-     conditional directives, for loops, and comments.
-
-     In general, lines may be continued from one line to the next by ending
-     them with a backslash (`\').  The trailing newline character and initial
-     whitespace on the following line are compressed into a single space.
-
-FFIILLEE DDEEPPEENNDDEENNCCYY SSPPEECCIIFFIICCAATTIIOONNSS
-     Dependency lines consist of one or more targets, an operator, and zero or
-     more sources.  This creates a relationship where the targets ``depend''
-     on the sources and are usually created from them.  The exact relationship
-     between the target and the source is determined by the operator that sep-
-     arates them.  The three operators are as follows:
-
-     ::     A target is considered out-of-date if its modification time is less
-           than those of any of its sources.  Sources for a target accumulate
-           over dependency lines when this operator is used.  The target is
-           removed if bbmmaakkee is interrupted.
-
-     !!     Targets are always re-created, but not until all sources have been
-           examined and re-created as necessary.  Sources for a target accumu-
-           late over dependency lines when this operator is used.  The target
-           is removed if bbmmaakkee is interrupted.
-
-     ::::    If no sources are specified, the target is always re-created.  Oth-
-           erwise, a target is considered out-of-date if any of its sources
-           has been modified more recently than the target.  Sources for a
-           target do not accumulate over dependency lines when this operator
-           is used.  The target will not be removed if bbmmaakkee is interrupted.
-
-     Targets and sources may contain the shell wildcard values `?', `*', `[]',
-     and `{}'.  The values `?', `*', and `[]' may only be used as part of the
-     final component of the target or source, and must be used to describe
-     existing files.  The value `{}' need not necessarily be used to describe
-     existing files.  Expansion is in directory order, not alphabetically as
-     done in the shell.
-
-SSHHEELLLL CCOOMMMMAANNDDSS
-     Each target may have associated with it a series of shell commands, nor-
-     mally used to create the target.  Each of the commands in this script
-     _m_u_s_t be preceded by a tab.  While any target may appear on a dependency
-     line, only one of these dependencies may be followed by a creation
-     script, unless the `::::' operator is used.
-
-     If the first characters of the command line are any combination of `@@',
-     `++', or `--', the command is treated specially.  A `@@' causes the command
-     not to be echoed before it is executed.  A `++' causes the command to be
-     executed even when --nn is given.  This is similar to the effect of the
-     .MAKE special source, except that the effect can be limited to a single
-     line of a script.  A `--' causes any non-zero exit status of the command
-     line to be ignored.
-
-VVAARRIIAABBLLEE AASSSSIIGGNNMMEENNTTSS
-     Variables in make are much like variables in the shell, and, by tradi-
-     tion, consist of all upper-case letters.
-
-   VVaarriiaabbllee aassssiiggnnmmeenntt mmooddiiffiieerrss
-     The five operators that can be used to assign values to variables are as
-     follows:
-
-     ==       Assign the value to the variable.  Any previous value is overrid-
-             den.
-
-     ++==      Append the value to the current value of the variable.
-
-     ??==      Assign the value to the variable if it is not already defined.
-
-     ::==      Assign with expansion, i.e. expand the value before assigning it
-             to the variable.  Normally, expansion is not done until the vari-
-             able is referenced.  _N_O_T_E: References to undefined variables are
-             _n_o_t expanded.  This can cause problems when variable modifiers
-             are used.
-
-     !!==      Expand the value and pass it to the shell for execution and
-             assign the result to the variable.  Any newlines in the result
-             are replaced with spaces.
-
-     Any white-space before the assigned _v_a_l_u_e is removed; if the value is
-     being appended, a single space is inserted between the previous contents
-     of the variable and the appended value.
-
-     Variables are expanded by surrounding the variable name with either curly
-     braces (`{}') or parentheses (`()') and preceding it with a dollar sign
-     (`$').  If the variable name contains only a single letter, the surround-
-     ing braces or parentheses are not required.  This shorter form is not
-     recommended.
-
-     If the variable name contains a dollar, then the name itself is expanded
-     first.  This allows almost arbitrary variable names, however names con-
-     taining dollar, braces, parenthesis, or whitespace are really best
-     avoided!
-
-     If the result of expanding a variable contains a dollar sign (`$') the
-     string is expanded again.
-
-     Variable substitution occurs at three distinct times, depending on where
-     the variable is being used.
-
-     1.   Variables in dependency lines are expanded as the line is read.
-
-     2.   Variables in shell commands are expanded when the shell command is
-          executed.
-
-     3.   ``.for'' loop index variables are expanded on each loop iteration.
-          Note that other variables are not expanded inside loops so the fol-
-          lowing example code:
-
-
-                .for i in 1 2 3
-                a+=     ${i}
-                j=      ${i}
-                b+=     ${j}
-                .endfor
-
-                all:
-                        @echo ${a}
-                        @echo ${b}
-
-          will print:
-
-                1 2 3
-                3 3 3
-
-          Because while ${a} contains ``1 2 3'' after the loop is executed,
-          ${b} contains ``${j} ${j} ${j}'' which expands to ``3 3 3'' since
-          after the loop completes ${j} contains ``3''.
-
-   VVaarriiaabbllee ccllaasssseess
-     The four different classes of variables (in order of increasing prece-
-     dence) are:
-
-     Environment variables
-             Variables defined as part of bbmmaakkee's environment.
-
-     Global variables
-             Variables defined in the makefile or in included makefiles.
-
-     Command line variables
-             Variables defined as part of the command line.
-
-     Local variables
-             Variables that are defined specific to a certain target.  The
-             seven local variables are as follows:
-
-             _._A_L_L_S_R_C   The list of all sources for this target; also known as
-                       `_>'.
-
-             _._A_R_C_H_I_V_E  The name of the archive file.
-
-             _._I_M_P_S_R_C   In suffix-transformation rules, the name/path of the
-                       source from which the target is to be transformed (the
-                       ``implied'' source); also known as `_<'.  It is not
-                       defined in explicit rules.
-
-             _._M_E_M_B_E_R   The name of the archive member.
-
-             _._O_O_D_A_T_E   The list of sources for this target that were deemed
-                       out-of-date; also known as `_?'.
-
-             _._P_R_E_F_I_X   The file prefix of the target, containing only the file
-                       portion, no suffix or preceding directory components;
-                       also known as `_*'.
-
-             _._T_A_R_G_E_T   The name of the target; also known as `_@'.
-
-             The shorter forms `_@', `_?', `_<', `_>', and `_*' are permitted for
-             backward compatibility with historical makefiles and are not rec-
-             ommended.  The six variables `_@_F', `_@_D', `_<_F', `_<_D', `_*_F', and
-             `_*_D' are permitted for compatibility with AT&T System V UNIX
-             makefiles and are not recommended.
-
-             Four of the local variables may be used in sources on dependency
-             lines because they expand to the proper value for each target on
-             the line.  These variables are `_._T_A_R_G_E_T', `_._P_R_E_F_I_X', `_._A_R_C_H_I_V_E',
-             and `_._M_E_M_B_E_R'.
-
-   AAddddiittiioonnaall bbuuiilltt--iinn vvaarriiaabblleess
-     In addition, bbmmaakkee sets or knows about the following variables:
-
-     _$               A single dollar sign `$', i.e.  `$$' expands to a single
-                     dollar sign.
-
-     _._A_L_L_T_A_R_G_E_T_S     The list of all targets encountered in the Makefile.  If
-                     evaluated during Makefile parsing, lists only those tar-
-                     gets encountered thus far.
-
-     _._C_U_R_D_I_R         A path to the directory where bbmmaakkee was executed.  Refer
-                     to the description of `PWD' for more details.
-
-     MAKE            The name that bbmmaakkee was executed with (_a_r_g_v_[_0_]).  For
-                     compatibility bbmmaakkee also sets _._M_A_K_E with the same value.
-                     The preferred variable to use is the environment variable
-                     MAKE because it is more compatible with other versions of
-                     bbmmaakkee and cannot be confused with the special target with
-                     the same name.
-
-     _._M_A_K_E_._D_E_P_E_N_D_F_I_L_E
-                     Names the makefile (default `_._d_e_p_e_n_d') from which gener-
-                     ated dependencies are read.
-
-     _._M_A_K_E_._E_X_P_A_N_D___V_A_R_I_A_B_L_E_S
-                     A boolean that controls the default behavior of the --VV
-                     option.
-
-     _._M_A_K_E_._E_X_P_O_R_T_E_D  The list of variables exported by bbmmaakkee.
-
-     _._M_A_K_E_._J_O_B_S      The argument to the --jj option.
-
-     _._M_A_K_E_._J_O_B_._P_R_E_F_I_X
-                     If bbmmaakkee is run with _j then output for each target is
-                     prefixed with a token `--- target ---' the first part of
-                     which can be controlled via _._M_A_K_E_._J_O_B_._P_R_E_F_I_X.
-                     For example:
-                     .MAKE.JOB.PREFIX=${.newline}---${.MAKE:T}[${.MAKE.PID}]
-                     would produce tokens like `---make[1234] target ---' mak-
-                     ing it easier to track the degree of parallelism being
-                     achieved.
-
-     MAKEFLAGS       The environment variable `MAKEFLAGS' may contain anything
-                     that may be specified on bbmmaakkee's command line.  Anything
-                     specified on bbmmaakkee's command line is appended to the
-                     `MAKEFLAGS' variable which is then entered into the envi-
-                     ronment for all programs which bbmmaakkee executes.
-
-     _._M_A_K_E_._L_E_V_E_L     The recursion depth of bbmmaakkee.  The initial instance of
-                     bbmmaakkee will be 0, and an incremented value is put into the
-                     environment to be seen by the next generation.  This
-                     allows tests like: .if ${.MAKE.LEVEL} == 0 to protect
-                     things which should only be evaluated in the initial
-                     instance of bbmmaakkee.
-
-     _._M_A_K_E_._M_A_K_E_F_I_L_E___P_R_E_F_E_R_E_N_C_E
-                     The ordered list of makefile names (default `_m_a_k_e_f_i_l_e',
-                     `_M_a_k_e_f_i_l_e') that bbmmaakkee will look for.
-
-     _._M_A_K_E_._M_A_K_E_F_I_L_E_S
-                     The list of makefiles read by bbmmaakkee, which is useful for
-                     tracking dependencies.  Each makefile is recorded only
-                     once, regardless of the number of times read.
-
-     _._M_A_K_E_._M_O_D_E      Processed after reading all makefiles.  Can affect the
-                     mode that bbmmaakkee runs in.  It can contain a number of key-
-                     words:
-
-                     _c_o_m_p_a_t      Like --BB, puts bbmmaakkee into "compat" mode.
-
-                     _m_e_t_a        Puts bbmmaakkee into "meta" mode, where meta files
-                                 are created for each target to capture the
-                                 command run, the output generated and if
-                                 filemon(4) is available, the system calls
-                                 which are of interest to bbmmaakkee.  The captured
-                                 output can be very useful when diagnosing
-                                 errors.
-
-                     _c_u_r_d_i_r_O_k_= _b_f Normally bbmmaakkee will not create .meta files
-                                 in `_._C_U_R_D_I_R'.  This can be overridden by set-
-                                 ting _b_f to a value which represents True.
-
-                     _e_n_v         For debugging, it can be useful to inlcude
-                                 the environment in the .meta file.
-
-                     _v_e_r_b_o_s_e     If in "meta" mode, print a clue about the
-                                 target being built.  This is useful if the
-                                 build is otherwise running silently.  The
-                                 message printed the value of:
-                                 _._M_A_K_E_._M_E_T_A_._P_R_E_F_I_X.
-
-                     _i_g_n_o_r_e_-_c_m_d  Some makefiles have commands which are simply
-                                 not stable.  This keyword causes them to be
-                                 ignored for determining whether a target is
-                                 out of date in "meta" mode.  See also
-                                 ..NNOOMMEETTAA__CCMMPP.
-
-                     _s_i_l_e_n_t_= _b_f  If _b_f is True, when a .meta file is created,
-                                 mark the target ..SSIILLEENNTT.
-
-     _._M_A_K_E_._M_E_T_A_._B_A_I_L_I_W_I_C_K
-                     In "meta" mode, provides a list of prefixes which match
-                     the directories controlled by bbmmaakkee.  If a file that was
-                     generated outside of _._O_B_J_D_I_R but within said bailiwick is
-                     missing, the current target is considered out-of-date.
-
-     _._M_A_K_E_._M_E_T_A_._C_R_E_A_T_E_D
-                     In "meta" mode, this variable contains a list of all the
-                     meta files updated.  If not empty, it can be used to
-                     trigger processing of _._M_A_K_E_._M_E_T_A_._F_I_L_E_S.
-
-     _._M_A_K_E_._M_E_T_A_._F_I_L_E_S
-                     In "meta" mode, this variable contains a list of all the
-                     meta files used (updated or not).  This list can be used
-                     to process the meta files to extract dependency informa-
-                     tion.
-
-     _._M_A_K_E_._M_E_T_A_._P_R_E_F_I_X
-                     Defines the message printed for each meta file updated in
-                     "meta verbose" mode.  The default value is:
-                           Building ${.TARGET:H:tA}/${.TARGET:T}
-
-     _._M_A_K_E_O_V_E_R_R_I_D_E_S  This variable is used to record the names of variables
-                     assigned to on the command line, so that they may be
-                     exported as part of `MAKEFLAGS'.  This behaviour can be
-                     disabled by assigning an empty value to `_._M_A_K_E_O_V_E_R_R_I_D_E_S'
-                     within a makefile.  Extra variables can be exported from
-                     a makefile by appending their names to `_._M_A_K_E_O_V_E_R_R_I_D_E_S'.
-                     `MAKEFLAGS' is re-exported whenever `_._M_A_K_E_O_V_E_R_R_I_D_E_S' is
-                     modified.
-
-     _._M_A_K_E_._P_I_D       The process-id of bbmmaakkee.
-
-     _._M_A_K_E_._P_P_I_D      The parent process-id of bbmmaakkee.
-
-     _M_A_K_E___P_R_I_N_T___V_A_R___O_N___E_R_R_O_R
-                     When bbmmaakkee stops due to an error, it prints its name and
-                     the value of `_._C_U_R_D_I_R' as well as the value of any vari-
-                     ables named in `_M_A_K_E___P_R_I_N_T___V_A_R___O_N___E_R_R_O_R'.
-
-     _._n_e_w_l_i_n_e        This variable is simply assigned a newline character as
-                     its value.  This allows expansions using the ::@@ modifier
-                     to put a newline between iterations of the loop rather
-                     than a space.  For example, the printing of
-                     `_M_A_K_E___P_R_I_N_T___V_A_R___O_N___E_R_R_O_R' could be done as
-                     ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@}.
-
-     _._O_B_J_D_I_R         A path to the directory where the targets are built.  Its
-                     value is determined by trying to chdir(2) to the follow-
-                     ing directories in order and using the first match:
-
-                     1.   ${MAKEOBJDIRPREFIX}${.CURDIR}
-
-                          (Only if `MAKEOBJDIRPREFIX' is set in the environ-
-                          ment or on the command line.)
-
-                     2.   ${MAKEOBJDIR}
-
-                          (Only if `MAKEOBJDIR' is set in the environment or
-                          on the command line.)
-
-                     3.   ${.CURDIR}_/_o_b_j_.${MACHINE}
-
-                     4.   ${.CURDIR}_/_o_b_j
-
-                     5.   _/_u_s_r_/_o_b_j_/${.CURDIR}
-
-                     6.   ${.CURDIR}
-
-                     Variable expansion is performed on the value before it's
-                     used, so expressions such as
-                           ${.CURDIR:S,^/usr/src,/var/obj,}
-                     may be used.  This is especially useful with
-                     `MAKEOBJDIR'.
-
-                     `_._O_B_J_D_I_R' may be modified in the makefile as a global
-                     variable.  In all cases, bbmmaakkee will chdir(2) to `_._O_B_J_D_I_R'
-                     and set `PWD' to that directory before executing any tar-
-                     gets.
-
-     _._P_A_R_S_E_D_I_R       A path to the directory of the current `_M_a_k_e_f_i_l_e' being
-                     parsed.
-
-     _._P_A_R_S_E_F_I_L_E      The basename of the current `_M_a_k_e_f_i_l_e' being parsed.
-                     This variable and `_._P_A_R_S_E_D_I_R' are both set only while the
-                     `_M_a_k_e_f_i_l_e_s' are being parsed.  If you want to retain
-                     their current values, assign them to a variable using
-                     assignment with expansion: (`::==').
-
-     _._P_A_T_H           A variable that represents the list of directories that
-                     bbmmaakkee will search for files.  The search list should be
-                     updated using the target `_._P_A_T_H' rather than the vari-
-                     able.
-
-     PWD             Alternate path to the current directory.  bbmmaakkee normally
-                     sets `_._C_U_R_D_I_R' to the canonical path given by getcwd(3).
-                     However, if the environment variable `PWD' is set and
-                     gives a path to the current directory, then bbmmaakkee sets
-                     `_._C_U_R_D_I_R' to the value of `PWD' instead.  This behaviour
-                     is disabled if `MAKEOBJDIRPREFIX' is set or `MAKEOBJDIR'
-                     contains a variable transform.  `PWD' is set to the value
-                     of `_._O_B_J_D_I_R' for all programs which bbmmaakkee executes.
-
-     .TARGETS        The list of targets explicitly specified on the command
-                     line, if any.
-
-     VPATH           Colon-separated (``:'') lists of directories that bbmmaakkee
-                     will search for files.  The variable is supported for
-                     compatibility with old make programs only, use `_._P_A_T_H'
-                     instead.
-
-   VVaarriiaabbllee mmooddiiffiieerrss
-     Variable expansion may be modified to select or modify each word of the
-     variable (where a ``word'' is white-space delimited sequence of charac-
-     ters).  The general format of a variable expansion is as follows:
-
-           ${variable[:modifier[:...]]}
-
-     Each modifier begins with a colon, which may be escaped with a backslash
-     (`\').
-
-     A set of modifiers can be specified via a variable, as follows:
-
-           modifier_variable=modifier[:...]
-           ${variable:${modifier_variable}[:...]}
-
-     In this case the first modifier in the modifier_variable does not start
-     with a colon, since that must appear in the referencing variable.  If any
-     of the modifiers in the modifier_variable contain a dollar sign (`$'),
-     these must be doubled to avoid early expansion.
-
-     The supported modifiers are:
-
-     ::EE   Replaces each word in the variable with its suffix.
-
-     ::HH   Replaces each word in the variable with everything but the last com-
-          ponent.
-
-     ::MM_p_a_t_t_e_r_n
-          Select only those words that match _p_a_t_t_e_r_n.  The standard shell
-          wildcard characters (`*', `?', and `[]') may be used.  The wildcard
-          characters may be escaped with a backslash (`\').
-
-     ::NN_p_a_t_t_e_r_n
-          This is identical to `::MM', but selects all words which do not match
-          _p_a_t_t_e_r_n.
-
-     ::OO   Order every word in variable alphabetically.  To sort words in
-          reverse order use the `::OO::[[--11....11]]' combination of modifiers.
+     A make command appeared in Version 7 AT&T UNIX.  This make implementation
+     is based on Adam De Boor's pmake program which was written for Sprite at
+     Berkeley.  It was designed to be a parallel distributed make running jobs
+     on different machines using a daemon called ``customs''.
+
+BBUUGGSS
+     The make syntax is difficult to parse without actually acting of the
+     data.  For instance finding the end of a variable use should involve
+     scanning each the modifiers using the correct terminator for each field.
+     In many places make just counts {} and () in order to find the end of a
+     variable expansion.
 
-     ::OOxx  Randomize words in variable.  The results will be different each
-          time you are referring to the modified variable; use the assignment
-          with expansion (`::==') to prevent such behaviour.  For example,
-
-                LIST=                   uno due tre quattro
-                RANDOM_LIST=            ${LIST:Ox}
-                STATIC_RANDOM_LIST:=    ${LIST:Ox}
-
-                all:
-                        @echo "${RANDOM_LIST}"
-                        @echo "${RANDOM_LIST}"
-                        @echo "${STATIC_RANDOM_LIST}"
-                        @echo "${STATIC_RANDOM_LIST}"
-          may produce output similar to:
-
-                quattro due tre uno
-                tre due quattro uno
-                due uno quattro tre
-                due uno quattro tre
-
-     ::QQ   Quotes every shell meta-character in the variable, so that it can be
-          passed safely through recursive invocations of bbmmaakkee.
-
-     ::RR   Replaces each word in the variable with everything but its suffix.
-
-     ::ggmmttiimmee
-          The value is a format string for strftime(3), using the current
-          gmtime(3).
-
-     ::hhaasshh
-          Compute a 32bit hash of the value and encode it as hex digits.
-
-     ::llooccaallttiimmee
-          The value is a format string for strftime(3), using the current
-          localtime(3).
-
-     ::ttAA  Attempt to convert variable to an absolute path using realpath(3),
-          if that fails, the value is unchanged.
-
-     ::ttll  Converts variable to lower-case letters.
-
-     ::ttss_c
-          Words in the variable are normally separated by a space on expan-
-          sion.  This modifier sets the separator to the character _c.  If _c is
-          omitted, then no separator is used.  The common escapes (including
-          octal numeric codes), work as expected.
-
-     ::ttuu  Converts variable to upper-case letters.
-
-     ::ttWW  Causes the value to be treated as a single word (possibly containing
-          embedded white space).  See also `::[[**]]'.
-
-     ::ttww  Causes the value to be treated as a sequence of words delimited by
-          white space.  See also `::[[@@]]'.
-
-     ::SS/_o_l_d___s_t_r_i_n_g/_n_e_w___s_t_r_i_n_g/[11ggWW]
-          Modify the first occurrence of _o_l_d___s_t_r_i_n_g in the variable's value,
-          replacing it with _n_e_w___s_t_r_i_n_g.  If a `g' is appended to the last
-          slash of the pattern, all occurrences in each word are replaced.  If
-          a `1' is appended to the last slash of the pattern, only the first
-          word is affected.  If a `W' is appended to the last slash of the
-          pattern, then the value is treated as a single word (possibly con-
-          taining embedded white space).  If _o_l_d___s_t_r_i_n_g begins with a caret
-          (`^'), _o_l_d___s_t_r_i_n_g is anchored at the beginning of each word.  If
-          _o_l_d___s_t_r_i_n_g ends with a dollar sign (`$'), it is anchored at the end
-          of each word.  Inside _n_e_w___s_t_r_i_n_g, an ampersand (`&') is replaced by
-          _o_l_d___s_t_r_i_n_g (without any `^' or `$').  Any character may be used as a
-          delimiter for the parts of the modifier string.  The anchoring,
-          ampersand and delimiter characters may be escaped with a backslash
-          (`\').
-
-          Variable expansion occurs in the normal fashion inside both
-          _o_l_d___s_t_r_i_n_g and _n_e_w___s_t_r_i_n_g with the single exception that a backslash
-          is used to prevent the expansion of a dollar sign (`$'), not a pre-
-          ceding dollar sign as is usual.
-
-     ::CC/_p_a_t_t_e_r_n/_r_e_p_l_a_c_e_m_e_n_t/[11ggWW]
-          The ::CC modifier is just like the ::SS modifier except that the old and
-          new strings, instead of being simple strings, are a regular expres-
-          sion (see regex(3)) string _p_a_t_t_e_r_n and an ed(1)-style string
-          _r_e_p_l_a_c_e_m_e_n_t.  Normally, the first occurrence of the pattern _p_a_t_t_e_r_n
-          in each word of the value is substituted with _r_e_p_l_a_c_e_m_e_n_t.  The `1'
-          modifier causes the substitution to apply to at most one word; the
-          `g' modifier causes the substitution to apply to as many instances
-          of the search pattern _p_a_t_t_e_r_n as occur in the word or words it is
-          found in; the `W' modifier causes the value to be treated as a sin-
-          gle word (possibly containing embedded white space).  Note that `1'
-          and `g' are orthogonal; the former specifies whether multiple words
-          are potentially affected, the latter whether multiple substitutions
-          can potentially occur within each affected word.
-
-     ::TT   Replaces each word in the variable with its last component.
-
-     ::uu   Remove adjacent duplicate words (like uniq(1)).
-
-     ::??_t_r_u_e___s_t_r_i_n_g::_f_a_l_s_e___s_t_r_i_n_g
-          If the variable name (not its value), when parsed as a .if condi-
-          tional expression, evaluates to true, return as its value the
-          _t_r_u_e___s_t_r_i_n_g, otherwise return the _f_a_l_s_e___s_t_r_i_n_g.  Since the variable
-          name is used as the expression, :? must be the first modifier after
-          the variable name itself - which will, of course, usually contain
-          variable expansions.  A common error is trying to use expressions
-          like
-                ${NUMBERS:M42:?match:no}
-          which actually tests defined(NUMBERS), to determine is any words
-          match "42" you need to use something like:
-                ${"${NUMBERS:M42}" != "":?match:no}.
-
-     _:_o_l_d___s_t_r_i_n_g_=_n_e_w___s_t_r_i_n_g
-          This is the AT&T System V UNIX style variable substitution.  It must
-          be the last modifier specified.  If _o_l_d___s_t_r_i_n_g or _n_e_w___s_t_r_i_n_g do not
-          contain the pattern matching character _% then it is assumed that
-          they are anchored at the end of each word, so only suffixes or
-          entire words may be replaced.  Otherwise _% is the substring of
-          _o_l_d___s_t_r_i_n_g to be replaced in _n_e_w___s_t_r_i_n_g.
-
-          Variable expansion occurs in the normal fashion inside both
-          _o_l_d___s_t_r_i_n_g and _n_e_w___s_t_r_i_n_g with the single exception that a backslash
-          is used to prevent the expansion of a dollar sign (`$'), not a pre-
-          ceding dollar sign as is usual.
-
-     ::@@_t_e_m_p@@_s_t_r_i_n_g@@
-          This is the loop expansion mechanism from the OSF Development Envi-
-          ronment (ODE) make.  Unlike ..ffoorr loops expansion occurs at the time
-          of reference.  Assign _t_e_m_p to each word in the variable and evaluate
-          _s_t_r_i_n_g.  The ODE convention is that _t_e_m_p should start and end with a
-          period.  For example.
-                ${LINKS:@.LINK.@${LN} ${TARGET} ${.LINK.}@}
-
-          However a single character varaiable is often more readable:
-                ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@}
-
-     ::UU_n_e_w_v_a_l
-          If the variable is undefined _n_e_w_v_a_l is the value.  If the variable
-          is defined, the existing value is returned.  This is another ODE
-          make feature.  It is handy for setting per-target CFLAGS for
-          instance:
-                ${_${.TARGET:T}_CFLAGS:U${DEF_CFLAGS}}
-          If a value is only required if the variable is undefined, use:
-                ${VAR:D:Unewval}
-
-     ::DD_n_e_w_v_a_l
-          If the variable is defined _n_e_w_v_a_l is the value.
-
-     ::LL   The name of the variable is the value.
-
-     ::PP   The path of the node which has the same name as the variable is the
-          value.  If no such node exists or its path is null, then the name of
-          the variable is used.  In order for this modifier to work, the name
-          (node) must at least have appeared on the rhs of a dependency.
-
-     ::!!_c_m_d!!
-          The output of running _c_m_d is the value.
-
-     ::sshh  If the variable is non-empty it is run as a command and the output
-          becomes the new value.

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201210252318.q9PNI6IQ069461>