Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 11 Sep 2012 02:56:03 +0000 (UTC)
From:      Marcel Moolenaar <marcel@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org
Subject:   svn commit: r240330 - vendor/NetBSD/bmake/dist
Message-ID:  <201209110256.q8B2u3bR064482@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: marcel
Date: Tue Sep 11 02:56:02 2012
New Revision: 240330
URL: http://svn.freebsd.org/changeset/base/240330

Log:
  Import the 20120831 release of the "Portable" BSD make tool (from NetBSD).
  
  Submitted by:   Simon Gerraty <sjg@juniper.net>

Modified:
  vendor/NetBSD/bmake/dist/ChangeLog
  vendor/NetBSD/bmake/dist/Makefile.in
  vendor/NetBSD/bmake/dist/bmake.1
  vendor/NetBSD/bmake/dist/bmake.cat1
  vendor/NetBSD/bmake/dist/bsd.after-import.mk
  vendor/NetBSD/bmake/dist/main.c
  vendor/NetBSD/bmake/dist/make.1
  vendor/NetBSD/bmake/dist/nonints.h

Modified: vendor/NetBSD/bmake/dist/ChangeLog
==============================================================================
--- vendor/NetBSD/bmake/dist/ChangeLog	Tue Sep 11 02:41:18 2012	(r240329)
+++ vendor/NetBSD/bmake/dist/ChangeLog	Tue Sep 11 02:56:02 2012	(r240330)
@@ -1,3 +1,22 @@
+2012-08-31  Simon J. Gerraty  <sjg@bad.crufty.net>
+
+	* Makefile.in (MAKE_VERSION): bump version to 20120831
+	  Merge with NetBSD make, pick up
+	  o cast sizeof() to int for comparison
+	  o minor make.1 tweak
+
+2012-08-30  Simon J. Gerraty  <sjg@bad.crufty.net>
+
+	* Makefile.in (MAKE_VERSION): bump version to 20120830
+	  Merge with NetBSD make, pick up
+	  o .MAKE.EXPAND_VARIABLES knob can control default behavior of -V
+	  o debug flag -dV causes -V to show raw value regardless.
+	
+2012-07-05  Simon J. Gerraty  <sjg@bad.crufty.net>
+
+	* bsd.after-import.mk (after-import): ensure unit-tests/Makefile
+	  gets SRCTOP set.
+
 2012-07-04  Simon J. Gerraty  <sjg@bad.crufty.net>
 
 	* Makefile.in (MAKE_VERSION): bump version to 20120704

Modified: vendor/NetBSD/bmake/dist/Makefile.in
==============================================================================
--- vendor/NetBSD/bmake/dist/Makefile.in	Tue Sep 11 02:41:18 2012	(r240329)
+++ vendor/NetBSD/bmake/dist/Makefile.in	Tue Sep 11 02:56:02 2012	(r240330)
@@ -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.168 2012/07/05 04:10:23 sjg Exp $
+#	$Id: Makefile.in,v 1.170 2012/08/31 06:46:22 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= 20120704
+MAKE_VERSION= 20120831
 MACHINE=@machine@
 MACHINE_ARCH=@machine_arch@
 DEFAULT_SYS_PATH = @default_sys_path@

Modified: vendor/NetBSD/bmake/dist/bmake.1
==============================================================================
--- vendor/NetBSD/bmake/dist/bmake.1	Tue Sep 11 02:41:18 2012	(r240329)
+++ vendor/NetBSD/bmake/dist/bmake.1	Tue Sep 11 02:56:02 2012	(r240330)
@@ -1,4 +1,4 @@
-.\"	$NetBSD: make.1,v 1.204 2012/04/24 20:12:16 sjg Exp $
+.\"	$NetBSD: make.1,v 1.206 2012/08/30 22:35:37 wiz 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 April 24, 2012
+.Dd August 30, 2012
 .Dt MAKE 1
 .Os
 .Sh NAME
@@ -203,6 +203,10 @@ Print debugging information about makefi
 Print debugging information about suffix-transformation rules.
 .It Ar t
 Print debugging information about target list maintenance.
+.It Ar V
+Force the
+.Fl V
+option to print raw values of variables.
 .It Ar v
 Print debugging information about variable assignment.
 .It Ar x
@@ -675,6 +679,10 @@ and cannot be confused with the special 
 Names the makefile (default
 .Ql Pa .depend )
 from which generated dependencies are read.
+.It Va .MAKE.EXPAND_VARIABLES
+A boolean that controls the default behavior of the
+.Fl V
+option.
 .It Va .MAKE.EXPORTED
 The list of variables exported by
 .Nm .

Modified: vendor/NetBSD/bmake/dist/bmake.cat1
==============================================================================
--- vendor/NetBSD/bmake/dist/bmake.cat1	Tue Sep 11 02:41:18 2012	(r240329)
+++ vendor/NetBSD/bmake/dist/bmake.cat1	Tue Sep 11 02:56:02 2012	(r240330)
@@ -118,6 +118,1318 @@ DDEESSCCRRIIPPTTIIOONN
              _t       Print debugging information about target list mainte-
                      nance.
 
+             _V       Force the --VV option to print raw values 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.
+
+     ::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.
+
+     ::::==_s_t_r
+          The variable is assigned the value _s_t_r after substitution.  This
+          modifier and its variations are useful in obscure situations such as
+          wanting to set a variable when shell commands are being parsed.
+          These assignment modifiers always expand to nothing, so if appearing
+          in a rule line by themselves should be preceded with something to
+          keep bbmmaakkee happy.
+
+          The `::::' helps avoid false matches with the AT&T System V UNIX style
+          ::== modifier and since substitution always occurs the ::::== form is
+          vaguely appropriate.
+
+     ::::??==_s_t_r
+          As for ::::== but only if the variable does not already have a value.
+
+     ::::++==_s_t_r
+          Append _s_t_r to the variable.
+
+     ::::!!==_c_m_d
+          Assign the output of _c_m_d to the variable.
+
+     ::[[_r_a_n_g_e]]
+          Selects one or more words from the value, or performs other opera-
+          tions related to the way in which the value is divided into words.
+
+          Ordinarily, a value is treated as a sequence of words delimited by
+          white space.  Some modifiers suppress this behaviour, causing a
+          value to be treated as a single word (possibly containing embedded
+          white space).  An empty value, or a value that consists entirely of
+          white-space, is treated as a single word.  For the purposes of the
+          `::[[]]' modifier, the words are indexed both forwards using positive
+          integers (where index 1 represents the first word), and backwards
+          using negative integers (where index -1 represents the last word).
+
+          The _r_a_n_g_e is subjected to variable expansion, and the expanded
+          result is then interpreted as follows:
+
+          _i_n_d_e_x  Selects a single word from the value.
+
+          _s_t_a_r_t...._e_n_d
+                 Selects all words from _s_t_a_r_t to _e_n_d, inclusive.  For example,
+                 `::[[22....--11]]' selects all words from the second word to the last
+                 word.  If _s_t_a_r_t is greater than _e_n_d, then the words are out-
+                 put in reverse order.  For example, `::[[--11....11]]' selects all
+                 the words from last to first.
+
+          **      Causes subsequent modifiers to treat the value as a single
+                 word (possibly containing embedded white space).  Analogous
+                 to the effect of "$*" in Bourne shell.
+
+          0      Means the same as `::[[**]]'.
+
+          @@      Causes subsequent modifiers to treat the value as a sequence
+                 of words delimited by white space.  Analogous to the effect
+                 of "$@" in Bourne shell.
+
+          ##      Returns the number of words in the value.
+
+IINNCCLLUUDDEE SSTTAATTEEMMEENNTTSS,, CCOONNDDIITTIIOONNAALLSS AANNDD FFOORR LLOOOOPPSS
+     Makefile inclusion, conditional structures and for loops  reminiscent of
+     the C programming language are provided in bbmmaakkee.  All such structures
+     are identified by a line beginning with a single dot (`.') character.
+     Files are included with either ..iinncclluuddee <_f_i_l_e> or ..iinncclluuddee "_f_i_l_e".  Vari-
+     ables between the angle brackets or double quotes are expanded to form
+     the file name.  If angle brackets are used, the included makefile is
+     expected to be in the system makefile directory.  If double quotes are
+     used, the including makefile's directory and any directories specified
+     using the --II option are searched before the system makefile directory.
+     For compatibility with other versions of bbmmaakkee `include file ...' is also
+     accepted.  If the include statement is written as ..--iinncclluuddee or as
+     ..ssiinncclluuddee then errors locating and/or opening include files are ignored.
+
+     Conditional expressions are also preceded by a single dot as the first
+     character of a line.  The possible conditionals are as follows:
+
+     ..eerrrroorr _m_e_s_s_a_g_e
+             The message is printed along with the name of the makefile and
+             line number, then bbmmaakkee will exit.
+
+     ..eexxppoorrtt _v_a_r_i_a_b_l_e _._._.
+             Export the specified global variable.  If no variable list is
+             provided, all globals are exported except for internal variables
+             (those that start with `.').  This is not affected by the --XX
+             flag, so should be used with caution.  For compatibility with
+             other bbmmaakkee programs `export variable=value' is also accepted.
+
+             Appending a variable name to _._M_A_K_E_._E_X_P_O_R_T_E_D is equivalent to
+             exporting a variable.
+
+     ..eexxppoorrtt--eennvv _v_a_r_i_a_b_l_e _._._.
+             The same as `.export', except that the variable is not appended
+             to _._M_A_K_E_._E_X_P_O_R_T_E_D.  This allows exporting a value to the environ-
+             ment which is different from that used by bbmmaakkee internally.
+
+     ..iinnffoo _m_e_s_s_a_g_e
+             The message is printed along with the name of the makefile and
+             line number.
+
+     ..uunnddeeff _v_a_r_i_a_b_l_e
+             Un-define the specified global variable.  Only global variables
+             may be un-defined.
+
+     ..uunneexxppoorrtt _v_a_r_i_a_b_l_e _._._.
+             The opposite of `.export'.  The specified global _v_a_r_i_a_b_l_e will be
+             removed from _._M_A_K_E_._E_X_P_O_R_T_E_D.  If no variable list is provided,
+             all globals are unexported, and _._M_A_K_E_._E_X_P_O_R_T_E_D deleted.
+
+     ..uunneexxppoorrtt--eennvv
+             Unexport all globals previously exported and clear the environ-
+             ment inherited from the parent.  This operation will cause a mem-
+             ory leak of the original environment, so should be used spar-
+             ingly.  Testing for _._M_A_K_E_._L_E_V_E_L being 0, would make sense.  Also
+             note that any variables which originated in the parent environ-
+             ment should be explicitly preserved if desired.  For example:
+
+                   .if ${.MAKE.LEVEL} == 0
+                   PATH := ${PATH}
+                   .unexport-env
+                   .export PATH
+                   .endif
+
+             Would result in an environment containing only `PATH', which is
+             the minimal useful environment.  Actually `.MAKE.LEVEL' will also
+             be pushed into the new environment.
+
+     ..wwaarrnniinngg _m_e_s_s_a_g_e
+             The message prefixed by `_w_a_r_n_i_n_g_:' is printed along with the name
+             of the makefile and line number.
+
+     ..iiff [!]_e_x_p_r_e_s_s_i_o_n [_o_p_e_r_a_t_o_r _e_x_p_r_e_s_s_i_o_n _._._.]
+             Test the value of an expression.
+
+     ..iiffddeeff [!]_v_a_r_i_a_b_l_e [_o_p_e_r_a_t_o_r _v_a_r_i_a_b_l_e _._._.]
+             Test the value of a variable.
+
+     ..iiffnnddeeff [!]_v_a_r_i_a_b_l_e [_o_p_e_r_a_t_o_r _v_a_r_i_a_b_l_e _._._.]
+             Test the value of a variable.
+
+     ..iiffmmaakkee [!]_t_a_r_g_e_t [_o_p_e_r_a_t_o_r _t_a_r_g_e_t _._._.]
+             Test the target being built.
+
+     ..iiffnnmmaakkee [!] _t_a_r_g_e_t [_o_p_e_r_a_t_o_r _t_a_r_g_e_t _._._.]
+             Test the target being built.
+
+     ..eellssee   Reverse the sense of the last conditional.
+
+     ..eelliiff [!] _e_x_p_r_e_s_s_i_o_n [_o_p_e_r_a_t_o_r _e_x_p_r_e_s_s_i_o_n _._._.]
+             A combination of `..eellssee' followed by `..iiff'.
+
+     ..eelliiffddeeff [!]_v_a_r_i_a_b_l_e [_o_p_e_r_a_t_o_r _v_a_r_i_a_b_l_e _._._.]
+             A combination of `..eellssee' followed by `..iiffddeeff'.
+
+     ..eelliiffnnddeeff [!]_v_a_r_i_a_b_l_e [_o_p_e_r_a_t_o_r _v_a_r_i_a_b_l_e _._._.]
+             A combination of `..eellssee' followed by `..iiffnnddeeff'.
+
+     ..eelliiffmmaakkee [!]_t_a_r_g_e_t [_o_p_e_r_a_t_o_r _t_a_r_g_e_t _._._.]
+             A combination of `..eellssee' followed by `..iiffmmaakkee'.
+
+     ..eelliiffnnmmaakkee [!]_t_a_r_g_e_t [_o_p_e_r_a_t_o_r _t_a_r_g_e_t _._._.]
+             A combination of `..eellssee' followed by `..iiffnnmmaakkee'.
+
+     ..eennddiiff  End the body of the conditional.
+
+     The _o_p_e_r_a_t_o_r may be any one of the following:
+
+     ||||     Logical OR.
+
+     &&&&     Logical AND; of higher precedence than ``||''.
+
+     As in C, bbmmaakkee will only evaluate a conditional as far as is necessary to
+     determine its value.  Parentheses may be used to change the order of
+     evaluation.  The boolean operator `!!' may be used to logically negate an
+     entire conditional.  It is of higher precedence than `&&&&'.
+
+     The value of _e_x_p_r_e_s_s_i_o_n may be any of the following:
+
+     ddeeffiinneedd  Takes a variable name as an argument and evaluates to true if
+              the variable has been defined.
+
+     mmaakkee     Takes a target name as an argument and evaluates to true if the
+              target was specified as part of bbmmaakkee's command line or was
+              declared the default target (either implicitly or explicitly,
+              see _._M_A_I_N) before the line containing the conditional.
+
+     eemmppttyy    Takes a variable, with possible modifiers, and evaluates to true
+              if the expansion of the variable would result in an empty
+              string.
+
+     eexxiissttss   Takes a file name as an argument and evaluates to true if the
+              file exists.  The file is searched for on the system search path
+              (see _._P_A_T_H).
+
+     ttaarrggeett   Takes a target name as an argument and evaluates to true if the
+              target has been defined.
+
+     ccoommmmaannddss
+              Takes a target name as an argument and evaluates to true if the
+              target has been defined and has commands associated with it.
+
+     _E_x_p_r_e_s_s_i_o_n may also be an arithmetic or string comparison.  Variable
+     expansion is performed on both sides of the comparison, after which the
+     integral values are compared.  A value is interpreted as hexadecimal if
+     it is preceded by 0x, otherwise it is decimal; octal numbers are not sup-
+     ported.  The standard C relational operators are all supported.  If after
+     variable expansion, either the left or right hand side of a `====' or `!!=='
+     operator is not an integral value, then string comparison is performed
+     between the expanded variables.  If no relational operator is given, it
+     is assumed that the expanded variable is being compared against 0 or an
+     empty string in the case of a string comparison.
+
+     When bbmmaakkee is evaluating one of these conditional expressions, and it
+     encounters a (white-space separated) word it doesn't recognize, either
+     the ``make'' or ``defined'' expression is applied to it, depending on the

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



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