The branch stable/13 has been updated by sjg:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=4eda2649adece08245281edc627ebc58c759bedb

commit 4eda2649adece08245281edc627ebc58c759bedb
Author:     Simon J. Gerraty <s...@freebsd.org>
AuthorDate: 2021-06-25 21:31:14 +0000
Commit:     Simon J. Gerraty <s...@freebsd.org>
CommitDate: 2022-02-16 05:36:27 +0000

    Merge commit 'ee914ef902ae018bd4f67192832120f9bf05651f' into new_merge
    
    (cherry picked from commit b0c40a00a67f611868fc0f10bde6b28eb75931be)
---
 contrib/bmake/ChangeLog                            |  113 +
 contrib/bmake/FILES                                |   13 +
 contrib/bmake/VERSION                              |    2 +-
 contrib/bmake/arch.c                               |  104 +-
 contrib/bmake/buf.h                                |    4 +-
 contrib/bmake/compat.c                             |   42 +-
 contrib/bmake/cond.c                               |  279 +-
 contrib/bmake/dir.c                                |   62 +-
 contrib/bmake/dir.h                                |    6 +-
 contrib/bmake/enum.h                               |   62 +-
 contrib/bmake/for.c                                |   46 +-
 contrib/bmake/hash.c                               |   68 +-
 contrib/bmake/hash.h                               |   14 +-
 contrib/bmake/import.sh                            |   17 +-
 contrib/bmake/job.c                                |  423 +--
 contrib/bmake/job.h                                |   20 +-
 contrib/bmake/lst.c                                |   10 +-
 contrib/bmake/lst.h                                |   12 +-
 contrib/bmake/main.c                               |  250 +-
 contrib/bmake/make.c                               |   91 +-
 contrib/bmake/make.h                               |  129 +-
 contrib/bmake/meta.c                               |  194 +-
 contrib/bmake/meta.h                               |    8 +-
 contrib/bmake/metachar.h                           |    4 +-
 contrib/bmake/mk/ChangeLog                         |   35 +
 contrib/bmake/mk/dirdeps.mk                        |   76 +-
 contrib/bmake/mk/dpadd.mk                          |    7 +-
 contrib/bmake/mk/install-mk                        |    4 +-
 contrib/bmake/mk/meta.autodep.mk                   |    6 +-
 contrib/bmake/mk/meta2deps.py                      |   54 +-
 contrib/bmake/mk/rst2htm.mk                        |    6 +-
 contrib/bmake/nonints.h                            |  153 +-
 contrib/bmake/parse.c                              |  512 ++--
 contrib/bmake/str.c                                |  101 +-
 contrib/bmake/str.h                                |  366 +++
 contrib/bmake/suff.c                               |   71 +-
 contrib/bmake/targ.c                               |   14 +-
 contrib/bmake/unit-tests/Makefile                  |   28 +-
 contrib/bmake/unit-tests/archive.mk                |    6 +-
 contrib/bmake/unit-tests/cmd-errors-jobs.exp       |    2 +-
 contrib/bmake/unit-tests/cmd-errors-lint.exp       |    2 +-
 contrib/bmake/unit-tests/cmd-errors.exp            |    2 +-
 contrib/bmake/unit-tests/cond-func-empty.mk        |   10 +-
 contrib/bmake/unit-tests/cond-func-make-main.mk    |    6 +-
 contrib/bmake/unit-tests/cond-late.exp             |    2 +-
 contrib/bmake/unit-tests/cond-short.mk             |   14 +-
 contrib/bmake/unit-tests/cond-token-string.exp     |    2 +-
 contrib/bmake/unit-tests/cond-token-var.mk         |   23 +-
 contrib/bmake/unit-tests/cond1.exp                 |    2 +-
 contrib/bmake/unit-tests/counter-append.mk         |    4 +-
 contrib/bmake/unit-tests/counter.mk                |    4 +-
 contrib/bmake/unit-tests/dep-var.mk                |    4 +-
 contrib/bmake/unit-tests/deptgt-makeflags.exp      |   10 +-
 contrib/bmake/unit-tests/deptgt-order.exp          |    3 +
 contrib/bmake/unit-tests/deptgt-order.mk           |   18 +-
 contrib/bmake/unit-tests/deptgt.exp                |    8 +-
 contrib/bmake/unit-tests/deptgt.mk                 |    4 +-
 contrib/bmake/unit-tests/directive-export-impl.exp |   88 +-
 contrib/bmake/unit-tests/directive-export-impl.mk  |   23 +-
 contrib/bmake/unit-tests/directive-export.mk       |   15 +-
 contrib/bmake/unit-tests/directive-for-errors.exp  |    2 +-
 contrib/bmake/unit-tests/directive-for-errors.mk   |    6 +-
 contrib/bmake/unit-tests/directive-for-escape.exp  |   32 +-
 contrib/bmake/unit-tests/directive-for-escape.mk   |   21 +-
 contrib/bmake/unit-tests/directive-for.exp         |    2 +-
 contrib/bmake/unit-tests/directive-undef.exp       |    3 +-
 contrib/bmake/unit-tests/directive-undef.mk        |   21 +-
 .../bmake/unit-tests/directive-unexport-env.exp    |   20 +-
 contrib/bmake/unit-tests/directive.exp             |    8 +-
 contrib/bmake/unit-tests/include-main.exp          |    2 +-
 contrib/bmake/unit-tests/job-output-null.exp       |    4 +
 contrib/bmake/unit-tests/job-output-null.mk        |   32 +
 .../bmake/unit-tests/jobs-empty-commands-error.exp |    5 +
 .../bmake/unit-tests/jobs-empty-commands-error.mk  |   19 +
 contrib/bmake/unit-tests/moderrs.exp               |   97 +-
 contrib/bmake/unit-tests/moderrs.mk                |   25 +-
 contrib/bmake/unit-tests/modts.exp                 |    4 +-
 contrib/bmake/unit-tests/modword.exp               |   24 +-
 contrib/bmake/unit-tests/modword.mk                |    3 +-
 contrib/bmake/unit-tests/opt-chdir.mk              |    6 +-
 contrib/bmake/unit-tests/opt-debug-errors-jobs.exp |   48 +
 contrib/bmake/unit-tests/opt-debug-errors-jobs.mk  |   36 +
 contrib/bmake/unit-tests/opt-debug-lint.exp        |    2 +-
 contrib/bmake/unit-tests/opt-debug-lint.mk         |   20 +-
 contrib/bmake/unit-tests/opt-debug.exp             |    6 +-
 contrib/bmake/unit-tests/opt-file.mk               |    6 +-
 contrib/bmake/unit-tests/opt-jobs-no-action.mk     |    4 +-
 contrib/bmake/unit-tests/recursive.mk              |    7 +-
 contrib/bmake/unit-tests/sh-jobs.mk                |    8 +-
 contrib/bmake/unit-tests/shell-csh.mk              |    4 +-
 contrib/bmake/unit-tests/suff-incomplete.exp       |   10 +-
 contrib/bmake/unit-tests/suff-main-several.exp     |   24 +-
 contrib/bmake/unit-tests/suff-rebuild.exp          |   14 +-
 contrib/bmake/unit-tests/var-class-cmdline.exp     |    3 +
 contrib/bmake/unit-tests/var-class-cmdline.mk      |   80 +-
 contrib/bmake/unit-tests/var-eval-short.exp        |   29 +
 contrib/bmake/unit-tests/var-eval-short.mk         |  163 ++
 contrib/bmake/unit-tests/var-op-append.exp         |   12 +-
 contrib/bmake/unit-tests/var-op-append.mk          |    4 +-
 contrib/bmake/unit-tests/var-op-assign.mk          |    4 +-
 contrib/bmake/unit-tests/var-op-sunsh.mk           |   12 +-
 contrib/bmake/unit-tests/varcmd.mk                 |   14 +-
 contrib/bmake/unit-tests/vardebug.exp              |  119 +-
 contrib/bmake/unit-tests/varmisc.exp               |    2 +-
 contrib/bmake/unit-tests/varmod-assign.exp         |   22 +-
 contrib/bmake/unit-tests/varmod-assign.mk          |   39 +-
 contrib/bmake/unit-tests/varmod-defined.exp        |   34 +-
 contrib/bmake/unit-tests/varmod-defined.mk         |    6 +-
 contrib/bmake/unit-tests/varmod-edge.exp           |   12 +-
 contrib/bmake/unit-tests/varmod-edge.mk            |   26 +-
 contrib/bmake/unit-tests/varmod-hash.exp           |    6 +-
 contrib/bmake/unit-tests/varmod-ifelse.exp         |   22 +-
 contrib/bmake/unit-tests/varmod-ifelse.mk          |   64 +-
 contrib/bmake/unit-tests/varmod-indirect.exp       |   84 +-
 contrib/bmake/unit-tests/varmod-indirect.mk        |  100 +-
 contrib/bmake/unit-tests/varmod-loop-varname.exp   |   11 +
 contrib/bmake/unit-tests/varmod-loop-varname.mk    |  127 +
 contrib/bmake/unit-tests/varmod-loop.exp           |   19 +-
 contrib/bmake/unit-tests/varmod-loop.mk            |  156 +-
 contrib/bmake/unit-tests/varmod-match-escape.exp   |   74 +-
 contrib/bmake/unit-tests/varmod-match-escape.mk    |    8 +-
 contrib/bmake/unit-tests/varmod-order.exp          |    4 +-
 contrib/bmake/unit-tests/varmod-range.exp          |   10 +-
 contrib/bmake/unit-tests/varmod-remember.exp       |    2 -
 contrib/bmake/unit-tests/varmod-remember.mk        |   29 +-
 contrib/bmake/unit-tests/varmod-shell.mk           |    9 +-
 contrib/bmake/unit-tests/varmod-subst-regex.exp    |   25 +-
 contrib/bmake/unit-tests/varmod-subst-regex.mk     |   54 +-
 contrib/bmake/unit-tests/varmod-subst.exp          |    2 +-
 contrib/bmake/unit-tests/varmod-subst.mk           |   10 +-
 contrib/bmake/unit-tests/varmod-sun-shell.exp      |    2 +
 contrib/bmake/unit-tests/varmod-sun-shell.mk       |   21 +
 contrib/bmake/unit-tests/varmod-sysv.exp           |  147 +-
 contrib/bmake/unit-tests/varmod-sysv.mk            |   57 +-
 contrib/bmake/unit-tests/varmod-to-separator.exp   |   12 +-
 contrib/bmake/unit-tests/varmod-unique.mk          |   12 +-
 contrib/bmake/unit-tests/varname-dot-shell.exp     |   32 +-
 contrib/bmake/unit-tests/varname-empty.exp         |   60 +-
 contrib/bmake/unit-tests/varname-empty.mk          |    4 +-
 contrib/bmake/unit-tests/varname.exp               |   33 +-
 contrib/bmake/unit-tests/varparse-dynamic.mk       |    6 +-
 contrib/bmake/unit-tests/varparse-errors.exp       |    4 +-
 contrib/bmake/unit-tests/varparse-errors.mk        |    4 +-
 contrib/bmake/var.c                                | 3073 +++++++++++---------
 144 files changed, 5499 insertions(+), 3548 deletions(-)

diff --git a/contrib/bmake/ChangeLog b/contrib/bmake/ChangeLog
index 5cf6f9d8fe57..35235e1f8205 100644
--- a/contrib/bmake/ChangeLog
+++ b/contrib/bmake/ChangeLog
@@ -1,3 +1,116 @@
+2021-06-21  Simon J Gerraty  <s...@beast.crufty.net>
+
+       * VERSION (_MAKE_VERSION): 20210621
+       Merge with NetBSD make, pick up
+       o var.c: only report error for unmatched regex subexpression
+       when linting (-dL) since we cannot tell when an unmatched
+       subexpression is an expected result.
+       o move unmatched regex subexpression tests to
+       varmod-subst-regex.mk and enable strict (lint) mode
+
+2021-06-16  Simon J Gerraty  <s...@beast.crufty.net>
+
+       * VERSION (_MAKE_VERSION): 20210616
+       Merge with NetBSD make, pick up
+       o more unit tests
+       o cond.c: rename If_Eval to EvalBare
+       improve function names for parsing conditions
+       o job.c: fix error handling of targets that cannot be made
+       o var.c: uncompress code in ApplyModifier_Unique
+
+2021-05-18  Simon J Gerraty  <s...@beast.crufty.net>
+
+       * VERSION (_MAKE_VERSION): 20210518
+       Merge with NetBSD make, pick up
+       o fix unit-tests/opt-chdir to cope with /nonexistent existing.
+       o job.c: Print -de error information when running multiple jobs
+
+2021-04-20  Simon J Gerraty  <s...@beast.crufty.net>
+
+       * VERSION (_MAKE_VERSION): 20210420
+       Merge with NetBSD make, pick up
+       o use C99 bool type
+       o convert VarEvalFlags back into an enum
+       o cond.c: do not complain when skipping the condition 'no >= 10'
+       o hash.c: avoid allocating memory for simple variable names
+       o job.c: use distinct wording for writing to the shell commands file
+       remove type name for the abort status in job handling
+       rename PrintOutput to PrintFilteredOutput to avoid confusion
+       o main.c: avoid double slash in name of temporary directory
+       o var.c: use straight quotes for error 'Bad conditional expression'
+       reduce memory allocations in the modifiers ':D' and ':U'
+       rename members of ModifyWord_LoopArgs
+       clean up pattern flags for the modifiers ':S' and ':C'
+       reduce memory allocation and strlen calls in modifier ':from=to'
+       in the ':Q' modifier, only allocate memory if necessary
+       improve performance for LazyBuf
+       remove redundant parameter from ParseVarnameLong
+       migrate ParseModifierPart to use Substring
+       avoid unnecessary calls to strlen when evaluating modifiers
+       migrate ModifyWord functions to use Substring
+       migrate handling of the modifier ':S,from,to,' to Substring
+       reduce debug logging and memory allocation for ${:U...}
+       reduce verbosity of the -dv debug logging for standard cases
+       clean up debug logging for ':M' and ':N'
+       disallow '$' in the variable name of the modifier ':@'
+       simplify access to the name of an expression during evaluation
+
+2021-03-30  Simon J Gerraty  <s...@beast.crufty.net>
+
+       * VERSION (_MAKE_VERSION): 20210330
+       Merge with NetBSD make, pick up
+       o replace enum bit-field with struct bit-field for VarEvalFlags
+       o rename VARE_NONE to VARE_PARSE_ONLY
+       o var.c: rename ApplyModifiersState to ModChain
+       fix double varname expansion in the variable modifier '::='
+       change debug log for variable evaluation flags to lowercase
+
+2021-03-14  Simon J Gerraty  <s...@beast.crufty.net>
+
+       * VERSION (_MAKE_VERSION): 20210314
+       Merge with NetBSD make, pick up
+       o var.c: avoid evaluating many modifiers in parse only mode
+       in strict mode (-dL) many variable references are parsed twice,
+       the first time just to report parse errors early, so we want to
+       avoid side effects and wasted effort to the extent possible.
+
+2021-02-26  Simon J Gerraty  <s...@beast.crufty.net>
+
+       * VERSION (_MAKE_VERSION): 20210226
+       Merge with NetBSD make, pick up
+       o remove freestanding freeIt variables
+       link via FStr
+       o var.c: restructure code in ParseVarname to target human readers
+       improve error message for;
+         bad modifier in variable expression
+         unclosed modifier
+         unknown modifier
+       remove redundant parameter of ApplySingleModifier
+       explain non-obvious code around indirect variable modifiers
+       quote ':S' in error message about missing delimiter
+       extract ParseModifier_Match into separate function
+       add context information to error message about ':range' modifier
+       add quotes around variable name in an error message
+       reorder code in ModifyWords
+       use more common parameter order for VarSelectWords
+       make ModifyWord_Subst a little easier to understand
+       do not expand variable name from the command line twice
+       extract ExistsInCmdline from Var_SetWithFlags
+       save a hash map lookup when defining a cmdline variable
+       clean up VarAdd, Var_Delete, Var_ReexportVars
+       use bit-shift expressions for VarFlags constants
+       rename constants for VarFlags
+       rename ExprDefined constants for debug logging
+       rename ExprStatus to ExprDefined
+       split parameters for evaluating variable expressions
+       reduce redundant code around ModifyWords
+       print error about failed shell command before overwriting variable
+       clean up ValidShortVarname, ParseVarnameShort
+       rename VarExprStatus to ExprStatus
+       add functions for assigning the value of an expression
+       rename ApplyModifiersState_Define to Expr_Define
+       condense the code for parsing :S and :C modifiers
+
 2021-02-06  Simon J Gerraty  <s...@beast.crufty.net>
 
        * VERSION (_MAKE_VERSION): 20210206
diff --git a/contrib/bmake/FILES b/contrib/bmake/FILES
index 5e7b8301da87..dc0f6f33c763 100644
--- a/contrib/bmake/FILES
+++ b/contrib/bmake/FILES
@@ -63,6 +63,7 @@ realpath.c
 setenv.c
 sigcompat.c
 str.c
+str.h
 stresep.c
 strlcpy.c
 suff.c
@@ -399,6 +400,10 @@ unit-tests/job-flags.exp
 unit-tests/job-flags.mk
 unit-tests/job-output-long-lines.exp
 unit-tests/job-output-long-lines.mk
+unit-tests/job-output-null.exp
+unit-tests/job-output-null.mk
+unit-tests/jobs-empty-commands-error.exp
+unit-tests/jobs-empty-commands-error.mk
 unit-tests/jobs-empty-commands.exp
 unit-tests/jobs-empty-commands.mk
 unit-tests/jobs-error-indirect.exp
@@ -439,6 +444,8 @@ unit-tests/opt-debug-curdir.exp
 unit-tests/opt-debug-curdir.mk
 unit-tests/opt-debug-dir.exp
 unit-tests/opt-debug-dir.mk
+unit-tests/opt-debug-errors-jobs.exp
+unit-tests/opt-debug-errors-jobs.mk
 unit-tests/opt-debug-errors.exp
 unit-tests/opt-debug-errors.mk
 unit-tests/opt-debug-file.exp
@@ -627,6 +634,8 @@ unit-tests/var-class-local.exp
 unit-tests/var-class-local.mk
 unit-tests/var-class.exp
 unit-tests/var-class.mk
+unit-tests/var-eval-short.exp
+unit-tests/var-eval-short.mk
 unit-tests/var-op-append.exp
 unit-tests/var-op-append.mk
 unit-tests/var-op-assign.exp
@@ -675,6 +684,8 @@ unit-tests/varmod-l-name-to-value.exp
 unit-tests/varmod-l-name-to-value.mk
 unit-tests/varmod-localtime.exp
 unit-tests/varmod-localtime.mk
+unit-tests/varmod-loop-varname.exp
+unit-tests/varmod-loop-varname.mk
 unit-tests/varmod-loop.exp
 unit-tests/varmod-loop.mk
 unit-tests/varmod-match-escape.exp
@@ -709,6 +720,8 @@ unit-tests/varmod-subst-regex.exp
 unit-tests/varmod-subst-regex.mk
 unit-tests/varmod-subst.exp
 unit-tests/varmod-subst.mk
+unit-tests/varmod-sun-shell.exp
+unit-tests/varmod-sun-shell.mk
 unit-tests/varmod-sysv.exp
 unit-tests/varmod-sysv.mk
 unit-tests/varmod-tail.exp
diff --git a/contrib/bmake/VERSION b/contrib/bmake/VERSION
index 0af794962680..7c28f11013b7 100644
--- a/contrib/bmake/VERSION
+++ b/contrib/bmake/VERSION
@@ -1,2 +1,2 @@
 # keep this compatible with sh and make
-_MAKE_VERSION=20210206
+_MAKE_VERSION=20210621
diff --git a/contrib/bmake/arch.c b/contrib/bmake/arch.c
index e5c0a5e4ac0f..6d9dd60dfbe9 100644
--- a/contrib/bmake/arch.c
+++ b/contrib/bmake/arch.c
@@ -1,4 +1,4 @@
-/*     $NetBSD: arch.c,v 1.197 2021/02/05 05:15:12 rillig Exp $        */
+/*     $NetBSD: arch.c,v 1.200 2021/05/30 21:16:54 rillig Exp $        */
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -147,7 +147,7 @@ struct ar_hdr {
 #include "dir.h"
 
 /*     "@(#)arch.c     8.2 (Berkeley) 1/2/94"  */
-MAKE_RCSID("$NetBSD: arch.c,v 1.197 2021/02/05 05:15:12 rillig Exp $");
+MAKE_RCSID("$NetBSD: arch.c,v 1.200 2021/05/30 21:16:54 rillig Exp $");
 
 typedef struct List ArchList;
 typedef struct ListNode ArchListNode;
@@ -216,6 +216,19 @@ ArchFree(void *ap)
 }
 #endif
 
+/* Return "archive(member)". */
+static char *
+FullName(const char *archive, const char *member)
+{
+       size_t len1 = strlen(archive);
+       size_t len3 = strlen(member);
+       char *result = bmake_malloc(len1 + 1 + len3 + 1 + 1);
+       memcpy(result, archive, len1);
+       memcpy(result + len1, "(", 1);
+       memcpy(result + len1 + 1, member, len3);
+       memcpy(result + len1 + 1 + len3, ")", 1 + 1);
+       return result;
+}
 
 /*
  * Parse an archive specification such as "archive.a(member1 member2.${EXT})",
@@ -228,10 +241,10 @@ ArchFree(void *ap)
  *     scope           The scope in which to expand variables.
  *
  * Output:
- *     return          TRUE if it was a valid specification.
+ *     return          True if it was a valid specification.
  *     *pp             Points to the first non-space after the archive spec.
  */
-Boolean
+bool
 Arch_ParseArchive(char **pp, GNodeList *gns, GNode *scope)
 {
        char *cp;               /* Pointer into line */
@@ -239,12 +252,12 @@ Arch_ParseArchive(char **pp, GNodeList *gns, GNode *scope)
        MFStr libName;          /* Library-part of specification */
        char *memName;          /* Member-part of specification */
        char saveChar;          /* Ending delimiter of member-name */
-       Boolean expandLibName;  /* Whether the parsed libName contains
+       bool expandLibName;     /* Whether the parsed libName contains
                                 * variable expressions that need to be
                                 * expanded */
 
        libName = MFStr_InitRefer(*pp);
-       expandLibName = FALSE;
+       expandLibName = false;
 
        for (cp = libName.str; *cp != '(' && *cp != '\0';) {
                if (*cp == '$') {
@@ -252,18 +265,18 @@ Arch_ParseArchive(char **pp, GNodeList *gns, GNode *scope)
                        /* XXX: This code can probably be shortened. */
                        const char *nested_p = cp;
                        FStr result;
-                       Boolean isError;
+                       bool isError;
 
                        /* XXX: is expanded twice: once here and once below */
                        (void)Var_Parse(&nested_p, scope,
-                                       VARE_WANTRES | VARE_UNDEFERR, &result);
+                           VARE_UNDEFERR, &result);
                        /* TODO: handle errors */
                        isError = result.str == var_Error;
                        FStr_Done(&result);
                        if (isError)
-                               return FALSE;
+                               return false;
 
-                       expandLibName = TRUE;
+                       expandLibName = true;
                        cp += nested_p - cp;
                } else
                        cp++;
@@ -272,8 +285,7 @@ Arch_ParseArchive(char **pp, GNodeList *gns, GNode *scope)
        *cp++ = '\0';
        if (expandLibName) {
                char *expanded;
-               (void)Var_Subst(libName.str, scope,
-                   VARE_WANTRES | VARE_UNDEFERR, &expanded);
+               (void)Var_Subst(libName.str, scope, VARE_UNDEFERR, &expanded);
                /* TODO: handle errors */
                libName = MFStr_InitOwn(expanded);
        }
@@ -285,7 +297,7 @@ Arch_ParseArchive(char **pp, GNodeList *gns, GNode *scope)
                 * place and skip to the end of it (either white-space or
                 * a close paren).
                 */
-               Boolean doSubst = FALSE;
+               bool doSubst = false;
 
                pp_skip_whitespace(&cp);
 
@@ -295,20 +307,19 @@ Arch_ParseArchive(char **pp, GNodeList *gns, GNode *scope)
                                /* Expand nested variable expressions. */
                                /* XXX: This code can probably be shortened. */
                                FStr result;
-                               Boolean isError;
+                               bool isError;
                                const char *nested_p = cp;
 
                                (void)Var_Parse(&nested_p, scope,
-                                               VARE_WANTRES | VARE_UNDEFERR,
-                                               &result);
+                                   VARE_UNDEFERR, &result);
                                /* TODO: handle errors */
                                isError = result.str == var_Error;
                                FStr_Done(&result);
 
                                if (isError)
-                                       return FALSE;
+                                       return false;
 
-                               doSubst = TRUE;
+                               doSubst = true;
                                cp += nested_p - cp;
                        } else {
                                cp++;
@@ -325,7 +336,7 @@ Arch_ParseArchive(char **pp, GNodeList *gns, GNode *scope)
                        Parse_Error(PARSE_FATAL,
                                    "No closing parenthesis "
                                    "in archive specification");
-                       return FALSE;
+                       return false;
                }
 
                /*
@@ -355,16 +366,15 @@ Arch_ParseArchive(char **pp, GNodeList *gns, GNode *scope)
                        char *p;
                        char *unexpandedMemName = memName;
 
-                       (void)Var_Subst(memName, scope,
-                                       VARE_WANTRES | VARE_UNDEFERR,
-                                       &memName);
+                       (void)Var_Subst(memName, scope, VARE_UNDEFERR,
+                           &memName);
                        /* TODO: handle errors */
 
                        /*
                         * Now form an archive spec and recurse to deal with
                         * nested variables and multi-word variable values.
                         */
-                       fullName = str_concat4(libName.str, "(", memName, ")");
+                       fullName = FullName(libName.str, memName);
                        p = fullName;
 
                        if (strchr(memName, '$') != NULL &&
@@ -383,7 +393,7 @@ Arch_ParseArchive(char **pp, GNodeList *gns, GNode *scope)
                                /* Error in nested call. */
                                free(fullName);
                                /* XXX: does unexpandedMemName leak? */
-                               return FALSE;
+                               return false;
                        }
                        free(fullName);
                        /* XXX: does unexpandedMemName leak? */
@@ -394,8 +404,7 @@ Arch_ParseArchive(char **pp, GNodeList *gns, GNode *scope)
 
                        while (!Lst_IsEmpty(&members)) {
                                char *member = Lst_Dequeue(&members);
-                               char *fullname = str_concat4(libName.str, "(",
-                                                            member, ")");
+                               char *fullname = FullName(libName.str, member);
                                free(member);
 
                                gn = Targ_GetNode(fullname);
@@ -407,8 +416,7 @@ Arch_ParseArchive(char **pp, GNodeList *gns, GNode *scope)
                        Lst_Done(&members);
 
                } else {
-                       char *fullname = str_concat4(libName.str, "(", memName,
-                                                    ")");
+                       char *fullname = FullName(libName.str, memName);
                        gn = Targ_GetNode(fullname);
                        free(fullname);
 
@@ -434,7 +442,7 @@ Arch_ParseArchive(char **pp, GNodeList *gns, GNode *scope)
        /* We promised that pp would be set up at the next non-space. */
        pp_skip_whitespace(&cp);
        *pp = cp;
-       return TRUE;
+       return true;
 }
 
 /*
@@ -444,7 +452,7 @@ Arch_ParseArchive(char **pp, GNodeList *gns, GNode *scope)
  * Input:
  *     archive         Path to the archive
  *     member          Name of member; only its basename is used.
- *     addToCache      TRUE if archive should be cached if not already so.
+ *     addToCache      True if archive should be cached if not already so.
  *
  * Results:
  *     The ar_hdr for the member, or NULL.
@@ -452,7 +460,7 @@ Arch_ParseArchive(char **pp, GNodeList *gns, GNode *scope)
  * See ArchFindMember for an almost identical copy of this code.
  */
 static struct ar_hdr *
-ArchStatMember(const char *archive, const char *member, Boolean addToCache)
+ArchStatMember(const char *archive, const char *member, bool addToCache)
 {
 #define AR_MAX_NAME_LEN (sizeof arh.ar_name - 1)
        FILE *arch;
@@ -713,7 +721,7 @@ ArchSVR4Entry(Arch *ar, char *inout_name, size_t size, FILE 
*arch)
 #endif
 
 
-static Boolean
+static bool
 ArchiveMember_HasName(const struct ar_hdr *hdr,
                      const char *name, size_t namelen)
 {
@@ -721,22 +729,22 @@ ArchiveMember_HasName(const struct ar_hdr *hdr,
        const char *ar_name = hdr->AR_NAME;
 
        if (strncmp(ar_name, name, namelen) != 0)
-               return FALSE;
+               return false;
 
        if (namelen >= ar_name_len)
                return namelen == ar_name_len;
 
        /* hdr->AR_NAME is space-padded to the right. */
        if (ar_name[namelen] == ' ')
-               return TRUE;
+               return true;
 
        /* In archives created by GNU binutils 2.27, the member names end with
         * a slash. */
        if (ar_name[namelen] == '/' &&
            (namelen == ar_name_len || ar_name[namelen + 1] == ' '))
-               return TRUE;
+               return true;
 
-       return FALSE;
+       return false;
 }
 
 /*
@@ -951,7 +959,7 @@ Arch_UpdateMTime(GNode *gn)
 {
        struct ar_hdr *arh;
 
-       arh = ArchStatMember(GNode_VarArchive(gn), GNode_VarMember(gn), TRUE);
+       arh = ArchStatMember(GNode_VarArchive(gn), GNode_VarMember(gn), true);
        if (arh != NULL)
                gn->mtime = (time_t)strtol(arh->ar_date, NULL, 10);
        else
@@ -1058,26 +1066,26 @@ Arch_FindLib(GNode *gn, SearchPath *path)
  *     since this is used by 'ar' rules that affect the data contents of the
  *     archive, not by ranlib rules, which affect the TOC.
  */
-Boolean
+bool
 Arch_LibOODate(GNode *gn)
 {
-       Boolean oodate;
+       bool oodate;
 
        if (gn->type & OP_PHONY) {
-               oodate = TRUE;
+               oodate = true;
        } else if (!GNode_IsTarget(gn) && Lst_IsEmpty(&gn->children)) {
-               oodate = FALSE;
+               oodate = false;
        } else if ((!Lst_IsEmpty(&gn->children) && gn->youngestChild == NULL) ||
                   (gn->mtime > now) ||
                   (gn->youngestChild != NULL &&
                    gn->mtime < gn->youngestChild->mtime)) {
-               oodate = TRUE;
+               oodate = true;
        } else {
 #ifdef RANLIBMAG
                struct ar_hdr *arh;     /* Header for __.SYMDEF */
                int modTimeTOC;         /* The table-of-contents' mod time */
 
-               arh = ArchStatMember(gn->path, RANLIBMAG, FALSE);
+               arh = ArchStatMember(gn->path, RANLIBMAG, false);
 
                if (arh != NULL) {
                        modTimeTOC = (int)strtol(arh->ar_date, NULL, 10);
@@ -1094,10 +1102,10 @@ Arch_LibOODate(GNode *gn)
                         */
                        if (DEBUG(ARCH) || DEBUG(MAKE))
                                debug_printf("no toc...");
-                       oodate = TRUE;
+                       oodate = true;
                }
 #else
-               oodate = FALSE;
+               oodate = false;
 #endif
        }
        return oodate;
@@ -1119,7 +1127,7 @@ Arch_End(void)
 #endif
 }
 
-Boolean
+bool
 Arch_IsLib(GNode *gn)
 {
        static const char armag[] = "!<arch>\n";
@@ -1127,11 +1135,11 @@ Arch_IsLib(GNode *gn)
        int fd;
 
        if ((fd = open(gn->path, O_RDONLY)) == -1)
-               return FALSE;
+               return false;
 
        if (read(fd, buf, sizeof buf) != sizeof buf) {
                (void)close(fd);
-               return FALSE;
+               return false;
        }
 
        (void)close(fd);
diff --git a/contrib/bmake/buf.h b/contrib/bmake/buf.h
index 594e9651dbfb..938820e4745f 100644
--- a/contrib/bmake/buf.h
+++ b/contrib/bmake/buf.h
@@ -1,4 +1,4 @@
-/*     $NetBSD: buf.h,v 1.42 2021/01/30 21:25:10 rillig Exp $  */
+/*     $NetBSD: buf.h,v 1.43 2021/04/03 11:08:40 rillig Exp $  */
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -101,7 +101,7 @@ Buf_AddByte(Buffer *buf, char byte)
        end[1] = '\0';
 }
 
-MAKE_INLINE Boolean
+MAKE_INLINE bool
 Buf_EndsWith(const Buffer *buf, char ch)
 {
        return buf->len > 0 && buf->data[buf->len - 1] == ch;
diff --git a/contrib/bmake/compat.c b/contrib/bmake/compat.c
index 59190d8c4354..f8c47397f3df 100644
--- a/contrib/bmake/compat.c
+++ b/contrib/bmake/compat.c
@@ -1,4 +1,4 @@
-/*     $NetBSD: compat.c,v 1.224 2021/02/05 05:15:12 rillig Exp $      */
+/*     $NetBSD: compat.c,v 1.227 2021/04/27 15:19:25 christos Exp $    */
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -99,7 +99,7 @@
 #include "pathnames.h"
 
 /*     "@(#)compat.c   8.2 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: compat.c,v 1.224 2021/02/05 05:15:12 rillig Exp $");
+MAKE_RCSID("$NetBSD: compat.c,v 1.227 2021/04/27 15:19:25 christos Exp $");
 
 static GNode *curTarg = NULL;
 static pid_t compatChild;
@@ -164,7 +164,7 @@ CompatInterrupt(int signo)
 }
 
 static void
-DebugFailedTarget(const char *cmd, GNode *gn)
+DebugFailedTarget(const char *cmd, const GNode *gn)
 {
        const char *p = cmd;
        debug_printf("\n*** Failed target:  %s\n*** Failed command: ",
@@ -184,7 +184,7 @@ DebugFailedTarget(const char *cmd, GNode *gn)
        debug_printf("\n");
 }
 
-static Boolean
+static bool
 UseShell(const char *cmd MAKE_ATTR_UNUSED)
 {
 #if !defined(MAKE_NATIVE)
@@ -194,7 +194,7 @@ UseShell(const char *cmd MAKE_ATTR_UNUSED)
         * behaviour.  Or perhaps the shell has been replaced with something
         * that does extra logging, and that should not be bypassed.
         */
-       return TRUE;
+       return true;
 #else
        /*
         * Search for meta characters in the command. If there are no meta
@@ -227,22 +227,22 @@ Compat_RunCommand(const char *cmdp, GNode *gn, 
StringListNode *ln)
 {
        char *cmdStart;         /* Start of expanded command */
        char *bp;
-       Boolean silent;         /* Don't print command */
-       Boolean doIt;           /* Execute even if -n */
-       volatile Boolean errCheck; /* Check errors */
+       bool silent;            /* Don't print command */
+       bool doIt;              /* Execute even if -n */
+       volatile bool errCheck; /* Check errors */
        WAIT_T reason;          /* Reason for child's death */
        WAIT_T status;          /* Description of child's death */
        pid_t cpid;             /* Child actually found */
        pid_t retstat;          /* Result of wait */
        const char **volatile av; /* Argument vector for thing to exec */
        char **volatile mav;    /* Copy of the argument vector for freeing */
-       Boolean useShell;       /* TRUE if command should be executed
+       bool useShell;          /* True if command should be executed
                                 * using a shell */
        const char *volatile cmd = cmdp;
 
        silent = (gn->type & OP_SILENT) != 0;
        errCheck = !(gn->type & OP_IGNORE);
-       doIt = FALSE;
+       doIt = false;
 
        (void)Var_Subst(cmd, gn, VARE_WANTRES, &cmdStart);
        /* TODO: handle errors */
@@ -281,9 +281,9 @@ Compat_RunCommand(const char *cmdp, GNode *gn, 
StringListNode *ln)
                if (*cmd == '@')
                        silent = !DEBUG(LOUD);
                else if (*cmd == '-')
-                       errCheck = FALSE;
+                       errCheck = false;
                else if (*cmd == '+') {
-                       doIt = TRUE;
+                       doIt = true;
                        if (shellName == NULL)  /* we came here from jobs */
                                Shell_Init();
                } else
@@ -343,7 +343,7 @@ Compat_RunCommand(const char *cmdp, GNode *gn, 
StringListNode *ln)
                 * command into words to form an argument vector we can
                 * execute.
                 */
-               Words words = Str_Words(cmd, FALSE);
+               Words words = Str_Words(cmd, false);
                mav = words.words;
                bp = words.freeIt;
                av = (void *)mav;
@@ -392,7 +392,7 @@ Compat_RunCommand(const char *cmdp, GNode *gn, 
StringListNode *ln)
         */
        while ((retstat = wait(&reason)) != cpid) {
                if (retstat > 0)
-                       JobReapChild(retstat, reason, FALSE); /* not ours? */
+                       JobReapChild(retstat, reason, false); /* not ours? */
                if (retstat == -1 && errno != EINTR) {
                        break;
                }
@@ -425,7 +425,7 @@ Compat_RunCommand(const char *cmdp, GNode *gn, 
StringListNode *ln)
                if (errCheck) {
 #ifdef USE_META
                        if (useMeta) {
-                               meta_job_error(NULL, gn, FALSE, status);
+                               meta_job_error(NULL, gn, false, status);
                        }
 #endif
                        gn->made = ERROR;
@@ -483,7 +483,7 @@ MakeNodes(GNodeList *gnodes, GNode *pgn)
        }
 }
 
-static Boolean
+static bool
 MakeUnmade(GNode *gn, GNode *pgn)
 {
 
@@ -493,7 +493,7 @@ MakeUnmade(GNode *gn, GNode *pgn)
         * First mark ourselves to be made, then apply whatever transformations
         * the suffix module thinks are necessary. Once that's done, we can
         * descend and make all our children. If any of them has an error
-        * but the -k flag was given, our 'make' field will be set to FALSE
+        * but the -k flag was given, our 'make' field will be set to false
         * again. This is our signal to not attempt to do anything but abort
         * our parent as well.
         */
@@ -508,7 +508,7 @@ MakeUnmade(GNode *gn, GNode *pgn)
        if (!(gn->flags & REMAKE)) {
                gn->made = ABORTED;
                pgn->flags &= ~(unsigned)REMAKE;
-               return FALSE;
+               return false;
        }
 
        if (Lst_FindDatum(&gn->implicitParents, pgn) != NULL)
@@ -524,7 +524,7 @@ MakeUnmade(GNode *gn, GNode *pgn)
        if (!GNode_IsOODate(gn)) {
                gn->made = UPTODATE;
                DEBUG0(MAKE, "up-to-date.\n");
-               return FALSE;
+               return false;
        }
 
        /*
@@ -539,7 +539,7 @@ MakeUnmade(GNode *gn, GNode *pgn)
         * We need to be re-made.
         * Ensure that $? (.OODATE) and $> (.ALLSRC) are both set.
         */
-       Make_DoAllVar(gn);
+       GNode_SetLocalVars(gn);
 
        /*
         * Alter our type to tell if errors should be ignored or things
@@ -596,7 +596,7 @@ MakeUnmade(GNode *gn, GNode *pgn)
                PrintOnError(gn, "\nStop.");
                exit(1);
        }
-       return TRUE;
+       return true;
 }
 
 static void
diff --git a/contrib/bmake/cond.c b/contrib/bmake/cond.c
index 8f36fda22f12..a8d88d1d6816 100644
--- a/contrib/bmake/cond.c
+++ b/contrib/bmake/cond.c
@@ -1,4 +1,4 @@
-/*     $NetBSD: cond.c,v 1.256 2021/02/05 05:15:12 rillig Exp $        */
+/*     $NetBSD: cond.c,v 1.267 2021/06/11 14:52:03 rillig Exp $        */
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -95,7 +95,7 @@
 #include "dir.h"
 
 /*     "@(#)cond.c     8.2 (Berkeley) 1/2/94"  */
-MAKE_RCSID("$NetBSD: cond.c,v 1.256 2021/02/05 05:15:12 rillig Exp $");
+MAKE_RCSID("$NetBSD: cond.c,v 1.267 2021/06/11 14:52:03 rillig Exp $");
 
 /*
  * The parsing of conditional expressions is based on this grammar:
@@ -148,11 +148,11 @@ typedef struct CondParser {
         * expression has length > 0.  The other '.if' variants delegate
         * to evalBare instead.
         */
-       Boolean plain;
+       bool plain;
 
        /* The function to apply on unquoted bare words. */
-       Boolean (*evalBare)(size_t, const char *);
-       Boolean negateEvalBare;
+       bool (*evalBare)(size_t, const char *);
+       bool negateEvalBare;
 
        const char *p;          /* The remaining condition to parse */
        Token curr;             /* Single push-back token used in parsing */
@@ -163,10 +163,10 @@ typedef struct CondParser {
         * specific one, therefore it makes sense to suppress the standard
         * "Malformed conditional" message.
         */
-       Boolean printedError;
+       bool printedError;
 } CondParser;
 
-static CondResult CondParser_Or(CondParser *par, Boolean);
+static CondResult CondParser_Or(CondParser *par, bool);
 
 static unsigned int cond_depth = 0;    /* current .if nesting level */
 static unsigned int cond_min_depth = 0;        /* depth at makefile open */
@@ -178,21 +178,21 @@ static const char *opname[] = { "<", "<=", ">", ">=", 
"==", "!=" };
  * In strict mode, the lhs must be a variable expression or a string literal
  * in quotes. In non-strict mode it may also be an unquoted string literal.
  *
- * TRUE when CondEvalExpression is called from Cond_EvalLine (.if etc)
- * FALSE when CondEvalExpression is called from ApplyModifier_IfElse
+ * True when CondEvalExpression is called from Cond_EvalLine (.if etc).
+ * False when CondEvalExpression is called from ApplyModifier_IfElse
  * since lhs is already expanded, and at that point we cannot tell if
  * it was a variable reference or not.
  */
-static Boolean lhsStrict;
+static bool lhsStrict;
 
-static Boolean
+static bool
 is_token(const char *str, const char *tok, size_t len)
 {
        return strncmp(str, tok, len) == 0 && !ch_isalpha(str[len]);
 }
 
 static Token
-ToToken(Boolean cond)
+ToToken(bool cond)
 {
        return cond ? TOK_TRUE : TOK_FALSE;
 }
@@ -228,7 +228,7 @@ CondParser_SkipWhitespace(CondParser *par)
  * Return the length of the argument, or 0 on error.
  */
 static size_t
-ParseFuncArg(CondParser *par, const char **pp, Boolean doEval, const char 
*func,
+ParseFuncArg(CondParser *par, const char **pp, bool doEval, const char *func,
             char **out_arg)
 {
        const char *p = *pp;
@@ -264,11 +264,11 @@ ParseFuncArg(CondParser *par, const char **pp, Boolean 
doEval, const char *func,
                         * so we don't need to do it. Nor do we return an
                         * error, though perhaps we should.
                         */
-                       VarEvalFlags eflags = doEval
-                           ? VARE_WANTRES | VARE_UNDEFERR
-                           : VARE_NONE;
+                       VarEvalMode emode = doEval
+                           ? VARE_UNDEFERR
+                           : VARE_PARSE_ONLY;
                        FStr nestedVal;
-                       (void)Var_Parse(&p, SCOPE_CMDLINE, eflags, &nestedVal);
+                       (void)Var_Parse(&p, SCOPE_CMDLINE, emode, &nestedVal);
                        /* TODO: handle errors */
                        Buf_AddStr(&argBuf, nestedVal.str);
                        FStr_Done(&nestedVal);
@@ -290,7 +290,7 @@ ParseFuncArg(CondParser *par, const char **pp, Boolean 
doEval, const char *func,
        if (func != NULL && *p++ != ')') {
                Parse_Error(PARSE_FATAL,
                    "Missing closing parenthesis for %s()", func);
-               par->printedError = TRUE;
+               par->printedError = true;
                return 0;
        }
 
@@ -300,34 +300,34 @@ ParseFuncArg(CondParser *par, const char **pp, Boolean 
doEval, const char *func,
 
 /* Test whether the given variable is defined. */
 /*ARGSUSED*/
-static Boolean
+static bool
 FuncDefined(size_t argLen MAKE_ATTR_UNUSED, const char *arg)
 {
        FStr value = Var_Value(SCOPE_CMDLINE, arg);
-       Boolean result = value.str != NULL;
+       bool result = value.str != NULL;
        FStr_Done(&value);
*** 17372 LINES SKIPPED ***

Reply via email to