diff options
author | Simon J. Gerraty <sjg@FreeBSD.org> | 2020-07-09 03:46:07 +0000 |
---|---|---|
committer | Simon J. Gerraty <sjg@FreeBSD.org> | 2020-07-09 03:46:07 +0000 |
commit | 9093286b6ab680505bf26c92d5c7fdf65607f40c (patch) | |
tree | 75c9b64ada7971d16e585d6bdd5a23cfa537fdce /contrib/bmake | |
parent | 8510f61acdf83ef524e694b9b0eebeb7ad834162 (diff) | |
download | src-9093286b6ab680505bf26c92d5c7fdf65607f40c.tar.gz src-9093286b6ab680505bf26c92d5c7fdf65607f40c.zip |
Revert r363031
Notes
Notes:
svn path=/head/; revision=363035
Diffstat (limited to 'contrib/bmake')
81 files changed, 3210 insertions, 3388 deletions
diff --git a/contrib/bmake/ChangeLog b/contrib/bmake/ChangeLog index a09f3f84a8e9..68b1826ea2aa 100644 --- a/contrib/bmake/ChangeLog +++ b/contrib/bmake/ChangeLog @@ -1,81 +1,3 @@ -2020-07-04 Simon J Gerraty <sjg@beast.crufty.net> - - * VERSION (_MAKE_VERSION): 20200704 - Merge with NetBSD make, pick up - (most of this by rillig@) - o lots of style and white-space cleanup - o lots more unit tests for variable modifiers - o simplified description of some functions - o str.c: refactor Str_Match - o var.c: debugging output for :@ - constify VarModify parameter - fix :hash modifier on 16-bit platforms - remove unnecessary forward declarations - refactor ApplyModifier_SysV to have less indentation - simplify code for :E and :R - clean up code for :H and :T - refactor ApplyModifiers - - * var.c: we need stdint.h on some platforms to get uint32_t - * unit-test/Makefile: we need to supress the specific error - for RE substitution error in modmisc, since it varies accross - different OS. - -2020-07-02 Simon J Gerraty <sjg@beast.crufty.net> - - * VERSION (_MAKE_VERSION): 20200702 - Merge with NetBSD make, pick up - o var.c: more improvements to avoiding unnecessary evaluation - use enums for flags - o remove flags arg to Var_Set which outside of var.c is always 0 - -2020-07-01 Simon J Gerraty <sjg@beast.crufty.net> - - * VERSION (_MAKE_VERSION): 20200701 - Merge with NetBSD make, pick up - o var.c: with change to cond.c; ensure that nested variables - within a variable name are expanded. - o unit-tests/varmisc.mk: test for nested varname - -2020-06-29 Simon J Gerraty <sjg@beast.crufty.net> - - * VERSION (_MAKE_VERSION): 20200629 - Merge with NetBSD make, pick up - o cond.c: do not eval unnecessary terms of conditionals. - -2020-06-25 Simon J Gerraty <sjg@beast.crufty.net> - - * VERSION (_MAKE_VERSION): 20200625 - Merge with NetBSD make, pick up - o meta.c: report error if lseek in filemon_read fails - -2020-06-22 Simon J Gerraty <sjg@beast.crufty.net> - - * VERSION (_MAKE_VERSION): 20200622 - Merge with NetBSD make, pick up - o dieQuietly: ignore OP_SUBMAKE as too aggressive - -2020-06-19 Simon J Gerraty <sjg@beast.crufty.net> - - * VERSION (_MAKE_VERSION): 20200619 - Merge with NetBSD make, pick up - o str.c: performance improvement for Str_Match for multiple '*' - o dieQuietly: supress the failure output from make - when failing node is a sub-make or a sibling failed. - This cuts down greatly on unhelpful noise at the end of - build log. Disabled by -dj or .MAKE.DIE_QUIETLY=no - -2020-06-10 Simon J Gerraty <sjg@beast.crufty.net> - - * FILES: add LICENSE to appease some packagers. - This is an attempt to fairly represent the license on almost - 200 files, which are almost all BSD-3-Clause - The few exceptions being more liberal. - - * VERSION (_MAKE_VERSION): 20200610 - Merge with NetBSD make, pick up - o unit test for :Or - 2020-06-06 Simon J Gerraty <sjg@beast.crufty.net> * VERSION (_MAKE_VERSION): 20200606 diff --git a/contrib/bmake/FILES b/contrib/bmake/FILES index 0716bffa3c3b..5dd4eae97b16 100644 --- a/contrib/bmake/FILES +++ b/contrib/bmake/FILES @@ -1,6 +1,5 @@ ChangeLog FILES -LICENSE Makefile Makefile.config.in PSD.doc/Makefile @@ -108,8 +107,6 @@ unit-tests/cond2.exp unit-tests/cond2.mk unit-tests/cond-late.mk unit-tests/cond-late.exp -unit-tests/cond-short.mk -unit-tests/cond-short.exp unit-tests/dollar.exp unit-tests/dollar.mk unit-tests/doterror.exp diff --git a/contrib/bmake/LICENSE b/contrib/bmake/LICENSE index dbad0ec06a4d..e69de29bb2d1 100644 --- a/contrib/bmake/LICENSE +++ b/contrib/bmake/LICENSE @@ -1,59 +0,0 @@ -The individual files in this distribution are copyright their -original contributors or assignees. -Including: - - Copyright (c) 1993-2020, Simon J Gerraty - Copyright (c) 2009-2016, Juniper Networks, Inc. - Copyright (c) 2009, John Birrell. - Copyright (c) 1997-2020 The NetBSD Foundation, Inc. - Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com> - Copyright (c) 1989 by Berkeley Softworks - Copyright (c) 1988, 1989, 1990, 1992, 1993 - The Regents of the University of California. - Copyright (c) 1988, 1989 by Adam de Boor - -With the exception of the GNU configure script, which states: - - # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. - # - # This configure script is free software; the Free Software Foundation - # gives unlimited permission to copy, distribute and modify it. - -The license for this distribution is considered to be: - - SPDX-License-Identifier: BSD-3-Clause - -example (from https://opensource.org/licenses/BSD-3-Clause): - - Copyright <YEAR> <COPYRIGHT HOLDER> - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - 3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS - BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR - TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF - THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - diff --git a/contrib/bmake/VERSION b/contrib/bmake/VERSION index d10ccdc95114..161d8f01ef2c 100644 --- a/contrib/bmake/VERSION +++ b/contrib/bmake/VERSION @@ -1,2 +1,2 @@ # keep this compatible with sh and make -_MAKE_VERSION=20200704 +_MAKE_VERSION=20200606 diff --git a/contrib/bmake/arch.c b/contrib/bmake/arch.c index 9db7ce2bd14b..84321f720665 100644 --- a/contrib/bmake/arch.c +++ b/contrib/bmake/arch.c @@ -1,4 +1,4 @@ -/* $NetBSD: arch.c,v 1.73 2020/07/03 08:02:55 rillig Exp $ */ +/* $NetBSD: arch.c,v 1.71 2019/10/05 23:35:57 mrg Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -69,14 +69,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: arch.c,v 1.73 2020/07/03 08:02:55 rillig Exp $"; +static char rcsid[] = "$NetBSD: arch.c,v 1.71 2019/10/05 23:35:57 mrg Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)arch.c 8.2 (Berkeley) 1/2/94"; #else -__RCSID("$NetBSD: arch.c,v 1.73 2020/07/03 08:02:55 rillig Exp $"); +__RCSID("$NetBSD: arch.c,v 1.71 2019/10/05 23:35:57 mrg Exp $"); #endif #endif /* not lint */ #endif @@ -312,7 +312,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode *ctxt) free(freeIt); if (result == var_Error) { - return FAILURE; + return(FAILURE); } else { subLibName = TRUE; } @@ -354,7 +354,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode *ctxt) free(freeIt); if (result == var_Error) { - return FAILURE; + return(FAILURE); } else { doSubst = TRUE; } @@ -372,7 +372,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode *ctxt) */ if (*cp == '\0') { printf("No closing parenthesis in archive specification\n"); - return FAILURE; + return (FAILURE); } /* @@ -426,7 +426,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode *ctxt) if (gn == NULL) { free(buf); - return FAILURE; + return(FAILURE); } else { gn->type |= OP_ARCHV; (void)Lst_AtEnd(nodeLst, gn); @@ -437,7 +437,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode *ctxt) * ourselves. */ free(buf); - return FAILURE; + return(FAILURE); } /* * Free buffer and continue with our work. @@ -461,7 +461,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode *ctxt) gn = Targ_FindNode(nameBuf, TARG_CREATE); if (gn == NULL) { free(nameBuf); - return FAILURE; + return (FAILURE); } else { /* * We've found the node, but have to make sure the rest of @@ -483,7 +483,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode *ctxt) gn = Targ_FindNode(nameBuf, TARG_CREATE); free(nameBuf); if (gn == NULL) { - return FAILURE; + return (FAILURE); } else { /* * We've found the node, but have to make sure the rest of the @@ -520,7 +520,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode *ctxt) } while (*cp != '\0' && isspace ((unsigned char)*cp)); *linePtr = cp; - return SUCCESS; + return (SUCCESS); } /*- @@ -544,7 +544,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode *ctxt) static int ArchFindArchive(const void *ar, const void *archName) { - return strcmp(archName, ((const Arch *)ar)->name); + return (strcmp(archName, ((const Arch *)ar)->name)); } /*- @@ -602,7 +602,7 @@ ArchStatMember(char *archive, char *member, Boolean hash) he = Hash_FindEntry(&ar->members, member); if (he != NULL) { - return (struct ar_hdr *)Hash_GetValue(he); + return ((struct ar_hdr *)Hash_GetValue(he)); } else { /* Try truncated name */ char copy[AR_MAX_NAME_LEN+1]; @@ -614,7 +614,7 @@ ArchStatMember(char *archive, char *member, Boolean hash) copy[AR_MAX_NAME_LEN] = '\0'; } if ((he = Hash_FindEntry(&ar->members, copy)) != NULL) - return (struct ar_hdr *)Hash_GetValue(he); + return ((struct ar_hdr *)Hash_GetValue(he)); return NULL; } } @@ -635,7 +635,7 @@ ArchStatMember(char *archive, char *member, Boolean hash) return NULL; } else { fclose(arch); - return &sarh; + return (&sarh); } } @@ -753,7 +753,7 @@ ArchStatMember(char *archive, char *member, Boolean hash) he = Hash_FindEntry(&ar->members, member); if (he != NULL) { - return (struct ar_hdr *)Hash_GetValue(he); + return ((struct ar_hdr *)Hash_GetValue(he)); } else { return NULL; } @@ -962,7 +962,7 @@ ArchFindMember(char *archive, char *member, struct ar_hdr *arhPtr, fclose(arch); return NULL; } - return arch; + return (arch); } } else #ifdef AR_EFMT1 @@ -996,7 +996,7 @@ ArchFindMember(char *archive, char *member, struct ar_hdr *arhPtr, fclose(arch); return NULL; } - return arch; + return (arch); } if (fseek(arch, -elen, SEEK_CUR) != 0) { fclose(arch); @@ -1152,7 +1152,7 @@ Arch_MTime(GNode *gn) } gn->mtime = modTime; - return modTime; + return (modTime); } /*- @@ -1179,7 +1179,7 @@ Arch_MemMTime(GNode *gn) if (Lst_Open(gn->parents) != SUCCESS) { gn->mtime = 0; - return 0; + return (0); } while ((ln = Lst_Next(gn->parents)) != NULL) { pgn = (GNode *)Lst_Datum(ln); @@ -1211,7 +1211,7 @@ Arch_MemMTime(GNode *gn) Lst_Close(gn->parents); - return gn->mtime; + return (gn->mtime); } /*- @@ -1252,9 +1252,9 @@ Arch_FindLib(GNode *gn, Lst path) free(libName); #ifdef LIBRARIES - Var_Set(TARGET, gn->name, gn); + Var_Set(TARGET, gn->name, gn, 0); #else - Var_Set(TARGET, gn->path == NULL ? gn->name : gn->path, gn); + Var_Set(TARGET, gn->path == NULL ? gn->name : gn->path, gn, 0); #endif /* LIBRARIES */ } @@ -1337,7 +1337,7 @@ Arch_LibOODate(GNode *gn) oodate = FALSE; #endif } - return oodate; + return (oodate); } /*- diff --git a/contrib/bmake/buf.c b/contrib/bmake/buf.c index 360b8cedde13..ac95c16c1586 100644 --- a/contrib/bmake/buf.c +++ b/contrib/bmake/buf.c @@ -1,4 +1,4 @@ -/* $NetBSD: buf.c,v 1.26 2020/07/03 08:02:55 rillig Exp $ */ +/* $NetBSD: buf.c,v 1.25 2012/04/24 20:26:58 sjg Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -70,14 +70,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: buf.c,v 1.26 2020/07/03 08:02:55 rillig Exp $"; +static char rcsid[] = "$NetBSD: buf.c,v 1.25 2012/04/24 20:26:58 sjg Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)buf.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: buf.c,v 1.26 2020/07/03 08:02:55 rillig Exp $"); +__RCSID("$NetBSD: buf.c,v 1.25 2012/04/24 20:26:58 sjg Exp $"); #endif #endif /* not lint */ #endif @@ -160,7 +160,7 @@ Buf_GetAll(Buffer *bp, int *numBytesPtr) if (numBytesPtr != NULL) *numBytesPtr = bp->count; - return bp->buffer; + return (bp->buffer); } /*- diff --git a/contrib/bmake/compat.c b/contrib/bmake/compat.c index cd88884736f1..2e9e143b787b 100644 --- a/contrib/bmake/compat.c +++ b/contrib/bmake/compat.c @@ -1,4 +1,4 @@ -/* $NetBSD: compat.c,v 1.113 2020/07/03 08:13:23 rillig Exp $ */ +/* $NetBSD: compat.c,v 1.110 2020/01/19 19:42:32 riastradh Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -70,14 +70,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: compat.c,v 1.113 2020/07/03 08:13:23 rillig Exp $"; +static char rcsid[] = "$NetBSD: compat.c,v 1.110 2020/01/19 19:42:32 riastradh Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)compat.c 8.2 (Berkeley) 3/19/94"; #else -__RCSID("$NetBSD: compat.c,v 1.113 2020/07/03 08:13:23 rillig Exp $"); +__RCSID("$NetBSD: compat.c,v 1.110 2020/01/19 19:42:32 riastradh Exp $"); #endif #endif /* not lint */ #endif @@ -236,7 +236,7 @@ CompatRunCommand(void *cmdp, void *gnp) silent = gn->type & OP_SILENT; errCheck = !(gn->type & OP_IGNORE); doIt = FALSE; - + cmdNode = Lst_Member(gn->commands, cmd); cmdStart = Var_Subst(NULL, cmd, gn, VARF_WANTRES); @@ -249,18 +249,18 @@ CompatRunCommand(void *cmdp, void *gnp) if (*cmdStart == '\0') { free(cmdStart); - return 0; + return(0); } cmd = cmdStart; Lst_Replace(cmdNode, cmdStart); if ((gn->type & OP_SAVE_CMDS) && (gn != ENDNode)) { (void)Lst_AtEnd(ENDNode->commands, cmdStart); - return 0; + return(0); } if (strcmp(cmdStart, "...") == 0) { gn->type |= OP_SAVE_CMDS; - return 0; + return(0); } while ((*cmd == '@') || (*cmd == '-') || (*cmd == '+')) { @@ -287,7 +287,7 @@ CompatRunCommand(void *cmdp, void *gnp) * If we did not end up with a command, just skip it. */ if (!*cmd) - return 0; + return (0); #if !defined(MAKE_NATIVE) /* @@ -307,7 +307,7 @@ CompatRunCommand(void *cmdp, void *gnp) * go to the shell. Therefore treat '=' and ':' like shell * meta characters as documented in make(1). */ - + useShell = needshell(cmd, FALSE); #endif @@ -325,7 +325,7 @@ CompatRunCommand(void *cmdp, void *gnp) * we go... */ if (!doIt && NoExecute(gn)) { - return 0; + return (0); } if (DEBUG(JOB)) fprintf(debug_file, "Execute: '%s'\n", cmd); @@ -377,7 +377,7 @@ again: meta_compat_start(); } #endif - + /* * Fork and execute the single command. If the fork fails, we abort. */ @@ -499,8 +499,8 @@ again: bmake_signal(compatSigno, SIG_DFL); kill(myPid, compatSigno); } - - return status; + + return (status); } /*- @@ -550,7 +550,7 @@ Compat_Make(void *gnp, void *pgnp) if (Lst_Member(gn->iParents, pgn) != NULL) { char *p1; - Var_Set(IMPSRC, Var_Value(TARGET, gn, &p1), pgn); + Var_Set(IMPSRC, Var_Value(TARGET, gn, &p1), pgn, 0); free(p1); } @@ -654,7 +654,7 @@ Compat_Make(void *gnp, void *pgnp) } else { if (Lst_Member(gn->iParents, pgn) != NULL) { char *p1; - Var_Set(IMPSRC, Var_Value(TARGET, gn, &p1), pgn); + Var_Set(IMPSRC, Var_Value(TARGET, gn, &p1), pgn, 0); free(p1); } switch(gn->made) { @@ -681,7 +681,7 @@ Compat_Make(void *gnp, void *pgnp) cohorts: Lst_ForEach(gn->cohorts, Compat_Make, pgnp); - return 0; + return (0); } /*- diff --git a/contrib/bmake/cond.c b/contrib/bmake/cond.c index 92501e162e68..7c9c96acc83b 100644 --- a/contrib/bmake/cond.c +++ b/contrib/bmake/cond.c @@ -1,4 +1,4 @@ -/* $NetBSD: cond.c,v 1.78 2020/07/03 08:13:23 rillig Exp $ */ +/* $NetBSD: cond.c,v 1.75 2017/04/16 20:59:04 riastradh Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -70,14 +70,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: cond.c,v 1.78 2020/07/03 08:13:23 rillig Exp $"; +static char rcsid[] = "$NetBSD: cond.c,v 1.75 2017/04/16 20:59:04 riastradh Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)cond.c 8.2 (Berkeley) 1/2/94"; #else -__RCSID("$NetBSD: cond.c,v 1.78 2020/07/03 08:13:23 rillig Exp $"); +__RCSID("$NetBSD: cond.c,v 1.75 2017/04/16 20:59:04 riastradh Exp $"); #endif #endif /* not lint */ #endif @@ -146,7 +146,7 @@ typedef enum { * last two fields are stored in condInvert and condDefProc, respectively. */ static void CondPushBack(Token); -static int CondGetArg(Boolean, char **, char **, const char *); +static int CondGetArg(char **, char **, const char *); static Boolean CondDoDefined(int, const char *); static int CondStrMatch(const void *, const void *); static Boolean CondDoMake(int, const char *); @@ -186,7 +186,7 @@ static unsigned int cond_min_depth = 0; /* depth at makefile open */ * Indicate when we should be strict about lhs of comparisons. * TRUE when Cond_EvalExpression is called from Cond_Eval (.if etc) * FALSE when Cond_EvalExpression is called from var.c:ApplyModifiers - * since lhs is already expanded and we cannot tell if + * since lhs is already expanded and we cannot tell if * it was a variable reference or not. */ static Boolean lhsStrict; @@ -225,6 +225,9 @@ CondPushBack(Token t) * CondGetArg -- * Find the argument of a built-in function. * + * Input: + * parens TRUE if arg should be bounded by parens + * * Results: * The length of the argument and the address of the argument. * @@ -235,7 +238,7 @@ CondPushBack(Token t) *----------------------------------------------------------------------- */ static int -CondGetArg(Boolean doEval, char **linePtr, char **argPtr, const char *func) +CondGetArg(char **linePtr, char **argPtr, const char *func) { char *cp; int argLen; @@ -256,7 +259,7 @@ CondGetArg(Boolean doEval, char **linePtr, char **argPtr, const char *func) * the word 'make' or 'defined' at the beginning of a symbol... */ *argPtr = NULL; - return 0; + return (0); } while (*cp == ' ' || *cp == '\t') { @@ -287,8 +290,7 @@ CondGetArg(Boolean doEval, char **linePtr, char **argPtr, const char *func) int len; void *freeIt; - cp2 = Var_Parse(cp, VAR_CMD, VARF_UNDEFERR| - (doEval ? VARF_WANTRES : 0), + cp2 = Var_Parse(cp, VAR_CMD, VARF_UNDEFERR|VARF_WANTRES, &len, &freeIt); Buf_AddBytes(&buf, strlen(cp2), cp2); free(freeIt); @@ -314,11 +316,11 @@ CondGetArg(Boolean doEval, char **linePtr, char **argPtr, const char *func) if (func != NULL && *cp++ != ')') { Parse_Error(PARSE_WARNING, "Missing closing parenthesis for %s()", func); - return 0; + return (0); } *linePtr = cp; - return argLen; + return (argLen); } /*- @@ -347,7 +349,7 @@ CondDoDefined(int argLen MAKE_ATTR_UNUSED, const char *arg) } free(p1); - return result; + return (result); } /*- @@ -367,7 +369,7 @@ CondDoDefined(int argLen MAKE_ATTR_UNUSED, const char *arg) static int CondStrMatch(const void *string, const void *pattern) { - return !Str_Match(string, pattern); + return(!Str_Match(string, pattern)); } /*- @@ -412,14 +414,14 @@ CondDoExists(int argLen MAKE_ATTR_UNUSED, const char *arg) if (DEBUG(COND)) { fprintf(debug_file, "exists(%s) result is \"%s\"\n", arg, path ? path : ""); - } + } if (path != NULL) { result = TRUE; free(path); } else { result = FALSE; } - return result; + return (result); } /*- @@ -441,7 +443,7 @@ CondDoTarget(int argLen MAKE_ATTR_UNUSED, const char *arg) GNode *gn; gn = Targ_FindNode(arg, TARG_NOCREATE); - return gn != NULL && !OP_NOP(gn->type); + return (gn != NULL) && !OP_NOP(gn->type); } /*- @@ -465,7 +467,7 @@ CondDoCommands(int argLen MAKE_ATTR_UNUSED, const char *arg) GNode *gn; gn = Targ_FindNode(arg, TARG_NOCREATE); - return gn != NULL && !OP_NOP(gn->type) && !Lst_IsEmpty(gn->commands); + return (gn != NULL) && !OP_NOP(gn->type) && !Lst_IsEmpty(gn->commands); } /*- @@ -575,7 +577,7 @@ CondGetString(Boolean doEval, Boolean *quoted, void **freeIt, Boolean strictLHS) /* if we are in quotes, then an undefined variable is ok */ str = Var_Parse(condExpr, VAR_CMD, ((!qt && doEval) ? VARF_UNDEFERR : 0) | - (doEval ? VARF_WANTRES : 0), &len, freeIt); + VARF_WANTRES, &len, freeIt); if (str == var_Error) { if (*freeIt) { free(*freeIt); @@ -666,7 +668,7 @@ compare_expression(Boolean doEval) rhs = NULL; lhsFree = rhsFree = FALSE; lhsQuoted = rhsQuoted = FALSE; - + /* * Parse the variable spec and skip over it, saving its * value in lhs. @@ -709,7 +711,7 @@ compare_expression(Boolean doEval) goto done; } /* For .ifxxx <number> compare against zero */ - if (CondCvtArg(lhs, &left)) { + if (CondCvtArg(lhs, &left)) { t = left != 0.0; goto done; } @@ -762,7 +764,7 @@ do_string_compare: * rhs is either a float or an integer. Convert both the * lhs and the rhs to a double and compare the two. */ - + if (!CondCvtArg(lhs, &left) || !CondCvtArg(rhs, &right)) goto do_string_compare; @@ -811,7 +813,7 @@ done: } static int -get_mpt_arg(Boolean doEval, char **linePtr, char **argPtr, const char *func MAKE_ATTR_UNUSED) +get_mpt_arg(char **linePtr, char **argPtr, const char *func MAKE_ATTR_UNUSED) { /* * Use Var_Parse to parse the spec in parens and return @@ -825,7 +827,7 @@ get_mpt_arg(Boolean doEval, char **linePtr, char **argPtr, const char *func MAKE /* We do all the work here and return the result as the length */ *argPtr = NULL; - val = Var_Parse(cp - 1, VAR_CMD, doEval ? VARF_WANTRES : 0, &length, &freeIt); + val = Var_Parse(cp - 1, VAR_CMD, VARF_WANTRES, &length, &freeIt); /* * Advance *linePtr to beyond the closing ). Note that * we subtract one because 'length' is calculated from 'cp - 1'. @@ -862,7 +864,7 @@ compare_function(Boolean doEval) static const struct fn_def { const char *fn_name; int fn_name_len; - int (*fn_getarg)(Boolean, char **, char **, const char *); + int (*fn_getarg)(char **, char **, const char *); Boolean (*fn_proc)(int, const char *); } fn_defs[] = { { "defined", 7, CondGetArg, CondDoDefined }, @@ -890,7 +892,7 @@ compare_function(Boolean doEval) if (*cp != '(') break; - arglen = fn_def->fn_getarg(doEval, &cp, &arg, fn_def->fn_name); + arglen = fn_def->fn_getarg(&cp, &arg, fn_def->fn_name); if (arglen <= 0) { condExpr = cp; return arglen < 0 ? TOK_ERROR : TOK_FALSE; @@ -915,7 +917,7 @@ compare_function(Boolean doEval) * would be invalid if we did "defined(a)" - so instead treat as an * expression. */ - arglen = CondGetArg(doEval, &cp, &arg, NULL); + arglen = CondGetArg(&cp, &arg, NULL); for (cp1 = cp; isspace(*(unsigned char *)cp1); cp1++) continue; if (*cp1 == '=' || *cp1 == '!') @@ -1038,7 +1040,7 @@ CondT(Boolean doEval) t = TOK_TRUE; } } - return t; + return (t); } /*- @@ -1084,7 +1086,7 @@ CondF(Boolean doEval) CondPushBack(o); } } - return l; + return (l); } /*- @@ -1131,7 +1133,7 @@ CondE(Boolean doEval) CondPushBack(o); } } - return l; + return (l); } /*- diff --git a/contrib/bmake/dir.c b/contrib/bmake/dir.c index 5c5e7e5c14f2..31c19d247266 100644 --- a/contrib/bmake/dir.c +++ b/contrib/bmake/dir.c @@ -1,4 +1,4 @@ -/* $NetBSD: dir.c,v 1.76 2020/07/03 08:13:23 rillig Exp $ */ +/* $NetBSD: dir.c,v 1.74 2020/06/05 18:03:59 sjg Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -70,14 +70,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: dir.c,v 1.76 2020/07/03 08:13:23 rillig Exp $"; +static char rcsid[] = "$NetBSD: dir.c,v 1.74 2020/06/05 18:03:59 sjg Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)dir.c 8.2 (Berkeley) 1/2/94"; #else -__RCSID("$NetBSD: dir.c,v 1.76 2020/07/03 08:13:23 rillig Exp $"); +__RCSID("$NetBSD: dir.c,v 1.74 2020/06/05 18:03:59 sjg Exp $"); #endif #endif /* not lint */ #endif @@ -112,7 +112,7 @@ __RCSID("$NetBSD: dir.c,v 1.76 2020/07/03 08:13:23 rillig Exp $"); * Dir_FindHereOrAbove Search for a path in the current directory and * then all the directories above it in turn until * the path is found or we reach the root ("/"). - * + * * Dir_MTime Return the modification time of a node. The file * is searched for along the default search path. * The path and mtime fields of the node are filled @@ -377,7 +377,7 @@ void Dir_InitCur(const char *cdname) { Path *p; - + if (cdname != NULL) { /* * Our build directory is not the same as our source directory. @@ -480,7 +480,7 @@ Dir_SetPATH(void) Boolean hasLastDot = FALSE; /* true we should search dot last */ Var_Delete(".PATH", VAR_GLOBAL); - + if (Lst_Open(dirSearchPath) == SUCCESS) { if ((ln = Lst_First(dirSearchPath)) != NULL) { p = (Path *)Lst_Datum(ln); @@ -537,7 +537,7 @@ Dir_SetPATH(void) static int DirFindName(const void *p, const void *dname) { - return strcmp(((const Path *)p)->name, dname); + return (strcmp(((const Path *)p)->name, dname)); } /*- @@ -545,7 +545,7 @@ DirFindName(const void *p, const void *dname) * Dir_HasWildcards -- * see if the given name has any wildcard characters in it * be careful not to expand unmatching brackets or braces. - * XXX: This code is not 100% correct. ([^]] fails etc.) + * XXX: This code is not 100% correct. ([^]] fails etc.) * I really don't think that make(1) should be expanding * patterns, because then you have to set a mechanism for * escaping the expansion! @@ -644,7 +644,7 @@ DirMatchFiles(const char *pattern, Path *p, Lst expansions) STR_ADDSLASH))); } } - return 0; + return (0); } /*- @@ -947,7 +947,7 @@ Dir_Expand(const char *word, Lst path, Lst expansions) *----------------------------------------------------------------------- */ static char * -DirLookup(Path *p, const char *name MAKE_ATTR_UNUSED, const char *cp, +DirLookup(Path *p, const char *name MAKE_ATTR_UNUSED, const char *cp, Boolean hasSlash MAKE_ATTR_UNUSED) { char *file; /* the current filename to check */ @@ -1004,7 +1004,7 @@ DirLookupSubdir(Path *p, const char *name) if (cached_stat(file, &stb) == 0) { nearmisses += 1; - return file; + return (file); } free(file); return NULL; @@ -1061,7 +1061,7 @@ DirLookupAbs(Path *p, const char *name, const char *cp) if (DEBUG(DIR)) { fprintf(debug_file, " returning %s\n", name); } - return bmake_strdup(name); + return (bmake_strdup(name)); } /*- @@ -1087,7 +1087,7 @@ DirFindDot(Boolean hasSlash MAKE_ATTR_UNUSED, const char *name, const char *cp) } hits += 1; dot->hits += 1; - return bmake_strdup(name); + return (bmake_strdup(name)); } if (cur && Hash_FindEntry(&cur->files, cp) != NULL) { @@ -1185,7 +1185,7 @@ Dir_FindFile(const char *name, Lst path) * is found, we concatenate the directory name and the final * component and return the resulting string. If we don't find any * such thing, we go on to phase two... - * + * * No matter what, we always look for the file in the current * directory before anywhere else (unless we found the magic * DOTLAST path, in which case we search it last) and we *do not* @@ -1384,7 +1384,7 @@ Dir_FindFile(const char *name, Lst path) } if (Hash_FindEntry(&p->files, cp) != NULL) { - return bmake_strdup(name); + return (bmake_strdup(name)); } else { return NULL; } @@ -1395,7 +1395,7 @@ Dir_FindFile(const char *name, Lst path) bigmisses += 1; if (cached_stat(name, &stb) == 0) { - return bmake_strdup(name); + return (bmake_strdup(name)); } if (DEBUG(DIR)) { @@ -1409,14 +1409,14 @@ Dir_FindFile(const char *name, Lst path) /*- *----------------------------------------------------------------------- * Dir_FindHereOrAbove -- - * search for a path starting at a given directory and then working + * search for a path starting at a given directory and then working * our way up towards the root. * * Input: * here starting directory * search_path the path we are looking for * result the result of a successful search is placed here - * rlen the length of the result buffer + * rlen the length of the result buffer * (typically MAXPATHLEN + 1) * * Results: @@ -1426,7 +1426,7 @@ Dir_FindFile(const char *name, Lst path) * Side Effects: *----------------------------------------------------------------------- */ -int +int Dir_FindHereOrAbove(char *here, char *search_path, char *result, int rlen) { struct stat st; @@ -1451,7 +1451,7 @@ Dir_FindHereOrAbove(char *here, char *search_path, char *result, int rlen) { try_end = try + strlen(try); while (try_end > try && *try_end != '/') try_end--; - if (try_end > try) + if (try_end > try) *try_end = 0; /* chop! */ } @@ -1459,10 +1459,10 @@ Dir_FindHereOrAbove(char *here, char *search_path, char *result, int rlen) { * done! */ snprintf(result, rlen, "%s", try); - return 1; + return(1); } - /* + /* * nope, we didn't find it. if we used up dirbase we've * reached the root and failed. */ @@ -1479,9 +1479,9 @@ Dir_FindHereOrAbove(char *here, char *search_path, char *result, int rlen) { } /* while (1) */ /* - * we failed... + * we failed... */ - return 0; + return(0); } /*- @@ -1529,7 +1529,7 @@ Dir_MTime(GNode *gn, Boolean recheck) * see if we can find it via the current .PATH */ cp++; - + fullName = Dir_FindFile(cp, Suff_FindPath(gn)); if (fullName) { /* @@ -1572,7 +1572,7 @@ Dir_MTime(GNode *gn, Boolean recheck) } gn->mtime = stb.st_mtime; - return gn->mtime; + return (gn->mtime); } /*- @@ -1677,7 +1677,7 @@ Dir_CopyDir(void *p) { ((Path *)p)->refCount += 1; - return p; + return (p); } /*- @@ -1722,7 +1722,7 @@ Dir_MakeFlags(const char *flag, Lst path) Lst_Close(path); } - return str; + return (str); } /*- diff --git a/contrib/bmake/for.c b/contrib/bmake/for.c index f20a0f58b06b..fffedda7e688 100644 --- a/contrib/bmake/for.c +++ b/contrib/bmake/for.c @@ -1,4 +1,4 @@ -/* $NetBSD: for.c,v 1.54 2020/07/03 08:13:23 rillig Exp $ */ +/* $NetBSD: for.c,v 1.53 2017/04/16 21:04:44 riastradh Exp $ */ /* * Copyright (c) 1992, The Regents of the University of California. @@ -30,14 +30,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: for.c,v 1.54 2020/07/03 08:13:23 rillig Exp $"; +static char rcsid[] = "$NetBSD: for.c,v 1.53 2017/04/16 21:04:44 riastradh Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)for.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: for.c,v 1.54 2020/07/03 08:13:23 rillig Exp $"); +__RCSID("$NetBSD: for.c,v 1.53 2017/04/16 21:04:44 riastradh Exp $"); #endif #endif /* not lint */ #endif @@ -224,7 +224,7 @@ For_Eval(char *line) words = brk_string(sub, &nwords, FALSE, &word_buf); free(sub); - + if (words != NULL) { for (n = 0; n < nwords; n++) { ptr = words[n]; @@ -480,9 +480,9 @@ For_Iterate(void *v_arg, size_t *ret_len) void For_Run(int lineno) -{ +{ For *arg; - + arg = accumFor; accumFor = NULL; @@ -491,6 +491,6 @@ For_Run(int lineno) For_Free(arg); return; } - + Parse_SetInput(NULL, lineno, -1, For_Iterate, arg); } diff --git a/contrib/bmake/hash.c b/contrib/bmake/hash.c index f2bbebc9ece7..ed23644433be 100644 --- a/contrib/bmake/hash.c +++ b/contrib/bmake/hash.c @@ -1,4 +1,4 @@ -/* $NetBSD: hash.c,v 1.22 2020/07/03 17:03:09 rillig Exp $ */ +/* $NetBSD: hash.c,v 1.20 2013/11/14 00:27:05 sjg Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -70,14 +70,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: hash.c,v 1.22 2020/07/03 17:03:09 rillig Exp $"; +static char rcsid[] = "$NetBSD: hash.c,v 1.20 2013/11/14 00:27:05 sjg Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)hash.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: hash.c,v 1.22 2020/07/03 17:03:09 rillig Exp $"); +__RCSID("$NetBSD: hash.c,v 1.20 2013/11/14 00:27:05 sjg Exp $"); #endif #endif /* not lint */ #endif @@ -229,7 +229,7 @@ Hash_FindEntry(Hash_Table *t, const char *key) p = key; for (e = t->bucketPtr[h & t->mask]; e != NULL; e = e->next) if (e->namehash == h && strcmp(e->name, p) == 0) - return e; + return (e); return NULL; } @@ -279,7 +279,7 @@ Hash_CreateEntry(Hash_Table *t, const char *key, Boolean *newPtr) if (e->namehash == h && strcmp(e->name, p) == 0) { if (newPtr != NULL) *newPtr = FALSE; - return e; + return (e); } } @@ -301,7 +301,7 @@ Hash_CreateEntry(Hash_Table *t, const char *key, Boolean *newPtr) if (newPtr != NULL) *newPtr = TRUE; - return e; + return (e); } /* @@ -418,7 +418,7 @@ Hash_EnumNext(Hash_Search *searchPtr) e = t->bucketPtr[searchPtr->nextIndex++]; } searchPtr->hashEntryPtr = e; - return e; + return (e); } /* @@ -464,14 +464,3 @@ RebuildTable(Hash_Table *t) } free(oldhp); } - -void Hash_ForEach(Hash_Table *t, void (*action)(void *, void *), void *data) -{ - Hash_Search search; - Hash_Entry *e; - - for (e = Hash_EnumFirst(t, &search); - e != NULL; - e = Hash_EnumNext(&search)) - action(Hash_GetValue(e), data); -} diff --git a/contrib/bmake/hash.h b/contrib/bmake/hash.h index 2e4ea6a43560..8ab6ffd4f556 100644 --- a/contrib/bmake/hash.h +++ b/contrib/bmake/hash.h @@ -1,4 +1,4 @@ -/* $NetBSD: hash.h,v 1.13 2020/07/03 17:03:09 rillig Exp $ */ +/* $NetBSD: hash.h,v 1.12 2017/05/31 21:07:03 maya Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -145,6 +145,5 @@ Hash_Entry *Hash_CreateEntry(Hash_Table *, const char *, Boolean *); void Hash_DeleteEntry(Hash_Table *, Hash_Entry *); Hash_Entry *Hash_EnumFirst(Hash_Table *, Hash_Search *); Hash_Entry *Hash_EnumNext(Hash_Search *); -void Hash_ForEach(Hash_Table *, void (*)(void *, void *), void *); #endif /* _HASH_H */ diff --git a/contrib/bmake/job.c b/contrib/bmake/job.c index a80347acc5cc..52600124d2a5 100644 --- a/contrib/bmake/job.c +++ b/contrib/bmake/job.c @@ -1,4 +1,4 @@ -/* $NetBSD: job.c,v 1.201 2020/07/03 08:13:23 rillig Exp $ */ +/* $NetBSD: job.c,v 1.197 2020/02/06 01:13:19 sjg Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -70,14 +70,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: job.c,v 1.201 2020/07/03 08:13:23 rillig Exp $"; +static char rcsid[] = "$NetBSD: job.c,v 1.197 2020/02/06 01:13:19 sjg Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)job.c 8.2 (Berkeley) 3/19/94"; #else -__RCSID("$NetBSD: job.c,v 1.201 2020/07/03 08:13:23 rillig Exp $"); +__RCSID("$NetBSD: job.c,v 1.197 2020/02/06 01:13:19 sjg Exp $"); #endif #endif /* not lint */ #endif @@ -290,7 +290,7 @@ static Shell shells[] = { "", }, /* - * KSH description. + * KSH description. */ { "ksh", @@ -463,7 +463,7 @@ JobCreatePipe(Job *job, int minfd) job->jobPipe[i] = fd; } } - + /* Set close-on-exec flag for both */ if (fcntl(job->jobPipe[0], F_SETFD, FD_CLOEXEC) == -1) Punt("Cannot set close-on-exec: %s", strerror(errno)); @@ -473,7 +473,7 @@ JobCreatePipe(Job *job, int minfd) /* * We mark the input side of the pipe non-blocking; we poll(2) the * pipe when we're waiting for a job token, but we might lose the - * race for the token when a new one becomes available, so the read + * race for the token when a new one becomes available, so the read * from the pipe should not block. */ flags = fcntl(job->jobPipe[0], F_GETFL, 0); @@ -796,7 +796,7 @@ JobPrintCommand(void *cmdp, void *jobp) /* * If the shell doesn't have error control the alternate echo'ing will - * be done (to avoid showing additional error checking code) + * be done (to avoid showing additional error checking code) * and this will need the characters '$ ` \ "' escaped */ @@ -804,10 +804,10 @@ JobPrintCommand(void *cmdp, void *jobp) /* Worst that could happen is every char needs escaping. */ escCmd = bmake_malloc((strlen(cmd) * 2) + 1); for (i = 0, j= 0; cmd[i] != '\0'; i++, j++) { - if (cmd[i] == '$' || cmd[i] == '`' || cmd[i] == '\\' || + if (cmd[i] == '$' || cmd[i] == '`' || cmd[i] == '\\' || cmd[i] == '"') escCmd[j++] = '\\'; - escCmd[j] = cmd[i]; + escCmd[j] = cmd[i]; } escCmd[j] = 0; } @@ -880,13 +880,13 @@ JobPrintCommand(void *cmdp, void *jobp) } } else { - /* + /* * If errors are being checked and the shell doesn't have error control * but does supply an errOut template, then setup commands to run * through it. */ - if (!commandShell->hasErrCtl && commandShell->errOut && + if (!commandShell->hasErrCtl && commandShell->errOut && (*commandShell->errOut != '\0')) { if (!(job->flags & JOB_SILENT) && !shutUp) { if (commandShell->hasEchoCtl) { @@ -910,7 +910,7 @@ JobPrintCommand(void *cmdp, void *jobp) DBPRINTF("set -%s\n", "x"); job->flags |= JOB_TRACED; } - + DBPRINTF(cmdTemplate, cmd); free(cmdStart); free(escCmd); @@ -951,7 +951,7 @@ JobSaveCommand(void *cmd, void *gn) { cmd = Var_Subst(NULL, (char *)cmd, (GNode *)gn, VARF_WANTRES); (void)Lst_AtEnd(postCommands->commands, cmd); - return 0; + return(0); } @@ -1074,11 +1074,10 @@ JobFinish (Job *job, WAIT_T status) meta_job_error(job, job->node, job->flags, WEXITSTATUS(status)); } #endif - if (!dieQuietly(job->node, -1)) - (void)printf("*** [%s] Error code %d%s\n", - job->node->name, - WEXITSTATUS(status), - (job->flags & JOB_IGNERR) ? " (ignored)" : ""); + (void)printf("*** [%s] Error code %d%s\n", + job->node->name, + WEXITSTATUS(status), + (job->flags & JOB_IGNERR) ? " (ignored)" : ""); if (job->flags & JOB_IGNERR) { WAIT_STATUS(status) = 0; } else { @@ -1118,7 +1117,7 @@ JobFinish (Job *job, WAIT_T status) } } #endif - + return_job_token = FALSE; Trace_Log(JOBEND, job); @@ -1290,7 +1289,7 @@ Job_CheckCommands(GNode *gn, void (*abortProc)(const char *, ...)) * .DEFAULT itself. */ Make_HandleUse(DEFAULT, gn); - Var_Set(IMPSRC, Var_Value(TARGET, gn, &p1), gn); + Var_Set(IMPSRC, Var_Value(TARGET, gn, &p1), gn, 0); free(p1); } else if (Dir_MTime(gn, 0) == 0 && (gn->type & OP_SPECIAL) == 0) { /* @@ -1436,7 +1435,7 @@ JobExec(Job *job, char **argv) _exit(1); } } - + /* * Set up the child's output to be routed through the pipe * we've created for it. @@ -1785,7 +1784,7 @@ JobStart(GNode *gn, int flags) JobCreatePipe(job, 3); JobExec(job, argv); - return JOB_RUNNING; + return(JOB_RUNNING); } static char * @@ -2277,11 +2276,11 @@ Shell_GetNewline(void) void Job_SetPrefix(void) { - + if (targPrefix) { free(targPrefix); } else if (!Var_Exists(MAKE_JOB_PREFIX, VAR_GLOBAL)) { - Var_Set(MAKE_JOB_PREFIX, "---", VAR_GLOBAL); + Var_Set(MAKE_JOB_PREFIX, "---", VAR_GLOBAL, 0); } targPrefix = Var_Subst(NULL, "${" MAKE_JOB_PREFIX "}", @@ -2433,7 +2432,7 @@ JobMatchShell(const char *name) for (sh = shells; sh->name != NULL; sh++) { if (strcmp(name, sh->name) == 0) - return sh; + return (sh); } return NULL; } @@ -2549,7 +2548,7 @@ Job_ParseShell(char *line) Parse_Error(PARSE_FATAL, "Unknown keyword \"%s\"", *argv); free(words); - return FAILURE; + return(FAILURE); } fullSpec = TRUE; } @@ -2565,13 +2564,13 @@ Job_ParseShell(char *line) if (newShell.name == NULL) { Parse_Error(PARSE_FATAL, "Neither path nor name specified"); free(words); - return FAILURE; + return(FAILURE); } else { if ((sh = JobMatchShell(newShell.name)) == NULL) { Parse_Error(PARSE_WARNING, "%s: No matching shell", newShell.name); free(words); - return FAILURE; + return(FAILURE); } commandShell = sh; shellName = newShell.name; @@ -2607,7 +2606,7 @@ Job_ParseShell(char *line) Parse_Error(PARSE_WARNING, "%s: No matching shell", shellName); free(words); - return FAILURE; + return(FAILURE); } commandShell = sh; } else { @@ -2724,7 +2723,7 @@ Job_Finish(void) JobRun(postCommands); } } - return errors; + return(errors); } /*- @@ -2969,7 +2968,7 @@ Job_ServerStart(int max_tokens, int jp_0, int jp_1) { int i; char jobarg[64]; - + if (jp_0 >= 0 && jp_1 >= 0) { /* Pipe passed in from parent */ tokenWaitJob.inPipe = jp_0; @@ -2985,12 +2984,12 @@ Job_ServerStart(int max_tokens, int jp_0, int jp_1) tokenWaitJob.inPipe, tokenWaitJob.outPipe); Var_Append(MAKEFLAGS, "-J", VAR_GLOBAL); - Var_Append(MAKEFLAGS, jobarg, VAR_GLOBAL); + Var_Append(MAKEFLAGS, jobarg, VAR_GLOBAL); /* * Preload the job pipe with one token per job, save the one * "extra" token for the primary job. - * + * * XXX should clip maxJobs against PIPE_BUF -- if max_tokens is * larger than the write buffer size of the pipe, we will * deadlock here. @@ -3069,8 +3068,6 @@ Job_TokenWithdraw(void) /* And put the stopper back */ while (write(tokenWaitJob.outPipe, &tok, 1) == -1 && errno == EAGAIN) continue; - if (dieQuietly(NULL, 1)) - exit(2); Fatal("A failure has been detected in another branch of the parallel make"); } @@ -3107,7 +3104,7 @@ Job_RunTarget(const char *target, const char *fname) { return FALSE; if (fname) - Var_Set(ALLSRC, fname, gn); + Var_Set(ALLSRC, fname, gn, 0); JobRun(gn); if (gn->made == ERROR) { @@ -3142,9 +3139,9 @@ emul_poll(struct pollfd *fd, int nfd, int timeout) if (fd[i].fd > maxfd) maxfd = fd[i].fd; } - + if (maxfd >= FD_SETSIZE) { - Punt("Ran out of fd_set slots; " + Punt("Ran out of fd_set slots; " "recompile with a larger FD_SETSIZE."); } diff --git a/contrib/bmake/job.h b/contrib/bmake/job.h index 603c09e861f1..91e2c8782723 100644 --- a/contrib/bmake/job.h +++ b/contrib/bmake/job.h @@ -1,4 +1,4 @@ -/* $NetBSD: job.h,v 1.43 2020/07/03 08:13:23 rillig Exp $ */ +/* $NetBSD: job.h,v 1.42 2013/07/05 22:14:56 sjg Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -106,7 +106,7 @@ emul_poll(struct pollfd *fd, int nfd, int timeout); /* * The POLL_MSEC constant determines the maximum number of milliseconds spent - * in poll before coming out to see if a child has finished. + * in poll before coming out to see if a child has finished. */ #define POLL_MSEC 5000 @@ -203,11 +203,11 @@ typedef struct Job { * a case, errCheck becomes a printf template for echoing the command, * should echoing be on and ignErr becomes another printf template for * executing the command while ignoring the return status. Finally errOut - * is a printf template for running the command and causing the shell to - * exit on error. If any of these strings are empty when hasErrCtl is FALSE, - * the command will be executed anyway as is and if it causes an error, so be + * is a printf template for running the command and causing the shell to + * exit on error. If any of these strings are empty when hasErrCtl is FALSE, + * the command will be executed anyway as is and if it causes an error, so be * it. Any templates setup to echo the command will escape any '$ ` \ "'i - * characters in the command string to avoid common problems with + * characters in the command string to avoid common problems with * echo "%s\n" as a template. */ typedef struct Shell { diff --git a/contrib/bmake/lst.lib/lstAppend.c b/contrib/bmake/lst.lib/lstAppend.c index 97e60d959d7d..4dafe831450e 100644 --- a/contrib/bmake/lst.lib/lstAppend.c +++ b/contrib/bmake/lst.lib/lstAppend.c @@ -1,4 +1,4 @@ -/* $NetBSD: lstAppend.c,v 1.15 2020/07/03 08:37:56 rillig Exp $ */ +/* $NetBSD: lstAppend.c,v 1.14 2009/01/23 21:26:30 dsl Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -33,14 +33,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: lstAppend.c,v 1.15 2020/07/03 08:37:56 rillig Exp $"; +static char rcsid[] = "$NetBSD: lstAppend.c,v 1.14 2009/01/23 21:26:30 dsl Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)lstAppend.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: lstAppend.c,v 1.15 2020/07/03 08:37:56 rillig Exp $"); +__RCSID("$NetBSD: lstAppend.c,v 1.14 2009/01/23 21:26:30 dsl Exp $"); #endif #endif /* not lint */ #endif @@ -85,7 +85,7 @@ Lst_InsertAfter(Lst l, LstNode ln, void *d) } if (!LstValid (l) || LstIsEmpty (l) || ! LstNodeValid (ln, l)) { - return FAILURE; + return (FAILURE); } ok: @@ -117,5 +117,6 @@ Lst_InsertAfter(Lst l, LstNode ln, void *d) } } - return SUCCESS; + return (SUCCESS); } + diff --git a/contrib/bmake/lst.lib/lstAtEnd.c b/contrib/bmake/lst.lib/lstAtEnd.c index 4eadfdb0e7f3..10f191a2060c 100644 --- a/contrib/bmake/lst.lib/lstAtEnd.c +++ b/contrib/bmake/lst.lib/lstAtEnd.c @@ -1,4 +1,4 @@ -/* $NetBSD: lstAtEnd.c,v 1.14 2020/07/03 08:37:56 rillig Exp $ */ +/* $NetBSD: lstAtEnd.c,v 1.13 2009/01/23 21:26:30 dsl Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -33,14 +33,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: lstAtEnd.c,v 1.14 2020/07/03 08:37:56 rillig Exp $"; +static char rcsid[] = "$NetBSD: lstAtEnd.c,v 1.13 2009/01/23 21:26:30 dsl Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)lstAtEnd.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: lstAtEnd.c,v 1.14 2020/07/03 08:37:56 rillig Exp $"); +__RCSID("$NetBSD: lstAtEnd.c,v 1.13 2009/01/23 21:26:30 dsl Exp $"); #endif #endif /* not lint */ #endif @@ -75,5 +75,5 @@ Lst_AtEnd(Lst l, void *d) LstNode end; end = Lst_Last(l); - return Lst_InsertAfter(l, end, d); + return (Lst_InsertAfter(l, end, d)); } diff --git a/contrib/bmake/lst.lib/lstAtFront.c b/contrib/bmake/lst.lib/lstAtFront.c index 724713c092ed..d8be16647387 100644 --- a/contrib/bmake/lst.lib/lstAtFront.c +++ b/contrib/bmake/lst.lib/lstAtFront.c @@ -1,4 +1,4 @@ -/* $NetBSD: lstAtFront.c,v 1.14 2020/07/03 08:37:56 rillig Exp $ */ +/* $NetBSD: lstAtFront.c,v 1.13 2009/01/23 21:26:30 dsl Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -33,14 +33,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: lstAtFront.c,v 1.14 2020/07/03 08:37:56 rillig Exp $"; +static char rcsid[] = "$NetBSD: lstAtFront.c,v 1.13 2009/01/23 21:26:30 dsl Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)lstAtFront.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: lstAtFront.c,v 1.14 2020/07/03 08:37:56 rillig Exp $"); +__RCSID("$NetBSD: lstAtFront.c,v 1.13 2009/01/23 21:26:30 dsl Exp $"); #endif #endif /* not lint */ #endif @@ -72,5 +72,5 @@ Lst_AtFront(Lst l, void *d) LstNode front; front = Lst_First(l); - return Lst_InsertBefore(l, front, d); + return (Lst_InsertBefore(l, front, d)); } diff --git a/contrib/bmake/lst.lib/lstClose.c b/contrib/bmake/lst.lib/lstClose.c index a1a3e9da80de..06b68c5c038a 100644 --- a/contrib/bmake/lst.lib/lstClose.c +++ b/contrib/bmake/lst.lib/lstClose.c @@ -1,4 +1,4 @@ -/* $NetBSD: lstClose.c,v 1.12 2020/07/03 08:37:56 rillig Exp $ */ +/* $NetBSD: lstClose.c,v 1.11 2006/10/27 21:37:25 dsl Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -33,14 +33,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: lstClose.c,v 1.12 2020/07/03 08:37:56 rillig Exp $"; +static char rcsid[] = "$NetBSD: lstClose.c,v 1.11 2006/10/27 21:37:25 dsl Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)lstClose.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: lstClose.c,v 1.12 2020/07/03 08:37:56 rillig Exp $"); +__RCSID("$NetBSD: lstClose.c,v 1.11 2006/10/27 21:37:25 dsl Exp $"); #endif #endif /* not lint */ #endif @@ -83,3 +83,4 @@ Lst_Close(Lst l) list->atEnd = Unknown; } } + diff --git a/contrib/bmake/lst.lib/lstConcat.c b/contrib/bmake/lst.lib/lstConcat.c index 2f667c5b0119..534d34e45424 100644 --- a/contrib/bmake/lst.lib/lstConcat.c +++ b/contrib/bmake/lst.lib/lstConcat.c @@ -1,4 +1,4 @@ -/* $NetBSD: lstConcat.c,v 1.17 2020/07/03 08:37:56 rillig Exp $ */ +/* $NetBSD: lstConcat.c,v 1.16 2008/12/13 15:19:29 dsl Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -33,14 +33,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: lstConcat.c,v 1.17 2020/07/03 08:37:56 rillig Exp $"; +static char rcsid[] = "$NetBSD: lstConcat.c,v 1.16 2008/12/13 15:19:29 dsl Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)lstConcat.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: lstConcat.c,v 1.17 2020/07/03 08:37:56 rillig Exp $"); +__RCSID("$NetBSD: lstConcat.c,v 1.16 2008/12/13 15:19:29 dsl Exp $"); #endif #endif /* not lint */ #endif @@ -86,7 +86,7 @@ Lst_Concat(Lst l1, Lst l2, int flags) List list2 = l2; if (!LstValid (l1) || !LstValid (l2)) { - return FAILURE; + return (FAILURE); } if (flags == LST_CONCLINK) { @@ -180,5 +180,6 @@ Lst_Concat(Lst l1, Lst l2, int flags) } } - return SUCCESS; + return (SUCCESS); } + diff --git a/contrib/bmake/lst.lib/lstDatum.c b/contrib/bmake/lst.lib/lstDatum.c index c8ccb558f3dc..6e2d9ad0e73b 100644 --- a/contrib/bmake/lst.lib/lstDatum.c +++ b/contrib/bmake/lst.lib/lstDatum.c @@ -1,4 +1,4 @@ -/* $NetBSD: lstDatum.c,v 1.14 2020/07/03 08:37:56 rillig Exp $ */ +/* $NetBSD: lstDatum.c,v 1.13 2009/01/23 21:26:30 dsl Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -33,14 +33,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: lstDatum.c,v 1.14 2020/07/03 08:37:56 rillig Exp $"; +static char rcsid[] = "$NetBSD: lstDatum.c,v 1.13 2009/01/23 21:26:30 dsl Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)lstDatum.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: lstDatum.c,v 1.14 2020/07/03 08:37:56 rillig Exp $"); +__RCSID("$NetBSD: lstDatum.c,v 1.13 2009/01/23 21:26:30 dsl Exp $"); #endif #endif /* not lint */ #endif @@ -69,8 +69,9 @@ void * Lst_Datum(LstNode ln) { if (ln != NULL) { - return ln->datum; + return ((ln)->datum); } else { return NULL; } } + diff --git a/contrib/bmake/lst.lib/lstDeQueue.c b/contrib/bmake/lst.lib/lstDeQueue.c index 0f1452e4ac7e..bdb05cc1168d 100644 --- a/contrib/bmake/lst.lib/lstDeQueue.c +++ b/contrib/bmake/lst.lib/lstDeQueue.c @@ -1,4 +1,4 @@ -/* $NetBSD: lstDeQueue.c,v 1.15 2020/07/03 08:37:56 rillig Exp $ */ +/* $NetBSD: lstDeQueue.c,v 1.14 2009/01/23 21:26:30 dsl Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -33,14 +33,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: lstDeQueue.c,v 1.15 2020/07/03 08:37:56 rillig Exp $"; +static char rcsid[] = "$NetBSD: lstDeQueue.c,v 1.14 2009/01/23 21:26:30 dsl Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)lstDeQueue.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: lstDeQueue.c,v 1.15 2020/07/03 08:37:56 rillig Exp $"); +__RCSID("$NetBSD: lstDeQueue.c,v 1.14 2009/01/23 21:26:30 dsl Exp $"); #endif #endif /* not lint */ #endif @@ -81,6 +81,7 @@ Lst_DeQueue(Lst l) if (Lst_Remove(l, tln) == FAILURE) { return NULL; } else { - return rd; + return (rd); } } + diff --git a/contrib/bmake/lst.lib/lstDupl.c b/contrib/bmake/lst.lib/lstDupl.c index 6318ee4e462a..2174ff782282 100644 --- a/contrib/bmake/lst.lib/lstDupl.c +++ b/contrib/bmake/lst.lib/lstDupl.c @@ -1,4 +1,4 @@ -/* $NetBSD: lstDupl.c,v 1.17 2020/07/03 08:37:56 rillig Exp $ */ +/* $NetBSD: lstDupl.c,v 1.16 2009/01/23 21:26:30 dsl Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -33,14 +33,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: lstDupl.c,v 1.17 2020/07/03 08:37:56 rillig Exp $"; +static char rcsid[] = "$NetBSD: lstDupl.c,v 1.16 2009/01/23 21:26:30 dsl Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)lstDupl.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: lstDupl.c,v 1.17 2020/07/03 08:37:56 rillig Exp $"); +__RCSID("$NetBSD: lstDupl.c,v 1.16 2009/01/23 21:26:30 dsl Exp $"); #endif #endif /* not lint */ #endif @@ -103,5 +103,5 @@ Lst_Duplicate(Lst l, DuplicateProc *copyProc) } } - return nl; + return (nl); } diff --git a/contrib/bmake/lst.lib/lstEnQueue.c b/contrib/bmake/lst.lib/lstEnQueue.c index c6941a8eb9d3..be386c91a512 100644 --- a/contrib/bmake/lst.lib/lstEnQueue.c +++ b/contrib/bmake/lst.lib/lstEnQueue.c @@ -1,4 +1,4 @@ -/* $NetBSD: lstEnQueue.c,v 1.14 2020/07/03 08:37:56 rillig Exp $ */ +/* $NetBSD: lstEnQueue.c,v 1.13 2009/01/23 21:26:30 dsl Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -33,14 +33,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: lstEnQueue.c,v 1.14 2020/07/03 08:37:56 rillig Exp $"; +static char rcsid[] = "$NetBSD: lstEnQueue.c,v 1.13 2009/01/23 21:26:30 dsl Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)lstEnQueue.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: lstEnQueue.c,v 1.14 2020/07/03 08:37:56 rillig Exp $"); +__RCSID("$NetBSD: lstEnQueue.c,v 1.13 2009/01/23 21:26:30 dsl Exp $"); #endif #endif /* not lint */ #endif @@ -70,8 +70,9 @@ ReturnStatus Lst_EnQueue(Lst l, void *d) { if (LstValid (l) == FALSE) { - return FAILURE; + return (FAILURE); } - return Lst_InsertAfter(l, Lst_Last(l), d); + return (Lst_InsertAfter(l, Lst_Last(l), d)); } + diff --git a/contrib/bmake/lst.lib/lstFind.c b/contrib/bmake/lst.lib/lstFind.c index a1d27d3ad686..d07dbe7f9f8c 100644 --- a/contrib/bmake/lst.lib/lstFind.c +++ b/contrib/bmake/lst.lib/lstFind.c @@ -1,4 +1,4 @@ -/* $NetBSD: lstFind.c,v 1.16 2020/07/03 08:37:56 rillig Exp $ */ +/* $NetBSD: lstFind.c,v 1.15 2009/01/23 21:58:28 dsl Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -33,14 +33,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: lstFind.c,v 1.16 2020/07/03 08:37:56 rillig Exp $"; +static char rcsid[] = "$NetBSD: lstFind.c,v 1.15 2009/01/23 21:58:28 dsl Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)lstFind.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: lstFind.c,v 1.16 2020/07/03 08:37:56 rillig Exp $"); +__RCSID("$NetBSD: lstFind.c,v 1.15 2009/01/23 21:58:28 dsl Exp $"); #endif #endif /* not lint */ #endif @@ -69,5 +69,6 @@ __RCSID("$NetBSD: lstFind.c,v 1.16 2020/07/03 08:37:56 rillig Exp $"); LstNode Lst_Find(Lst l, const void *d, int (*cProc)(const void *, const void *)) { - return Lst_FindFrom(l, Lst_First(l), d, cProc); + return (Lst_FindFrom(l, Lst_First(l), d, cProc)); } + diff --git a/contrib/bmake/lst.lib/lstFindFrom.c b/contrib/bmake/lst.lib/lstFindFrom.c index 676c07392039..e2beab6321d5 100644 --- a/contrib/bmake/lst.lib/lstFindFrom.c +++ b/contrib/bmake/lst.lib/lstFindFrom.c @@ -1,4 +1,4 @@ -/* $NetBSD: lstFindFrom.c,v 1.16 2020/07/03 08:37:56 rillig Exp $ */ +/* $NetBSD: lstFindFrom.c,v 1.15 2009/01/23 21:58:28 dsl Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -33,14 +33,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: lstFindFrom.c,v 1.16 2020/07/03 08:37:56 rillig Exp $"; +static char rcsid[] = "$NetBSD: lstFindFrom.c,v 1.15 2009/01/23 21:58:28 dsl Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)lstFindFrom.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: lstFindFrom.c,v 1.16 2020/07/03 08:37:56 rillig Exp $"); +__RCSID("$NetBSD: lstFindFrom.c,v 1.15 2009/01/23 21:58:28 dsl Exp $"); #endif #endif /* not lint */ #endif @@ -81,9 +81,10 @@ Lst_FindFrom(Lst l, LstNode ln, const void *d, do { if ((*cProc)(tln->datum, d) == 0) - return tln; + return (tln); tln = tln->nextPtr; } while (tln != ln && tln != NULL); return NULL; } + diff --git a/contrib/bmake/lst.lib/lstFirst.c b/contrib/bmake/lst.lib/lstFirst.c index a79db57120dd..4e8334f8bcc9 100644 --- a/contrib/bmake/lst.lib/lstFirst.c +++ b/contrib/bmake/lst.lib/lstFirst.c @@ -1,4 +1,4 @@ -/* $NetBSD: lstFirst.c,v 1.13 2020/07/03 08:37:56 rillig Exp $ */ +/* $NetBSD: lstFirst.c,v 1.12 2008/12/13 15:19:29 dsl Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -33,14 +33,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: lstFirst.c,v 1.13 2020/07/03 08:37:56 rillig Exp $"; +static char rcsid[] = "$NetBSD: lstFirst.c,v 1.12 2008/12/13 15:19:29 dsl Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)lstFirst.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: lstFirst.c,v 1.13 2020/07/03 08:37:56 rillig Exp $"); +__RCSID("$NetBSD: lstFirst.c,v 1.12 2008/12/13 15:19:29 dsl Exp $"); #endif #endif /* not lint */ #endif @@ -71,6 +71,7 @@ Lst_First(Lst l) if (!LstValid (l) || LstIsEmpty (l)) { return NULL; } else { - return l->firstPtr; + return (l->firstPtr); } } + diff --git a/contrib/bmake/lst.lib/lstForEach.c b/contrib/bmake/lst.lib/lstForEach.c index dc2fdd8bfc57..917e4ea80236 100644 --- a/contrib/bmake/lst.lib/lstForEach.c +++ b/contrib/bmake/lst.lib/lstForEach.c @@ -1,4 +1,4 @@ -/* $NetBSD: lstForEach.c,v 1.14 2020/07/03 08:37:57 rillig Exp $ */ +/* $NetBSD: lstForEach.c,v 1.13 2009/01/23 21:26:30 dsl Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -33,14 +33,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: lstForEach.c,v 1.14 2020/07/03 08:37:57 rillig Exp $"; +static char rcsid[] = "$NetBSD: lstForEach.c,v 1.13 2009/01/23 21:26:30 dsl Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)lstForEach.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: lstForEach.c,v 1.14 2020/07/03 08:37:57 rillig Exp $"); +__RCSID("$NetBSD: lstForEach.c,v 1.13 2009/01/23 21:26:30 dsl Exp $"); #endif #endif /* not lint */ #endif @@ -73,3 +73,4 @@ Lst_ForEach(Lst l, int (*proc)(void *, void *), void *d) { return Lst_ForEachFrom(l, Lst_First(l), proc, d); } + diff --git a/contrib/bmake/lst.lib/lstForEachFrom.c b/contrib/bmake/lst.lib/lstForEachFrom.c index a08ddf35935b..c7f44adc476a 100644 --- a/contrib/bmake/lst.lib/lstForEachFrom.c +++ b/contrib/bmake/lst.lib/lstForEachFrom.c @@ -1,4 +1,4 @@ -/* $NetBSD: lstForEachFrom.c,v 1.18 2020/07/03 08:37:57 rillig Exp $ */ +/* $NetBSD: lstForEachFrom.c,v 1.17 2009/01/23 21:26:30 dsl Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -33,14 +33,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: lstForEachFrom.c,v 1.18 2020/07/03 08:37:57 rillig Exp $"; +static char rcsid[] = "$NetBSD: lstForEachFrom.c,v 1.17 2009/01/23 21:26:30 dsl Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)lstForEachFrom.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: lstForEachFrom.c,v 1.18 2020/07/03 08:37:57 rillig Exp $"); +__RCSID("$NetBSD: lstForEachFrom.c,v 1.17 2009/01/23 21:26:30 dsl Exp $"); #endif #endif /* not lint */ #endif @@ -122,3 +122,4 @@ Lst_ForEachFrom(Lst l, LstNode ln, int (*proc)(void *, void *), return result; } + diff --git a/contrib/bmake/lst.lib/lstInit.c b/contrib/bmake/lst.lib/lstInit.c index 3255da7e59a1..f98ac42b06a0 100644 --- a/contrib/bmake/lst.lib/lstInit.c +++ b/contrib/bmake/lst.lib/lstInit.c @@ -1,4 +1,4 @@ -/* $NetBSD: lstInit.c,v 1.13 2020/07/03 08:37:57 rillig Exp $ */ +/* $NetBSD: lstInit.c,v 1.12 2008/12/13 15:19:29 dsl Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -33,14 +33,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: lstInit.c,v 1.13 2020/07/03 08:37:57 rillig Exp $"; +static char rcsid[] = "$NetBSD: lstInit.c,v 1.12 2008/12/13 15:19:29 dsl Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)lstInit.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: lstInit.c,v 1.13 2020/07/03 08:37:57 rillig Exp $"); +__RCSID("$NetBSD: lstInit.c,v 1.12 2008/12/13 15:19:29 dsl Exp $"); #endif #endif /* not lint */ #endif @@ -81,5 +81,5 @@ Lst_Init(Boolean circ) nList->isCirc = circ; nList->atEnd = Unknown; - return nList; + return (nList); } diff --git a/contrib/bmake/lst.lib/lstInsert.c b/contrib/bmake/lst.lib/lstInsert.c index 845b8899e03b..77187bb327e2 100644 --- a/contrib/bmake/lst.lib/lstInsert.c +++ b/contrib/bmake/lst.lib/lstInsert.c @@ -1,4 +1,4 @@ -/* $NetBSD: lstInsert.c,v 1.15 2020/07/03 08:37:57 rillig Exp $ */ +/* $NetBSD: lstInsert.c,v 1.14 2009/01/23 21:26:30 dsl Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -33,14 +33,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: lstInsert.c,v 1.15 2020/07/03 08:37:57 rillig Exp $"; +static char rcsid[] = "$NetBSD: lstInsert.c,v 1.14 2009/01/23 21:26:30 dsl Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)lstInsert.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: lstInsert.c,v 1.15 2020/07/03 08:37:57 rillig Exp $"); +__RCSID("$NetBSD: lstInsert.c,v 1.14 2009/01/23 21:26:30 dsl Exp $"); #endif #endif /* not lint */ #endif @@ -87,7 +87,7 @@ Lst_InsertBefore(Lst l, LstNode ln, void *d) goto ok; if (!LstValid (l) || LstIsEmpty (l) || !LstNodeValid (ln, l)) { - return FAILURE; + return (FAILURE); } ok: @@ -117,5 +117,6 @@ Lst_InsertBefore(Lst l, LstNode ln, void *d) } } - return SUCCESS; + return (SUCCESS); } + diff --git a/contrib/bmake/lst.lib/lstIsAtEnd.c b/contrib/bmake/lst.lib/lstIsAtEnd.c index c5add4d9867f..70270d2956c1 100644 --- a/contrib/bmake/lst.lib/lstIsAtEnd.c +++ b/contrib/bmake/lst.lib/lstIsAtEnd.c @@ -1,4 +1,4 @@ -/* $NetBSD: lstIsAtEnd.c,v 1.14 2020/07/03 08:37:57 rillig Exp $ */ +/* $NetBSD: lstIsAtEnd.c,v 1.13 2008/02/15 21:29:50 christos Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -33,14 +33,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: lstIsAtEnd.c,v 1.14 2020/07/03 08:37:57 rillig Exp $"; +static char rcsid[] = "$NetBSD: lstIsAtEnd.c,v 1.13 2008/02/15 21:29:50 christos Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)lstIsAtEnd.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: lstIsAtEnd.c,v 1.14 2020/07/03 08:37:57 rillig Exp $"); +__RCSID("$NetBSD: lstIsAtEnd.c,v 1.13 2008/02/15 21:29:50 christos Exp $"); #endif #endif /* not lint */ #endif @@ -81,6 +81,7 @@ Lst_IsAtEnd(Lst l) { List list = l; - return !LstValid (l) || !list->isOpen || - list->atEnd == Head || list->atEnd == Tail; + return (!LstValid (l) || !list->isOpen || + (list->atEnd == Head) || (list->atEnd == Tail)); } + diff --git a/contrib/bmake/lst.lib/lstIsEmpty.c b/contrib/bmake/lst.lib/lstIsEmpty.c index ccf4525a3506..8b1d6ed0dd91 100644 --- a/contrib/bmake/lst.lib/lstIsEmpty.c +++ b/contrib/bmake/lst.lib/lstIsEmpty.c @@ -1,4 +1,4 @@ -/* $NetBSD: lstIsEmpty.c,v 1.12 2020/07/03 08:37:57 rillig Exp $ */ +/* $NetBSD: lstIsEmpty.c,v 1.11 2008/12/13 15:19:29 dsl Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -33,14 +33,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: lstIsEmpty.c,v 1.12 2020/07/03 08:37:57 rillig Exp $"; +static char rcsid[] = "$NetBSD: lstIsEmpty.c,v 1.11 2008/12/13 15:19:29 dsl Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)lstIsEmpty.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: lstIsEmpty.c,v 1.12 2020/07/03 08:37:57 rillig Exp $"); +__RCSID("$NetBSD: lstIsEmpty.c,v 1.11 2008/12/13 15:19:29 dsl Exp $"); #endif #endif /* not lint */ #endif @@ -70,5 +70,6 @@ __RCSID("$NetBSD: lstIsEmpty.c,v 1.12 2020/07/03 08:37:57 rillig Exp $"); Boolean Lst_IsEmpty(Lst l) { - return !LstValid(l) || LstIsEmpty(l); + return ( ! LstValid (l) || LstIsEmpty(l)); } + diff --git a/contrib/bmake/lst.lib/lstLast.c b/contrib/bmake/lst.lib/lstLast.c index 1d65bf19473e..096ca24d1372 100644 --- a/contrib/bmake/lst.lib/lstLast.c +++ b/contrib/bmake/lst.lib/lstLast.c @@ -1,4 +1,4 @@ -/* $NetBSD: lstLast.c,v 1.13 2020/07/03 08:37:57 rillig Exp $ */ +/* $NetBSD: lstLast.c,v 1.12 2008/12/13 15:19:29 dsl Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -33,14 +33,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: lstLast.c,v 1.13 2020/07/03 08:37:57 rillig Exp $"; +static char rcsid[] = "$NetBSD: lstLast.c,v 1.12 2008/12/13 15:19:29 dsl Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)lstLast.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: lstLast.c,v 1.13 2020/07/03 08:37:57 rillig Exp $"); +__RCSID("$NetBSD: lstLast.c,v 1.12 2008/12/13 15:19:29 dsl Exp $"); #endif #endif /* not lint */ #endif @@ -71,6 +71,7 @@ Lst_Last(Lst l) if (!LstValid(l) || LstIsEmpty (l)) { return NULL; } else { - return l->lastPtr; + return (l->lastPtr); } } + diff --git a/contrib/bmake/lst.lib/lstNext.c b/contrib/bmake/lst.lib/lstNext.c index 9c180d2cfad1..5c2e0eece592 100644 --- a/contrib/bmake/lst.lib/lstNext.c +++ b/contrib/bmake/lst.lib/lstNext.c @@ -1,4 +1,4 @@ -/* $NetBSD: lstNext.c,v 1.13 2020/07/03 08:37:57 rillig Exp $ */ +/* $NetBSD: lstNext.c,v 1.12 2008/12/13 15:19:29 dsl Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -33,14 +33,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: lstNext.c,v 1.13 2020/07/03 08:37:57 rillig Exp $"; +static char rcsid[] = "$NetBSD: lstNext.c,v 1.12 2008/12/13 15:19:29 dsl Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)lstNext.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: lstNext.c,v 1.13 2020/07/03 08:37:57 rillig Exp $"); +__RCSID("$NetBSD: lstNext.c,v 1.12 2008/12/13 15:19:29 dsl Exp $"); #endif #endif /* not lint */ #endif @@ -115,5 +115,6 @@ Lst_Next(Lst l) } } - return tln; + return (tln); } + diff --git a/contrib/bmake/lst.lib/lstOpen.c b/contrib/bmake/lst.lib/lstOpen.c index 919dd6d5000c..941293e7abb2 100644 --- a/contrib/bmake/lst.lib/lstOpen.c +++ b/contrib/bmake/lst.lib/lstOpen.c @@ -1,4 +1,4 @@ -/* $NetBSD: lstOpen.c,v 1.13 2020/07/03 08:37:57 rillig Exp $ */ +/* $NetBSD: lstOpen.c,v 1.12 2008/12/13 15:19:29 dsl Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -33,14 +33,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: lstOpen.c,v 1.13 2020/07/03 08:37:57 rillig Exp $"; +static char rcsid[] = "$NetBSD: lstOpen.c,v 1.12 2008/12/13 15:19:29 dsl Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)lstOpen.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: lstOpen.c,v 1.13 2020/07/03 08:37:57 rillig Exp $"); +__RCSID("$NetBSD: lstOpen.c,v 1.12 2008/12/13 15:19:29 dsl Exp $"); #endif #endif /* not lint */ #endif @@ -76,11 +76,12 @@ ReturnStatus Lst_Open(Lst l) { if (LstValid (l) == FALSE) { - return FAILURE; + return (FAILURE); } (l)->isOpen = TRUE; (l)->atEnd = LstIsEmpty (l) ? Head : Unknown; (l)->curPtr = NULL; - return SUCCESS; + return (SUCCESS); } + diff --git a/contrib/bmake/lst.lib/lstPrev.c b/contrib/bmake/lst.lib/lstPrev.c index b6c548d9a523..0ec865d51652 100644 --- a/contrib/bmake/lst.lib/lstPrev.c +++ b/contrib/bmake/lst.lib/lstPrev.c @@ -1,4 +1,4 @@ -/* $NetBSD: lstPrev.c,v 1.4 2020/07/03 08:37:57 rillig Exp $ */ +/* $NetBSD: lstPrev.c,v 1.3 2008/12/13 15:19:29 dsl Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -33,14 +33,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: lstPrev.c,v 1.4 2020/07/03 08:37:57 rillig Exp $"; +static char rcsid[] = "$NetBSD: lstPrev.c,v 1.3 2008/12/13 15:19:29 dsl Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)lstSucc.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: lstPrev.c,v 1.4 2020/07/03 08:37:57 rillig Exp $"); +__RCSID("$NetBSD: lstPrev.c,v 1.3 2008/12/13 15:19:29 dsl Exp $"); #endif #endif /* not lint */ #endif @@ -73,6 +73,7 @@ Lst_Prev(LstNode ln) if (ln == NULL) { return NULL; } else { - return ln->prevPtr; + return (ln->prevPtr); } } + diff --git a/contrib/bmake/lst.lib/lstRemove.c b/contrib/bmake/lst.lib/lstRemove.c index 59245499bdc4..7480d30ba4f4 100644 --- a/contrib/bmake/lst.lib/lstRemove.c +++ b/contrib/bmake/lst.lib/lstRemove.c @@ -1,4 +1,4 @@ -/* $NetBSD: lstRemove.c,v 1.17 2020/07/03 08:37:57 rillig Exp $ */ +/* $NetBSD: lstRemove.c,v 1.16 2014/09/07 20:55:34 joerg Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -33,14 +33,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: lstRemove.c,v 1.17 2020/07/03 08:37:57 rillig Exp $"; +static char rcsid[] = "$NetBSD: lstRemove.c,v 1.16 2014/09/07 20:55:34 joerg Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)lstRemove.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: lstRemove.c,v 1.17 2020/07/03 08:37:57 rillig Exp $"); +__RCSID("$NetBSD: lstRemove.c,v 1.16 2014/09/07 20:55:34 joerg Exp $"); #endif #endif /* not lint */ #endif @@ -73,8 +73,9 @@ Lst_Remove(Lst l, LstNode ln) List list = l; ListNode lNode = ln; - if (!LstValid (l) || !LstNodeValid (ln, l)) { - return FAILURE; + if (!LstValid (l) || + !LstNodeValid (ln, l)) { + return (FAILURE); } /* @@ -130,5 +131,6 @@ Lst_Remove(Lst l, LstNode ln) lNode->flags |= LN_DELETED; } - return SUCCESS; + return (SUCCESS); } + diff --git a/contrib/bmake/lst.lib/lstReplace.c b/contrib/bmake/lst.lib/lstReplace.c index f30cb00855e3..090e91a72c6e 100644 --- a/contrib/bmake/lst.lib/lstReplace.c +++ b/contrib/bmake/lst.lib/lstReplace.c @@ -1,4 +1,4 @@ -/* $NetBSD: lstReplace.c,v 1.14 2020/07/03 08:37:57 rillig Exp $ */ +/* $NetBSD: lstReplace.c,v 1.13 2009/01/23 21:26:30 dsl Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -33,14 +33,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: lstReplace.c,v 1.14 2020/07/03 08:37:57 rillig Exp $"; +static char rcsid[] = "$NetBSD: lstReplace.c,v 1.13 2009/01/23 21:26:30 dsl Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)lstReplace.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: lstReplace.c,v 1.14 2020/07/03 08:37:57 rillig Exp $"); +__RCSID("$NetBSD: lstReplace.c,v 1.13 2009/01/23 21:26:30 dsl Exp $"); #endif #endif /* not lint */ #endif @@ -69,9 +69,10 @@ ReturnStatus Lst_Replace(LstNode ln, void *d) { if (ln == NULL) { - return FAILURE; + return (FAILURE); } else { (ln)->datum = d; - return SUCCESS; + return (SUCCESS); } } + diff --git a/contrib/bmake/lst.lib/lstSucc.c b/contrib/bmake/lst.lib/lstSucc.c index b3f73bb15fd2..3f13aa5e7f66 100644 --- a/contrib/bmake/lst.lib/lstSucc.c +++ b/contrib/bmake/lst.lib/lstSucc.c @@ -1,4 +1,4 @@ -/* $NetBSD: lstSucc.c,v 1.14 2020/07/03 08:37:57 rillig Exp $ */ +/* $NetBSD: lstSucc.c,v 1.13 2008/12/13 15:19:29 dsl Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -33,14 +33,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: lstSucc.c,v 1.14 2020/07/03 08:37:57 rillig Exp $"; +static char rcsid[] = "$NetBSD: lstSucc.c,v 1.13 2008/12/13 15:19:29 dsl Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)lstSucc.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: lstSucc.c,v 1.14 2020/07/03 08:37:57 rillig Exp $"); +__RCSID("$NetBSD: lstSucc.c,v 1.13 2008/12/13 15:19:29 dsl Exp $"); #endif #endif /* not lint */ #endif @@ -73,6 +73,7 @@ Lst_Succ(LstNode ln) if (ln == NULL) { return NULL; } else { - return ln->nextPtr; + return (ln->nextPtr); } } + diff --git a/contrib/bmake/main.c b/contrib/bmake/main.c index 25141625e55c..1756f7a7d32f 100644 --- a/contrib/bmake/main.c +++ b/contrib/bmake/main.c @@ -1,4 +1,4 @@ -/* $NetBSD: main.c,v 1.279 2020/07/03 08:13:23 rillig Exp $ */ +/* $NetBSD: main.c,v 1.274 2020/03/30 02:41:06 sjg Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -69,7 +69,7 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: main.c,v 1.279 2020/07/03 08:13:23 rillig Exp $"; +static char rcsid[] = "$NetBSD: main.c,v 1.274 2020/03/30 02:41:06 sjg Exp $"; #else #include <sys/cdefs.h> #ifndef lint @@ -81,7 +81,7 @@ __COPYRIGHT("@(#) Copyright (c) 1988, 1989, 1990, 1993\ #if 0 static char sccsid[] = "@(#)main.c 8.3 (Berkeley) 3/19/94"; #else -__RCSID("$NetBSD: main.c,v 1.279 2020/07/03 08:13:23 rillig Exp $"); +__RCSID("$NetBSD: main.c,v 1.274 2020/03/30 02:41:06 sjg Exp $"); #endif #endif /* not lint */ #endif @@ -245,7 +245,7 @@ explode(const char *flags) *nf = '\0'; return st; } - + static void parse_debug_options(const char *argvalue) { @@ -429,7 +429,7 @@ MainParseArgs(int argc, char **argv) /* Can't actually use getopt(3) because rescanning is not portable */ getopt_def = OPTFLAGS; -rearg: +rearg: inOption = FALSE; optscan = NULL; while(argc > 1) { @@ -465,7 +465,7 @@ rearg: arginc = 2; } } else { - argvalue = NULL; + argvalue = NULL; } switch(c) { case '\0': @@ -475,7 +475,7 @@ rearg: case 'B': compatMake = TRUE; Var_Append(MAKEFLAGS, "-B", VAR_GLOBAL); - Var_Set(MAKE_MODE, "compat", VAR_GLOBAL); + Var_Set(MAKE_MODE, "compat", VAR_GLOBAL, 0); break; case 'C': if (chdir(argvalue) == -1) { @@ -499,7 +499,7 @@ rearg: break; case 'D': if (argvalue == NULL || argvalue[0] == 0) goto noarg; - Var_Set(argvalue, "1", VAR_GLOBAL); + Var_Set(argvalue, "1", VAR_GLOBAL, 0); Var_Append(MAKEFLAGS, "-D", VAR_GLOBAL); Var_Append(MAKEFLAGS, argvalue, VAR_GLOBAL); break; @@ -598,7 +598,7 @@ rearg: } Var_Append(MAKEFLAGS, "-j", VAR_GLOBAL); Var_Append(MAKEFLAGS, argvalue, VAR_GLOBAL); - Var_Set(".MAKE.JOBS", argvalue, VAR_GLOBAL); + Var_Set(".MAKE.JOBS", argvalue, VAR_GLOBAL, 0); maxJobTokens = maxJobs; break; case 'k': @@ -776,7 +776,7 @@ Main_SetObjdir(const char *fmt, ...) path, strerror(errno)); } else { strncpy(objdir, path, MAXPATHLEN); - Var_Set(".OBJDIR", objdir, VAR_GLOBAL); + Var_Set(".OBJDIR", objdir, VAR_GLOBAL, 0); setenv("PWD", objdir, 1); Dir_InitDot(); purge_cached_realpaths(); @@ -822,7 +822,7 @@ Main_SetVarObjdir(const char *var, const char *suffix) static int ReadAllMakefiles(const void *p, const void *q) { - return ReadMakefile(p, q) == 0; + return (ReadMakefile(p, q) == 0); } int @@ -838,7 +838,7 @@ str2Lst_Append(Lst lp, char *str, const char *sep) (void)Lst_AtEnd(lp, cp); n++; } - return n; + return (n); } #ifdef SIGINFO @@ -901,14 +901,14 @@ doPrintVars(void) char *var = (char *)Lst_Datum(ln); char *value; char *p1; - + if (strchr(var, '$')) { value = p1 = Var_Subst(NULL, var, VAR_GLOBAL, VARF_WANTRES); } else if (expandVars) { char tmp[128]; int len = snprintf(tmp, sizeof(tmp), "${%s}", var); - + if (len >= (int)sizeof(tmp)) Fatal("%s: variable name too big: %s", progname, var); @@ -1017,7 +1017,7 @@ main(int argc, char **argv) */ gettimeofday(&rightnow, NULL); srandom(rightnow.tv_sec + rightnow.tv_usec); - + if ((progname = strrchr(argv[0], '/')) != NULL) progname++; else @@ -1067,7 +1067,7 @@ main(int argc, char **argv) static char machine_arch_buf[sizeof(utsname.machine)]; int mib[2] = { CTL_HW, HW_MACHINE_ARCH }; size_t len = sizeof(machine_arch_buf); - + if (sysctl(mib, __arraycount(mib), machine_arch_buf, &len, NULL, 0) < 0) { (void)fprintf(stderr, "%s: sysctl failed (%s).\n", progname, @@ -1096,13 +1096,13 @@ main(int argc, char **argv) */ Var_Init(); /* Initialize the lists of variables for * parsing arguments */ - Var_Set(".MAKE.OS", utsname.sysname, VAR_GLOBAL); - Var_Set("MACHINE", machine, VAR_GLOBAL); - Var_Set("MACHINE_ARCH", machine_arch, VAR_GLOBAL); + Var_Set(".MAKE.OS", utsname.sysname, VAR_GLOBAL, 0); + Var_Set("MACHINE", machine, VAR_GLOBAL, 0); + Var_Set("MACHINE_ARCH", machine_arch, VAR_GLOBAL, 0); #ifdef MAKE_VERSION - Var_Set("MAKE_VERSION", MAKE_VERSION, VAR_GLOBAL); + Var_Set("MAKE_VERSION", MAKE_VERSION, VAR_GLOBAL, 0); #endif - Var_Set(".newline", "\n", VAR_GLOBAL); /* handy for :@ loops */ + Var_Set(".newline", "\n", VAR_GLOBAL, 0); /* handy for :@ loops */ /* * This is the traditional preference for makefiles. */ @@ -1110,8 +1110,8 @@ main(int argc, char **argv) # define MAKEFILE_PREFERENCE_LIST "makefile Makefile" #endif Var_Set(MAKEFILE_PREFERENCE, MAKEFILE_PREFERENCE_LIST, - VAR_GLOBAL); - Var_Set(MAKE_DEPENDFILE, ".depend", VAR_GLOBAL); + VAR_GLOBAL, 0); + Var_Set(MAKE_DEPENDFILE, ".depend", VAR_GLOBAL, 0); create = Lst_Init(FALSE); makefiles = Lst_Init(FALSE); @@ -1165,14 +1165,14 @@ main(int argc, char **argv) p1 = argv[0]; /* realpath failed */ } } - Var_Set("MAKE", p1, VAR_GLOBAL); - Var_Set(".MAKE", p1, VAR_GLOBAL); - Var_Set(MAKEFLAGS, "", VAR_GLOBAL); - Var_Set(MAKEOVERRIDES, "", VAR_GLOBAL); - Var_Set("MFLAGS", "", VAR_GLOBAL); - Var_Set(".ALLTARGETS", "", VAR_GLOBAL); + Var_Set("MAKE", p1, VAR_GLOBAL, 0); + Var_Set(".MAKE", p1, VAR_GLOBAL, 0); + Var_Set(MAKEFLAGS, "", VAR_GLOBAL, 0); + Var_Set(MAKEOVERRIDES, "", VAR_GLOBAL, 0); + Var_Set("MFLAGS", "", VAR_GLOBAL, 0); + Var_Set(".ALLTARGETS", "", VAR_GLOBAL, 0); /* some makefiles need to know this */ - Var_Set(MAKE_LEVEL ".ENV", MAKE_LEVEL_ENV, VAR_CMD); + Var_Set(MAKE_LEVEL ".ENV", MAKE_LEVEL_ENV, VAR_CMD, 0); /* * Set some other useful macros @@ -1184,11 +1184,11 @@ main(int argc, char **argv) if (makelevel < 0) makelevel = 0; snprintf(tmp, sizeof(tmp), "%d", makelevel); - Var_Set(MAKE_LEVEL, tmp, VAR_GLOBAL); + Var_Set(MAKE_LEVEL, tmp, VAR_GLOBAL, 0); snprintf(tmp, sizeof(tmp), "%u", myPid); - Var_Set(".MAKE.PID", tmp, VAR_GLOBAL); + Var_Set(".MAKE.PID", tmp, VAR_GLOBAL, 0); snprintf(tmp, sizeof(tmp), "%u", getppid()); - Var_Set(".MAKE.PPID", tmp, VAR_GLOBAL); + Var_Set(".MAKE.PPID", tmp, VAR_GLOBAL, 0); } if (makelevel > 0) { char pn[1024]; @@ -1269,7 +1269,7 @@ main(int argc, char **argv) free(ptmp2); } #endif - Var_Set(".CURDIR", curdir, VAR_GLOBAL); + Var_Set(".CURDIR", curdir, VAR_GLOBAL, 0); /* * Find the .OBJDIR. If MAKEOBJDIRPREFIX, or failing that, @@ -1303,7 +1303,7 @@ main(int argc, char **argv) (void)time(&now); Trace_Log(MAKESTART, NULL); - + /* * Set up the .TARGETS variable to contain the list of targets to be * created. If none specified, make the variable empty -- the parser @@ -1319,7 +1319,7 @@ main(int argc, char **argv) Var_Append(".TARGETS", name, VAR_GLOBAL); } } else - Var_Set(".TARGETS", "", VAR_GLOBAL); + Var_Set(".TARGETS", "", VAR_GLOBAL, 0); /* @@ -1342,7 +1342,7 @@ main(int argc, char **argv) if (strncmp(".../", start, 4) != 0) { (void)Dir_AddDir(defIncPath, start); } else { - if (Dir_FindHereOrAbove(curdir, start+4, + if (Dir_FindHereOrAbove(curdir, start+4, found_path, sizeof(found_path))) { (void)Dir_AddDir(defIncPath, found_path); } @@ -1377,7 +1377,7 @@ main(int argc, char **argv) ln = Lst_Find(makefiles, NULL, ReadAllMakefiles); if (ln != NULL) - Fatal("%s: cannot open %s.", progname, + Fatal("%s: cannot open %s.", progname, (char *)Lst_Datum(ln)); } else { p1 = Var_Subst(NULL, "${" MAKEFILE_PREFERENCE "}", @@ -1400,7 +1400,7 @@ main(int argc, char **argv) if (enterFlagObj) printf("%s: Entering directory `%s'\n", progname, objdir); - + MakeMode(NULL); Var_Append("MFLAGS", Var_Value(MAKEFLAGS, VAR_GLOBAL, &p1), VAR_GLOBAL); @@ -1444,8 +1444,7 @@ main(int argc, char **argv) if (!printVars) Main_ExportMAKEFLAGS(TRUE); /* initial export */ - - + /* * For compatibility, look at the directories in the VPATH variable * and add them to the search path, if the variable is defined. The @@ -1553,21 +1552,21 @@ ReadMakefile(const void *p, const void *q MAKE_ATTR_UNUSED) if (!strcmp(fname, "-")) { Parse_File(NULL /*stdin*/, -1); - Var_Set("MAKEFILE", "", VAR_INTERNAL); + Var_Set("MAKEFILE", "", VAR_INTERNAL, 0); } else { /* if we've chdir'd, rebuild the path name */ if (strcmp(curdir, objdir) && *fname != '/') { size_t plen = strlen(curdir) + strlen(fname) + 2; if (len < plen) path = bmake_realloc(path, len = 2 * plen); - + (void)snprintf(path, len, "%s/%s", curdir, fname); fd = open(path, O_RDONLY); if (fd != -1) { fname = path; goto found; } - + /* If curdir failed, try objdir (ala .depend) */ plen = strlen(objdir) + strlen(fname) + 2; if (len < plen) @@ -1591,7 +1590,7 @@ ReadMakefile(const void *p, const void *q MAKE_ATTR_UNUSED) if (!name || (fd = open(name, O_RDONLY)) == -1) { free(name); free(path); - return -1; + return(-1); } fname = name; /* @@ -1601,11 +1600,11 @@ ReadMakefile(const void *p, const void *q MAKE_ATTR_UNUSED) */ found: if (!doing_depend) - Var_Set("MAKEFILE", fname, VAR_INTERNAL); + Var_Set("MAKEFILE", fname, VAR_INTERNAL, 0); Parse_File(fname, fd); } free(path); - return 0; + return(0); } @@ -1890,8 +1889,6 @@ void Finish(int errors) /* number of errors encountered in Make_Make */ { - if (dieQuietly(NULL, -1)) - exit(2); Fatal("%d error%s", errors, errors == 1 ? "" : "s"); } @@ -2021,9 +2018,8 @@ cached_realpath(const char *pathname, char *resolved) /* a hit */ strlcpy(resolved, rp, MAXPATHLEN); } else if ((rp = realpath(pathname, resolved)) != NULL) { - Var_Set(pathname, rp, cache); - } /* else should we negative-cache? */ - + Var_Set(pathname, rp, cache, 0); + } free(cp); return rp ? resolved : NULL; } @@ -2045,27 +2041,6 @@ addErrorCMD(void *cmdp, void *gnp MAKE_ATTR_UNUSED) return 0; } -/* - * Return true if we should die without noise. - * For example our failing child was a sub-make - * or failure happend elsewhere. - */ -int -dieQuietly(GNode *gn, int bf) -{ - static int quietly = -1; - - if (quietly < 0) { - if (DEBUG(JOB) || getBoolean(".MAKE.DIE_QUIETLY", 1) == 0) - quietly = 0; - else if (bf >= 0) - quietly = bf; - else - quietly = (gn) ? ((gn->type & (OP_MAKE)) != 0) : 0; - } - return quietly; -} - void PrintOnError(GNode *gn, const char *s) { @@ -2073,13 +2048,9 @@ PrintOnError(GNode *gn, const char *s) char tmp[64]; char *cp; - /* we generally want to keep quiet if a sub-make died */ - if (dieQuietly(gn, -1)) - return; - if (s) printf("%s", s); - + printf("\n%s: stopped in %s\n", progname, curdir); if (en) @@ -2088,7 +2059,7 @@ PrintOnError(GNode *gn, const char *s) /* * We can print this even if there is no .ERROR target. */ - Var_Set(".ERROR_TARGET", gn->name, VAR_GLOBAL); + Var_Set(".ERROR_TARGET", gn->name, VAR_GLOBAL, 0); Var_Delete(".ERROR_CMD", VAR_GLOBAL); Lst_ForEach(gn->commands, addErrorCMD, gn); } @@ -2122,7 +2093,7 @@ Main_ExportMAKEFLAGS(Boolean first) if (once != first) return; once = 0; - + strncpy(tmp, "${.MAKEFLAGS} ${.MAKEOVERRIDES:O:u:@v@$v=${$v:Q}@}", sizeof(tmp)); s = Var_Subst(NULL, tmp, VAR_CMD, VARF_WANTRES); @@ -2168,7 +2139,7 @@ mkTempFile(const char *pattern, char **fnamep) static char *tmpdir = NULL; char tfile[MAXPATHLEN]; int fd; - + if (!pattern) pattern = TMPPAT; if (!tmpdir) @@ -2224,7 +2195,7 @@ s2Boolean(const char *s, Boolean bf) break; } } - return bf; + return (bf); } /* @@ -2248,5 +2219,5 @@ getBoolean(const char *name, Boolean bf) free(cp); } } - return bf; + return (bf); } diff --git a/contrib/bmake/make.c b/contrib/bmake/make.c index 9472a045c26a..8947582013c1 100644 --- a/contrib/bmake/make.c +++ b/contrib/bmake/make.c @@ -1,4 +1,4 @@ -/* $NetBSD: make.c,v 1.99 2020/07/03 08:13:23 rillig Exp $ */ +/* $NetBSD: make.c,v 1.96 2016/11/10 23:41:58 sjg Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -69,14 +69,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: make.c,v 1.99 2020/07/03 08:13:23 rillig Exp $"; +static char rcsid[] = "$NetBSD: make.c,v 1.96 2016/11/10 23:41:58 sjg Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)make.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: make.c,v 1.99 2020/07/03 08:13:23 rillig Exp $"); +__RCSID("$NetBSD: make.c,v 1.96 2016/11/10 23:41:58 sjg Exp $"); #endif #endif /* not lint */ #endif @@ -175,7 +175,7 @@ Make_TimeStamp(GNode *pgn, GNode *cgn) if (pgn->cmgn == NULL || cgn->mtime > pgn->cmgn->mtime) { pgn->cmgn = cgn; } - return 0; + return (0); } /* @@ -264,7 +264,7 @@ Make_OODate(GNode *gn) * always out of date if no children and :: target * or non-existent. */ - oodate = (gn->mtime == 0 || Arch_LibOODate(gn) || + oodate = (gn->mtime == 0 || Arch_LibOODate(gn) || (gn->cmgn == NULL && (gn->type & OP_DOUBLEDEP))); } else if (gn->type & OP_JOIN) { /* @@ -317,7 +317,7 @@ Make_OODate(GNode *gn) } oodate = TRUE; } else { - /* + /* * When a non-existing child with no sources * (such as a typically used FORCE source) has been made and * the target of the child (usually a directory) has the same @@ -348,7 +348,7 @@ Make_OODate(GNode *gn) Lst_ForEach(gn->parents, MakeTimeStamp, gn); } - return oodate; + return (oodate); } /*- @@ -380,7 +380,7 @@ MakeAddChild(void *gnp, void *lp) gn->name, gn->cohort_num); (void)Lst_EnQueue(l, gn); } - return 0; + return (0); } /*- @@ -410,7 +410,7 @@ MakeFindChild(void *gnp, void *pgnp) Make_TimeStamp(pgn, gn); pgn->unmade--; - return 0; + return (0); } /*- @@ -535,7 +535,7 @@ MakeHandleUse(void *cgnp, void *pgnp) cgn->type |= OP_MARK; if ((cgn->type & (OP_USE|OP_USEBEFORE)) == 0) - return 0; + return (0); if (unmarked) Make_HandleUse(cgn, pgn); @@ -551,7 +551,7 @@ MakeHandleUse(void *cgnp, void *pgnp) Lst_Remove(pgn->children, ln); pgn->unmade--; } - return 0; + return (0); } @@ -831,9 +831,9 @@ Make_Update(GNode *cgn) while ((ln = Lst_Next(cgn->iParents)) != NULL) { pgn = (GNode *)Lst_Datum(ln); if (pgn->flags & REMAKE) { - Var_Set(IMPSRC, cname, pgn); + Var_Set(IMPSRC, cname, pgn, 0); if (cpref != NULL) - Var_Set(PREFIX, cpref, pgn); + Var_Set(PREFIX, cpref, pgn, 0); } } free(p1); @@ -869,7 +869,7 @@ MakeUnmark(void *cgnp, void *pgnp MAKE_ATTR_UNUSED) GNode *cgn = (GNode *)cgnp; cgn->type &= ~OP_MARK; - return 0; + return (0); } /* @@ -886,7 +886,7 @@ MakeAddAllSrc(void *cgnp, void *pgnp) GNode *pgn = (GNode *)pgnp; if (cgn->type & OP_MARK) - return 0; + return (0); cgn->type |= OP_MARK; if ((cgn->type & (OP_EXEC|OP_USE|OP_USEBEFORE|OP_INVISIBLE)) == 0) { @@ -932,7 +932,7 @@ MakeAddAllSrc(void *cgnp, void *pgnp) } free(p1); } - return 0; + return (0); } /*- @@ -962,20 +962,20 @@ Make_DoAllVar(GNode *gn) { if (gn->flags & DONE_ALLSRC) return; - + Lst_ForEach(gn->children, MakeUnmark, gn); Lst_ForEach(gn->children, MakeAddAllSrc, gn); if (!Var_Exists (OODATE, gn)) { - Var_Set(OODATE, "", gn); + Var_Set(OODATE, "", gn, 0); } if (!Var_Exists (ALLSRC, gn)) { - Var_Set(ALLSRC, "", gn); + Var_Set(ALLSRC, "", gn, 0); } if (gn->type & OP_JOIN) { char *p1; - Var_Set(TARGET, Var_Value(ALLSRC, gn, &p1), gn); + Var_Set(TARGET, Var_Value(ALLSRC, gn, &p1), gn, 0); free(p1); } gn->flags |= DONE_ALLSRC; @@ -1119,7 +1119,7 @@ MakeStartJobs(void) fprintf(debug_file, "out-of-date\n"); } if (queryFlag) { - return TRUE; + return (TRUE); } Make_DoAllVar(gn); Job_Make(gn); @@ -1145,7 +1145,7 @@ MakeStartJobs(void) if (have_token) Job_TokenReturn(); - return FALSE; + return (FALSE); } /*- @@ -1293,7 +1293,7 @@ Make_ExpandUse(Lst targs) */ while (!Lst_IsEmpty (examine)) { gn = (GNode *)Lst_DeQueue(examine); - + if (gn->flags & REMAKE) /* We've looked at this one already */ continue; @@ -1324,14 +1324,14 @@ Make_ExpandUse(Lst targs) continue; *eoa = '\0'; *eon = '\0'; - Var_Set(MEMBER, eoa + 1, gn); - Var_Set(ARCHIVE, gn->name, gn); + Var_Set(MEMBER, eoa + 1, gn, 0); + Var_Set(ARCHIVE, gn->name, gn, 0); *eoa = '('; *eon = ')'; } (void)Dir_MTime(gn, 0); - Var_Set(TARGET, gn->path ? gn->path : gn->name, gn); + Var_Set(TARGET, gn->path ? gn->path : gn->name, gn, 0); Lst_ForEach(gn->children, MakeUnmark, gn); Lst_ForEach(gn->children, MakeHandleUse, gn); @@ -1429,7 +1429,7 @@ Make_ProcessWait(Lst targs) while (!Lst_IsEmpty (examine)) { pgn = Lst_DeQueue(examine); - + /* We only want to process each child-list once */ if (pgn->flags & DONE_WAIT) continue; @@ -1509,7 +1509,7 @@ Make_Run(Lst targs) * next loop... (we won't actually start any, of course, this is just * to see if any of the targets was out of date) */ - return MakeStartJobs(); + return (MakeStartJobs()); } /* * Initialization. At the moment, no jobs are running and until some diff --git a/contrib/bmake/make.h b/contrib/bmake/make.h index eafa761ea36a..4a693f14a153 100644 --- a/contrib/bmake/make.h +++ b/contrib/bmake/make.h @@ -1,4 +1,4 @@ -/* $NetBSD: make.h,v 1.109 2020/07/02 15:14:38 rillig Exp $ */ +/* $NetBSD: make.h,v 1.107 2020/04/03 03:35:16 sjg Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -503,7 +503,6 @@ void Make_DoAllVar(GNode *); Boolean Make_Run(Lst); char * Check_Cwd_Cmd(const char *); void Check_Cwd(const char **); -int dieQuietly(GNode *, int); void PrintOnError(GNode *, const char *); void Main_ExportMAKEFLAGS(Boolean); Boolean Main_SetObjdir(const char *, ...) MAKE_ATTR_PRINTFLIKE(1, 2); @@ -512,6 +511,10 @@ int str2Lst_Append(Lst, char *, const char *); int cached_lstat(const char *, void *); int cached_stat(const char *, void *); +#define VARF_UNDEFERR 1 +#define VARF_WANTRES 2 +#define VARF_ASSIGN 4 + #ifdef __GNUC__ #define UNCONST(ptr) ({ \ union __unconst { \ diff --git a/contrib/bmake/make_malloc.c b/contrib/bmake/make_malloc.c index 7e2f75ff85e0..035d519b9c12 100644 --- a/contrib/bmake/make_malloc.c +++ b/contrib/bmake/make_malloc.c @@ -1,4 +1,4 @@ -/* $NetBSD: make_malloc.c,v 1.12 2020/07/03 08:02:55 rillig Exp $ */ +/* $NetBSD: make_malloc.c,v 1.11 2017/04/16 20:20:24 dholland Exp $ */ /*- * Copyright (c) 2009 The NetBSD Foundation, Inc. @@ -28,7 +28,7 @@ #ifdef MAKE_NATIVE #include <sys/cdefs.h> -__RCSID("$NetBSD: make_malloc.c,v 1.12 2020/07/03 08:02:55 rillig Exp $"); +__RCSID("$NetBSD: make_malloc.c,v 1.11 2017/04/16 20:20:24 dholland Exp $"); #endif #include <stdio.h> @@ -63,7 +63,7 @@ bmake_malloc(size_t len) if ((p = malloc(len)) == NULL) enomem(); - return p; + return(p); } /* @@ -102,7 +102,7 @@ bmake_strndup(const char *str, size_t max_len) memcpy(p, str, len); p[len] = '\0'; - return p; + return(p); } /* @@ -114,6 +114,6 @@ bmake_realloc(void *ptr, size_t size) { if ((ptr = realloc(ptr, size)) == NULL) enomem(); - return ptr; + return(ptr); } #endif diff --git a/contrib/bmake/meta.c b/contrib/bmake/meta.c index 7f555e71269e..ca40c6dd8224 100644 --- a/contrib/bmake/meta.c +++ b/contrib/bmake/meta.c @@ -1,4 +1,4 @@ -/* $NetBSD: meta.c,v 1.85 2020/07/03 08:13:23 rillig Exp $ */ +/* $NetBSD: meta.c,v 1.81 2020/04/03 03:32:28 sjg Exp $ */ /* * Implement 'meta' mode. @@ -8,16 +8,16 @@ /* * Copyright (c) 2009-2016, Juniper Networks, Inc. * Portions Copyright (c) 2009, John Birrell. - * + * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: + * modification, are permitted provided that the following conditions + * are met: * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. + * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * + * documentation and/or other materials provided with the distribution. + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -28,7 +28,7 @@ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #if defined(USE_META) @@ -113,7 +113,7 @@ extern char **environ; * * See meta_oodate below - we mainly care about 'E' and 'R'. * - * We can still use meta mode without filemon, but + * We can still use meta mode without filemon, but * the benefits are more limited. */ #ifdef USE_FILEMON @@ -174,18 +174,14 @@ filemon_read(FILE *mfp, int fd) return 0; } /* rewind */ - if (lseek(fd, (off_t)0, SEEK_SET) < 0) { - error = errno; - warn("Could not rewind filemon"); - fprintf(mfp, "\n"); - } else { - error = 0; - fprintf(mfp, "\n-- filemon acquired metadata --\n"); + (void)lseek(fd, (off_t)0, SEEK_SET); - while ((n = read(fd, buf, sizeof(buf))) > 0) { - if ((int)fwrite(buf, 1, n, mfp) < n) - error = EIO; - } + error = 0; + fprintf(mfp, "\n-- filemon acquired metadata --\n"); + + while ((n = read(fd, buf, sizeof(buf))) > 0) { + if ((int)fwrite(buf, 1, n, mfp) < n) + error = EIO; } fflush(mfp); if (close(fd) < 0) @@ -218,7 +214,7 @@ eat_dots(char *buf, size_t bufsz, int dots) default: return; } - + do { cp = strstr(buf, eat); if (cp) { @@ -308,7 +304,7 @@ meta_name(char *mname, size_t mnamelen, } } free(tp); - return mname; + return (mname); } /* @@ -359,7 +355,7 @@ is_submake(void *cmdp, void *gnp) } } free(mp); - return rc; + return (rc); } typedef struct meta_file_s { @@ -407,7 +403,7 @@ meta_needed(GNode *gn, const char *dname, if (verbose) verbose = DEBUG(META); - + /* This may be a phony node which we don't want meta data for... */ /* Skip .meta for .BEGIN, .END, .ERROR etc as well. */ /* Or it may be explicitly flagged as .NOMETA */ @@ -458,7 +454,7 @@ meta_needed(GNode *gn, const char *dname, return TRUE; } - + static FILE * meta_create(BuildMon *pbm, GNode *gn) { @@ -549,7 +545,7 @@ meta_create(BuildMon *pbm, GNode *gn) free(p[i]); } - return mf.fp; + return (mf.fp); } static Boolean @@ -574,7 +570,7 @@ meta_init(void) { #ifdef USE_FILEMON /* this allows makefiles to test if we have filemon support */ - Var_Set(".MAKE.PATH_FILEMON", filemon_path(), VAR_GLOBAL); + Var_Set(".MAKE.PATH_FILEMON", filemon_path(), VAR_GLOBAL, 0); #endif } @@ -620,7 +616,7 @@ meta_mode_init(const char *make_mode) * This works be cause :H will generate '.' if there is no / * and :tA will resolve that to cwd. */ - Var_Set(MAKE_META_PREFIX, "Building ${.TARGET:H:tA}/${.TARGET:T}", VAR_GLOBAL); + Var_Set(MAKE_META_PREFIX, "Building ${.TARGET:H:tA}/${.TARGET:T}", VAR_GLOBAL, 0); } if (once) return; @@ -794,12 +790,12 @@ meta_job_error(Job *job, GNode *gn, int flags, int status) "(ignored)" : ""); } if (gn) { - Var_Set(".ERROR_TARGET", gn->path ? gn->path : gn->name, VAR_GLOBAL); + Var_Set(".ERROR_TARGET", gn->path ? gn->path : gn->name, VAR_GLOBAL, 0); } getcwd(cwd, sizeof(cwd)); - Var_Set(".ERROR_CWD", cwd, VAR_GLOBAL); + Var_Set(".ERROR_CWD", cwd, VAR_GLOBAL, 0); if (pbm->meta_fname[0]) { - Var_Set(".ERROR_META_FILE", pbm->meta_fname, VAR_GLOBAL); + Var_Set(".ERROR_META_FILE", pbm->meta_fname, VAR_GLOBAL, 0); } meta_job_finish(job); } @@ -808,7 +804,7 @@ void meta_job_output(Job *job, char *cp, const char *nl) { BuildMon *pbm; - + if (job != NULL) { pbm = &job->bm; } else { @@ -904,7 +900,7 @@ meta_finish(void) * Fetch a full line from fp - growing bufp if needed * Return length in bufp. */ -static int +static int fgetLine(char **bufp, size_t *szp, int o, FILE *fp) { char *buf = *bufp; @@ -955,7 +951,7 @@ prefix_match(void *p, void *q) const char *path = q; size_t n = strlen(prefix); - return strncmp(path, prefix, n) == 0; + return (0 == strncmp(path, prefix, n)); } /* @@ -1017,7 +1013,7 @@ meta_ignore(GNode *gn, const char *p) if (metaIgnorePatterns) { char *pm; - Var_Set(".p.", p, gn); + Var_Set(".p.", p, gn, 0); pm = Var_Subst(NULL, "${" MAKE_META_IGNORE_PATTERNS ":@m@${.p.:M$m}@}", gn, VARF_WANTRES); @@ -1192,7 +1188,7 @@ meta_oodate(GNode *gn, Boolean oodate) have_filemon = TRUE; continue; } - } + } /* Delimit the record type. */ p = buf; @@ -1242,11 +1238,11 @@ meta_oodate(GNode *gn, Boolean oodate) if (pid > 0 && pid != lastpid) { char *ldir; char *tp; - + if (lastpid > 0) { /* We need to remember these. */ - Var_Set(lcwd_vname, lcwd, VAR_GLOBAL); - Var_Set(ldir_vname, latestdir, VAR_GLOBAL); + Var_Set(lcwd_vname, lcwd, VAR_GLOBAL, 0); + Var_Set(ldir_vname, latestdir, VAR_GLOBAL, 0); } snprintf(lcwd_vname, sizeof(lcwd_vname), LCWD_VNAME_FMT, pid); snprintf(ldir_vname, sizeof(ldir_vname), LDIR_VNAME_FMT, pid); @@ -1292,9 +1288,9 @@ meta_oodate(GNode *gn, Boolean oodate) child = atoi(p); if (child > 0) { snprintf(cldir, sizeof(cldir), LCWD_VNAME_FMT, child); - Var_Set(cldir, lcwd, VAR_GLOBAL); + Var_Set(cldir, lcwd, VAR_GLOBAL, 0); snprintf(cldir, sizeof(cldir), LDIR_VNAME_FMT, child); - Var_Set(cldir, latestdir, VAR_GLOBAL); + Var_Set(cldir, latestdir, VAR_GLOBAL, 0); #ifdef DEBUG_META_MODE if (DEBUG(META)) fprintf(debug_file, "%s: %d: %d: cwd=%s lcwd=%s ldir=%s\n", @@ -1307,10 +1303,10 @@ meta_oodate(GNode *gn, Boolean oodate) case 'C': /* Chdir */ /* Update lcwd and latest directory. */ - strlcpy(latestdir, p, sizeof(latestdir)); + strlcpy(latestdir, p, sizeof(latestdir)); strlcpy(lcwd, p, sizeof(lcwd)); - Var_Set(lcwd_vname, lcwd, VAR_GLOBAL); - Var_Set(ldir_vname, lcwd, VAR_GLOBAL); + Var_Set(lcwd_vname, lcwd, VAR_GLOBAL, 0); + Var_Set(ldir_vname, lcwd, VAR_GLOBAL, 0); #ifdef DEBUG_META_MODE if (DEBUG(META)) fprintf(debug_file, "%s: %d: cwd=%s ldir=%s\n", fname, lineno, cwd, lcwd); @@ -1387,7 +1383,7 @@ meta_oodate(GNode *gn, Boolean oodate) /* * If a file we generated within our bailiwick * but outside of .OBJDIR is missing, - * we need to do it again. + * we need to do it again. */ /* ignore non-absolute paths */ if (*p != '/') @@ -1436,7 +1432,7 @@ meta_oodate(GNode *gn, Boolean oodate) */ if (meta_ignore(gn, p)) break; - + /* * The rest of the record is the file name. * Check if it's not an absolute path. @@ -1637,7 +1633,7 @@ meta_oodate(GNode *gn, Boolean oodate) * All we can sanely do is set it to .ALLSRC. */ Var_Delete(OODATE, gn); - Var_Set(OODATE, Var_Value(ALLSRC, gn, &cp), gn); + Var_Set(OODATE, Var_Value(ALLSRC, gn, &cp), gn, 0); free(cp); } @@ -1660,7 +1656,7 @@ meta_compat_start(void) * We need to re-open filemon for each cmd. */ BuildMon *pbm = &Mybm; - + if (pbm->mfp != NULL && useFilemon) { meta_open_filemon(pbm); } else { diff --git a/contrib/bmake/meta.h b/contrib/bmake/meta.h index 71c9bc9a9c2f..80c774f1a308 100644 --- a/contrib/bmake/meta.h +++ b/contrib/bmake/meta.h @@ -1,23 +1,23 @@ -/* $NetBSD: meta.h,v 1.7 2020/07/03 08:13:23 rillig Exp $ */ +/* $NetBSD: meta.h,v 1.6 2020/01/19 19:42:32 riastradh Exp $ */ /* * Things needed for 'meta' mode. */ /* * Copyright (c) 2009-2010, Juniper Networks, Inc. - * + * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: + * modification, are permitted provided that the following conditions + * are met: * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. + * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. + * documentation and/or other materials provided with the distribution. * 3. Neither the name of the copyright holders nor the names of its * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * + * from this software without specific prior written permission. + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -28,7 +28,7 @@ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ typedef struct BuildMon { diff --git a/contrib/bmake/mk/ChangeLog b/contrib/bmake/mk/ChangeLog index bd8b1b1f5b72..f061d43949e2 100644 --- a/contrib/bmake/mk/ChangeLog +++ b/contrib/bmake/mk/ChangeLog @@ -1,20 +1,3 @@ -2020-06-28 Simon J Gerraty <sjg@beast.crufty.net> - - * sys/*.mk: make it easier for local*sys.mk to customize by - using ?= - -2020-06-22 Simon J Gerraty <sjg@beast.crufty.net> - - * gendirdeps.mk (LOCAL_DEPENDS_GUARD): if we don't build at level 0 - it is much safer to guard local depends with a simple check for - .MAKE.LEVEL > 0 - -2020-06-10 Simon J Gerraty <sjg@beast.crufty.net> - - * install-mk (MK_VERSION): 20200610 - - * mkopt.sh: this needs posix shell so #!/bin/sh should be ok - 2020-06-06 Simon J Gerraty <sjg@beast.crufty.net> * install-mk (MK_VERSION): 20200606 diff --git a/contrib/bmake/mk/FILES b/contrib/bmake/mk/FILES index 360fb613a15e..dcd00ec2f581 100644 --- a/contrib/bmake/mk/FILES +++ b/contrib/bmake/mk/FILES @@ -1,6 +1,5 @@ ChangeLog FILES -LICENSE README auto.obj.mk autoconf.mk diff --git a/contrib/bmake/mk/gendirdeps.mk b/contrib/bmake/mk/gendirdeps.mk index 82618f2225a3..d402cbcc4765 100644 --- a/contrib/bmake/mk/gendirdeps.mk +++ b/contrib/bmake/mk/gendirdeps.mk @@ -1,4 +1,4 @@ -# $Id: gendirdeps.mk,v 1.44 2020/06/23 04:21:51 sjg Exp $ +# $Id: gendirdeps.mk,v 1.42 2020/05/16 23:21:48 sjg Exp $ # Copyright (c) 2011-2020, Simon J. Gerraty # Copyright (c) 2010-2018, Juniper Networks, Inc. @@ -51,7 +51,7 @@ all: _CURDIR ?= ${.CURDIR} _OBJDIR ?= ${.OBJDIR} _OBJTOP ?= ${OBJTOP} -_OBJROOT ?= ${OBJROOT:U${_OBJTOP:H}} +_OBJROOT ?= ${OBJROOT:U${_OBJTOP}} .if ${_OBJROOT:M*/} _slash=/ .else @@ -339,12 +339,6 @@ CAT_DEPEND ?= .depend .PHONY: ${_DEPENDFILE} .endif -.if ${BUILD_AT_LEVEL0:Uno:tl} == "no" -LOCAL_DEPENDS_GUARD ?= _{.MAKE.LEVEL} > 0 -.else -LOCAL_DEPENDS_GUARD ?= _{DEP_RELDIR} == _{_DEP_RELDIR} -.endif - # 'cat .depend' should suffice, but if we are mixing build modes # .depend may contain things we don't want. # The sed command at the end of the stream, allows for the filters @@ -356,7 +350,7 @@ ${_DEPENDFILE}: .NOMETA ${CAT_DEPEND:M.depend} ${META_FILES:O:u:@m@${exists($m): ${_include_src_dirdeps} \ echo '.include <dirdeps.mk>'; \ echo; \ - echo '.if ${LOCAL_DEPENDS_GUARD}'; \ + echo '.if $${DEP_RELDIR} == $${_DEP_RELDIR}'; \ echo '# local dependencies - needed for -jN in clean tree'; \ [ -s ${CAT_DEPEND} ] && { grep : ${CAT_DEPEND} | grep -v '[/\\]'; }; \ echo '.endif' ) | sed 's,_\([{(]\),$$\1,g' > $@.new${.MAKE.PID} diff --git a/contrib/bmake/mk/install-mk b/contrib/bmake/mk/install-mk index 83542a945cd4..4c29ef294bd6 100644 --- a/contrib/bmake/mk/install-mk +++ b/contrib/bmake/mk/install-mk @@ -55,7 +55,7 @@ # Simon J. Gerraty <sjg@crufty.net> # RCSid: -# $Id: install-mk,v 1.173 2020/06/23 04:16:35 sjg Exp $ +# $Id: install-mk,v 1.172 2020/06/06 22:41:15 sjg Exp $ # # @(#) Copyright (c) 1994 Simon J. Gerraty # @@ -70,7 +70,7 @@ # sjg@crufty.net # -MK_VERSION=20200622 +MK_VERSION=20200606 OWNER= GROUP= MODE=444 diff --git a/contrib/bmake/mk/mkopt.sh b/contrib/bmake/mk/mkopt.sh index 929a5aa83a66..ad58479c2bf0 100755 --- a/contrib/bmake/mk/mkopt.sh +++ b/contrib/bmake/mk/mkopt.sh @@ -1,8 +1,7 @@ -#!/bin/sh - -# $Id: mkopt.sh,v 1.12 2020/06/23 04:16:35 sjg Exp $ +: +# $Id: mkopt.sh,v 1.11 2017/03/18 21:36:42 sjg Exp $ # -# @(#) Copyright (c) 2014, 2020, Simon J. Gerraty +# @(#) Copyright (c) 2014, Simon J. Gerraty # # This file is provided in the hope that it will # be of use. There is absolutely NO WARRANTY. diff --git a/contrib/bmake/mk/sys/AIX.mk b/contrib/bmake/mk/sys/AIX.mk index b848d99fb4e8..a5c49584fe2c 100644 --- a/contrib/bmake/mk/sys/AIX.mk +++ b/contrib/bmake/mk/sys/AIX.mk @@ -1,80 +1,80 @@ # $NetBSD: sys.mk,v 1.19.2.1 1994/07/26 19:58:31 cgd Exp $ # @(#)sys.mk 5.11 (Berkeley) 3/13/91 -OS ?= AIX -unix ?= We run ${OS}. -ROOT_GROUP ?= system +OS= AIX +unix= We run ${OS}. +ROOT_GROUP= system # This needs a lot of work yet... -NOPIC ?=no # no shared libs? +NOPIC=no # no shared libs? .SUFFIXES: .out .a .ln .o .c ${CXX_SUFFIXES} .F .f .r .y .l .s .S .cl .p .h .sh .m4 .LIBS: .a -AR ?= ar -ARFLAGS ?= rl -RANLIB ?= ranlib +AR= ar +ARFLAGS= rl +RANLIB= ranlib -AS ?= as +AS= as AFLAGS= -COMPILE.s ?= ${AS} ${AFLAGS} -LINK.s ?= ${CC} ${AFLAGS} ${LDFLAGS} -COMPILE.S ?= ${CC} ${AFLAGS} ${CPPFLAGS} -c -LINK.S ?= ${CC} ${AFLAGS} ${CPPFLAGS} ${LDFLAGS} +COMPILE.s= ${AS} ${AFLAGS} +LINK.s= ${CC} ${AFLAGS} ${LDFLAGS} +COMPILE.S= ${CC} ${AFLAGS} ${CPPFLAGS} -c +LINK.S= ${CC} ${AFLAGS} ${CPPFLAGS} ${LDFLAGS} .if exists(/usr/local/bin/gcc) -CC ?= gcc -DBG ?= -O -g -STATIC ?= -static +CC= gcc +DBG= -O -g +STATIC?= -static .else -CC ?= cc -DBG ?= -g -STATIC ?= +CC= cc +DBG= -g +STATIC= .endif -CFLAGS ?= ${DBG} -COMPILE.c ?= ${CC} ${CFLAGS} ${CPPFLAGS} -c -LINK.c ?= ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} +CFLAGS= ${DBG} +COMPILE.c= ${CC} ${CFLAGS} ${CPPFLAGS} -c +LINK.c= ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} -CXX ?= g++ -CXXFLAGS ?= ${CFLAGS} -COMPILE.cc ?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c -LINK.cc ?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS} +CXX= g++ +CXXFLAGS= ${CFLAGS} +COMPILE.cc= ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c +LINK.cc= ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS} -CPP ?= cpp +CPP= cpp .if defined(DESTDIR) CPPFLAGS+= -nostdinc -idirafter ${DESTDIR}/usr/include .endif -MK_DEP ?= mkdeps.sh -N -FC ?= f77 -FFLAGS ?= -O +MK_DEP= mkdeps.sh -N +FC= f77 +FFLAGS= -O RFLAGS= -COMPILE.f ?= ${FC} ${FFLAGS} -c -LINK.f ?= ${FC} ${FFLAGS} ${LDFLAGS} -COMPILE.F ?= ${FC} ${FFLAGS} ${CPPFLAGS} -c -LINK.F ?= ${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS} -COMPILE.r ?= ${FC} ${FFLAGS} ${RFLAGS} -c -LINK.r ?= ${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS} - -LEX ?= lex +COMPILE.f= ${FC} ${FFLAGS} -c +LINK.f= ${FC} ${FFLAGS} ${LDFLAGS} +COMPILE.F= ${FC} ${FFLAGS} ${CPPFLAGS} -c +LINK.F= ${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS} +COMPILE.r= ${FC} ${FFLAGS} ${RFLAGS} -c +LINK.r= ${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS} + +LEX= lex LFLAGS= -LEX.l ?= ${LEX} ${LFLAGS} +LEX.l= ${LEX} ${LFLAGS} -LD ?= ld +LD= ld LDFLAGS= -LINT ?= lint -LINTFLAGS ?= -chapbx +LINT= lint +LINTFLAGS= -chapbx -PC ?= pc +PC= pc PFLAGS= -COMPILE.p ?= ${PC} ${PFLAGS} ${CPPFLAGS} -c -LINK.p ?= ${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS} +COMPILE.p= ${PC} ${PFLAGS} ${CPPFLAGS} -c +LINK.p= ${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS} -YACC ?= yacc -YFLAGS ?= -d -YACC.y ?= ${YACC} ${YFLAGS} +YACC= yacc +YFLAGS= -d +YACC.y= ${YACC} ${YFLAGS} # C .c: diff --git a/contrib/bmake/mk/sys/Darwin.mk b/contrib/bmake/mk/sys/Darwin.mk index ea04b416ff3a..6d37127be13f 100644 --- a/contrib/bmake/mk/sys/Darwin.mk +++ b/contrib/bmake/mk/sys/Darwin.mk @@ -1,108 +1,108 @@ # $NetBSD: Darwin.sys.mk,v 1.3 2003/02/16 09:44:41 grant Exp $ # @(#)sys.mk 8.2 (Berkeley) 3/21/94 -OS ?= Darwin -unix ?= We run ${OS}. +OS= Darwin +unix?= We run ${OS}. .SUFFIXES: .out .a .ln .o .s .S .c .m ${CXX_SUFFIXES} .F .f .r .y .l .cl .p .h .SUFFIXES: .sh .m4 .dylib .LIBS: .a .dylib -SHLIBEXT ?= .dylib -HOST_LIBEXT ?= .dylib -DSHLIBEXT ?= .dylib +SHLIBEXT = .dylib +HOST_LIBEXT = .dylib +DSHLIBEXT = .dylib -AR ?= ar -ARFLAGS ?= rl +AR?= ar +ARFLAGS?= rl RANLIB = -AS ?= as -AFLAGS ?= -COMPILE.s ?= ${AS} ${AFLAGS} -LINK.s ?= ${CC} ${AFLAGS} ${LDFLAGS} -COMPILE.S ?= ${CC} ${AFLAGS} ${CPPFLAGS} -c -LINK.S ?= ${CC} ${AFLAGS} ${CPPFLAGS} ${LDFLAGS} +AS?= as +AFLAGS?= +COMPILE.s?= ${AS} ${AFLAGS} +LINK.s?= ${CC} ${AFLAGS} ${LDFLAGS} +COMPILE.S?= ${CC} ${AFLAGS} ${CPPFLAGS} -c +LINK.S?= ${CC} ${AFLAGS} ${CPPFLAGS} ${LDFLAGS} -PIPE ?= -pipe +PIPE?= -pipe .if exists(/usr/bin/clang) -CC ?= cc ${PIPE} -CXX ?= c++ +CC?= cc ${PIPE} +CXX?= c++ .elif exists(/usr/bin/gcc) -CC ?= gcc ${PIPE} +CC?= gcc ${PIPE} .else -CC ?= cc ${PIPE} +CC?= cc ${PIPE} .endif -DBG ?= -O2 -CFLAGS ?= ${DBG} -COMPILE.c ?= ${CC} ${CFLAGS} ${CPPFLAGS} -c -LINK.c ?= ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} +DBG?= -O2 +CFLAGS?= ${DBG} +COMPILE.c?= ${CC} ${CFLAGS} ${CPPFLAGS} -c +LINK.c?= ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} .if exists(/usr/bin/g++) -CXX ?= g++ +CXX?= g++ .else -CXX ?= c++ +CXX?= c++ .endif -CXXFLAGS ?= ${CFLAGS} -COMPILE.cc ?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c -LINK.cc ?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS} +CXXFLAGS?= ${CFLAGS} +COMPILE.cc?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c +LINK.cc?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS} -OBJC ?= ${CC} -OBJCFLAGS ?= ${CFLAGS} -COMPILE.m ?= ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} -c -LINK.m ?= ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} ${LDFLAGS} +OBJC?= ${CC} +OBJCFLAGS?= ${CFLAGS} +COMPILE.m?= ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} -c +LINK.m?= ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} ${LDFLAGS} -CPP ?= cpp -NOLINT ?= 1 -CPPFLAGS ?= +CPP?= cpp +NOLINT= 1 +CPPFLAGS?= -MK_DEP ?= mkdep +MK_DEP?= mkdep -FC ?= f77 -FFLAGS ?= -O -RFLAGS ?= -COMPILE.f ?= ${FC} ${FFLAGS} -c -LINK.f ?= ${FC} ${FFLAGS} ${LDFLAGS} -COMPILE.F ?= ${FC} ${FFLAGS} ${CPPFLAGS} -c -LINK.F ?= ${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS} -COMPILE.r ?= ${FC} ${FFLAGS} ${RFLAGS} -c -LINK.r ?= ${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS} +FC?= f77 +FFLAGS?= -O +RFLAGS?= +COMPILE.f?= ${FC} ${FFLAGS} -c +LINK.f?= ${FC} ${FFLAGS} ${LDFLAGS} +COMPILE.F?= ${FC} ${FFLAGS} ${CPPFLAGS} -c +LINK.F?= ${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS} +COMPILE.r?= ${FC} ${FFLAGS} ${RFLAGS} -c +LINK.r?= ${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS} -INSTALL ?= install +INSTALL?= install -LEX ?= lex -LFLAGS ?= -LEX.l ?= ${LEX} ${LFLAGS} +LEX?= lex +LFLAGS?= +LEX.l?= ${LEX} ${LFLAGS} -LD ?= ld -LDFLAGS ?= +LD?= ld +LDFLAGS?= -SHLIB_TEENY ?= 0 -SHLIB_MINOR ?= 0 +SHLIB_TEENY = 0 +SHLIB_MINOR = 0 -MKPICLIB ?= no -LIBEXT ?= .dylib +MKPICLIB = no +LIBEXT = .dylib -LINT ?= lint -LINTFLAGS ?= -chapbx +LINT?= lint +LINTFLAGS?= -chapbx -LORDER ?= lorder +LORDER?= lorder -NM ?= nm +NM?= nm -PC ?= pc -PFLAGS ?= -COMPILE.p ?= ${PC} ${PFLAGS} ${CPPFLAGS} -c -LINK.p ?= ${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS} +PC?= pc +PFLAGS?= +COMPILE.p?= ${PC} ${PFLAGS} ${CPPFLAGS} -c +LINK.p?= ${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS} -SIZE ?= size +SIZE?= size -TSORT ?= tsort -q +TSORT?= tsort -q -YACC ?= bison -y -YFLAGS ?= -d -YACC.y ?= ${YACC} ${YFLAGS} +YACC?= bison -y +YFLAGS?= -d +YACC.y?= ${YACC} ${YFLAGS} # C .c: diff --git a/contrib/bmake/mk/sys/Generic.mk b/contrib/bmake/mk/sys/Generic.mk index 9a3d3bffc183..aa92a6246411 100644 --- a/contrib/bmake/mk/sys/Generic.mk +++ b/contrib/bmake/mk/sys/Generic.mk @@ -1,4 +1,4 @@ -# $Id: Generic.mk,v 1.16 2020/06/29 14:34:42 sjg Exp $ +# $Id: Generic.mk,v 1.14 2020/04/17 21:08:17 sjg Exp $ # # some reasonable defaults @@ -7,7 +7,7 @@ .LIBS: .a -tools ?= \ +tools = \ ar \ lorder \ ranlib \ @@ -27,71 +27,71 @@ MACHINE_ARCH = ${MACHINE_ARCH.${MACHINE}} TSORT += -q .endif -ARFLAGS ?= rl +ARFLAGS?= rl -AS ?= as -AFLAGS ?= +AS?= as +AFLAGS?= .if ${MACHINE_ARCH} == "sparc64" AFLAGS+= -Wa,-Av9a .endif -COMPILE.s ?= ${CC} ${AFLAGS} -c -LINK.s ?= ${CC} ${AFLAGS} ${LDFLAGS} -COMPILE.S ?= ${CC} ${AFLAGS} ${CPPFLAGS} -c -traditional-cpp -LINK.S ?= ${CC} ${AFLAGS} ${CPPFLAGS} ${LDFLAGS} - -CC ?= cc -DBG ?= -O2 -CFLAGS ?= ${DBG} -COMPILE.c ?= ${CC} ${CFLAGS} ${CPPFLAGS} -c -LINK.c ?= ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} - -CXX ?= c++ -CXXFLAGS ?= ${CFLAGS} -COMPILE.cc ?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c -LINK.cc ?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS} - -OBJC ?= ${CC} -OBJCFLAGS ?= ${CFLAGS} -COMPILE.m ?= ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} -c -LINK.m ?= ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} ${LDFLAGS} - -CPP ?= cpp -CPPFLAGS ?= - -FC ?= f77 -FFLAGS ?= -O -RFLAGS ?= -COMPILE.f ?= ${FC} ${FFLAGS} -c -LINK.f ?= ${FC} ${FFLAGS} ${LDFLAGS} -COMPILE.F ?= ${FC} ${FFLAGS} ${CPPFLAGS} -c -LINK.F ?= ${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS} -COMPILE.r ?= ${FC} ${FFLAGS} ${RFLAGS} -c -LINK.r ?= ${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS} - -INSTALL ?= install - -LEX ?= lex -LFLAGS ?= -LEX.l ?= ${LEX} ${LFLAGS} - -LD ?= ld -LDFLAGS ?= - -LINT ?= lint -LINTFLAGS ?= -chapbxzF - -NM ?= nm - -PC ?= pc -PFLAGS ?= -COMPILE.p ?= ${PC} ${PFLAGS} ${CPPFLAGS} -c -LINK.p ?= ${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS} - -SIZE ?= size - -YACC ?= yacc -YFLAGS ?= -YACC.y ?= ${YACC} ${YFLAGS} +COMPILE.s?= ${CC} ${AFLAGS} -c +LINK.s?= ${CC} ${AFLAGS} ${LDFLAGS} +COMPILE.S?= ${CC} ${AFLAGS} ${CPPFLAGS} -c -traditional-cpp +LINK.S?= ${CC} ${AFLAGS} ${CPPFLAGS} ${LDFLAGS} + +CC?= cc +DBG?= -O2 +CFLAGS?= ${DBG} +COMPILE.c?= ${CC} ${CFLAGS} ${CPPFLAGS} -c +LINK.c?= ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} + +CXX?= c++ +CXXFLAGS?= ${CFLAGS} +COMPILE.cc?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c +LINK.cc?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS} + +OBJC?= ${CC} +OBJCFLAGS?= ${CFLAGS} +COMPILE.m?= ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} -c +LINK.m?= ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} ${LDFLAGS} + +CPP?= cpp +CPPFLAGS?= + +FC?= f77 +FFLAGS?= -O +RFLAGS?= +COMPILE.f?= ${FC} ${FFLAGS} -c +LINK.f?= ${FC} ${FFLAGS} ${LDFLAGS} +COMPILE.F?= ${FC} ${FFLAGS} ${CPPFLAGS} -c +LINK.F?= ${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS} +COMPILE.r?= ${FC} ${FFLAGS} ${RFLAGS} -c +LINK.r?= ${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS} + +INSTALL?= install + +LEX?= lex +LFLAGS?= +LEX.l?= ${LEX} ${LFLAGS} + +LD?= ld +LDFLAGS?= + +LINT?= lint +LINTFLAGS?= -chapbxzF + +NM?= nm + +PC?= pc +PFLAGS?= +COMPILE.p?= ${PC} ${PFLAGS} ${CPPFLAGS} -c +LINK.p?= ${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS} + +SIZE?= size + +YACC?= yacc +YFLAGS?= +YACC.y?= ${YACC} ${YFLAGS} # C .c: diff --git a/contrib/bmake/mk/sys/HP-UX.mk b/contrib/bmake/mk/sys/HP-UX.mk index 34dd2881d83d..ac5ce37b85fc 100644 --- a/contrib/bmake/mk/sys/HP-UX.mk +++ b/contrib/bmake/mk/sys/HP-UX.mk @@ -1,122 +1,122 @@ -# $Id: HP-UX.mk,v 1.14 2020/06/29 14:34:42 sjg Exp $ +# $Id: HP-UX.mk,v 1.12 2020/04/17 21:08:17 sjg Exp $ # $NetBSD: sys.mk,v 1.19.2.1 1994/07/26 19:58:31 cgd Exp $ # @(#)sys.mk 5.11 (Berkeley) 3/13/91 -OS ?= HP-UX -ROOT_GROUP ?= root -unix ?= We run ${OS}. +OS= HP-UX +ROOT_GROUP= root +unix?= We run ${OS}. # HP-UX's cc does not provide any clues as to wether this is 9.x or 10.x # nor does sys/param.h, so we'll use the existence of /hp-ux .if exists("/hp-ux") -OSMAJOR ?=9 +OSMAJOR?=9 .endif -OSMAJOR ?=10 -__HPUX_VERSION ?=${OSMAJOR} +OSMAJOR?=10 +__HPUX_VERSION?=${OSMAJOR} .SUFFIXES: .out .a .ln .o .c ${CXX_SUFFIXES} .F .f .r .y .l .s .S .cl .p .h .sh .m4 -LIBMODE ?= 755 -LIBCRT0 ?= /lib/crt0.o +LIBMODE= 755 +LIBCRT0= /lib/crt0.o .LIBS: .a # +b<path> is needed to stop the binaries from insisting on having # the build tree available :-) # +s tells the dynamic loader to use SHLIB_PATH if set -LD_bpath ?=-Wl,+b/lib:/usr/lib:/usr/local/lib -LD_spath ?=-Wl,+s +LD_bpath?=-Wl,+b/lib:/usr/lib:/usr/local/lib +LD_spath?=-Wl,+s LDADD+= ${LD_bpath} ${LD_spath} .if exists(/usr/lib/end.o) LDADD+= /usr/lib/end.o .endif -AR ?= ar -ARFLAGS ?= rl -RANLIB ?= : +AR= ar +ARFLAGS= rl +RANLIB= : AFLAGS= -COMPILE.s ?= ${AS} ${AFLAGS} -LINK.s ?= ${CC} ${AFLAGS} ${LDFLAGS} -COMPILE.S ?= ${CC} ${AFLAGS} ${CPPFLAGS} -c -LINK.S ?= ${CC} ${AFLAGS} ${CPPFLAGS} ${LDFLAGS} +COMPILE.s= ${AS} ${AFLAGS} +LINK.s= ${CC} ${AFLAGS} ${LDFLAGS} +COMPILE.S= ${CC} ${AFLAGS} ${CPPFLAGS} -c +LINK.S= ${CC} ${AFLAGS} ${CPPFLAGS} ${LDFLAGS} .if exists(/usr/local/bin/gcc) -PIPE ?= -pipe -CC ?= gcc ${PIPE} -AS ?= gas -DBG ?= -O -g -STATIC ?= -static +PIPE?= -pipe +CC?= gcc ${PIPE} +AS= gas +DBG?= -O -g +STATIC?= -static .if defined(DESTDIR) CPPFLAGS+= -nostdinc -idirafter ${DESTDIR}/usr/include .endif .else # HP's bundled compiler knows not -g or -O -AS ?= as -CC ?= cc +AS= as +CC= cc .if exists(/opt/ansic/bin/cc) -CCMODE ?=-Ae +ESlit -PICFLAG ?= +z +CCMODE?=-Ae +ESlit +PICFLAG?= +z LD_x= -DBG ?=-g -O +DBG?=-g -O .endif -DBG ?= -STATIC ?= -Wl,-a,archive +DBG?= +STATIC?= -Wl,-a,archive .endif .if (${__HPUX_VERSION} == "10") -CCSOURCE_FLAGS ?= -D_HPUX_SOURCE +CCSOURCE_FLAGS?= -D_HPUX_SOURCE .else -CCSOURCE_FLAGS ?= -D_HPUX_SOURCE -D_INCLUDE_POSIX_SOURCE -D_INCLUDE_XOPEN_SOURCE -D_INCLUDE_XOPEN_SOURCE_EXTENDED +CCSOURCE_FLAGS?= -D_HPUX_SOURCE -D_INCLUDE_POSIX_SOURCE -D_INCLUDE_XOPEN_SOURCE -D_INCLUDE_XOPEN_SOURCE_EXTENDED .endif -CFLAGS ?= ${DBG} -CFLAGS+ ?= ${CCMODE} -D__hpux__ -D__HPUX_VERSION=${__HPUX_VERSION} ${CCSOURCE_FLAGS} -COMPILE.c ?= ${CC} ${CFLAGS} ${CPPFLAGS} -c -LINK.c ?= ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} +CFLAGS= ${DBG} +CFLAGS+= ${CCMODE} -D__hpux__ -D__HPUX_VERSION=${__HPUX_VERSION} ${CCSOURCE_FLAGS} +COMPILE.c= ${CC} ${CFLAGS} ${CPPFLAGS} -c +LINK.c= ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} -CXX ?= g++ -CXXFLAGS ?= ${CFLAGS} -COMPILE.cc ?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c -LINK.cc ?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS} +CXX= g++ +CXXFLAGS= ${CFLAGS} +COMPILE.cc= ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c +LINK.cc= ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS} -CPP ?= cpp +CPP= cpp -MK_DEP ?= mkdeps.sh -N -FC ?= f77 -FFLAGS ?= -O +MK_DEP= mkdeps.sh -N +FC= f77 +FFLAGS= -O RFLAGS= -COMPILE.f ?= ${FC} ${FFLAGS} -c -LINK.f ?= ${FC} ${FFLAGS} ${LDFLAGS} -COMPILE.F ?= ${FC} ${FFLAGS} ${CPPFLAGS} -c -LINK.F ?= ${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS} -COMPILE.r ?= ${FC} ${FFLAGS} ${RFLAGS} -c -LINK.r ?= ${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS} - -LEX ?= lex +COMPILE.f= ${FC} ${FFLAGS} -c +LINK.f= ${FC} ${FFLAGS} ${LDFLAGS} +COMPILE.F= ${FC} ${FFLAGS} ${CPPFLAGS} -c +LINK.F= ${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS} +COMPILE.r= ${FC} ${FFLAGS} ${RFLAGS} -c +LINK.r= ${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS} + +LEX= lex LFLAGS= -LEX.l ?= ${LEX} ${LFLAGS} +LEX.l= ${LEX} ${LFLAGS} -LD ?= ld +LD= ld LDFLAGS= -LINT ?= lint -LINTFLAGS ?= -chapbx +LINT= lint +LINTFLAGS= -chapbx -PC ?= pc +PC= pc PFLAGS= -COMPILE.p ?= ${PC} ${PFLAGS} ${CPPFLAGS} -c -LINK.p ?= ${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS} +COMPILE.p= ${PC} ${PFLAGS} ${CPPFLAGS} -c +LINK.p= ${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS} # HP's sh sucks ENV= -MAKE_SHELL ?= /bin/ksh +MAKE_SHELL= /bin/ksh .if exists(/usr/local/bin/bison) -YACC ?= bison -y +YACC= bison -y .else -YACC ?= yacc +YACC= yacc .endif -YFLAGS ?= -d -YACC.y ?= ${YACC} ${YFLAGS} +YFLAGS= -d +YACC.y= ${YACC} ${YFLAGS} # C .c: diff --git a/contrib/bmake/mk/sys/IRIX.mk b/contrib/bmake/mk/sys/IRIX.mk index a194c1e78a11..b448fb5720cf 100644 --- a/contrib/bmake/mk/sys/IRIX.mk +++ b/contrib/bmake/mk/sys/IRIX.mk @@ -7,7 +7,7 @@ OS!= uname -s ROOT_GROUP!= sed -n /:0:/s/:.*//p /etc/group .MAKEOVERRIDES+= OS ROOT_GROUP .endif -unix ?= We run ${OS}. +unix?= We run ${OS}. .endif .SUFFIXES: .out .a .ln .o .s .S .c ${CXX_SUFFIXES} .F .f .r .y .l .cl .p .h @@ -15,75 +15,75 @@ unix ?= We run ${OS}. .LIBS: .a -AR ?= ar -ARFLAGS ?= rl -RANLIB ?= ranlib +AR?= ar +ARFLAGS?= rl +RANLIB?= ranlib -AS ?= as -AFLAGS ?= -COMPILE.s ?= ${CC} ${AFLAGS} -c -LINK.s ?= ${CC} ${AFLAGS} ${LDFLAGS} -COMPILE.S ?= ${CC} ${AFLAGS} ${CPPFLAGS} -c -traditional-cpp -LINK.S ?= ${CC} ${AFLAGS} ${CPPFLAGS} ${LDFLAGS} +AS?= as +AFLAGS?= +COMPILE.s?= ${CC} ${AFLAGS} -c +LINK.s?= ${CC} ${AFLAGS} ${LDFLAGS} +COMPILE.S?= ${CC} ${AFLAGS} ${CPPFLAGS} -c -traditional-cpp +LINK.S?= ${CC} ${AFLAGS} ${CPPFLAGS} ${LDFLAGS} -CC ?= cc -NOGCCERROR ?= # defined -DBG ?= -O2 -CFLAGS ?= ${DBG} -COMPILE.c ?= ${CC} ${CFLAGS} ${CPPFLAGS} -c -LINK.c ?= ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} +CC?= cc +NOGCCERROR?= # defined +DBG?= -O2 +CFLAGS?= ${DBG} +COMPILE.c?= ${CC} ${CFLAGS} ${CPPFLAGS} -c +LINK.c?= ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} -CXX ?= CC -CXXFLAGS ?= ${CFLAGS} -COMPILE.cc ?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c -LINK.cc ?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS} +CXX?= CC +CXXFLAGS?= ${CFLAGS} +COMPILE.cc?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c +LINK.cc?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS} -OBJC ?= ${CC} -OBJCFLAGS ?= ${CFLAGS} -COMPILE.m ?= ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} -c -LINK.m ?= ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} ${LDFLAGS} +OBJC?= ${CC} +OBJCFLAGS?= ${CFLAGS} +COMPILE.m?= ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} -c +LINK.m?= ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} ${LDFLAGS} -CPP ?= CC -CPPFLAGS ?= +CPP?= CC +CPPFLAGS?= -FC ?= f77 -FFLAGS ?= -O -RFLAGS ?= -COMPILE.f ?= ${FC} ${FFLAGS} -c -LINK.f ?= ${FC} ${FFLAGS} ${LDFLAGS} -COMPILE.F ?= ${FC} ${FFLAGS} ${CPPFLAGS} -c -LINK.F ?= ${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS} -COMPILE.r ?= ${FC} ${FFLAGS} ${RFLAGS} -c -LINK.r ?= ${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS} +FC?= f77 +FFLAGS?= -O +RFLAGS?= +COMPILE.f?= ${FC} ${FFLAGS} -c +LINK.f?= ${FC} ${FFLAGS} ${LDFLAGS} +COMPILE.F?= ${FC} ${FFLAGS} ${CPPFLAGS} -c +LINK.F?= ${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS} +COMPILE.r?= ${FC} ${FFLAGS} ${RFLAGS} -c +LINK.r?= ${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS} -INSTALL ?= ${PREFIX}/bin/install-sh +INSTALL?= ${PREFIX}/bin/install-sh -LEX ?= lex -LFLAGS ?= -LEX.l ?= ${LEX} ${LFLAGS} +LEX?= lex +LFLAGS?= +LEX.l?= ${LEX} ${LFLAGS} -LD ?= ld -LDFLAGS ?= +LD?= ld +LDFLAGS?= -LINT ?= lint -LINTFLAGS ?= -chapbxzF +LINT?= lint +LINTFLAGS?= -chapbxzF -LORDER ?= lorder +LORDER?= lorder -NM ?= nm +NM?= nm -PC ?= pc -PFLAGS ?= -COMPILE.p ?= ${PC} ${PFLAGS} ${CPPFLAGS} -c -LINK.p ?= ${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS} +PC?= pc +PFLAGS?= +COMPILE.p?= ${PC} ${PFLAGS} ${CPPFLAGS} -c +LINK.p?= ${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS} -SIZE ?= size +SIZE?= size -TSORT ?= tsort -q +TSORT?= tsort -q -YACC ?= yacc -YFLAGS ?= -YACC.y ?= ${YACC} ${YFLAGS} +YACC?= yacc +YFLAGS?= +YACC.y?= ${YACC} ${YFLAGS} # C .c: diff --git a/contrib/bmake/mk/sys/Linux.mk b/contrib/bmake/mk/sys/Linux.mk index bf80bb3addce..978aec098ca3 100644 --- a/contrib/bmake/mk/sys/Linux.mk +++ b/contrib/bmake/mk/sys/Linux.mk @@ -1,83 +1,83 @@ -# $Id: Linux.mk,v 1.12 2020/06/29 14:34:42 sjg Exp $ +# $Id: Linux.mk,v 1.10 2020/04/17 21:08:17 sjg Exp $ # $NetBSD: sys.mk,v 1.19.2.1 1994/07/26 19:58:31 cgd Exp $ # @(#)sys.mk 5.11 (Berkeley) 3/13/91 -OS ?= Linux -unix ?= We run ${OS}. +OS?= Linux +unix?= We run ${OS}. -ROOT_GROUP ?= root +ROOT_GROUP= root # would be better to work out where it is... -LIBCRT0 ?= /dev/null +LIBCRT0= /dev/null -NEED_SOLINKS ?=yes +NEED_SOLINKS=yes .SUFFIXES: .out .a .ln .o .c ${CXX_SUFFIXES} .F .f .r .y .l .s .S .cl .p .h .sh .m4 .LIBS: .a -AR ?= ar -ARFLAGS ?= rl -RANLIB ?= ranlib +AR= ar +ARFLAGS= rl +RANLIB= ranlib -AS ?= as +AS= as AFLAGS= -COMPILE.s ?= ${AS} ${AFLAGS} -LINK.s ?= ${CC} ${AFLAGS} ${LDFLAGS} -COMPILE.S ?= ${CC} ${AFLAGS} ${CPPFLAGS} -c -LINK.S ?= ${CC} ${AFLAGS} ${CPPFLAGS} ${LDFLAGS} +COMPILE.s= ${AS} ${AFLAGS} +LINK.s= ${CC} ${AFLAGS} ${LDFLAGS} +COMPILE.S= ${CC} ${AFLAGS} ${CPPFLAGS} -c +LINK.S= ${CC} ${AFLAGS} ${CPPFLAGS} ${LDFLAGS} .if exists(/usr/local/bin/gcc) -CC ?= gcc -pipe -DBG ?= -O -g -STATIC ?= -static +CC= gcc -pipe +DBG= -O -g +STATIC?= -static .else -CC ?= cc -pipe -DBG ?= -g -STATIC ?= -Bstatic +CC= cc -pipe +DBG= -g +STATIC= -Bstatic .endif -CFLAGS ?= ${DBG} -COMPILE.c ?= ${CC} ${CFLAGS} ${CPPFLAGS} -c -LINK.c ?= ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} +CFLAGS= ${DBG} +COMPILE.c= ${CC} ${CFLAGS} ${CPPFLAGS} -c +LINK.c= ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} -CXX ?= g++ -CXXFLAGS ?= ${CFLAGS} -COMPILE.cc ?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c -LINK.cc ?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS} +CXX= g++ +CXXFLAGS= ${CFLAGS} +COMPILE.cc= ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c +LINK.cc= ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS} -CPP ?= cpp +CPP= cpp .if defined(DESTDIR) CPPFLAGS+= -nostdinc -idirafter ${DESTDIR}/usr/include .endif -MK_DEP ?= mkdeps.sh -N -FC ?= f77 -FFLAGS ?= -O +MK_DEP= mkdeps.sh -N +FC= f77 +FFLAGS= -O RFLAGS= -COMPILE.f ?= ${FC} ${FFLAGS} -c -LINK.f ?= ${FC} ${FFLAGS} ${LDFLAGS} -COMPILE.F ?= ${FC} ${FFLAGS} ${CPPFLAGS} -c -LINK.F ?= ${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS} -COMPILE.r ?= ${FC} ${FFLAGS} ${RFLAGS} -c -LINK.r ?= ${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS} - -LEX ?= lex +COMPILE.f= ${FC} ${FFLAGS} -c +LINK.f= ${FC} ${FFLAGS} ${LDFLAGS} +COMPILE.F= ${FC} ${FFLAGS} ${CPPFLAGS} -c +LINK.F= ${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS} +COMPILE.r= ${FC} ${FFLAGS} ${RFLAGS} -c +LINK.r= ${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS} + +LEX= lex LFLAGS= -LEX.l ?= ${LEX} ${LFLAGS} +LEX.l= ${LEX} ${LFLAGS} -LD ?= ld +LD= ld LDFLAGS= -LINT ?= lint -LINTFLAGS ?= -chapbx +LINT= lint +LINTFLAGS= -chapbx -PC ?= pc +PC= pc PFLAGS= -COMPILE.p ?= ${PC} ${PFLAGS} ${CPPFLAGS} -c -LINK.p ?= ${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS} +COMPILE.p= ${PC} ${PFLAGS} ${CPPFLAGS} -c +LINK.p= ${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS} -YACC ?= yacc -YFLAGS ?= -d -YACC.y ?= ${YACC} ${YFLAGS} +YACC= yacc +YFLAGS= -d +YACC.y= ${YACC} ${YFLAGS} # C .c: diff --git a/contrib/bmake/mk/sys/NetBSD.mk b/contrib/bmake/mk/sys/NetBSD.mk index 2e72cc742e4f..a1711a5ec9db 100644 --- a/contrib/bmake/mk/sys/NetBSD.mk +++ b/contrib/bmake/mk/sys/NetBSD.mk @@ -1,21 +1,21 @@ # $NetBSD: sys.mk,v 1.66.2.1 2002/06/05 03:31:01 lukem Exp $ # @(#)sys.mk 8.2 (Berkeley) 3/21/94 -OS ?= NetBSD -unix ?= We run ${OS}. +OS= NetBSD +unix?= We run ${OS}. .if !defined(MAKE_VERSION) # we are running native make # which defined MAKE_VERSION between 20010609 and 20090324 # so we can make a rough guess .if defined(.MAKE.LEVEL) -MAKE_VERSION ?= 20090908 +MAKE_VERSION = 20090908 .elif defined(.MAKE.MAKEFILES) # introduced 20071008 -MAKE_VERSION ?= 20090324 +MAKE_VERSION = 20090324 .else # this just before when MAKE_VERSION was introduced -MAKE_VERSION ?= 20010606 +MAKE_VERSION = 20010606 .endif .endif @@ -24,29 +24,29 @@ MAKE_VERSION ?= 20010606 .LIBS: .a -AR ?= ar -ARFLAGS ?= rl -RANLIB ?= ranlib +AR?= ar +ARFLAGS?= rl +RANLIB?= ranlib -AS ?= as -AFLAGS ?= -COMPILE.s ?= ${CC} ${AFLAGS} -c -LINK.s ?= ${CC} ${AFLAGS} ${LDFLAGS} -COMPILE.S ?= ${CC} ${AFLAGS} ${CPPFLAGS} -c -traditional-cpp -LINK.S ?= ${CC} ${AFLAGS} ${CPPFLAGS} ${LDFLAGS} +AS?= as +AFLAGS?= +COMPILE.s?= ${CC} ${AFLAGS} -c +LINK.s?= ${CC} ${AFLAGS} ${LDFLAGS} +COMPILE.S?= ${CC} ${AFLAGS} ${CPPFLAGS} -c -traditional-cpp +LINK.S?= ${CC} ${AFLAGS} ${CPPFLAGS} ${LDFLAGS} -CC ?= cc +CC?= cc # need to make sure this is set MACHINE_ARCH.${MACHINE} ?= ${MACHINE} .if empty(MACHINE_ARCH) -MACHINE_ARCH ?= ${MACHINE_ARCH.${MACHINE}} +MACHINE_ARCH = ${MACHINE_ARCH.${MACHINE}} .endif # # CPU model, derived from MACHINE_ARCH # -MACHINE_CPU ?= ${MACHINE_ARCH:C/mipse[bl]/mips/:C/mips64e[bl]/mips/:C/sh3e[bl]/sh3/:S/m68000/m68k/:S/armeb/arm/} +MACHINE_CPU= ${MACHINE_ARCH:C/mipse[bl]/mips/:C/mips64e[bl]/mips/:C/sh3e[bl]/sh3/:S/m68000/m68k/:S/armeb/arm/} .if ${MACHINE_CPU} == "alpha" || \ ${MACHINE_CPU} == "arm" || \ @@ -56,69 +56,69 @@ MACHINE_CPU ?= ${MACHINE_ARCH:C/mipse[bl]/mips/:C/mips64e[bl]/mips/:C/sh3e[bl]/s ${MACHINE_CPU} == "powerpc" || \ ${MACHINE_CPU} == "sparc" || \ ${MACHINE_CPU} == "vax" -DBG ?= -O2 +DBG?= -O2 .elif ${MACHINE_ARCH} == "x86_64" -DBG ?= +DBG?= .elif ${MACHINE_ARCH} == "sparc64" -DBG ?= -O -ffixed-g4 #Hack for embedany memory model compatibility +DBG?= -O -ffixed-g4 #Hack for embedany memory model compatibility .else -DBG ?= -O +DBG?= -O .endif -CFLAGS ?= ${DBG} -COMPILE.c ?= ${CC} ${CFLAGS} ${CPPFLAGS} -c -LINK.c ?= ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} +CFLAGS?= ${DBG} +COMPILE.c?= ${CC} ${CFLAGS} ${CPPFLAGS} -c +LINK.c?= ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} -CXX ?= c++ -CXXFLAGS ?= ${CFLAGS} -COMPILE.cc ?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c -LINK.cc ?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS} +CXX?= c++ +CXXFLAGS?= ${CFLAGS} +COMPILE.cc?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c +LINK.cc?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS} -OBJC ?= ${CC} -OBJCFLAGS ?= ${CFLAGS} -COMPILE.m ?= ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} -c -LINK.m ?= ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} ${LDFLAGS} +OBJC?= ${CC} +OBJCFLAGS?= ${CFLAGS} +COMPILE.m?= ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} -c +LINK.m?= ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} ${LDFLAGS} -CPP ?= cpp -CPPFLAGS ?= +CPP?= cpp +CPPFLAGS?= -FC ?= f77 -FFLAGS ?= -O -RFLAGS ?= -COMPILE.f ?= ${FC} ${FFLAGS} -c -LINK.f ?= ${FC} ${FFLAGS} ${LDFLAGS} -COMPILE.F ?= ${FC} ${FFLAGS} ${CPPFLAGS} -c -LINK.F ?= ${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS} -COMPILE.r ?= ${FC} ${FFLAGS} ${RFLAGS} -c -LINK.r ?= ${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS} +FC?= f77 +FFLAGS?= -O +RFLAGS?= +COMPILE.f?= ${FC} ${FFLAGS} -c +LINK.f?= ${FC} ${FFLAGS} ${LDFLAGS} +COMPILE.F?= ${FC} ${FFLAGS} ${CPPFLAGS} -c +LINK.F?= ${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS} +COMPILE.r?= ${FC} ${FFLAGS} ${RFLAGS} -c +LINK.r?= ${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS} -INSTALL ?= install +INSTALL?= install -LEX ?= lex -LFLAGS ?= -LEX.l ?= ${LEX} ${LFLAGS} +LEX?= lex +LFLAGS?= +LEX.l?= ${LEX} ${LFLAGS} -LD ?= ld -LDFLAGS ?= +LD?= ld +LDFLAGS?= -LINT ?= lint -LINTFLAGS ?= -chapbxzF +LINT?= lint +LINTFLAGS?= -chapbxzF -LORDER ?= lorder +LORDER?= lorder -NM ?= nm +NM?= nm -PC ?= pc -PFLAGS ?= -COMPILE.p ?= ${PC} ${PFLAGS} ${CPPFLAGS} -c -LINK.p ?= ${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS} +PC?= pc +PFLAGS?= +COMPILE.p?= ${PC} ${PFLAGS} ${CPPFLAGS} -c +LINK.p?= ${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS} -SIZE ?= size +SIZE?= size -TSORT ?= tsort -q +TSORT?= tsort -q -YACC ?= yacc -YFLAGS ?= -YACC.y ?= ${YACC} ${YFLAGS} +YACC?= yacc +YFLAGS?= +YACC.y?= ${YACC} ${YFLAGS} # C .c: diff --git a/contrib/bmake/mk/sys/OSF1.mk b/contrib/bmake/mk/sys/OSF1.mk index 4c1a09f6f5f7..0d0a73f40c98 100644 --- a/contrib/bmake/mk/sys/OSF1.mk +++ b/contrib/bmake/mk/sys/OSF1.mk @@ -1,15 +1,15 @@ -# $Id: OSF1.mk,v 1.11 2020/06/29 14:34:42 sjg Exp $ +# $Id: OSF1.mk,v 1.9 2020/04/17 21:08:17 sjg Exp $ # $NetBSD: sys.mk,v 1.19.2.1 1994/07/26 19:58:31 cgd Exp $ # @(#)sys.mk 5.11 (Berkeley) 3/13/91 -OS ?= OSF1 -unix ?= We run ${OS}. -ROOT_GROUP ?= system +OS?= OSF1 +unix?= We run ${OS}. +ROOT_GROUP= system # can't fine one anywhere, so just stop the dependency -LIBCRT0 ?= /dev/null +LIBCRT0= /dev/null -PATH ?=/usr/sbin:/usr/bin:/usr/ucb:/opt/gnu/bin:/usr/ccs/bin +PATH=/usr/sbin:/usr/bin:/usr/ucb:/opt/gnu/bin:/usr/ccs/bin .SUFFIXES: .out .a .ln .o .c ${CXX_SUFFIXES} .F .f .r .y .l .s .S .cl .p .h .sh .m4 @@ -17,78 +17,78 @@ PATH ?=/usr/sbin:/usr/bin:/usr/ucb:/opt/gnu/bin:/usr/ccs/bin # no -X LD_X= -LD_x ?= -x -LD_r ?= -r -AR ?= ar -ARFLAGS ?= rl -RANLIB ?= ranlib - -AS ?= as -AS_STDIN ?= - +LD_x= -x +LD_r= -r +AR= ar +ARFLAGS= rl +RANLIB= ranlib + +AS= as +AS_STDIN= - AFLAGS= -COMPILE.s ?= ${AS} ${AFLAGS} -LINK.s ?= ${CC} ${AFLAGS} ${LDFLAGS} -COMPILE.S ?= ${CC} ${AFLAGS} ${CPPFLAGS} -c -LINK.S ?= ${CC} ${AFLAGS} ${CPPFLAGS} ${LDFLAGS} +COMPILE.s= ${AS} ${AFLAGS} +LINK.s= ${CC} ${AFLAGS} ${LDFLAGS} +COMPILE.S= ${CC} ${AFLAGS} ${CPPFLAGS} -c +LINK.S= ${CC} ${AFLAGS} ${CPPFLAGS} ${LDFLAGS} .if exists(/opt/gnu/bin/gcc) || exists(/usr/local/bin/gcc) -CC ?= gcc +CC?= gcc .else -CC ?= cc -std +CC?= cc -std .endif .if (${CC:T} == "gcc") -DBG ?= -O -g -STATIC ?= -static -DBG ?= -g -STATIC ?= -non_shared +DBG= -O -g +STATIC= -static +DBG= -g +STATIC= -non_shared .endif -CFLAGS ?= ${DBG} -COMPILE.c ?= ${CC} ${CFLAGS} ${CPPFLAGS} -c -LINK.c ?= ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} +CFLAGS= ${DBG} +COMPILE.c= ${CC} ${CFLAGS} ${CPPFLAGS} -c +LINK.c= ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} -CXX ?= g++ -CXXFLAGS ?= ${CFLAGS} -COMPILE.cc ?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c -LINK.cc ?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS} +CXX= g++ +CXXFLAGS= ${CFLAGS} +COMPILE.cc= ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c +LINK.cc= ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS} -CPP ?= /usr/ccs/lib/cpp +CPP= /usr/ccs/lib/cpp .if defined(DESTDIR) CPPFLAGS+= -nostdinc -idirafter ${DESTDIR}/usr/include .endif -MK_DEP ?= mkdeps.sh -N -FC ?= f77 -FFLAGS ?= -O +MK_DEP= mkdeps.sh -N +FC= f77 +FFLAGS= -O RFLAGS= -COMPILE.f ?= ${FC} ${FFLAGS} -c -LINK.f ?= ${FC} ${FFLAGS} ${LDFLAGS} -COMPILE.F ?= ${FC} ${FFLAGS} ${CPPFLAGS} -c -LINK.F ?= ${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS} -COMPILE.r ?= ${FC} ${FFLAGS} ${RFLAGS} -c -LINK.r ?= ${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS} - -LEX ?= lex +COMPILE.f= ${FC} ${FFLAGS} -c +LINK.f= ${FC} ${FFLAGS} ${LDFLAGS} +COMPILE.F= ${FC} ${FFLAGS} ${CPPFLAGS} -c +LINK.F= ${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS} +COMPILE.r= ${FC} ${FFLAGS} ${RFLAGS} -c +LINK.r= ${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS} + +LEX= lex LFLAGS= -LEX.l ?= ${LEX} ${LFLAGS} +LEX.l= ${LEX} ${LFLAGS} -LD ?= ld +LD= ld LDFLAGS= -LINT ?= lint -LINTFLAGS ?= -chapbx +LINT= lint +LINTFLAGS= -chapbx -PC ?= pc +PC= pc PFLAGS= -COMPILE.p ?= ${PC} ${PFLAGS} ${CPPFLAGS} -c -LINK.p ?= ${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS} +COMPILE.p= ${PC} ${PFLAGS} ${CPPFLAGS} -c +LINK.p= ${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS} .if exists(/usr/local/bin/bison) || exists(/opt/gnu/bin/bison) -YACC ?= bison -y +YACC= bison -y .else -YACC ?= yacc +YACC= yacc .endif -YFLAGS ?= -d -YACC.y ?= ${YACC} ${YFLAGS} +YFLAGS= -d +YACC.y= ${YACC} ${YFLAGS} # C .c: diff --git a/contrib/bmake/mk/sys/OpenBSD.mk b/contrib/bmake/mk/sys/OpenBSD.mk index d73bb0d82c9a..8b87ef3e85a4 100644 --- a/contrib/bmake/mk/sys/OpenBSD.mk +++ b/contrib/bmake/mk/sys/OpenBSD.mk @@ -1,8 +1,8 @@ # $NetBSD: OpenBSD.sys.mk,v 1.1 2002/11/17 09:18:00 cjep Exp $ # @(#)sys.mk 8.2 (Berkeley) 3/21/94 -OS ?= OpenBSD -unix ?= We run ${OS}. +OS= OpenBSD +unix?= We run ${OS}. .SUFFIXES: .out .a .ln .o .s .S .c ${CXX_SUFFIXES} .F .f .r .y .l .cl .p .h .SUFFIXES: .sh .m4 @@ -12,88 +12,88 @@ unix ?= We run ${OS}. # need to make sure this is set MACHINE_ARCH.${MACHINE} ?= ${MACHINE} .if empty(MACHINE_ARCH) -MACHINE_ARCH ?= ${MACHINE_ARCH.${MACHINE}} +MACHINE_ARCH = ${MACHINE_ARCH.${MACHINE}} .endif -AR ?= ar -ARFLAGS ?= rl -RANLIB ?= ranlib +AR?= ar +ARFLAGS?= rl +RANLIB?= ranlib -AS ?= as -AFLAGS ?= +AS?= as +AFLAGS?= .if ${MACHINE_ARCH} == "sparc64" AFLAGS+= -Wa,-Av9a .endif -COMPILE.s ?= ${CC} ${AFLAGS} -c -LINK.s ?= ${CC} ${AFLAGS} ${LDFLAGS} -COMPILE.S ?= ${CC} ${AFLAGS} ${CPPFLAGS} -c -traditional-cpp -LINK.S ?= ${CC} ${AFLAGS} ${CPPFLAGS} ${LDFLAGS} +COMPILE.s?= ${CC} ${AFLAGS} -c +LINK.s?= ${CC} ${AFLAGS} ${LDFLAGS} +COMPILE.S?= ${CC} ${AFLAGS} ${CPPFLAGS} -c -traditional-cpp +LINK.S?= ${CC} ${AFLAGS} ${CPPFLAGS} ${LDFLAGS} -CC ?= cc +CC?= cc .if ${MACHINE_ARCH} == "alpha" || \ ${MACHINE_ARCH} == "i386" || \ ${MACHINE_ARCH} == "m68k" || \ ${MACHINE_ARCH} == "sparc" || \ ${MACHINE_ARCH} == "vax" -DBG ?= -O2 +DBG?= -O2 .else -DBG ?= -O +DBG?= -O .endif -CFLAGS ?= ${DBG} -COMPILE.c ?= ${CC} ${CFLAGS} ${CPPFLAGS} -c -LINK.c ?= ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} +CFLAGS?= ${DBG} +COMPILE.c?= ${CC} ${CFLAGS} ${CPPFLAGS} -c +LINK.c?= ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} -CXX ?= c++ -CXXFLAGS ?= ${CFLAGS} -COMPILE.cc ?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c -LINK.cc ?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS} +CXX?= c++ +CXXFLAGS?= ${CFLAGS} +COMPILE.cc?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c +LINK.cc?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS} -OBJC ?= ${CC} -OBJCFLAGS ?= ${CFLAGS} -COMPILE.m ?= ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} -c -LINK.m ?= ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} ${LDFLAGS} +OBJC?= ${CC} +OBJCFLAGS?= ${CFLAGS} +COMPILE.m?= ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} -c +LINK.m?= ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} ${LDFLAGS} -CPP ?= cpp -CPPFLAGS ?= +CPP?= cpp +CPPFLAGS?= -FC ?= f77 -FFLAGS ?= -O -RFLAGS ?= -COMPILE.f ?= ${FC} ${FFLAGS} -c -LINK.f ?= ${FC} ${FFLAGS} ${LDFLAGS} -COMPILE.F ?= ${FC} ${FFLAGS} ${CPPFLAGS} -c -LINK.F ?= ${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS} -COMPILE.r ?= ${FC} ${FFLAGS} ${RFLAGS} -c -LINK.r ?= ${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS} +FC?= f77 +FFLAGS?= -O +RFLAGS?= +COMPILE.f?= ${FC} ${FFLAGS} -c +LINK.f?= ${FC} ${FFLAGS} ${LDFLAGS} +COMPILE.F?= ${FC} ${FFLAGS} ${CPPFLAGS} -c +LINK.F?= ${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS} +COMPILE.r?= ${FC} ${FFLAGS} ${RFLAGS} -c +LINK.r?= ${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS} -INSTALL ?= install +INSTALL?= install -LEX ?= lex -LFLAGS ?= -LEX.l ?= ${LEX} ${LFLAGS} +LEX?= lex +LFLAGS?= +LEX.l?= ${LEX} ${LFLAGS} -LD ?= ld -LDFLAGS ?= +LD?= ld +LDFLAGS?= -LINT ?= lint -LINTFLAGS ?= -chapbxzF +LINT?= lint +LINTFLAGS?= -chapbxzF -LORDER ?= lorder +LORDER?= lorder -NM ?= nm +NM?= nm -PC ?= pc -PFLAGS ?= -COMPILE.p ?= ${PC} ${PFLAGS} ${CPPFLAGS} -c -LINK.p ?= ${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS} +PC?= pc +PFLAGS?= +COMPILE.p?= ${PC} ${PFLAGS} ${CPPFLAGS} -c +LINK.p?= ${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS} -SIZE ?= size +SIZE?= size -TSORT ?= tsort -q +TSORT?= tsort -q -YACC ?= yacc -YFLAGS ?= -YACC.y ?= ${YACC} ${YFLAGS} +YACC?= yacc +YFLAGS?= +YACC.y?= ${YACC} ${YFLAGS} # C .c: diff --git a/contrib/bmake/mk/sys/SunOS.mk b/contrib/bmake/mk/sys/SunOS.mk index e79cd3a7dbd4..71c985204fc6 100644 --- a/contrib/bmake/mk/sys/SunOS.mk +++ b/contrib/bmake/mk/sys/SunOS.mk @@ -1,19 +1,19 @@ -# $Id: SunOS.mk,v 1.11 2020/06/29 14:34:42 sjg Exp $ +# $Id: SunOS.mk,v 1.9 2020/04/17 21:08:17 sjg Exp $ .if ${.PARSEFILE} == "sys.mk" .include <host-target.mk> -OS ?= SunOS.${HOST_OSMAJOR} -unix ?= We run ${OS}. +OS?= SunOS.${HOST_OSMAJOR} +unix?= We run ${OS}. .endif .if ${HOST_OSMAJOR} > 4 -ROOT_GROUP ?= root +ROOT_GROUP= root -SHLIB_FULLVERSION ?= ${SHLIB_MAJOR} +SHLIB_FULLVERSION = ${SHLIB_MAJOR} # suppress the dependency -LIBCRT0 ?= /dev/null +LIBCRT0= /dev/null .ifndef CC # the PATH below may find an ancient gcc @@ -22,21 +22,21 @@ CC := ${gcc:L:${M_whence}} .endif # the stuff in /usr/xpg4/bin is usually more sane. -PATH ?=/usr/xpg4/bin:/usr/sbin:/usr/bin:/usr/ucb:/usr/sfw/bin:/opt/gnu/bin:/usr/ccs/bin:/usr/local/bin +PATH=/usr/xpg4/bin:/usr/sbin:/usr/bin:/usr/ucb:/usr/sfw/bin:/opt/gnu/bin:/usr/ccs/bin:/usr/local/bin .export PATH -DSHLIBEXT ?= .so -HOST_LIBDIRS ?= /usr/lib /lib /usr/sfw/lib +DSHLIBEXT = .so +HOST_LIBDIRS = /usr/lib /lib /usr/sfw/lib # no -X LD_X= LD_x= -RANLIB ?= : -CPP ?= /usr/ccs/lib/cpp +RANLIB= : +CPP= /usr/ccs/lib/cpp .else -ROOT_GROUP ?= wheel -RANLIB ?= ranlib -CPP ?= cpp +ROOT_GROUP= wheel +RANLIB= ranlib +CPP= cpp .endif # the rest is common @@ -45,71 +45,71 @@ CPP ?= cpp .LIBS: .a -AR ?= ar -ARFLAGS ?= rl +AR= ar +ARFLAGS= rl -AS ?= as -AS_STDIN ?= - +AS= as +AS_STDIN= - AFLAGS= -COMPILE.s ?= ${AS} ${AFLAGS} -LINK.s ?= ${CC} ${AFLAGS} ${LDFLAGS} -COMPILE.S ?= ${CC} ${AFLAGS} ${CPPFLAGS} -c -LINK.S ?= ${CC} ${AFLAGS} ${CPPFLAGS} ${LDFLAGS} +COMPILE.s= ${AS} ${AFLAGS} +LINK.s= ${CC} ${AFLAGS} ${LDFLAGS} +COMPILE.S= ${CC} ${AFLAGS} ${CPPFLAGS} -c +LINK.S= ${CC} ${AFLAGS} ${CPPFLAGS} ${LDFLAGS} .if exists(/opt/gnu/bin/gcc) || exists(/usr/local/bin/gcc) CC ?= gcc -pipe -DBG ?= -O -g -STATIC ?= -static +DBG= -O -g +STATIC= -static .else CC ?= cc -DBG ?= -g -STATIC ?= -Bstatic +DBG= -g +STATIC= -Bstatic .endif -CFLAGS ?= ${DBG} -COMPILE.c ?= ${CC} ${CFLAGS} ${CPPFLAGS} -c -LINK.c ?= ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} +CFLAGS= ${DBG} +COMPILE.c= ${CC} ${CFLAGS} ${CPPFLAGS} -c +LINK.c= ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} -CXX ?= g++ -CXXFLAGS ?= ${CFLAGS} -COMPILE.cc ?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c -LINK.cc ?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS} +CXX= g++ +CXXFLAGS= ${CFLAGS} +COMPILE.cc= ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c +LINK.cc= ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS} .if defined(DESTDIR) CPPFLAGS+= -nostdinc -idirafter ${DESTDIR}/usr/include .endif -MK_DEP ?= mkdeps.sh -N -FC ?= f77 -FFLAGS ?= -O +MK_DEP= mkdeps.sh -N +FC= f77 +FFLAGS= -O RFLAGS= -COMPILE.f ?= ${FC} ${FFLAGS} -c -LINK.f ?= ${FC} ${FFLAGS} ${LDFLAGS} -COMPILE.F ?= ${FC} ${FFLAGS} ${CPPFLAGS} -c -LINK.F ?= ${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS} -COMPILE.r ?= ${FC} ${FFLAGS} ${RFLAGS} -c -LINK.r ?= ${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS} - -LEX ?= lex +COMPILE.f= ${FC} ${FFLAGS} -c +LINK.f= ${FC} ${FFLAGS} ${LDFLAGS} +COMPILE.F= ${FC} ${FFLAGS} ${CPPFLAGS} -c +LINK.F= ${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS} +COMPILE.r= ${FC} ${FFLAGS} ${RFLAGS} -c +LINK.r= ${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS} + +LEX= lex LFLAGS= -LEX.l ?= ${LEX} ${LFLAGS} +LEX.l= ${LEX} ${LFLAGS} -LD ?= ld +LD= ld LDFLAGS= -LINT ?= lint -LINTFLAGS ?= -chapbx +LINT= lint +LINTFLAGS= -chapbx -PC ?= pc +PC= pc PFLAGS= -COMPILE.p ?= ${PC} ${PFLAGS} ${CPPFLAGS} -c -LINK.p ?= ${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS} +COMPILE.p= ${PC} ${PFLAGS} ${CPPFLAGS} -c +LINK.p= ${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS} .if exists(/usr/local/bin/bison) || exists(/opt/gnu/bin/bison) -YACC ?= bison -y +YACC= bison -y .else -YACC ?= yacc +YACC= yacc .endif -YFLAGS ?= -d -YACC.y ?= ${YACC} ${YFLAGS} +YFLAGS= -d +YACC.y= ${YACC} ${YFLAGS} # C .c: diff --git a/contrib/bmake/mk/sys/UnixWare.mk b/contrib/bmake/mk/sys/UnixWare.mk index 888f0d90c0b4..3b1e531515df 100644 --- a/contrib/bmake/mk/sys/UnixWare.mk +++ b/contrib/bmake/mk/sys/UnixWare.mk @@ -1,16 +1,16 @@ -# $Id: UnixWare.mk,v 1.6 2020/06/29 14:34:42 sjg Exp $ +# $Id: UnixWare.mk,v 1.4 2020/04/17 21:08:17 sjg Exp $ # based on "Id: SunOS.5.sys.mk,v 1.6 2003/09/30 16:42:23 sjg Exp " # $NetBSD: sys.mk,v 1.19.2.1 1994/07/26 19:58:31 cgd Exp $ # @(#)sys.mk 5.11 (Berkeley) 3/13/91 -OS ?= UnixWare -unix ?= We run ${OS}. -ROOT_GROUP ?= root +OS?= UnixWare +unix?= We run ${OS}. +ROOT_GROUP= root # can't fine one anywhere, so just stop the dependency -LIBCRT0 ?= /dev/null +LIBCRT0= /dev/null -PATH ?=/usr/sbin:/usr/bin:/usr/ccs/bin:/usr/ccs/lib:/usr/ucb:/usr/local/bin +PATH=/usr/sbin:/usr/bin:/usr/ccs/bin:/usr/ccs/lib:/usr/ucb:/usr/local/bin .SUFFIXES: .out .a .ln .o .c ${CXX_SUFFIXES} .F .f .r .y .l .s .S .cl .p .h .sh .m4 @@ -19,119 +19,119 @@ PATH ?=/usr/sbin:/usr/bin:/usr/ccs/bin:/usr/ccs/lib:/usr/ucb:/usr/local/bin # no -X LD_X= LD_x= -AR ?= ar -ARFLAGS ?= rl -RANLIB ?= : - -AS ?= as -AS_STDIN ?= - -AFLAGS ?= -COMPILE.s ?= ${AS} ${AFLAGS} -LINK.s ?= ${CC} ${AFLAGS} ${LDFLAGS} -COMPILE.S ?= ${CC} ${AFLAGS} ${CPPFLAGS} -c -LINK.S ?= ${CC} ${AFLAGS} ${CPPFLAGS} ${LDFLAGS} +AR?= ar +ARFLAGS?= rl +RANLIB?= : + +AS?= as +AS_STDIN?= - +AFLAGS?= +COMPILE.s?= ${AS} ${AFLAGS} +LINK.s?= ${CC} ${AFLAGS} ${LDFLAGS} +COMPILE.S?= ${CC} ${AFLAGS} ${CPPFLAGS} -c +LINK.S?= ${CC} ${AFLAGS} ${CPPFLAGS} ${LDFLAGS} # at least gcc 2.95 on UnixWare has no internal macro to identify the system .if exists(/usr/local/bin/gcc) -CC ?= gcc -pipe -DUNIXWARE -DBG ?= -O -g -STATIC ?= -static +CC?= gcc -pipe -DUNIXWARE +DBG?= -O -g +STATIC?= -static .else -CC ?= cc -DBG ?= -g -STATIC ?= -Bstatic # XXX: don't know about UDK compilers +CC?= cc +DBG?= -g +STATIC?= -Bstatic # XXX: don't know about UDK compilers .endif -CFLAGS ?= ${DBG} -COMPILE.c ?= ${CC} ${CFLAGS} ${CPPFLAGS} -c -LINK.c ?= ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} +CFLAGS?= ${DBG} +COMPILE.c?= ${CC} ${CFLAGS} ${CPPFLAGS} -c +LINK.c?= ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} .if exists(/usr/local/bin/g++) -CXX ?= g++ -DUNIXWARE +CXX?= g++ -DUNIXWARE .else -CXX ?= c++ # XXX: don't know about UDK compilers +CXX?= c++ # XXX: don't know about UDK compilers .endif -CXXFLAGS ?= ${CFLAGS} -COMPILE.cc ?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c -LINK.cc ?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS} +CXXFLAGS?= ${CFLAGS} +COMPILE.cc?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c +LINK.cc?= ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${LDFLAGS} -CPP ?= /usr/ccs/lib/cpp +CPP?= /usr/ccs/lib/cpp .if defined(DESTDIR) CPPFLAGS+= -nostdinc -idirafter ${DESTDIR}/usr/include .endif -MK_DEP ?= mkdeps.sh -N +MK_DEP?= mkdeps.sh -N .if exists(/usr/local/bin/g77) -FC ?= g77 +FC?= g77 .else -FC ?= f77 # XXX: don't know about UDK compilers +FC?= f77 # XXX: don't know about UDK compilers .endif -FFLAGS ?= -O -RFLAGS ?= -COMPILE.f ?= ${FC} ${FFLAGS} -c -LINK.f ?= ${FC} ${FFLAGS} ${LDFLAGS} -COMPILE.F ?= ${FC} ${FFLAGS} ${CPPFLAGS} -c -LINK.F ?= ${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS} -COMPILE.r ?= ${FC} ${FFLAGS} ${RFLAGS} -c -LINK.r ?= ${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS} - -INSTALL ?= /usr/ucb/install # BSD install - -LEX ?= lex -LFLAGS ?= -LEX.l ?= ${LEX} ${LFLAGS} - -LD ?= ld -LDFLAGS ?= - -LIBC ?= ${DESTDIR}/usr/ccs/lib/libc.a -LIBCOMPAT ?= -LIBCRYPT ?= ${DESTDIR}/usr/lib/libcrypt.a -LIBCURSES ?= ${DESTDIR}/usr/ccs/lib/libcurses.a -LIBDBM ?= -LIBDES ?= -LIBEDIT ?= -LIBGCC ?= -LIBKDB ?= -LIBKRB ?= -LIBKVM ?= -LIBL ?= ${DESTDIR}/usr/ccs/lib/libl.a -LIBM ?= ${DESTDIR}/usr/ccs/lib/libm.a -LIBMP ?= -LIBPC ?= -LIBPCAP ?= -LIBPLOT ?= -LIBRESOLV ?= -LIBRPCSVC ?= ${DESTDIR}/usr/lib/librpcsvc.a -LIBSKEY ?= ${DESTDIR}/usr/lib/libskey.a -LIBTERMCAP ?= ${DESTDIR}/usr/ccs/lib/libtermcap.a -LIBUTIL ?= -LIBWRAP ?= -LIBY ?= ${DESTDIR}/usr/ccs/lib/liby.a -LIBZ ?= - -LINT ?= lint -LINTFLAGS ?= -pF - -LORDER ?= lorder - -NM ?= nm - -PC ?= pc # XXX: UDK probably does not have pc -PFLAGS ?= -COMPILE.p ?= ${PC} ${PFLAGS} ${CPPFLAGS} -c -LINK.p ?= ${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS} - -SIZE ?= size - -TSORT ?= tsort +FFLAGS?= -O +RFLAGS?= +COMPILE.f?= ${FC} ${FFLAGS} -c +LINK.f?= ${FC} ${FFLAGS} ${LDFLAGS} +COMPILE.F?= ${FC} ${FFLAGS} ${CPPFLAGS} -c +LINK.F?= ${FC} ${FFLAGS} ${CPPFLAGS} ${LDFLAGS} +COMPILE.r?= ${FC} ${FFLAGS} ${RFLAGS} -c +LINK.r?= ${FC} ${FFLAGS} ${RFLAGS} ${LDFLAGS} + +INSTALL?= /usr/ucb/install # BSD install + +LEX?= lex +LFLAGS?= +LEX.l?= ${LEX} ${LFLAGS} + +LD?= ld +LDFLAGS?= + +LIBC?= ${DESTDIR}/usr/ccs/lib/libc.a +LIBCOMPAT?= +LIBCRYPT?= ${DESTDIR}/usr/lib/libcrypt.a +LIBCURSES?= ${DESTDIR}/usr/ccs/lib/libcurses.a +LIBDBM?= +LIBDES?= +LIBEDIT?= +LIBGCC?= +LIBKDB?= +LIBKRB?= +LIBKVM?= +LIBL?= ${DESTDIR}/usr/ccs/lib/libl.a +LIBM?= ${DESTDIR}/usr/ccs/lib/libm.a +LIBMP?= +LIBPC?= +LIBPCAP?= +LIBPLOT?= +LIBRESOLV?= +LIBRPCSVC?= ${DESTDIR}/usr/lib/librpcsvc.a +LIBSKEY?= ${DESTDIR}/usr/lib/libskey.a +LIBTERMCAP?= ${DESTDIR}/usr/ccs/lib/libtermcap.a +LIBUTIL?= +LIBWRAP?= +LIBY?= ${DESTDIR}/usr/ccs/lib/liby.a +LIBZ?= + +LINT?= lint +LINTFLAGS?= -pF + +LORDER?= lorder + +NM?= nm + +PC?= pc # XXX: UDK probably does not have pc +PFLAGS?= +COMPILE.p?= ${PC} ${PFLAGS} ${CPPFLAGS} -c +LINK.p?= ${PC} ${PFLAGS} ${CPPFLAGS} ${LDFLAGS} + +SIZE?= size + +TSORT?= tsort .if exists(/usr/local/bin/bison) -YACC ?= bison -y +YACC?= bison -y .else -YACC ?= yacc +YACC?= yacc .endif -YFLAGS ?= -d -YACC.y ?= ${YACC} ${YFLAGS} +YFLAGS?= -d +YACC.y?= ${YACC} ${YFLAGS} # C .c: diff --git a/contrib/bmake/nonints.h b/contrib/bmake/nonints.h index 3126650c9b59..ae9869d6e8d6 100644 --- a/contrib/bmake/nonints.h +++ b/contrib/bmake/nonints.h @@ -1,4 +1,4 @@ -/* $NetBSD: nonints.h,v 1.78 2020/07/03 07:40:13 rillig Exp $ */ +/* $NetBSD: nonints.h,v 1.75 2020/04/25 18:20:57 christos Exp $ */ /*- * Copyright (c) 1988, 1989, 1990, 1993 @@ -139,7 +139,7 @@ Lst Parse_MainName(void); char *str_concat(const char *, const char *, int); char **brk_string(const char *, int *, Boolean, char **); char *Str_FindSubstring(const char *, const char *); -Boolean Str_Match(const char *, const char *); +int Str_Match(const char *, const char *); char *Str_SYSVMatch(const char *, const char *, size_t *, Boolean *); void Str_SYSVSubst(Buffer *, char *, char *, size_t, Boolean); @@ -185,20 +185,13 @@ void Targ_Propagate(void); void Targ_Propagate_Wait(void); /* var.c */ - -typedef enum { - VARF_UNDEFERR = 1, - VARF_WANTRES = 2, - VARF_ASSIGN = 4 -} Varf_Flags; - void Var_Delete(const char *, GNode *); -void Var_Set(const char *, const char *, GNode *); +void Var_Set(const char *, const char *, GNode *, int); void Var_Append(const char *, const char *, GNode *); Boolean Var_Exists(const char *, GNode *); char *Var_Value(const char *, GNode *, char **); -char *Var_Parse(const char *, GNode *, Varf_Flags, int *, void **); -char *Var_Subst(const char *, const char *, GNode *, Varf_Flags); +char *Var_Parse(const char *, GNode *, int, int *, void **); +char *Var_Subst(const char *, const char *, GNode *, int); char *Var_GetTail(const char *); char *Var_GetHead(const char *); void Var_Init(void); diff --git a/contrib/bmake/parse.c b/contrib/bmake/parse.c index 348595824507..146ce13c647e 100644 --- a/contrib/bmake/parse.c +++ b/contrib/bmake/parse.c @@ -1,4 +1,4 @@ -/* $NetBSD: parse.c,v 1.236 2020/07/03 08:13:23 rillig Exp $ */ +/* $NetBSD: parse.c,v 1.233 2019/09/26 21:09:55 sjg Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -69,14 +69,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: parse.c,v 1.236 2020/07/03 08:13:23 rillig Exp $"; +static char rcsid[] = "$NetBSD: parse.c,v 1.233 2019/09/26 21:09:55 sjg Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)parse.c 8.3 (Berkeley) 3/19/94"; #else -__RCSID("$NetBSD: parse.c,v 1.236 2020/07/03 08:13:23 rillig Exp $"); +__RCSID("$NetBSD: parse.c,v 1.233 2019/09/26 21:09:55 sjg Exp $"); #endif #endif /* not lint */ #endif @@ -657,14 +657,14 @@ ParseFindKeyword(const char *str) diff = strcmp(str, parseKeywords[cur].name); if (diff == 0) { - return cur; + return (cur); } else if (diff < 0) { end = cur - 1; } else { start = cur + 1; } } while (start <= end); - return -1; + return (-1); } /*- @@ -889,7 +889,7 @@ ParseLinkSrc(void *pgnp, void *cgnp) Targ_PrintNode(pgn, 0); Targ_PrintNode(cgn, 0); } - return 0; + return (0); } /*- @@ -926,7 +926,7 @@ ParseDoOp(void *gnp, void *opp) !OP_NOP(gn->type) && !OP_NOP(op)) { Parse_Error(PARSE_FATAL, "Inconsistent operator for %s", gn->name); - return 1; + return (1); } if ((op == OP_DOUBLEDEP) && ((gn->type & OP_OPMASK) == OP_DOUBLEDEP)) { @@ -970,7 +970,7 @@ ParseDoOp(void *gnp, void *opp) gn->type |= op; } - return 0; + return (0); } /*- @@ -1146,7 +1146,7 @@ static int ParseAddDir(void *path, void *name) { (void)Dir_AddDir((Lst) path, (char *)name); - return 0; + return(0); } /*- @@ -1605,7 +1605,7 @@ ParseDoDependency(char *line) break; #ifdef POSIX case Posix: - Var_Set("%POSIX", "1003.2", VAR_GLOBAL); + Var_Set("%POSIX", "1003.2", VAR_GLOBAL, 0); break; #endif default: @@ -1980,13 +1980,13 @@ Parse_DoVar(char *line, GNode *ctxt) * so that it gets substituted! */ if (!Var_Exists(line, ctxt)) - Var_Set(line, "", ctxt); + Var_Set(line, "", ctxt, 0); cp = Var_Subst(NULL, cp, ctxt, VARF_WANTRES|VARF_ASSIGN); oldVars = oldOldVars; freeCp = TRUE; - Var_Set(line, cp, ctxt); + Var_Set(line, cp, ctxt, 0); } else if (type == VAR_SHELL) { char *res; const char *error; @@ -2002,7 +2002,7 @@ Parse_DoVar(char *line, GNode *ctxt) } res = Cmd_Exec(cp, &error); - Var_Set(line, res, ctxt); + Var_Set(line, res, ctxt, 0); free(res); if (error) @@ -2011,7 +2011,7 @@ Parse_DoVar(char *line, GNode *ctxt) /* * Normal assignment -- just do it. */ - Var_Set(line, cp, ctxt); + Var_Set(line, cp, ctxt, 0); } if (strcmp(line, MAKEOVERRIDES) == 0) Main_ExportMAKEFLAGS(FALSE); /* re-export MAKEFLAGS */ @@ -2115,7 +2115,7 @@ ParseAddCmd(void *gnp, void *cmd) gn->name); #endif } - return 0; + return(0); } /*- @@ -2367,9 +2367,9 @@ ParseSetIncludedFile(void) char *pd, *dp = NULL; pf = Var_Value(".PARSEFILE", VAR_GLOBAL, &fp); - Var_Set(".INCLUDEDFROMFILE", pf, VAR_GLOBAL); + Var_Set(".INCLUDEDFROMFILE", pf, VAR_GLOBAL, 0); pd = Var_Value(".PARSEDIR", VAR_GLOBAL, &dp); - Var_Set(".INCLUDEDFROMDIR", pd, VAR_GLOBAL); + Var_Set(".INCLUDEDFROMDIR", pd, VAR_GLOBAL, 0); if (DEBUG(PARSE)) fprintf(debug_file, "%s: ${.INCLUDEDFROMDIR} = `%s' " @@ -2401,16 +2401,16 @@ ParseSetParseFile(const char *filename) slash = strrchr(filename, '/'); if (slash == NULL) { - Var_Set(".PARSEDIR", pd = curdir, VAR_GLOBAL); - Var_Set(".PARSEFILE", pf = filename, VAR_GLOBAL); + Var_Set(".PARSEDIR", pd = curdir, VAR_GLOBAL, 0); + Var_Set(".PARSEFILE", pf = filename, VAR_GLOBAL, 0); dirname= NULL; } else { len = slash - filename; dirname = bmake_malloc(len + 1); memcpy(dirname, filename, len); dirname[len] = '\0'; - Var_Set(".PARSEDIR", pd = dirname, VAR_GLOBAL); - Var_Set(".PARSEFILE", pf = slash + 1, VAR_GLOBAL); + Var_Set(".PARSEDIR", pd = dirname, VAR_GLOBAL, 0); + Var_Set(".PARSEFILE", pf = slash + 1, VAR_GLOBAL, 0); } if (DEBUG(PARSE)) fprintf(debug_file, "%s: ${.PARSEDIR} = `%s' ${.PARSEFILE} = `%s'\n", @@ -2431,7 +2431,7 @@ ParseTrackInput(const char *name) char *ep; char *fp = NULL; size_t name_len = strlen(name); - + old = Var_Value(MAKE_MAKEFILES, VAR_GLOBAL, &fp); if (old) { ep = old + strlen(old) - name_len; @@ -2772,7 +2772,7 @@ ParseEOF(void) /* Restore the PARSEDIR/PARSEFILE variables */ ParseSetParseFile(curFile->fname); - return CONTINUE; + return (CONTINUE); } #define PARSE_RAW 1 @@ -3009,7 +3009,7 @@ ParseReadLine(void) /* Read next line from for-loop buffer */ continue; } - return line; + return (line); } } @@ -3119,7 +3119,7 @@ Parse_File(const char *name, int fd) strncmp(cp, "warning", 7) == 0) { if (ParseMessage(cp)) continue; - } + } } if (*line == '\t') { @@ -3350,7 +3350,7 @@ Parse_MainName(void) else (void)Lst_AtEnd(mainList, mainNode); Var_Append(".TARGETS", mainNode->name, VAR_GLOBAL); - return mainList; + return (mainList); } /*- diff --git a/contrib/bmake/str.c b/contrib/bmake/str.c index c3138b67b95b..d3d7994a0868 100644 --- a/contrib/bmake/str.c +++ b/contrib/bmake/str.c @@ -1,4 +1,4 @@ -/* $NetBSD: str.c,v 1.51 2020/07/03 07:40:13 rillig Exp $ */ +/* $NetBSD: str.c,v 1.42 2020/05/06 02:30:10 christos Exp $ */ /*- * Copyright (c) 1988, 1989, 1990, 1993 @@ -69,14 +69,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: str.c,v 1.51 2020/07/03 07:40:13 rillig Exp $"; +static char rcsid[] = "$NetBSD: str.c,v 1.42 2020/05/06 02:30:10 christos Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)str.c 5.8 (Berkeley) 6/1/90"; #else -__RCSID("$NetBSD: str.c,v 1.51 2020/07/03 07:40:13 rillig Exp $"); +__RCSID("$NetBSD: str.c,v 1.42 2020/05/06 02:30:10 christos Exp $"); #endif #endif /* not lint */ #endif @@ -119,7 +119,7 @@ str_concat(const char *s1, const char *s2, int flags) /* copy second string plus EOS into place */ memcpy(result + len1, s2, len2 + 1); - return result; + return(result); } /*- @@ -304,7 +304,7 @@ Str_FindSubstring(const char *string, const char *substring) * substring. */ - for (b = substring; *string != 0; string++) { + for (b = substring; *string != 0; string += 1) { if (*string != *b) continue; a = string; @@ -320,110 +320,121 @@ Str_FindSubstring(const char *string, const char *substring) } /* - * Str_Match -- Test if a string matches a pattern like "*.[ch]". + * Str_Match -- * - * XXX this function does not detect or report malformed patterns. + * See if a particular string matches a particular pattern. * - * Results: - * Non-zero is returned if string matches the pattern, 0 otherwise. The - * matching operation permits the following special characters in the - * pattern: *?\[] (as in fnmatch(3)). + * Results: Non-zero is returned if string matches pattern, 0 otherwise. The + * matching operation permits the following special characters in the + * pattern: *?\[] (see the man page for details on what these mean). + * + * XXX this function does not detect or report malformed patterns. * * Side effects: None. */ -Boolean -Str_Match(const char *str, const char *pat) +int +Str_Match(const char *string, const char *pattern) { + char c2; + for (;;) { /* * See if we're at the end of both the pattern and the * string. If, we succeeded. If we're at the end of the * pattern but not at the end of the string, we failed. */ - if (*pat == 0) - return *str == 0; - if (*str == 0 && *pat != '*') - return FALSE; - + if (*pattern == 0) + return(!*string); + if (*string == 0 && *pattern != '*') + return(0); /* - * A '*' in the pattern matches any substring. We handle this - * by calling ourselves for each suffix of the string. + * Check for a "*" as the next pattern character. It matches + * any substring. We handle this by calling ourselves + * recursively for each postfix of string, until either we + * match or we reach the end of the string. */ - if (*pat == '*') { - pat++; - while (*pat == '*') - pat++; - if (*pat == 0) - return TRUE; - while (*str != 0) { - if (Str_Match(str, pat)) - return TRUE; - str++; + if (*pattern == '*') { + pattern += 1; + if (*pattern == 0) + return(1); + while (*string != 0) { + if (Str_Match(string, pattern)) + return(1); + ++string; } - return FALSE; + return(0); } - - /* A '?' in the pattern matches any single character. */ - if (*pat == '?') + /* + * Check for a "?" as the next pattern character. It matches + * any single character. + */ + if (*pattern == '?') goto thisCharOK; - /* - * A '[' in the pattern matches a character from a list. - * The '[' is followed by the list of acceptable characters, - * or by ranges (two characters separated by '-'). In these - * character lists, the backslash is an ordinary character. + * Check for a "[" as the next pattern character. It is + * followed by a list of characters that are acceptable, or + * by a range (two characters separated by "-"). */ - if (*pat == '[') { - Boolean neg = pat[1] == '^'; - pat += 1 + neg; - + if (*pattern == '[') { + int nomatch; + + ++pattern; + if (*pattern == '^') { + ++pattern; + nomatch = 1; + } else + nomatch = 0; for (;;) { - if (*pat == ']' || *pat == 0) { - if (neg) + if ((*pattern == ']') || (*pattern == 0)) { + if (nomatch) break; - return FALSE; + return(0); } - if (*pat == *str) + if (*pattern == *string) break; - if (pat[1] == '-') { - if (pat[2] == 0) - return neg; - if (*pat <= *str && pat[2] >= *str) + if (pattern[1] == '-') { + c2 = pattern[2]; + if (c2 == 0) + return(nomatch); + if ((*pattern <= *string) && + (c2 >= *string)) break; - if (*pat >= *str && pat[2] <= *str) + if ((*pattern >= *string) && + (c2 <= *string)) break; - pat += 2; + pattern += 2; } - pat++; + ++pattern; } - if (neg && *pat != ']' && *pat != 0) - return FALSE; - while (*pat != ']' && *pat != 0) - pat++; - if (*pat == 0) - pat--; + if (nomatch && (*pattern != ']') && (*pattern != 0)) + return 0; + while ((*pattern != ']') && (*pattern != 0)) + ++pattern; + if (*pattern == 0) + --pattern; goto thisCharOK; } - /* - * A backslash in the pattern matches the character following - * it exactly. + * If the next pattern character is '/', just strip off the + * '/' so we do exact matching on the character that follows. */ - if (*pat == '\\') { - pat++; - if (*pat == 0) - return FALSE; + if (*pattern == '\\') { + ++pattern; + if (*pattern == 0) + return(0); } - - if (*pat != *str) - return FALSE; - - thisCharOK: - pat++; - str++; + /* + * There's no special character. Just make sure that the + * next characters of each string match. + */ + if (*pattern != *string) + return(0); +thisCharOK: ++pattern; + ++string; } } + /*- *----------------------------------------------------------------------- * Str_SYSVMatch -- diff --git a/contrib/bmake/suff.c b/contrib/bmake/suff.c index 5a40b73d788d..df0306af131e 100644 --- a/contrib/bmake/suff.c +++ b/contrib/bmake/suff.c @@ -1,4 +1,4 @@ -/* $NetBSD: suff.c,v 1.88 2020/07/03 08:02:55 rillig Exp $ */ +/* $NetBSD: suff.c,v 1.86 2017/04/16 20:38:18 riastradh Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -69,14 +69,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: suff.c,v 1.88 2020/07/03 08:02:55 rillig Exp $"; +static char rcsid[] = "$NetBSD: suff.c,v 1.86 2017/04/16 20:38:18 riastradh Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)suff.c 8.4 (Berkeley) 3/21/94"; #else -__RCSID("$NetBSD: suff.c,v 1.88 2020/07/03 08:02:55 rillig Exp $"); +__RCSID("$NetBSD: suff.c,v 1.86 2017/04/16 20:38:18 riastradh Exp $"); #endif #endif /* not lint */ #endif @@ -266,7 +266,7 @@ SuffStrIsPrefix(const char *pref, const char *str) str++; } - return *pref ? NULL : str; + return (*pref ? NULL : str); } /*- @@ -304,7 +304,7 @@ SuffSuffIsSuffix(const Suff *s, const SuffixCmpData *sd) p2--; } - return p1 == s->name - 1 ? p2 : NULL; + return (p1 == s->name - 1 ? p2 : NULL); } /*- @@ -324,7 +324,7 @@ SuffSuffIsSuffix(const Suff *s, const SuffixCmpData *sd) static int SuffSuffIsSuffixP(const void *s, const void *sd) { - return !SuffSuffIsSuffix(s, sd); + return(!SuffSuffIsSuffix(s, sd)); } /*- @@ -347,7 +347,7 @@ SuffSuffIsSuffixP(const void *s, const void *sd) static int SuffSuffHasNameP(const void *s, const void *sname) { - return strcmp(sname, ((const Suff *)s)->name); + return (strcmp(sname, ((const Suff *)s)->name)); } /*- @@ -394,7 +394,7 @@ SuffSuffIsPrefix(const void *s, const void *str) static int SuffGNHasNameP(const void *gn, const void *name) { - return strcmp(name, ((const GNode *)gn)->name); + return (strcmp(name, ((const GNode *)gn)->name)); } /*********** Maintenance Functions ************/ @@ -632,9 +632,9 @@ SuffParseTransform(char *str, Suff **srcPtr, Suff **targPtr) */ *srcPtr = single; *targPtr = suffNull; - return TRUE; + return(TRUE); } - return FALSE; + return (FALSE); } src = (Suff *)Lst_Datum(srcLn); str2 = str + src->nameLen; @@ -646,7 +646,7 @@ SuffParseTransform(char *str, Suff **srcPtr, Suff **targPtr) if (targLn != NULL) { *srcPtr = src; *targPtr = (Suff *)Lst_Datum(targLn); - return TRUE; + return (TRUE); } } } @@ -674,7 +674,7 @@ Suff_IsTransform(char *str) { Suff *src, *targ; - return SuffParseTransform(str, &src, &targ); + return (SuffParseTransform(str, &src, &targ)); } /*- @@ -738,7 +738,7 @@ Suff_AddTransform(char *line) SuffInsert(t->children, s); SuffInsert(s->parents, t); - return gn; + return (gn); } /*- @@ -860,7 +860,7 @@ SuffRebuildGraph(void *transformp, void *sp) s2 = (Suff *)Lst_Datum(ln); SuffInsert(s2->children, s); SuffInsert(s->parents, s2); - return 0; + return(0); } } @@ -889,7 +889,7 @@ SuffRebuildGraph(void *transformp, void *sp) SuffInsert(s2->parents, s); } } - return 0; + return(0); } /*- @@ -1035,7 +1035,7 @@ Suff_GetPath(char *sname) return NULL; } else { s = (Suff *)Lst_Datum(ln); - return s->searchPath; + return (s->searchPath); } } @@ -1093,9 +1093,9 @@ Suff_DoPaths(void) } } - Var_Set(".INCLUDES", ptr = Dir_MakeFlags("-I", inIncludes), VAR_GLOBAL); + Var_Set(".INCLUDES", ptr = Dir_MakeFlags("-I", inIncludes), VAR_GLOBAL, 0); free(ptr); - Var_Set(".LIBS", ptr = Dir_MakeFlags("-L", inLibs), VAR_GLOBAL); + Var_Set(".LIBS", ptr = Dir_MakeFlags("-L", inLibs), VAR_GLOBAL, 0); free(ptr); Lst_Destroy(inIncludes, Dir_Destroy); @@ -1239,7 +1239,7 @@ SuffAddSrc(void *sp, void *lsp) fprintf(debug_file, "\n"); #endif - return 0; + return(0); } /*- @@ -1399,7 +1399,7 @@ SuffFindThem(Lst srcs, Lst slst) if (DEBUG(SUFF) && rs) { fprintf(debug_file, "got it\n"); } - return rs; + return (rs); } /*- @@ -1505,7 +1505,7 @@ SuffFindCmds(Src *targ, Lst slst) if (DEBUG(SUFF)) { fprintf(debug_file, "\tusing existing source %s\n", s->name); } - return ret; + return (ret); } /*- @@ -1831,7 +1831,7 @@ SuffApplyTransform(GNode *tGn, GNode *sGn, Suff *t, Suff *s) * called to link an OP_MEMBER and OP_ARCHV node), so return * FALSE. */ - return FALSE; + return(FALSE); } gn = (GNode *)Lst_Datum(ln); @@ -1864,7 +1864,7 @@ SuffApplyTransform(GNode *tGn, GNode *sGn, Suff *t, Suff *s) */ (void)Lst_AtEnd(sGn->iParents, tGn); - return TRUE; + return(TRUE); } @@ -1941,7 +1941,7 @@ SuffFindArchiveDeps(GNode *gn, Lst slst) */ for (i = (sizeof(copy)/sizeof(copy[0]))-1; i >= 0; i--) { char *p1; - Var_Set(copy[i], Var_Value(copy[i], mem, &p1), gn); + Var_Set(copy[i], Var_Value(copy[i], mem, &p1), gn, 0); free(p1); } @@ -1961,13 +1961,13 @@ SuffFindArchiveDeps(GNode *gn, Lst slst) /* * Set the other two local variables required for this target. */ - Var_Set(MEMBER, name, gn); - Var_Set(ARCHIVE, gn->name, gn); + Var_Set(MEMBER, name, gn, 0); + Var_Set(ARCHIVE, gn->name, gn, 0); /* * Set $@ for compatibility with other makes */ - Var_Set(TARGET, gn->name, gn); + Var_Set(TARGET, gn->name, gn, 0); /* * Now we've got the important local variables set, expand any sources @@ -2213,10 +2213,10 @@ SuffFindNormalDeps(GNode *gn, Lst slst) } } - Var_Set(TARGET, gn->path ? gn->path : gn->name, gn); + Var_Set(TARGET, gn->path ? gn->path : gn->name, gn, 0); pref = (targ != NULL) ? targ->pref : gn->name; - Var_Set(PREFIX, pref, gn); + Var_Set(PREFIX, pref, gn, 0); /* * Now we've got the important local variables set, expand any sources @@ -2246,7 +2246,7 @@ sfnd_abort: targ->suff->searchPath)); if (gn->path != NULL) { char *ptr; - Var_Set(TARGET, gn->path, gn); + Var_Set(TARGET, gn->path, gn, 0); if (targ != NULL) { /* @@ -2269,7 +2269,7 @@ sfnd_abort: else ptr = gn->path; - Var_Set(PREFIX, ptr, gn); + Var_Set(PREFIX, ptr, gn, 0); gn->path[savep] = savec; } else { @@ -2286,7 +2286,7 @@ sfnd_abort: else ptr = gn->path; - Var_Set(PREFIX, ptr, gn); + Var_Set(PREFIX, ptr, gn, 0); } } } @@ -2373,9 +2373,9 @@ sfnd_abort: */ targ->node->type |= OP_DEPS_FOUND; - Var_Set(PREFIX, targ->pref, targ->node); + Var_Set(PREFIX, targ->pref, targ->node, 0); - Var_Set(TARGET, targ->node->name, targ->node); + Var_Set(TARGET, targ->node->name, targ->node, 0); } } @@ -2458,8 +2458,8 @@ SuffFindDeps(GNode *gn, Lst slst) /* * Make sure we have these set, may get revised below. */ - Var_Set(TARGET, gn->path ? gn->path : gn->name, gn); - Var_Set(PREFIX, gn->name, gn); + Var_Set(TARGET, gn->path ? gn->path : gn->name, gn, 0); + Var_Set(PREFIX, gn->name, gn, 0); if (DEBUG(SUFF)) { fprintf(debug_file, "SuffFindDeps (%s)\n", gn->name); @@ -2488,14 +2488,14 @@ SuffFindDeps(GNode *gn, Lst slst) Arch_FindLib(gn, s->searchPath); } else { gn->suffix = NULL; - Var_Set(TARGET, gn->name, gn); + Var_Set(TARGET, gn->name, gn, 0); } /* * Because a library (-lfoo) target doesn't follow the standard * filesystem conventions, we don't set the regular variables for * the thing. .PREFIX is simply made empty... */ - Var_Set(PREFIX, "", gn); + Var_Set(PREFIX, "", gn, 0); } else { SuffFindNormalDeps(gn, slst); } diff --git a/contrib/bmake/targ.c b/contrib/bmake/targ.c index 15dc01f0e08d..01c3d1c5ecdf 100644 --- a/contrib/bmake/targ.c +++ b/contrib/bmake/targ.c @@ -1,4 +1,4 @@ -/* $NetBSD: targ.c,v 1.63 2020/07/03 08:02:55 rillig Exp $ */ +/* $NetBSD: targ.c,v 1.62 2017/04/16 19:53:58 riastradh Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -69,14 +69,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: targ.c,v 1.63 2020/07/03 08:02:55 rillig Exp $"; +static char rcsid[] = "$NetBSD: targ.c,v 1.62 2017/04/16 19:53:58 riastradh Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)targ.c 8.2 (Berkeley) 3/19/94"; #else -__RCSID("$NetBSD: targ.c,v 1.63 2020/07/03 08:02:55 rillig Exp $"); +__RCSID("$NetBSD: targ.c,v 1.62 2017/04/16 19:53:58 riastradh Exp $"); #endif #endif /* not lint */ #endif @@ -269,7 +269,7 @@ Targ_NewGN(const char *name) Lst_AtEnd(allGNs, gn); #endif - return gn; + return (gn); } #ifdef CLEANUP @@ -389,7 +389,7 @@ Targ_FindList(Lst names, int flags) nodes = Lst_Init(FALSE); if (Lst_Open(names) == FAILURE) { - return nodes; + return (nodes); } while ((ln = Lst_Next(names)) != NULL) { name = (char *)Lst_Datum(ln); @@ -406,7 +406,7 @@ Targ_FindList(Lst names, int flags) } } Lst_Close(names); - return nodes; + return (nodes); } /*- @@ -428,9 +428,9 @@ Boolean Targ_Ignore(GNode *gn) { if (ignoreErrors || gn->type & OP_IGNORE) { - return TRUE; + return (TRUE); } else { - return FALSE; + return (FALSE); } } @@ -453,9 +453,9 @@ Boolean Targ_Silent(GNode *gn) { if (beSilent || gn->type & OP_SILENT) { - return TRUE; + return (TRUE); } else { - return FALSE; + return (FALSE); } } @@ -478,9 +478,9 @@ Boolean Targ_Precious(GNode *gn) { if (allPrecious || (gn->type & (OP_PRECIOUS|OP_DOUBLEDEP))) { - return TRUE; + return (TRUE); } else { - return FALSE; + return (FALSE); } } @@ -549,7 +549,7 @@ Targ_FmtTime(time_t tm) parts = localtime(&tm); (void)strftime(buf, sizeof buf, "%k:%M:%S %b %d, %Y", parts); - return buf; + return(buf); } /*- @@ -698,7 +698,7 @@ Targ_PrintNode(void *gnp, void *passp) Lst_ForEach(gn->cohorts, Targ_PrintNode, &pass); } } - return 0; + return (0); } /*- @@ -794,7 +794,7 @@ TargPropagateNode(void *gnp, void *junk MAKE_ATTR_UNUSED) if (gn->type & OP_DOUBLEDEP) Lst_ForEach(gn->cohorts, TargPropagateCohort, gnp); - return 0; + return (0); } /*- @@ -822,7 +822,7 @@ TargPropagateCohort(void *cgnp, void *pgnp) GNode *pgn = (GNode *)pgnp; cgn->type |= pgn->type & ~OP_OPMASK; - return 0; + return (0); } /*- diff --git a/contrib/bmake/trace.c b/contrib/bmake/trace.c index 3ef210f02a8c..267177ff5618 100644 --- a/contrib/bmake/trace.c +++ b/contrib/bmake/trace.c @@ -1,4 +1,4 @@ -/* $NetBSD: trace.c,v 1.12 2020/07/03 08:13:23 rillig Exp $ */ +/* $NetBSD: trace.c,v 1.11 2008/12/28 18:31:51 christos Exp $ */ /*- * Copyright (c) 2000 The NetBSD Foundation, Inc. @@ -31,11 +31,11 @@ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: trace.c,v 1.12 2020/07/03 08:13:23 rillig Exp $"; +static char rcsid[] = "$NetBSD: trace.c,v 1.11 2008/12/28 18:31:51 christos Exp $"; #else #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: trace.c,v 1.12 2020/07/03 08:13:23 rillig Exp $"); +__RCSID("$NetBSD: trace.c,v 1.11 2008/12/28 18:31:51 christos Exp $"); #endif /* not lint */ #endif @@ -90,7 +90,7 @@ void Trace_Log(TrEvent event, Job *job) { struct timeval rightnow; - + if (trfile == NULL) return; diff --git a/contrib/bmake/unit-tests/Makefile b/contrib/bmake/unit-tests/Makefile index 0f85d9ef8dfb..5cf0212ce596 100644 --- a/contrib/bmake/unit-tests/Makefile +++ b/contrib/bmake/unit-tests/Makefile @@ -1,6 +1,6 @@ -# $Id: Makefile,v 1.58 2020/07/04 22:33:00 sjg Exp $ +# $Id: Makefile,v 1.54 2020/05/17 17:26:14 sjg Exp $ # -# $NetBSD: Makefile,v 1.59 2020/06/28 09:42:40 rillig Exp $ +# $NetBSD: Makefile,v 1.58 2020/05/17 12:36:26 rillig Exp $ # # Unit tests for make(1) # The main targets are: @@ -27,7 +27,6 @@ UNIT_TESTS:= ${.PARSEDIR} TESTNAMES= \ comment \ cond-late \ - cond-short \ cond1 \ cond2 \ dollar \ @@ -105,9 +104,6 @@ LANG= C SED_CMDS.varshell = -e 's,^[a-z]*sh: ,,' \ -e '/command/s,No such.*,not found,' -# the detailed error message can vary across systems -SED_CMDS.modmisc = -e 's,\(substitution error:\).*,\1 details omitted,' - # the tests are actually done with sub-makes. .SUFFIXES: .mk .rawout .out .mk.rawout: diff --git a/contrib/bmake/unit-tests/cond-short.exp b/contrib/bmake/unit-tests/cond-short.exp index 0c8c47a449fe..e69de29bb2d1 100644 --- a/contrib/bmake/unit-tests/cond-short.exp +++ b/contrib/bmake/unit-tests/cond-short.exp @@ -1,10 +0,0 @@ -expected and -expected and exists -expected and empty -expected U23 condition -expected VAR23 -expected M pattern -expected or -expected or exists -expected or empty -exit status 0 diff --git a/contrib/bmake/unit-tests/cond-short.mk b/contrib/bmake/unit-tests/cond-short.mk index 9ff5f54b715c..e69de29bb2d1 100644 --- a/contrib/bmake/unit-tests/cond-short.mk +++ b/contrib/bmake/unit-tests/cond-short.mk @@ -1,101 +0,0 @@ -# $NetBSD: cond-short.mk,v 1.6 2020/07/02 16:37:56 rillig Exp $ -# -# Demonstrates that in conditions, the right-hand side of an && or || -# is only evaluated if it can actually influence the result. -# -# Between 2015-10-11 and 2020-06-28, the right-hand side of an && or || -# operator was always evaluated, which was wrong. -# - -# The && operator. - -.if 0 && ${echo "unexpected and" 1>&2 :L:sh} -.endif - -.if 1 && ${echo "expected and" 1>&2 :L:sh} -.endif - -.if 0 && exists(nonexistent${echo "unexpected and exists" 1>&2 :L:sh}) -.endif - -.if 1 && exists(nonexistent${echo "expected and exists" 1>&2 :L:sh}) -.endif - -.if 0 && empty(${echo "unexpected and empty" 1>&2 :L:sh}) -.endif - -.if 1 && empty(${echo "expected and empty" 1>&2 :L:sh}) -.endif - -# "VAR U11" is not evaluated; it was evaluated before 2020-07-02. -# The whole !empty condition is only parsed and then discarded. -VAR= ${VAR${:U11${echo "unexpected VAR U11" 1>&2 :L:sh}}} -VAR13= ${VAR${:U12${echo "unexpected VAR13" 1>&2 :L:sh}}} -.if 0 && !empty(VAR${:U13${echo "unexpected U13 condition" 1>&2 :L:sh}}) -.endif - -VAR= ${VAR${:U21${echo "unexpected VAR U21" 1>&2 :L:sh}}} -VAR23= ${VAR${:U22${echo "expected VAR23" 1>&2 :L:sh}}} -.if 1 && !empty(VAR${:U23${echo "expected U23 condition" 1>&2 :L:sh}}) -.endif -VAR= # empty again, for the following tests - -# The :M modifier is only parsed, not evaluated. -# Before 2020-07-02, it was wrongly evaluated. -.if 0 && !empty(VAR:M${:U${echo "unexpected M pattern" 1>&2 :L:sh}}) -.endif - -.if 1 && !empty(VAR:M${:U${echo "expected M pattern" 1>&2 :L:sh}}) -.endif - -.if 0 && !empty(VAR:S,from,${:U${echo "unexpected S modifier" 1>&2 :L:sh}},) -.endif - -.if 0 && !empty(VAR:C,from,${:U${echo "unexpected C modifier" 1>&2 :L:sh}},) -.endif - -.if 0 && !empty("" == "" :? ${:U${echo "unexpected ? modifier" 1>&2 :L:sh}} :) -.endif - -.if 0 && !empty(VAR:old=${:U${echo "unexpected = modifier" 1>&2 :L:sh}}) -.endif - -.if 0 && !empty(1 2 3:L:@var@${:U${echo "unexpected @ modifier" 1>&2 :L:sh}}@) -.endif - -.if 0 && !empty(:U${:!echo "unexpected exclam modifier" 1>&2 !}) -.endif - -# The || operator. - -.if 1 || ${echo "unexpected or" 1>&2 :L:sh} -.endif - -.if 0 || ${echo "expected or" 1>&2 :L:sh} -.endif - -.if 1 || exists(nonexistent${echo "unexpected or exists" 1>&2 :L:sh}) -.endif - -.if 0 || exists(nonexistent${echo "expected or exists" 1>&2 :L:sh}) -.endif - -.if 1 || empty(${echo "unexpected or empty" 1>&2 :L:sh}) -.endif - -.if 0 || empty(${echo "expected or empty" 1>&2 :L:sh}) -.endif - -# Unreachable nested conditions are skipped completely as well. - -.if 0 -. if ${echo "unexpected nested and" 1>&2 :L:sh} -. endif -.endif - -.if 1 -.elif ${echo "unexpected nested or" 1>&2 :L:sh} -.endif - -all: - @:;: diff --git a/contrib/bmake/unit-tests/modmatch.mk b/contrib/bmake/unit-tests/modmatch.mk index c631bbd3440f..45199287acdb 100644 --- a/contrib/bmake/unit-tests/modmatch.mk +++ b/contrib/bmake/unit-tests/modmatch.mk @@ -15,7 +15,7 @@ res = no res = OK .endif -all: show-libs check-cclass slow +all: show-libs check-cclass show-libs: @for x in $X; do ${.MAKE} -f ${MAKEFILE} show LIB=$$x; done @@ -32,8 +32,3 @@ check-cclass: @echo Upper=${LIST:M[A-Z]*} @echo Lower=${LIST:M[^A-Z]*} @echo nose=${LIST:M[^s]*[ex]} - -# Before 2020-06-13, this expression took quite a long time in Str_Match, -# calling itself 601080390 times for 16 asterisks. -slow: .PHONY - @:;: ${:U****************:M****************b:Q} diff --git a/contrib/bmake/unit-tests/modmisc.exp b/contrib/bmake/unit-tests/modmisc.exp index fbe4edeab8b4..e406647bc41f 100644 --- a/contrib/bmake/unit-tests/modmisc.exp +++ b/contrib/bmake/unit-tests/modmisc.exp @@ -7,29 +7,4 @@ path_/usr/xbin=/opt/xbin/ paths=/bin /tmp / /no/such/dir /opt/xbin PATHS=/BIN /TMP / /NO/SUCH/DIR /OPT/XBIN The answer is 42 -dirname of 'a/b/c def a.b.c a.b/c a a.a .gitignore a a.a' is 'a/b . . a.b . . . . .' -basename of 'a/b/c def a.b.c a.b/c a a.a .gitignore a a.a' is 'c def a.b.c c a a.a .gitignore a a.a' -suffix of 'a/b/c def a.b.c a.b/c a a.a .gitignore a a.a' is 'c b/c a gitignore a' -root of 'a/b/c def a.b.c a.b/c a a.a .gitignore a a.a' is 'a/b/c def a.b a a a a a' -S: -C: -@: -S:empty -C:empty -@: -:a b b c: -:a b b c: -: b c: -:a c: -:x__ 3 x__ 3: -:a b b c: -:a b b c: -: b c: -make: RE substitution error: details omitted -make: Unclosed substitution for (, missing) -:C,word,____,:Q}: -:a c: -:x__ 3 x__ 3: -:+one+ +two+ +three+: -mod-at-resolve:w1d2d3w w2i3w w1i2d3 2i${RES3}w w1d2d3 2i${RES3} 1i${RES2}w: exit status 0 diff --git a/contrib/bmake/unit-tests/modmisc.mk b/contrib/bmake/unit-tests/modmisc.mk index 8c20304ba1ef..043498fb1af4 100644 --- a/contrib/bmake/unit-tests/modmisc.mk +++ b/contrib/bmake/unit-tests/modmisc.mk @@ -1,4 +1,4 @@ -# $Id: modmisc.mk,v 1.1.1.2 2020/07/04 17:52:46 sjg Exp $ +# $Id: modmisc.mk,v 1.1.1.1 2014/08/30 18:57:18 sjg Exp $ # # miscellaneous modifier tests @@ -15,8 +15,7 @@ MOD_HOMES=S,/home/,/homes/, MOD_OPT=@d@$${exists($$d):?$$d:$${d:S,/usr,/opt,}}@ MOD_SEP=S,:, ,g -all: modvar modvarloop modsysv mod-HTE emptyvar undefvar -all: mod-S mod-C mod-at-varname mod-at-resolve +all: modvar modvarloop modsysv modsysv: @echo "The answer is ${libfoo.a:L:libfoo.a=42}" @@ -37,59 +36,3 @@ modvarloop: @echo "path_/usr/xbin=${path_/usr/xbin}" @echo "paths=${paths}" @echo "PATHS=${paths:tu}" - -PATHNAMES= a/b/c def a.b.c a.b/c a a.a .gitignore a a.a -mod-HTE: - @echo "dirname of '"${PATHNAMES:Q}"' is '"${PATHNAMES:H:Q}"'" - @echo "basename of '"${PATHNAMES:Q}"' is '"${PATHNAMES:T:Q}"'" - @echo "suffix of '"${PATHNAMES:Q}"' is '"${PATHNAMES:E:Q}"'" - @echo "root of '"${PATHNAMES:Q}"' is '"${PATHNAMES:R:Q}"'" - -# When a modifier is applied to the "" variable, the result is discarded. -emptyvar: - @echo S:${:S,^$,empty,} - @echo C:${:C,^$,empty,} - @echo @:${:@var@${var}@} - -# The :U modifier turns even the "" variable into something that has a value. -# The resulting variable is empty, but is still considered to contain a -# single empty word. This word can be accessed by the :S and :C modifiers, -# but not by the :@ modifier since it explicitly skips empty words. -undefvar: - @echo S:${:U:S,^$,empty,} - @echo C:${:U:C,^$,empty,} - @echo @:${:U:@var@empty@} - -mod-S: - @echo :${:Ua b b c:S,a b,,:Q}: - @echo :${:Ua b b c:S,a b,,1:Q}: - @echo :${:Ua b b c:S,a b,,W:Q}: - @echo :${:Ua b b c:S,b,,g:Q}: - @echo :${:U1 2 3 1 2 3:S,1 2,___,Wg:S,_,x,:Q}: - -mod-C: - @echo :${:Ua b b c:C,a b,,:Q}: - @echo :${:Ua b b c:C,a b,,1:Q}: - @echo :${:Ua b b c:C,a b,,W:Q}: - @echo :${:Uword1 word2:C,****,____,g:C,word,____,:Q}: - @echo :${:Ua b b c:C,b,,g:Q}: - @echo :${:U1 2 3 1 2 3:C,1 2,___,Wg:C,_,x,:Q}: - -# In the :@ modifier, the name of the loop variable can even be generated -# dynamically. There's no practical use-case for this, and hopefully nobody -# will ever depend on this, but technically it's possible. -mod-at-varname: - @echo :${:Uone two three:@${:Ubar:S,b,v,}@+${var}+@:Q}: - -# The :@ modifier resolves the variables a little more often than expected. -# In particular, it resolves _all_ variables from the context, and not only -# the loop variable (in this case v). -# -# The d means direct reference, the i means indirect reference. -RESOLVE= ${RES1} $${RES1} -RES1= 1d${RES2} 1i$${RES2} -RES2= 2d${RES3} 2i$${RES3} -RES3= 3 - -mod-at-resolve: - @echo $@:${RESOLVE:@v@w${v}w@:Q}: diff --git a/contrib/bmake/unit-tests/modorder.exp b/contrib/bmake/unit-tests/modorder.exp index 8e0aad2e2027..411742738d63 100644 --- a/contrib/bmake/unit-tests/modorder.exp +++ b/contrib/bmake/unit-tests/modorder.exp @@ -1,6 +1,5 @@ LIST = one two three four five six seven eight nine ten LIST:O = eight five four nine one seven six ten three two -LIST:Or = two three ten six seven one nine four five eight LIST:Ox = Ok LIST:O:Ox = Ok LISTX = Ok diff --git a/contrib/bmake/unit-tests/modorder.mk b/contrib/bmake/unit-tests/modorder.mk index 89e64b43c57c..0f809391712f 100644 --- a/contrib/bmake/unit-tests/modorder.mk +++ b/contrib/bmake/unit-tests/modorder.mk @@ -1,4 +1,4 @@ -# $NetBSD: modorder.mk,v 1.3 2020/06/09 01:48:17 sjg Exp $ +# $NetBSD: modorder.mk,v 1.2 2020/01/07 22:42:14 rillig Exp $ LIST= one two three four five six seven eight nine ten LISTX= ${LIST:Ox} @@ -10,7 +10,6 @@ TEST_RESULT= && echo Ok || echo Failed all: @echo "LIST = ${LIST}" @echo "LIST:O = ${LIST:O}" - @echo "LIST:Or = ${LIST:Or}" # Note that 1 in every 10! trials two independently generated # randomized orderings will be the same. The test framework doesn't # support checking probabilistic output, so we accept that each of the diff --git a/contrib/bmake/unit-tests/sysv.exp b/contrib/bmake/unit-tests/sysv.exp index 780a187783f3..610f97c39e85 100644 --- a/contrib/bmake/unit-tests/sysv.exp +++ b/contrib/bmake/unit-tests/sysv.exp @@ -12,5 +12,4 @@ asam.c.c asam.c a.c.c -ax:Q b c d eb exit status 0 diff --git a/contrib/bmake/unit-tests/sysv.mk b/contrib/bmake/unit-tests/sysv.mk index 3a987441ee42..2bd128eb7130 100644 --- a/contrib/bmake/unit-tests/sysv.mk +++ b/contrib/bmake/unit-tests/sysv.mk @@ -1,4 +1,4 @@ -# $Id: sysv.mk,v 1.5 2020/07/04 18:16:55 sjg Exp $ +# $Id: sysv.mk,v 1.4 2020/05/07 01:17:51 sjg Exp $ FOO ?= FOOBAR = ${FOO:=bar} @@ -11,7 +11,7 @@ FUN = ${B}${S}fun SUN = the Sun # we expect nothing when FOO is empty -all: foo fun sam bla words +all: foo fun sam bla foo: @echo FOOBAR = ${FOOBAR} @@ -41,8 +41,3 @@ BLA= bla: @echo $(BLA:%=foo/%x) - -# The :Q looks like a modifier but isn't. -# It is part of the replacement string. -words: - @echo a${a b c d e:L:%a=x:Q}b diff --git a/contrib/bmake/unit-tests/varmisc.exp b/contrib/bmake/unit-tests/varmisc.exp index b9a29141ce6b..ffe8f8b867c8 100644 --- a/contrib/bmake/unit-tests/varmisc.exp +++ b/contrib/bmake/unit-tests/varmisc.exp @@ -22,5 +22,4 @@ date=20160401 Version=123.456.789 == 123456789 Literal=3.4.5 == 3004005 We have target specific vars -MAN= make.1 exit status 0 diff --git a/contrib/bmake/unit-tests/varmisc.mk b/contrib/bmake/unit-tests/varmisc.mk index ab591db5c4fd..a0b8f2dc84f4 100644 --- a/contrib/bmake/unit-tests/varmisc.mk +++ b/contrib/bmake/unit-tests/varmisc.mk @@ -1,9 +1,9 @@ -# $Id: varmisc.mk,v 1.11 2020/07/02 15:43:43 sjg Exp $ +# $Id: varmisc.mk,v 1.9 2017/02/01 18:44:54 sjg Exp $ # # Miscellaneous variable tests. all: unmatched_var_paren D_true U_true D_false U_false Q_lhs Q_rhs NQ_none \ - strftime cmpv manok + strftime cmpv unmatched_var_paren: @echo ${foo::=foo-text} @@ -60,25 +60,3 @@ cmpv: @echo Version=${Version} == ${Version:${M_cmpv}} @echo Literal=3.4.5 == ${3.4.5:L:${M_cmpv}} @echo We have ${${.TARGET:T}.only} - -# catch misshandling of nested vars in .for loop -MAN= -MAN1= make.1 -.for s in 1 2 -.if defined(MAN$s) && !empty(MAN$s) -MAN+= ${MAN$s} -.endif -.endfor - -manok: - @echo MAN=${MAN} - -# This is an expanded variant of the above .for loop. -# Between 2020-08-28 and 2020-07-02 this paragraph generated a wrong -# error message "Variable VARNAME is recursive". -# When evaluating the !empty expression, the ${:U1} was not expanded and -# thus resulted in the seeming definition VARNAME=${VARNAME}, which is -# obviously recursive. -VARNAME= ${VARNAME${:U1}} -.if defined(VARNAME${:U2}) && !empty(VARNAME${:U2}) -.endif diff --git a/contrib/bmake/util.c b/contrib/bmake/util.c index d674a6c21aac..31d2b9a06080 100644 --- a/contrib/bmake/util.c +++ b/contrib/bmake/util.c @@ -1,9 +1,9 @@ -/* $NetBSD: util.c,v 1.57 2020/07/03 08:13:23 rillig Exp $ */ +/* $NetBSD: util.c,v 1.55 2020/01/07 21:24:16 rillig Exp $ */ /* * Missing stuff from OS's * - * $Id: util.c,v 1.35 2020/07/04 18:16:55 sjg Exp $ + * $Id: util.c,v 1.34 2020/01/22 01:19:25 sjg Exp $ */ #if defined(__MINT__) || defined(__linux__) #include <signal.h> @@ -12,10 +12,10 @@ #include "make.h" #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: util.c,v 1.57 2020/07/03 08:13:23 rillig Exp $"; +static char rcsid[] = "$NetBSD: util.c,v 1.55 2020/01/07 21:24:16 rillig Exp $"; #else #ifndef lint -__RCSID("$NetBSD: util.c,v 1.57 2020/07/03 08:13:23 rillig Exp $"); +__RCSID("$NetBSD: util.c,v 1.55 2020/01/07 21:24:16 rillig Exp $"); #endif #endif @@ -68,7 +68,7 @@ getenv(const char *name) { int offset; - return findenv(name, &offset); + return(findenv(name, &offset)); } int @@ -173,7 +173,7 @@ strrcpy(char *ptr, char *str) while (len) *--ptr = str[--len]; - return ptr; + return (ptr); } /* end strrcpy */ @@ -276,7 +276,7 @@ getwd(char *pathname) if (st_cur.st_ino == st_root.st_ino && DEV_DEV_COMPARE(st_cur.st_dev, st_root.st_dev)) { (void)strcpy(pathname, *pathptr != '/' ? "/" : pathptr); - return pathname; + return (pathname); } /* open the parent directory */ @@ -399,7 +399,7 @@ vsnprintf(char *s, size_t n, const char *fmt, va_list args) putc('\0', &fakebuf); if (fakebuf._cnt<0) fakebuf._cnt = 0; - return n-fakebuf._cnt-1; + return (n-fakebuf._cnt-1); #else #ifndef _PATH_DEVNULL # define _PATH_DEVNULL "/dev/null" @@ -442,7 +442,7 @@ size_t strftime(char *buf, size_t len, const char *fmt, const struct tm *tm) { static char months[][4] = { - "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; diff --git a/contrib/bmake/var.c b/contrib/bmake/var.c index c7e6b1b34fd4..441aae9c9371 100644 --- a/contrib/bmake/var.c +++ b/contrib/bmake/var.c @@ -1,4 +1,4 @@ -/* $NetBSD: var.c,v 1.255 2020/07/04 17:41:04 rillig Exp $ */ +/* $NetBSD: var.c,v 1.224 2020/06/05 19:20:46 sjg Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -69,14 +69,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: var.c,v 1.255 2020/07/04 17:41:04 rillig Exp $"; +static char rcsid[] = "$NetBSD: var.c,v 1.224 2020/06/05 19:20:46 sjg Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)var.c 8.3 (Berkeley) 3/19/94"; #else -__RCSID("$NetBSD: var.c,v 1.255 2020/07/04 17:41:04 rillig Exp $"); +__RCSID("$NetBSD: var.c,v 1.224 2020/06/05 19:20:46 sjg Exp $"); #endif #endif /* not lint */ #endif @@ -102,9 +102,11 @@ __RCSID("$NetBSD: var.c,v 1.255 2020/07/04 17:41:04 rillig Exp $"); * Var_Value Return the value of a variable in a context or * NULL if the variable is undefined. * - * Var_Subst Substitute either a single variable or all - * variables in a string, using the given context as - * the top-most one. + * Var_Subst Substitute named variable, or all variables if + * NULL in a string using + * the given context as the top-most one. If the + * third argument is non-zero, Parse_Error is + * called if any variables are undefined. * * Var_Parse Parse a variable expansion from a string and * return the result and the number of characters @@ -122,8 +124,8 @@ __RCSID("$NetBSD: var.c,v 1.255 2020/07/04 17:41:04 rillig Exp $"); */ #include <sys/stat.h> -#include <sys/types.h> #ifndef NO_REGEX +#include <sys/types.h> #include <regex.h> #endif #include <ctype.h> @@ -132,11 +134,6 @@ __RCSID("$NetBSD: var.c,v 1.255 2020/07/04 17:41:04 rillig Exp $"); #include <time.h> #include "make.h" - -#ifdef HAVE_STDINT_H -#include <stdint.h> -#endif - #include "buf.h" #include "dir.h" #include "job.h" @@ -154,14 +151,14 @@ char **savedEnv = NULL; * to determine if there was an error in parsing -- easier than returning * a flag, as things outside this module don't give a hoot. */ -char var_Error[] = ""; +char var_Error[] = ""; /* * Similar to var_Error, but returned when the 'VARF_UNDEFERR' flag for * Var_Parse is not set. Why not just use a constant? Well, gcc likes * to condense identical string instances... */ -static char varNoError[] = ""; +static char varNoError[] = ""; /* * Traditionally we consume $$ during := like any other expansion. @@ -189,35 +186,33 @@ static Boolean save_dollars = FALSE; * The four contexts are searched in the reverse order from which they are * listed. */ -GNode *VAR_INTERNAL; /* variables from make itself */ -GNode *VAR_GLOBAL; /* variables from the makefile */ -GNode *VAR_CMD; /* variables defined on the command-line */ - -#define FIND_CMD 0x1 /* look in VAR_CMD when searching */ -#define FIND_GLOBAL 0x2 /* look in VAR_GLOBAL as well */ -#define FIND_ENV 0x4 /* look in the environment also */ - -typedef enum { - VAR_IN_USE = 0x01, /* Variable's value is currently being used. - * Used to avoid endless recursion */ - VAR_FROM_ENV = 0x02, /* Variable comes from the environment */ - VAR_JUNK = 0x04, /* Variable is a junk variable that - * should be destroyed when done with - * it. Used by Var_Parse for undefined, - * modified variables */ - VAR_KEEP = 0x08, /* Variable is VAR_JUNK, but we found - * a use for it in some modifier and - * the value is therefore valid */ - VAR_EXPORTED = 0x10, /* Variable is exported */ - VAR_REEXPORT = 0x20, /* Indicate if var needs re-export. - * This would be true if it contains $'s */ - VAR_FROM_CMD = 0x40 /* Variable came from command line */ -} Var_Flags; +GNode *VAR_INTERNAL; /* variables from make itself */ +GNode *VAR_GLOBAL; /* variables from the makefile */ +GNode *VAR_CMD; /* variables defined on the command-line */ + +#define FIND_CMD 0x1 /* look in VAR_CMD when searching */ +#define FIND_GLOBAL 0x2 /* look in VAR_GLOBAL as well */ +#define FIND_ENV 0x4 /* look in the environment also */ typedef struct Var { char *name; /* the variable's name */ Buffer val; /* its value */ - Var_Flags flags; /* miscellaneous status flags */ + int flags; /* miscellaneous status flags */ +#define VAR_IN_USE 1 /* Variable's value currently being used. + * Used to avoid recursion */ +#define VAR_FROM_ENV 2 /* Variable comes from the environment */ +#define VAR_JUNK 4 /* Variable is a junk variable that + * should be destroyed when done with + * it. Used by Var_Parse for undefined, + * modified variables */ +#define VAR_KEEP 8 /* Variable is VAR_JUNK, but we found + * a use for it in some modifier and + * the value is therefore valid */ +#define VAR_EXPORTED 16 /* Variable is exported */ +#define VAR_REEXPORT 32 /* Indicate if var needs re-export. + * This would be true if it contains $'s + */ +#define VAR_FROM_CMD 64 /* Variable came from command line */ } Var; /* @@ -237,18 +232,16 @@ static int var_exportedVars = VAR_EXPORTED_NONE; */ #define VAR_EXPORT_LITERAL 2 -typedef enum { - VAR_SUB_GLOBAL = 0x01, /* Apply substitution globally */ - VAR_SUB_ONE = 0x02, /* Apply substitution to one word */ - VAR_SUB_MATCHED = 0x04, /* There was a match */ - VAR_MATCH_START = 0x08, /* Match at start of word */ - VAR_MATCH_END = 0x10, /* Match at end of word */ - VAR_NOSUBST = 0x20 /* don't expand vars in VarGetPattern */ -} VarPattern_Flags; +/* Var*Pattern flags */ +#define VAR_SUB_GLOBAL 0x01 /* Apply substitution globally */ +#define VAR_SUB_ONE 0x02 /* Apply substitution to one word */ +#define VAR_SUB_MATCHED 0x04 /* There was a match */ +#define VAR_MATCH_START 0x08 /* Match at start of word */ +#define VAR_MATCH_END 0x10 /* Match at end of word */ +#define VAR_NOSUBST 0x20 /* don't expand vars in VarGetPattern */ -typedef enum { - VAR_NO_EXPORT = 0x01 /* do not export */ -} VarSet_Flags; +/* Var_Set flags */ +#define VAR_NO_EXPORT 0x01 /* do not export */ typedef struct { /* @@ -267,11 +260,11 @@ typedef struct { /* struct passed as 'void *' to VarSubstitute() for ":S/lhs/rhs/", * to VarSYSVMatch() for ":lhs=rhs". */ typedef struct { - const char *lhs; /* String to match */ - int leftLen; /* Length of string */ - const char *rhs; /* Replacement string (w/ &'s removed) */ - int rightLen; /* Length of replacement */ - VarPattern_Flags flags; + const char *lhs; /* String to match */ + int leftLen; /* Length of string */ + const char *rhs; /* Replacement string (w/ &'s removed) */ + int rightLen; /* Length of replacement */ + int flags; } VarPattern; /* struct passed as 'void *' to VarLoopExpand() for ":@tvar@str@" */ @@ -281,8 +274,8 @@ typedef struct { int tvarLen; char *str; /* string to expand */ int strLen; - Varf_Flags flags; -} VarLoop; + int errnum; /* errnum for not defined */ +} VarLoop_t; #ifndef NO_REGEX /* struct passed as 'void *' to VarRESubstitute() for ":C///" */ @@ -301,6 +294,47 @@ typedef struct { int end; /* last word to select */ } VarSelectWords_t; +static Var *VarFind(const char *, GNode *, int); +static void VarAdd(const char *, const char *, GNode *); +static Boolean VarHead(GNode *, Var_Parse_State *, + char *, Boolean, Buffer *, void *); +static Boolean VarTail(GNode *, Var_Parse_State *, + char *, Boolean, Buffer *, void *); +static Boolean VarSuffix(GNode *, Var_Parse_State *, + char *, Boolean, Buffer *, void *); +static Boolean VarRoot(GNode *, Var_Parse_State *, + char *, Boolean, Buffer *, void *); +static Boolean VarMatch(GNode *, Var_Parse_State *, + char *, Boolean, Buffer *, void *); +#ifdef SYSVVARSUB +static Boolean VarSYSVMatch(GNode *, Var_Parse_State *, + char *, Boolean, Buffer *, void *); +#endif +static Boolean VarNoMatch(GNode *, Var_Parse_State *, + char *, Boolean, Buffer *, void *); +#ifndef NO_REGEX +static void VarREError(int, regex_t *, const char *); +static Boolean VarRESubstitute(GNode *, Var_Parse_State *, + char *, Boolean, Buffer *, void *); +#endif +static Boolean VarSubstitute(GNode *, Var_Parse_State *, + char *, Boolean, Buffer *, void *); +static Boolean VarLoopExpand(GNode *, Var_Parse_State *, + char *, Boolean, Buffer *, void *); +static char *VarGetPattern(GNode *, Var_Parse_State *, + int, const char **, int, int *, int *, + VarPattern *); +static char *VarQuote(char *, Boolean); +static char *VarHash(char *); +static char *VarModify(GNode *, Var_Parse_State *, + const char *, + Boolean (*)(GNode *, Var_Parse_State *, char *, Boolean, Buffer *, void *), + void *); +static char *VarOrder(const char *, const char); +static char *VarUniq(const char *); +static int VarWordCompare(const void *, const void *); +static void VarPrintVar(void *); + #define BROPEN '{' #define BRCLOSE '}' #define PROPEN '(' @@ -334,47 +368,45 @@ VarFind(const char *name, GNode *ctxt, int flags) Hash_Entry *var; Var *v; - /* - * If the variable name begins with a '.', it could very well be one of - * the local ones. We check the name against all the local variables - * and substitute the short version in for 'name' if it matches one of - * them. - */ - if (*name == '.' && isupper((unsigned char) name[1])) { - switch (name[1]) { - case 'A': - if (!strcmp(name, ".ALLSRC")) - name = ALLSRC; - if (!strcmp(name, ".ARCHIVE")) - name = ARCHIVE; - break; - case 'I': - if (!strcmp(name, ".IMPSRC")) - name = IMPSRC; - break; - case 'M': - if (!strcmp(name, ".MEMBER")) - name = MEMBER; - break; - case 'O': - if (!strcmp(name, ".OODATE")) - name = OODATE; - break; - case 'P': - if (!strcmp(name, ".PREFIX")) - name = PREFIX; - break; - case 'T': - if (!strcmp(name, ".TARGET")) - name = TARGET; - break; - } - } - + /* + * If the variable name begins with a '.', it could very well be one of + * the local ones. We check the name against all the local variables + * and substitute the short version in for 'name' if it matches one of + * them. + */ + if (*name == '.' && isupper((unsigned char) name[1])) + switch (name[1]) { + case 'A': + if (!strcmp(name, ".ALLSRC")) + name = ALLSRC; + if (!strcmp(name, ".ARCHIVE")) + name = ARCHIVE; + break; + case 'I': + if (!strcmp(name, ".IMPSRC")) + name = IMPSRC; + break; + case 'M': + if (!strcmp(name, ".MEMBER")) + name = MEMBER; + break; + case 'O': + if (!strcmp(name, ".OODATE")) + name = OODATE; + break; + case 'P': + if (!strcmp(name, ".PREFIX")) + name = PREFIX; + break; + case 'T': + if (!strcmp(name, ".TARGET")) + name = TARGET; + break; + } #ifdef notyet /* for compatibility with gmake */ if (name[0] == '^' && name[1] == '\0') - name = ALLSRC; + name = ALLSRC; #endif /* @@ -384,19 +416,19 @@ VarFind(const char *name, GNode *ctxt, int flags) */ var = Hash_FindEntry(&ctxt->context, name); - if (var == NULL && (flags & FIND_CMD) && ctxt != VAR_CMD) { + if ((var == NULL) && (flags & FIND_CMD) && (ctxt != VAR_CMD)) { var = Hash_FindEntry(&VAR_CMD->context, name); } - if (!checkEnvFirst && var == NULL && (flags & FIND_GLOBAL) && - ctxt != VAR_GLOBAL) + if (!checkEnvFirst && (var == NULL) && (flags & FIND_GLOBAL) && + (ctxt != VAR_GLOBAL)) { var = Hash_FindEntry(&VAR_GLOBAL->context, name); - if (var == NULL && ctxt != VAR_INTERNAL) { + if ((var == NULL) && (ctxt != VAR_INTERNAL)) { /* VAR_INTERNAL is subordinate to VAR_GLOBAL */ var = Hash_FindEntry(&VAR_INTERNAL->context, name); } } - if (var == NULL && (flags & FIND_ENV)) { + if ((var == NULL) && (flags & FIND_ENV)) { char *env; if ((env = getenv(name)) != NULL) { @@ -411,18 +443,18 @@ VarFind(const char *name, GNode *ctxt, int flags) Buf_AddBytes(&v->val, len, env); v->flags = VAR_FROM_ENV; - return v; + return (v); } else if (checkEnvFirst && (flags & FIND_GLOBAL) && - ctxt != VAR_GLOBAL) + (ctxt != VAR_GLOBAL)) { var = Hash_FindEntry(&VAR_GLOBAL->context, name); - if (var == NULL && ctxt != VAR_INTERNAL) { + if ((var == NULL) && (ctxt != VAR_INTERNAL)) { var = Hash_FindEntry(&VAR_INTERNAL->context, name); } if (var == NULL) { return NULL; } else { - return (Var *)Hash_GetValue(var); + return ((Var *)Hash_GetValue(var)); } } else { return NULL; @@ -430,7 +462,7 @@ VarFind(const char *name, GNode *ctxt, int flags) } else if (var == NULL) { return NULL; } else { - return (Var *)Hash_GetValue(var); + return ((Var *)Hash_GetValue(var)); } } @@ -471,6 +503,9 @@ VarFreeEnv(Var *v, Boolean destroy) * val value to set it to * ctxt context in which to set it * + * Results: + * None + * * Side Effects: * The new variable is placed at the front of the given context * The name and val arguments are duplicated so they may @@ -487,7 +522,7 @@ VarAdd(const char *name, const char *val, GNode *ctxt) v = bmake_malloc(sizeof(Var)); len = val ? strlen(val) : 0; - Buf_Init(&v->val, len + 1); + Buf_Init(&v->val, len+1); Buf_AddBytes(&v->val, len, val); v->flags = 0; @@ -505,6 +540,9 @@ VarAdd(const char *name, const char *val, GNode *ctxt) * Var_Delete -- * Remove a variable from a context. * + * Results: + * None. + * * Side Effects: * The Var structure is removed and freed. * @@ -515,7 +553,7 @@ Var_Delete(const char *name, GNode *ctxt) { Hash_Entry *ln; char *cp; - + if (strchr(name, '$')) { cp = Var_Subst(NULL, name, VAR_GLOBAL, VARF_WANTRES); } else { @@ -540,7 +578,7 @@ Var_Delete(const char *name, GNode *ctxt) var_exportedVars = VAR_EXPORTED_NONE; } if (v->name != ln->name) - free(v->name); + free(v->name); Hash_DeleteEntry(&ctxt->context, ln); Buf_Destroy(&v->val, TRUE); free(v); @@ -565,7 +603,7 @@ Var_Export1(const char *name, int flags) int parent = (flags & VAR_EXPORT_PARENT); if (*name == '.') - return 0; /* skip internals */ + return 0; /* skip internals */ if (!name[1]) { /* * A single char. @@ -630,13 +668,6 @@ Var_Export1(const char *name, int flags) return 1; } -static void -Var_ExportVars_callback(void *entry, void *unused MAKE_ATTR_UNUSED) -{ - Var *var = entry; - Var_Export1(var->name, 0); -} - /* * This gets called from our children. */ @@ -644,6 +675,9 @@ void Var_ExportVars(void) { char tmp[BUFSIZ]; + Hash_Entry *var; + Hash_Search state; + Var *v; char *val; int n; @@ -660,8 +694,15 @@ Var_ExportVars(void) return; if (VAR_EXPORTED_ALL == var_exportedVars) { - /* Ouch! This is crazy... */ - Hash_ForEach(&VAR_GLOBAL->context, Var_ExportVars_callback, NULL); + /* + * Ouch! This is crazy... + */ + for (var = Hash_EnumFirst(&VAR_GLOBAL->context, &state); + var != NULL; + var = Hash_EnumNext(&state)) { + v = (Var *)Hash_GetValue(var); + Var_Export1(v->name, 0); + } return; } /* @@ -767,7 +808,7 @@ Var_UnExport(char *str) int n; if (!str || !str[0]) { - return; /* assert? */ + return; /* assert? */ } vlist = NULL; @@ -839,7 +880,7 @@ Var_UnExport(char *str) "${" MAKE_EXPORTED ":N%s}", v->name); if (n < (int)sizeof(tmp)) { cp = Var_Subst(NULL, tmp, VAR_GLOBAL, VARF_WANTRES); - Var_Set(MAKE_EXPORTED, cp, VAR_GLOBAL); + Var_Set(MAKE_EXPORTED, cp, VAR_GLOBAL, 0); free(cp); } } @@ -853,11 +894,38 @@ Var_UnExport(char *str) } } -static void -Var_Set_with_flags(const char *name, const char *val, GNode *ctxt, - VarSet_Flags flags) +/*- + *----------------------------------------------------------------------- + * Var_Set -- + * Set the variable name to the value val in the given context. + * + * Input: + * name name of variable to set + * val value to give to the variable + * ctxt context in which to set it + * + * Results: + * None. + * + * Side Effects: + * If the variable doesn't yet exist, a new record is created for it. + * Else the old value is freed and the new one stuck in its place + * + * Notes: + * The variable is searched for only in its context before being + * created in that context. I.e. if the context is VAR_GLOBAL, + * only VAR_GLOBAL->context is searched. Likewise if it is VAR_CMD, only + * VAR_CMD->context is searched. This is done to avoid the literally + * thousands of unnecessary strcmp's that used to be done to + * set, say, $(@) or $(<). + * If the context is VAR_GLOBAL though, we check if the variable + * was set in VAR_CMD from the command line and skip it if so. + *----------------------------------------------------------------------- + */ +void +Var_Set(const char *name, const char *val, GNode *ctxt, int flags) { - Var *v; + Var *v; char *expanded_name = NULL; /* @@ -940,7 +1008,7 @@ Var_Set_with_flags(const char *name, const char *val, GNode *ctxt, save_dollars = s2Boolean(val, save_dollars); } -out: + out: free(expanded_name); if (v != NULL) VarFreeEnv(v, TRUE); @@ -948,37 +1016,6 @@ out: /*- *----------------------------------------------------------------------- - * Var_Set -- - * Set the variable name to the value val in the given context. - * - * Input: - * name name of variable to set - * val value to give to the variable - * ctxt context in which to set it - * - * Side Effects: - * If the variable doesn't yet exist, a new record is created for it. - * Else the old value is freed and the new one stuck in its place - * - * Notes: - * The variable is searched for only in its context before being - * created in that context. I.e. if the context is VAR_GLOBAL, - * only VAR_GLOBAL->context is searched. Likewise if it is VAR_CMD, only - * VAR_CMD->context is searched. This is done to avoid the literally - * thousands of unnecessary strcmp's that used to be done to - * set, say, $(@) or $(<). - * If the context is VAR_GLOBAL though, we check if the variable - * was set in VAR_CMD from the command line and skip it if so. - *----------------------------------------------------------------------- - */ -void -Var_Set(const char *name, const char *val, GNode *ctxt) -{ - Var_Set_with_flags(name, val, ctxt, 0); -} - -/*- - *----------------------------------------------------------------------- * Var_Append -- * The variable of the given name has the given value appended to it in * the given context. @@ -988,6 +1025,9 @@ Var_Set(const char *name, const char *val, GNode *ctxt) * val String to append to it * ctxt Context in which this should occur * + * Results: + * None + * * Side Effects: * If the variable doesn't exist, it is created. Else the strings * are concatenated (with a space in between). @@ -1004,8 +1044,8 @@ Var_Set(const char *name, const char *val, GNode *ctxt) void Var_Append(const char *name, const char *val, GNode *ctxt) { - Var *v; - Hash_Entry *h; + Var *v; + Hash_Entry *h; char *expanded_name = NULL; if (strchr(name, '$') != NULL) { @@ -1022,17 +1062,17 @@ Var_Append(const char *name, const char *val, GNode *ctxt) name = expanded_name; } - v = VarFind(name, ctxt, ctxt == VAR_GLOBAL ? (FIND_CMD|FIND_ENV) : 0); + v = VarFind(name, ctxt, (ctxt == VAR_GLOBAL) ? (FIND_CMD|FIND_ENV) : 0); if (v == NULL) { - Var_Set(name, val, ctxt); + Var_Set(name, val, ctxt, 0); } else if (ctxt == VAR_CMD || !(v->flags & VAR_FROM_CMD)) { Buf_AddByte(&v->val, ' '); Buf_AddBytes(&v->val, strlen(val), val); if (DEBUG(VAR)) { fprintf(debug_file, "%s:%s = %s\n", ctxt->name, name, - Buf_GetAll(&v->val, NULL)); + Buf_GetAll(&v->val, NULL)); } if (v->flags & VAR_FROM_ENV) { @@ -1079,11 +1119,11 @@ Var_Exists(const char *name, GNode *ctxt) v = VarFind(cp ? cp : name, ctxt, FIND_CMD|FIND_GLOBAL|FIND_ENV); free(cp); if (v == NULL) { - return FALSE; + return(FALSE); + } else { + (void)VarFreeEnv(v, TRUE); } - - (void)VarFreeEnv(v, TRUE); - return TRUE; + return(TRUE); } /*- @@ -1105,173 +1145,355 @@ Var_Exists(const char *name, GNode *ctxt) char * Var_Value(const char *name, GNode *ctxt, char **frp) { - Var *v; + Var *v; v = VarFind(name, ctxt, FIND_ENV | FIND_GLOBAL | FIND_CMD); *frp = NULL; - if (v == NULL) + if (v != NULL) { + char *p = (Buf_GetAll(&v->val, NULL)); + if (VarFreeEnv(v, FALSE)) + *frp = p; + return p; + } else { return NULL; - - char *p = (Buf_GetAll(&v->val, NULL)); - if (VarFreeEnv(v, FALSE)) - *frp = p; - return p; + } } - -/* This callback for VarModify gets a single word from an expression and - * typically adds a modification of this word to the buffer. It may also do - * nothing or add several words. +/*- + *----------------------------------------------------------------------- + * VarHead -- + * Remove the tail of the given word and place the result in the given + * buffer. * - * If addSpaces is TRUE, it must add a space before adding anything else to - * the buffer. + * Input: + * word Word to trim + * addSpace True if need to add a space to the buffer + * before sticking in the head + * buf Buffer in which to store it * - * It returns the addSpace value for the next call of this callback. Typical - * return values are the current addSpaces or TRUE. */ -typedef Boolean (*VarModifyCallback)(GNode *ctxt, Var_Parse_State *vpstate, - const char *word, Boolean addSpace, Buffer *buf, void *data); - - -/* Callback function for VarModify to implement the :H modifier. - * Add the dirname of the given word to the buffer. */ + * Results: + * TRUE if characters were added to the buffer (a space needs to be + * added to the buffer before the next word). + * + * Side Effects: + * The trimmed word is added to the buffer. + * + *----------------------------------------------------------------------- + */ static Boolean VarHead(GNode *ctx MAKE_ATTR_UNUSED, Var_Parse_State *vpstate, - const char *word, Boolean addSpace, Buffer *buf, + char *word, Boolean addSpace, Buffer *buf, void *dummy MAKE_ATTR_UNUSED) { - const char *slash = strrchr(word, '/'); + char *slash; - if (addSpace && vpstate->varSpace) - Buf_AddByte(buf, vpstate->varSpace); - if (slash != NULL) - Buf_AddBytes(buf, slash - word, word); - else + slash = strrchr(word, '/'); + if (slash != NULL) { + if (addSpace && vpstate->varSpace) { + Buf_AddByte(buf, vpstate->varSpace); + } + *slash = '\0'; + Buf_AddBytes(buf, strlen(word), word); + *slash = '/'; + return (TRUE); + } else { + /* + * If no directory part, give . (q.v. the POSIX standard) + */ + if (addSpace && vpstate->varSpace) + Buf_AddByte(buf, vpstate->varSpace); Buf_AddByte(buf, '.'); - + } return TRUE; } -/* Callback function for VarModify to implement the :T modifier. - * Add the basename of the given word to the buffer. */ +/*- + *----------------------------------------------------------------------- + * VarTail -- + * Remove the head of the given word and place the result in the given + * buffer. + * + * Input: + * word Word to trim + * addSpace True if need to add a space to the buffer + * before adding the tail + * buf Buffer in which to store it + * + * Results: + * TRUE if characters were added to the buffer (a space needs to be + * added to the buffer before the next word). + * + * Side Effects: + * The trimmed word is added to the buffer. + * + *----------------------------------------------------------------------- + */ static Boolean VarTail(GNode *ctx MAKE_ATTR_UNUSED, Var_Parse_State *vpstate, - const char *word, Boolean addSpace, Buffer *buf, + char *word, Boolean addSpace, Buffer *buf, void *dummy MAKE_ATTR_UNUSED) { - const char *slash = strrchr(word, '/'); - const char *base = slash != NULL ? slash + 1 : word; + char *slash; - if (addSpace && vpstate->varSpace) + if (addSpace && vpstate->varSpace) { Buf_AddByte(buf, vpstate->varSpace); - Buf_AddBytes(buf, strlen(base), base); + } + + slash = strrchr(word, '/'); + if (slash != NULL) { + *slash++ = '\0'; + Buf_AddBytes(buf, strlen(slash), slash); + slash[-1] = '/'; + } else { + Buf_AddBytes(buf, strlen(word), word); + } return TRUE; } -/* Callback function for VarModify to implement the :E modifier. - * Add the filename suffix of the given word to the buffer, if it exists. */ +/*- + *----------------------------------------------------------------------- + * VarSuffix -- + * Place the suffix of the given word in the given buffer. + * + * Input: + * word Word to trim + * addSpace TRUE if need to add a space before placing the + * suffix in the buffer + * buf Buffer in which to store it + * + * Results: + * TRUE if characters were added to the buffer (a space needs to be + * added to the buffer before the next word). + * + * Side Effects: + * The suffix from the word is placed in the buffer. + * + *----------------------------------------------------------------------- + */ static Boolean VarSuffix(GNode *ctx MAKE_ATTR_UNUSED, Var_Parse_State *vpstate, - const char *word, Boolean addSpace, Buffer *buf, + char *word, Boolean addSpace, Buffer *buf, void *dummy MAKE_ATTR_UNUSED) { - const char *dot = strrchr(word, '.'); - if (dot == NULL) - return addSpace; + char *dot; - if (addSpace && vpstate->varSpace) - Buf_AddByte(buf, vpstate->varSpace); - Buf_AddBytes(buf, strlen(dot + 1), dot + 1); - return TRUE; + dot = strrchr(word, '.'); + if (dot != NULL) { + if (addSpace && vpstate->varSpace) { + Buf_AddByte(buf, vpstate->varSpace); + } + *dot++ = '\0'; + Buf_AddBytes(buf, strlen(dot), dot); + dot[-1] = '.'; + addSpace = TRUE; + } + return addSpace; } -/* Callback function for VarModify to implement the :R modifier. - * Add the filename basename of the given word to the buffer. */ +/*- + *----------------------------------------------------------------------- + * VarRoot -- + * Remove the suffix of the given word and place the result in the + * buffer. + * + * Input: + * word Word to trim + * addSpace TRUE if need to add a space to the buffer + * before placing the root in it + * buf Buffer in which to store it + * + * Results: + * TRUE if characters were added to the buffer (a space needs to be + * added to the buffer before the next word). + * + * Side Effects: + * The trimmed word is added to the buffer. + * + *----------------------------------------------------------------------- + */ static Boolean VarRoot(GNode *ctx MAKE_ATTR_UNUSED, Var_Parse_State *vpstate, - const char *word, Boolean addSpace, Buffer *buf, + char *word, Boolean addSpace, Buffer *buf, void *dummy MAKE_ATTR_UNUSED) { - char *dot = strrchr(word, '.'); - size_t len = dot != NULL ? (size_t)(dot - word) : strlen(word); + char *dot; - if (addSpace && vpstate->varSpace) + if (addSpace && vpstate->varSpace) { Buf_AddByte(buf, vpstate->varSpace); - Buf_AddBytes(buf, len, word); + } + + dot = strrchr(word, '.'); + if (dot != NULL) { + *dot = '\0'; + Buf_AddBytes(buf, strlen(word), word); + *dot = '.'; + } else { + Buf_AddBytes(buf, strlen(word), word); + } return TRUE; } -/* Callback function for VarModify to implement the :M modifier. - * Place the word in the buffer if it matches the given pattern. */ +/*- + *----------------------------------------------------------------------- + * VarMatch -- + * Place the word in the buffer if it matches the given pattern. + * Callback function for VarModify to implement the :M modifier. + * + * Input: + * word Word to examine + * addSpace TRUE if need to add a space to the buffer + * before adding the word, if it matches + * buf Buffer in which to store it + * pattern Pattern the word must match + * + * Results: + * TRUE if a space should be placed in the buffer before the next + * word. + * + * Side Effects: + * The word may be copied to the buffer. + * + *----------------------------------------------------------------------- + */ static Boolean VarMatch(GNode *ctx MAKE_ATTR_UNUSED, Var_Parse_State *vpstate, - const char *word, Boolean addSpace, Buffer *buf, - void *data) + char *word, Boolean addSpace, Buffer *buf, + void *pattern) { - const char *pattern = data; if (DEBUG(VAR)) - fprintf(debug_file, "VarMatch [%s] [%s]\n", word, pattern); - if (!Str_Match(word, pattern)) - return addSpace; - if (addSpace && vpstate->varSpace) - Buf_AddByte(buf, vpstate->varSpace); - Buf_AddBytes(buf, strlen(word), word); - return TRUE; + fprintf(debug_file, "VarMatch [%s] [%s]\n", word, (char *)pattern); + if (Str_Match(word, (char *)pattern)) { + if (addSpace && vpstate->varSpace) { + Buf_AddByte(buf, vpstate->varSpace); + } + addSpace = TRUE; + Buf_AddBytes(buf, strlen(word), word); + } + return(addSpace); } #ifdef SYSVVARSUB -/* Callback function for VarModify to implement the :%.from=%.to modifier. */ +/*- + *----------------------------------------------------------------------- + * VarSYSVMatch -- + * Place the word in the buffer if it matches the given pattern. + * Callback function for VarModify to implement the System V % + * modifiers. + * + * Input: + * word Word to examine + * addSpace TRUE if need to add a space to the buffer + * before adding the word, if it matches + * buf Buffer in which to store it + * patp Pattern the word must match + * + * Results: + * TRUE if a space should be placed in the buffer before the next + * word. + * + * Side Effects: + * The word may be copied to the buffer. + * + *----------------------------------------------------------------------- + */ static Boolean VarSYSVMatch(GNode *ctx, Var_Parse_State *vpstate, - const char *word, Boolean addSpace, Buffer *buf, - void *data) + char *word, Boolean addSpace, Buffer *buf, + void *patp) { size_t len; char *ptr; Boolean hasPercent; - VarPattern *pat = data; + VarPattern *pat = (VarPattern *)patp; + char *varexp; if (addSpace && vpstate->varSpace) Buf_AddByte(buf, vpstate->varSpace); + addSpace = TRUE; + if ((ptr = Str_SYSVMatch(word, pat->lhs, &len, &hasPercent)) != NULL) { - char *varexp = Var_Subst(NULL, pat->rhs, ctx, VARF_WANTRES); + varexp = Var_Subst(NULL, pat->rhs, ctx, VARF_WANTRES); Str_SYSVSubst(buf, varexp, ptr, len, hasPercent); free(varexp); } else { Buf_AddBytes(buf, strlen(word), word); } - return TRUE; + return(addSpace); } #endif -/* Callback function for VarModify to implement the :N modifier. - * Place the word in the buffer if it doesn't match the given pattern. */ + +/*- + *----------------------------------------------------------------------- + * VarNoMatch -- + * Place the word in the buffer if it doesn't match the given pattern. + * Callback function for VarModify to implement the :N modifier. + * + * Input: + * word Word to examine + * addSpace TRUE if need to add a space to the buffer + * before adding the word, if it matches + * buf Buffer in which to store it + * pattern Pattern the word must match + * + * Results: + * TRUE if a space should be placed in the buffer before the next + * word. + * + * Side Effects: + * The word may be copied to the buffer. + * + *----------------------------------------------------------------------- + */ static Boolean VarNoMatch(GNode *ctx MAKE_ATTR_UNUSED, Var_Parse_State *vpstate, - const char *word, Boolean addSpace, Buffer *buf, - void *data) + char *word, Boolean addSpace, Buffer *buf, + void *pattern) { - const char *pattern = data; - if (Str_Match(word, pattern)) - return addSpace; - if (addSpace && vpstate->varSpace) - Buf_AddByte(buf, vpstate->varSpace); - Buf_AddBytes(buf, strlen(word), word); - return TRUE; + if (!Str_Match(word, (char *)pattern)) { + if (addSpace && vpstate->varSpace) { + Buf_AddByte(buf, vpstate->varSpace); + } + addSpace = TRUE; + Buf_AddBytes(buf, strlen(word), word); + } + return(addSpace); } -/* Callback function for VarModify to implement the :S,from,to, modifier. - * Perform a string substitution on the given word. */ + +/*- + *----------------------------------------------------------------------- + * VarSubstitute -- + * Perform a string-substitution on the given word, placing the + * result in the passed buffer. + * + * Input: + * word Word to modify + * addSpace True if space should be added before + * other characters + * buf Buffer for result + * patternp Pattern for substitution + * + * Results: + * TRUE if a space is needed before more characters are added. + * + * Side Effects: + * None. + * + *----------------------------------------------------------------------- + */ static Boolean VarSubstitute(GNode *ctx MAKE_ATTR_UNUSED, Var_Parse_State *vpstate, - const char *word, Boolean addSpace, Buffer *buf, - void *data) + char *word, Boolean addSpace, Buffer *buf, + void *patternp) { - int wordLen = strlen(word); - const char *cp; /* General pointer */ - VarPattern *pattern = data; + int wordLen; /* Length of word */ + char *cp; /* General pointer */ + VarPattern *pattern = (VarPattern *)patternp; + wordLen = strlen(word); if ((pattern->flags & (VAR_SUB_ONE|VAR_SUB_MATCHED)) != (VAR_SUB_ONE|VAR_SUB_MATCHED)) { /* @@ -1280,44 +1502,44 @@ VarSubstitute(GNode *ctx MAKE_ATTR_UNUSED, Var_Parse_State *vpstate, */ if ((pattern->flags & VAR_MATCH_START) && (strncmp(word, pattern->lhs, pattern->leftLen) == 0)) { - /* - * Anchored at start and beginning of word matches pattern - */ - if ((pattern->flags & VAR_MATCH_END) && - (wordLen == pattern->leftLen)) { /* - * Also anchored at end and matches to the end (word - * is same length as pattern) add space and rhs only - * if rhs is non-null. + * Anchored at start and beginning of word matches pattern */ - if (pattern->rightLen != 0) { - if (addSpace && vpstate->varSpace) { - Buf_AddByte(buf, vpstate->varSpace); + if ((pattern->flags & VAR_MATCH_END) && + (wordLen == pattern->leftLen)) { + /* + * Also anchored at end and matches to the end (word + * is same length as pattern) add space and rhs only + * if rhs is non-null. + */ + if (pattern->rightLen != 0) { + if (addSpace && vpstate->varSpace) { + Buf_AddByte(buf, vpstate->varSpace); + } + addSpace = TRUE; + Buf_AddBytes(buf, pattern->rightLen, pattern->rhs); + } + pattern->flags |= VAR_SUB_MATCHED; + } else if (pattern->flags & VAR_MATCH_END) { + /* + * Doesn't match to end -- copy word wholesale + */ + goto nosub; + } else { + /* + * Matches at start but need to copy in trailing characters + */ + if ((pattern->rightLen + wordLen - pattern->leftLen) != 0){ + if (addSpace && vpstate->varSpace) { + Buf_AddByte(buf, vpstate->varSpace); + } + addSpace = TRUE; } - addSpace = TRUE; Buf_AddBytes(buf, pattern->rightLen, pattern->rhs); + Buf_AddBytes(buf, wordLen - pattern->leftLen, + (word + pattern->leftLen)); + pattern->flags |= VAR_SUB_MATCHED; } - pattern->flags |= VAR_SUB_MATCHED; - } else if (pattern->flags & VAR_MATCH_END) { - /* - * Doesn't match to end -- copy word wholesale - */ - goto nosub; - } else { - /* - * Matches at start but need to copy in trailing characters - */ - if ((pattern->rightLen + wordLen - pattern->leftLen) != 0) { - if (addSpace && vpstate->varSpace) { - Buf_AddByte(buf, vpstate->varSpace); - } - addSpace = TRUE; - } - Buf_AddBytes(buf, pattern->rightLen, pattern->rhs); - Buf_AddBytes(buf, wordLen - pattern->leftLen, - (word + pattern->leftLen)); - pattern->flags |= VAR_SUB_MATCHED; - } } else if (pattern->flags & VAR_MATCH_START) { /* * Had to match at start of word and didn't -- copy whole word. @@ -1374,11 +1596,11 @@ VarSubstitute(GNode *ctx MAKE_ATTR_UNUSED, Var_Parse_State *vpstate, while (!done) { cp = Str_FindSubstring(word, pattern->lhs); if (cp != NULL) { - if (addSpace && (((cp - word) + pattern->rightLen) != 0)) { + if (addSpace && (((cp - word) + pattern->rightLen) != 0)){ Buf_AddByte(buf, vpstate->varSpace); addSpace = FALSE; } - Buf_AddBytes(buf, cp - word, word); + Buf_AddBytes(buf, cp-word, word); Buf_AddBytes(buf, pattern->rightLen, pattern->rhs); wordLen -= (cp - word) + pattern->leftLen; word = cp + pattern->leftLen; @@ -1404,16 +1626,16 @@ VarSubstitute(GNode *ctx MAKE_ATTR_UNUSED, Var_Parse_State *vpstate, * before we add any more. If we didn't add any, just return * the previous value of addSpace. */ - return (Buf_Size(buf) != origSize) || addSpace; + return ((Buf_Size(buf) != origSize) || addSpace); } - return addSpace; + return (addSpace); } -nosub: + nosub: if (addSpace && vpstate->varSpace) { Buf_AddByte(buf, vpstate->varSpace); } Buf_AddBytes(buf, wordLen, word); - return TRUE; + return(TRUE); } #ifndef NO_REGEX @@ -1422,6 +1644,9 @@ nosub: * VarREError -- * Print the error caused by a regcomp or regexec call. * + * Results: + * None. + * * Side Effects: * An error gets printed. * @@ -1440,19 +1665,32 @@ VarREError(int reerr, regex_t *pat, const char *str) free(errbuf); } -/* Callback function for VarModify to implement the :C/from/to/ modifier. - * Perform a regex substitution on the given word. */ + +/*- + *----------------------------------------------------------------------- + * VarRESubstitute -- + * Perform a regex substitution on the given word, placing the + * result in the passed buffer. + * + * Results: + * TRUE if a space is needed before more characters are added. + * + * Side Effects: + * None. + * + *----------------------------------------------------------------------- + */ static Boolean VarRESubstitute(GNode *ctx MAKE_ATTR_UNUSED, Var_Parse_State *vpstate MAKE_ATTR_UNUSED, - const char *word, Boolean addSpace, Buffer *buf, - void *data) + char *word, Boolean addSpace, Buffer *buf, + void *patternp) { - VarREPattern *pat = data; + VarREPattern *pat; int xrv; - const char *wp = word; + char *wp; char *rp; - int added = 0; + int added; int flags = 0; #define MAYBE_ADD_SPACE() \ @@ -1460,6 +1698,10 @@ VarRESubstitute(GNode *ctx MAKE_ATTR_UNUSED, Buf_AddByte(buf, ' '); \ added = 1 + added = 0; + wp = word; + pat = patternp; + if ((pat->flags & (VAR_SUB_ONE|VAR_SUB_MATCHED)) == (VAR_SUB_ONE|VAR_SUB_MATCHED)) xrv = REG_NOMATCH; @@ -1479,9 +1721,10 @@ VarRESubstitute(GNode *ctx MAKE_ATTR_UNUSED, for (rp = pat->replace; *rp; rp++) { if ((*rp == '\\') && ((rp[1] == '&') || (rp[1] == '\\'))) { MAYBE_ADD_SPACE(); - Buf_AddByte(buf, rp[1]); + Buf_AddByte(buf,rp[1]); rp++; - } else if ((*rp == '&') || + } + else if ((*rp == '&') || ((*rp == '\\') && isdigit((unsigned char)rp[1]))) { int n; const char *subbuf; @@ -1509,7 +1752,7 @@ VarRESubstitute(GNode *ctx MAKE_ATTR_UNUSED, Error("No match for subexpression %s", &errstr[0]); subbuf = ""; sublen = 0; - } else { + } else { subbuf = wp + pat->matches[n].rm_so; sublen = pat->matches[n].rm_eo - pat->matches[n].rm_so; } @@ -1542,47 +1785,61 @@ VarRESubstitute(GNode *ctx MAKE_ATTR_UNUSED, break; default: VarREError(xrv, &pat->re, "Unexpected regex error"); - /* fall through */ + /* fall through */ case REG_NOMATCH: if (*wp) { MAYBE_ADD_SPACE(); - Buf_AddBytes(buf, strlen(wp), wp); + Buf_AddBytes(buf,strlen(wp),wp); } break; } - return addSpace || added; + return(addSpace||added); } #endif -/* Callback function for VarModify to implement the :@var@...@ modifier of - * ODE make. We set the temp variable named in pattern.lhs to word and - * expand pattern.rhs. */ + +/*- + *----------------------------------------------------------------------- + * VarLoopExpand -- + * Implements the :@<temp>@<string>@ modifier of ODE make. + * We set the temp variable named in pattern.lhs to word and expand + * pattern.rhs storing the result in the passed buffer. + * + * Input: + * word Word to modify + * addSpace True if space should be added before + * other characters + * buf Buffer for result + * pattern Datafor substitution + * + * Results: + * TRUE if a space is needed before more characters are added. + * + * Side Effects: + * None. + * + *----------------------------------------------------------------------- + */ static Boolean VarLoopExpand(GNode *ctx MAKE_ATTR_UNUSED, Var_Parse_State *vpstate MAKE_ATTR_UNUSED, - const char *word, Boolean addSpace, Buffer *buf, - void *data) + char *word, Boolean addSpace, Buffer *buf, + void *loopp) { - VarLoop *loop = data; + VarLoop_t *loop = (VarLoop_t *)loopp; char *s; int slen; - if (*word) { - Var_Set_with_flags(loop->tvar, word, loop->ctxt, VAR_NO_EXPORT); - s = Var_Subst(NULL, loop->str, loop->ctxt, loop->flags); - if (DEBUG(VAR)) { - fprintf(debug_file, - "VarLoopExpand: in \"%s\", replace \"%s\" with \"%s\" " - "to \"%s\"\n", - word, loop->tvar, loop->str, s ? s : "(null)"); - } - if (s != NULL && *s != '\0') { - if (addSpace && *s != '\n') - Buf_AddByte(buf, ' '); - Buf_AddBytes(buf, (slen = strlen(s)), s); - addSpace = (slen > 0 && s[slen - 1] != '\n'); - } + if (word && *word) { + Var_Set(loop->tvar, word, loop->ctxt, VAR_NO_EXPORT); + s = Var_Subst(NULL, loop->str, loop->ctxt, loop->errnum | VARF_WANTRES); + if (s != NULL && *s != '\0') { + if (addSpace && *s != '\n') + Buf_AddByte(buf, ' '); + Buf_AddBytes(buf, (slen = strlen(s)), s); + addSpace = (slen > 0 && s[slen - 1] != '\n'); + } free(s); } return addSpace; @@ -1612,12 +1869,12 @@ static char * VarSelectWords(GNode *ctx MAKE_ATTR_UNUSED, Var_Parse_State *vpstate, const char *str, VarSelectWords_t *seldata) { - Buffer buf; /* Buffer for the new string */ - Boolean addSpace; /* TRUE if need to add a space to the - * buffer before adding the trimmed - * word */ - char **av; /* word list */ - char *as; /* word list memory */ + Buffer buf; /* Buffer for the new string */ + Boolean addSpace; /* TRUE if need to add a space to the + * buffer before adding the trimmed + * word */ + char **av; /* word list */ + char *as; /* word list memory */ int ac, i; int start, end, step; @@ -1627,7 +1884,7 @@ VarSelectWords(GNode *ctx MAKE_ATTR_UNUSED, Var_Parse_State *vpstate, if (vpstate->oneBigWord) { /* fake what brk_string() would do if there were only one word */ ac = 1; - av = bmake_malloc((ac + 1) * sizeof(char *)); + av = bmake_malloc((ac + 1) * sizeof(char *)); as = bmake_strdup(str); av[0] = as; av[1] = NULL; @@ -1678,35 +1935,42 @@ VarSelectWords(GNode *ctx MAKE_ATTR_UNUSED, Var_Parse_State *vpstate, } -/* Callback function for VarModify to implement the :tA modifier. - * Replace each word with the result of realpath() if successful. */ +/*- + * VarRealpath -- + * Replace each word with the result of realpath() + * if successful. + */ static Boolean VarRealpath(GNode *ctx MAKE_ATTR_UNUSED, Var_Parse_State *vpstate, - const char *word, Boolean addSpace, Buffer *buf, + char *word, Boolean addSpace, Buffer *buf, void *patternp MAKE_ATTR_UNUSED) { - struct stat st; - char rbuf[MAXPATHLEN]; - char *rp; - - if (addSpace && vpstate->varSpace) - Buf_AddByte(buf, vpstate->varSpace); - rp = cached_realpath(word, rbuf); - if (rp && *rp == '/' && stat(rp, &st) == 0) - word = rp; - - Buf_AddBytes(buf, strlen(word), word); - return TRUE; + struct stat st; + char rbuf[MAXPATHLEN]; + char *rp; + + if (addSpace && vpstate->varSpace) { + Buf_AddByte(buf, vpstate->varSpace); + } + addSpace = TRUE; + rp = cached_realpath(word, rbuf); + if (rp && *rp == '/' && stat(rp, &st) == 0) + word = rp; + + Buf_AddBytes(buf, strlen(word), word); + return(addSpace); } /*- *----------------------------------------------------------------------- - * Modify each of the words of the passed string using the given function. + * VarModify -- + * Modify each of the words of the passed string using the given + * function. Used to implement all modifiers. * * Input: * str String whose words should be trimmed * modProc Function to use to modify them - * data Custom data for the modProc + * datum Datum to pass it * * Results: * A string of all the words modified appropriately. @@ -1718,13 +1982,17 @@ VarRealpath(GNode *ctx MAKE_ATTR_UNUSED, Var_Parse_State *vpstate, */ static char * VarModify(GNode *ctx, Var_Parse_State *vpstate, - const char *str, VarModifyCallback modProc, void *datum) + const char *str, + Boolean (*modProc)(GNode *, Var_Parse_State *, char *, + Boolean, Buffer *, void *), + void *datum) { - Buffer buf; /* Buffer for the new string */ - Boolean addSpace; /* TRUE if need to add a space to the - * buffer before adding the trimmed word */ - char **av; /* word list */ - char *as; /* word list memory */ + Buffer buf; /* Buffer for the new string */ + Boolean addSpace; /* TRUE if need to add a space to the + * buffer before adding the trimmed + * word */ + char **av; /* word list */ + char *as; /* word list memory */ int ac, i; Buf_Init(&buf, 0); @@ -1733,7 +2001,7 @@ VarModify(GNode *ctx, Var_Parse_State *vpstate, if (vpstate->oneBigWord) { /* fake what brk_string() would do if there were only one word */ ac = 1; - av = bmake_malloc((ac + 1) * sizeof(char *)); + av = bmake_malloc((ac + 1) * sizeof(char *)); as = bmake_strdup(str); av[0] = as; av[1] = NULL; @@ -1741,14 +2009,10 @@ VarModify(GNode *ctx, Var_Parse_State *vpstate, av = brk_string(str, &ac, FALSE, &as); } - if (DEBUG(VAR)) { - fprintf(debug_file, "VarModify: split \"%s\" into %d words\n", - str, ac); + for (i = 0; i < ac; i++) { + addSpace = (*modProc)(ctx, vpstate, av[i], addSpace, &buf, datum); } - for (i = 0; i < ac; i++) - addSpace = modProc(ctx, vpstate, av[i], addSpace, &buf, datum); - free(as); free(av); @@ -1759,15 +2023,15 @@ VarModify(GNode *ctx, Var_Parse_State *vpstate, static int VarWordCompare(const void *a, const void *b) { - int r = strcmp(*(const char * const *)a, *(const char * const *)b); - return r; + int r = strcmp(*(const char * const *)a, *(const char * const *)b); + return r; } static int VarWordCompareReverse(const void *a, const void *b) { - int r = strcmp(*(const char * const *)b, *(const char * const *)a); - return r; + int r = strcmp(*(const char * const *)b, *(const char * const *)a); + return r; } /*- @@ -1790,40 +2054,44 @@ VarWordCompareReverse(const void *a, const void *b) static char * VarOrder(const char *str, const char otype) { - Buffer buf; /* Buffer for the new string */ - char **av; /* word list [first word does not count] */ - char *as; /* word list memory */ + Buffer buf; /* Buffer for the new string */ + char **av; /* word list [first word does not count] */ + char *as; /* word list memory */ int ac, i; Buf_Init(&buf, 0); av = brk_string(str, &ac, FALSE, &as); - if (ac > 0) { + if (ac > 0) switch (otype) { - case 'r': /* reverse sort alphabetically */ + case 'r': /* reverse sort alphabetically */ qsort(av, ac, sizeof(char *), VarWordCompareReverse); break; - case 's': /* sort alphabetically */ + case 's': /* sort alphabetically */ qsort(av, ac, sizeof(char *), VarWordCompare); break; - case 'x': /* randomize */ - { - /* - * We will use [ac..2] range for mod factors. This will produce - * random numbers in [(ac-1)..0] interval, and minimal - * reasonable value for mod factor is 2 (the mod 1 will produce - * 0 with probability 1). - */ - for (i = ac - 1; i > 0; i--) { - int rndidx = random() % (i + 1); - char *t = av[i]; + case 'x': /* randomize */ + { + int rndidx; + char *t; + + /* + * We will use [ac..2] range for mod factors. This will produce + * random numbers in [(ac-1)..0] interval, and minimal + * reasonable value for mod factor is 2 (the mod 1 will produce + * 0 with probability 1). + */ + for (i = ac-1; i > 0; i--) { + rndidx = random() % (i + 1); + if (i != rndidx) { + t = av[i]; av[i] = av[rndidx]; av[rndidx] = t; } } } - } + } /* end of switch */ for (i = 0; i < ac; i++) { Buf_AddBytes(&buf, strlen(av[i]), av[i]); @@ -1857,9 +2125,9 @@ VarOrder(const char *str, const char otype) static char * VarUniq(const char *str) { - Buffer buf; /* Buffer for new string */ - char **av; /* List of words to affect */ - char *as; /* Word list memory */ + Buffer buf; /* Buffer for new string */ + char **av; /* List of words to affect */ + char *as; /* Word list memory */ int ac, i, j; Buf_Init(&buf, 0); @@ -1901,10 +2169,10 @@ VarUniq(const char *str) static char * VarRange(const char *str, int ac) { - Buffer buf; /* Buffer for new string */ - char tmp[32]; /* each element */ - char **av; /* List of words to affect */ - char *as; /* Word list memory */ + Buffer buf; /* Buffer for new string */ + char tmp[32]; /* each element */ + char **av; /* List of words to affect */ + char *as; /* Word list memory */ int i, n; Buf_Init(&buf, 0); @@ -1933,8 +2201,7 @@ VarRange(const char *str, int ac) /*- *----------------------------------------------------------------------- * VarGetPattern -- - * During the parsing of a part of a modifier such as :S or :@, - * pass through the tstr looking for 1) escaped delimiters, + * Pass through the tstr looking for 1) escaped delimiters, * '$'s and backslashes (place the escaped character in * uninterpreted) and 2) unescaped $'s that aren't before * the delimiter (expand the variable substitution unless flags @@ -1955,8 +2222,8 @@ VarRange(const char *str, int ac) */ static char * VarGetPattern(GNode *ctxt, Var_Parse_State *vpstate MAKE_ATTR_UNUSED, - VarPattern_Flags flags, const char **tstr, int delim, - VarPattern_Flags *vflags, int *length, VarPattern *pattern) + int flags, const char **tstr, int delim, int *vflags, + int *length, VarPattern *pattern) { const char *cp; char *rstr; @@ -2003,8 +2270,8 @@ VarGetPattern(GNode *ctxt, Var_Parse_State *vpstate MAKE_ATTR_UNUSED, * delimiter, assume it's a variable * substitution and recurse. */ - cp2 = Var_Parse(cp, ctxt, errnum | (flags & VARF_WANTRES), - &len, &freeIt); + cp2 = Var_Parse(cp, ctxt, errnum | VARF_WANTRES, &len, + &freeIt); Buf_AddBytes(&buf, strlen(cp2), cp2); free(freeIt); cp += len - 1; @@ -2015,7 +2282,7 @@ VarGetPattern(GNode *ctxt, Var_Parse_State *vpstate MAKE_ATTR_UNUSED, /* * Find the end of this variable reference * and suck it in without further ado. - * It will be interpreted later. + * It will be interperated later. */ int have = *cp2; int want = (*cp2 == PROPEN) ? PRCLOSE : BRCLOSE; @@ -2035,7 +2302,8 @@ VarGetPattern(GNode *ctxt, Var_Parse_State *vpstate MAKE_ATTR_UNUSED, Buf_AddByte(&buf, *cp); } } - } else if (pattern && *cp == '&') + } + else if (pattern && *cp == '&') Buf_AddBytes(&buf, pattern->leftLen, pattern->lhs); else Buf_AddByte(&buf, *cp); @@ -2078,7 +2346,7 @@ VarQuote(char *str, Boolean quoteDollar) size_t nlen; if ((newline = Shell_GetNewline()) == NULL) - newline = "\\\n"; + newline = "\\\n"; nlen = strlen(newline); Buf_Init(&buf, 0); @@ -2119,13 +2387,13 @@ VarQuote(char *str, Boolean quoteDollar) *----------------------------------------------------------------------- */ static char * -VarHash(const char *str) +VarHash(char *str) { static const char hexdigits[16] = "0123456789abcdef"; Buffer buf; size_t len, len2; - const unsigned char *ustr = (const unsigned char *)str; - uint32_t h, k, c1, c2; + unsigned char *ustr = (unsigned char *)str; + unsigned int h, k, c1, c2; h = 0x971e137bU; c1 = 0x95543787U; @@ -2136,21 +2404,18 @@ VarHash(const char *str) k = 0; switch (len) { default: - k = ((uint32_t)ustr[3] << 24) | - ((uint32_t)ustr[2] << 16) | - ((uint32_t)ustr[1] << 8) | - (uint32_t)ustr[0]; + k = (ustr[3] << 24) | (ustr[2] << 16) | (ustr[1] << 8) | ustr[0]; len -= 4; ustr += 4; break; case 3: - k |= (uint32_t)ustr[2] << 16; + k |= (ustr[2] << 16); /* FALLTHROUGH */ case 2: - k |= (uint32_t)ustr[1] << 8; + k |= (ustr[1] << 8); /* FALLTHROUGH */ case 1: - k |= (uint32_t)ustr[0]; + k |= ustr[0]; len = 0; } c1 = c1 * 5 + 0x7b7d159cU; @@ -2161,20 +2426,20 @@ VarHash(const char *str) h = (h << 13) ^ (h >> 19); h = h * 5 + 0x52dce729U; h ^= k; - } - h ^= len2; - h *= 0x85ebca6b; - h ^= h >> 13; - h *= 0xc2b2ae35; - h ^= h >> 16; - - Buf_Init(&buf, 0); - for (len = 0; len < 8; ++len) { - Buf_AddByte(&buf, hexdigits[h & 15]); - h >>= 4; - } - - return Buf_Destroy(&buf, FALSE); + } + h ^= len2; + h *= 0x85ebca6b; + h ^= h >> 13; + h *= 0xc2b2ae35; + h ^= h >> 16; + + Buf_Init(&buf, 0); + for (len = 0; len < 8; ++len) { + Buf_AddByte(&buf, hexdigits[h & 15]); + h >>= 4; + } + + return Buf_Destroy(&buf, FALSE); } static char * @@ -2187,1022 +2452,11 @@ VarStrftime(const char *fmt, int zulu, time_t utc) if (!*fmt) fmt = "%c"; strftime(buf, sizeof(buf), fmt, zulu ? gmtime(&utc) : localtime(&utc)); - + buf[sizeof(buf) - 1] = '\0'; return bmake_strdup(buf); } -typedef struct { - /* const parameters */ - int startc; - int endc; - Var *v; - GNode *ctxt; - int flags; - int *lengthPtr; - void **freePtr; - - /* read-write */ - char *nstr; - const char *tstr; - const char *start; - const char *cp; /* Secondary pointer into str (place marker - * for tstr) */ - char termc; /* Character which terminated scan */ - int cnt; /* Used to count brace pairs when variable in - * in parens or braces */ - char delim; - int modifier; /* that we are processing */ - Var_Parse_State parsestate; /* Flags passed to helper functions */ - - /* result */ - char *newStr; /* New value to return */ -} ApplyModifiersState; - -/* we now have some modifiers with long names */ -#define STRMOD_MATCH(s, want, n) \ - (strncmp(s, want, n) == 0 && (s[n] == st->endc || s[n] == ':')) -#define STRMOD_MATCHX(s, want, n) \ - (strncmp(s, want, n) == 0 && \ - (s[n] == st->endc || s[n] == ':' || s[n] == '=')) -#define CHARMOD_MATCH(c) (c == st->endc || c == ':') - -/* :@var@...${var}...@ */ -static Boolean -ApplyModifier_At(ApplyModifiersState *st) { - VarLoop loop; - VarPattern_Flags vflags = VAR_NOSUBST; - - st->cp = ++(st->tstr); - st->delim = '@'; - loop.tvar = VarGetPattern( - st->ctxt, &st->parsestate, st->flags, &st->cp, st->delim, - &vflags, &loop.tvarLen, NULL); - if (loop.tvar == NULL) - return FALSE; - - loop.str = VarGetPattern( - st->ctxt, &st->parsestate, st->flags, &st->cp, st->delim, - &vflags, &loop.strLen, NULL); - if (loop.str == NULL) - return FALSE; - - st->termc = *st->cp; - st->delim = '\0'; - - loop.flags = st->flags & (VARF_UNDEFERR | VARF_WANTRES); - loop.ctxt = st->ctxt; - st->newStr = VarModify( - st->ctxt, &st->parsestate, st->nstr, VarLoopExpand, &loop); - Var_Delete(loop.tvar, st->ctxt); - free(loop.tvar); - free(loop.str); - return TRUE; -} - -/* :Ddefined or :Uundefined */ -static void -ApplyModifier_Defined(ApplyModifiersState *st) -{ - Buffer buf; /* Buffer for patterns */ - int nflags; - - if (st->flags & VARF_WANTRES) { - int wantres; - if (*st->tstr == 'U') - wantres = ((st->v->flags & VAR_JUNK) != 0); - else - wantres = ((st->v->flags & VAR_JUNK) == 0); - nflags = st->flags & ~VARF_WANTRES; - if (wantres) - nflags |= VARF_WANTRES; - } else - nflags = st->flags; - - /* - * Pass through tstr looking for 1) escaped delimiters, - * '$'s and backslashes (place the escaped character in - * uninterpreted) and 2) unescaped $'s that aren't before - * the delimiter (expand the variable substitution). - * The result is left in the Buffer buf. - */ - Buf_Init(&buf, 0); - for (st->cp = st->tstr + 1; - *st->cp != st->endc && *st->cp != ':' && *st->cp != '\0'; - st->cp++) { - if (*st->cp == '\\' && - (st->cp[1] == ':' || st->cp[1] == '$' || st->cp[1] == st->endc || - st->cp[1] == '\\')) { - Buf_AddByte(&buf, st->cp[1]); - st->cp++; - } else if (*st->cp == '$') { - /* - * If unescaped dollar sign, assume it's a - * variable substitution and recurse. - */ - char *cp2; - int len; - void *freeIt; - - cp2 = Var_Parse(st->cp, st->ctxt, nflags, &len, &freeIt); - Buf_AddBytes(&buf, strlen(cp2), cp2); - free(freeIt); - st->cp += len - 1; - } else { - Buf_AddByte(&buf, *st->cp); - } - } - - st->termc = *st->cp; - - if ((st->v->flags & VAR_JUNK) != 0) - st->v->flags |= VAR_KEEP; - if (nflags & VARF_WANTRES) { - st->newStr = Buf_Destroy(&buf, FALSE); - } else { - st->newStr = st->nstr; - Buf_Destroy(&buf, TRUE); - } -} - -/* :gmtime */ -static Boolean -ApplyModifier_Gmtime(ApplyModifiersState *st) -{ - time_t utc; - char *ep; - - st->cp = st->tstr + 1; /* make sure it is set */ - if (!STRMOD_MATCHX(st->tstr, "gmtime", 6)) - return FALSE; - if (st->tstr[6] == '=') { - utc = strtoul(&st->tstr[7], &ep, 10); - st->cp = ep; - } else { - utc = 0; - st->cp = st->tstr + 6; - } - st->newStr = VarStrftime(st->nstr, 1, utc); - st->termc = *st->cp; - return TRUE; -} - -/* :localtime */ -static Boolean -ApplyModifier_Localtime(ApplyModifiersState *st) -{ - time_t utc; - char *ep; - - st->cp = st->tstr + 1; /* make sure it is set */ - if (!STRMOD_MATCHX(st->tstr, "localtime", 9)) - return FALSE; - - if (st->tstr[9] == '=') { - utc = strtoul(&st->tstr[10], &ep, 10); - st->cp = ep; - } else { - utc = 0; - st->cp = st->tstr + 9; - } - st->newStr = VarStrftime(st->nstr, 0, utc); - st->termc = *st->cp; - return TRUE; -} - -/* :hash */ -static Boolean -ApplyModifier_Hash(ApplyModifiersState *st) -{ - st->cp = st->tstr + 1; /* make sure it is set */ - if (!STRMOD_MATCH(st->tstr, "hash", 4)) - return FALSE; - st->newStr = VarHash(st->nstr); - st->cp = st->tstr + 4; - st->termc = *st->cp; - return TRUE; -} - -/* :P */ -static void -ApplyModifier_Path(ApplyModifiersState *st) -{ - GNode *gn; - - if ((st->v->flags & VAR_JUNK) != 0) - st->v->flags |= VAR_KEEP; - gn = Targ_FindNode(st->v->name, TARG_NOCREATE); - if (gn == NULL || gn->type & OP_NOPATH) { - st->newStr = NULL; - } else if (gn->path) { - st->newStr = bmake_strdup(gn->path); - } else { - st->newStr = Dir_FindFile(st->v->name, Suff_FindPath(gn)); - } - if (!st->newStr) - st->newStr = bmake_strdup(st->v->name); - st->cp = ++st->tstr; - st->termc = *st->tstr; -} - -/* :!cmd! */ -static Boolean -ApplyModifier_Exclam(ApplyModifiersState *st) -{ - const char *emsg; - VarPattern pattern; - - pattern.flags = 0; - - st->delim = '!'; - emsg = NULL; - st->cp = ++st->tstr; - pattern.rhs = VarGetPattern( - st->ctxt, &st->parsestate, st->flags, &st->cp, st->delim, - NULL, &pattern.rightLen, NULL); - if (pattern.rhs == NULL) - return FALSE; - if (st->flags & VARF_WANTRES) - st->newStr = Cmd_Exec(pattern.rhs, &emsg); - else - st->newStr = varNoError; - free(UNCONST(pattern.rhs)); - if (emsg) - Error(emsg, st->nstr); - st->termc = *st->cp; - st->delim = '\0'; - if (st->v->flags & VAR_JUNK) - st->v->flags |= VAR_KEEP; - return TRUE; -} - -/* :range */ -static Boolean -ApplyModifier_Range(ApplyModifiersState *st) -{ - int n; - char *ep; - - st->cp = st->tstr + 1; /* make sure it is set */ - if (!STRMOD_MATCHX(st->tstr, "range", 5)) - return FALSE; - - if (st->tstr[5] == '=') { - n = strtoul(&st->tstr[6], &ep, 10); - st->cp = ep; - } else { - n = 0; - st->cp = st->tstr + 5; - } - st->newStr = VarRange(st->nstr, n); - st->termc = *st->cp; - return TRUE; -} - -/* :Mpattern or :Npattern */ -static void -ApplyModifier_Match(ApplyModifiersState *st) -{ - char *pattern; - const char *endpat; /* points just after end of pattern */ - char *cp2; - Boolean copy; /* pattern should be, or has been, copied */ - Boolean needSubst; - int nest; - - copy = FALSE; - needSubst = FALSE; - nest = 1; - /* - * In the loop below, ignore ':' unless we are at - * (or back to) the original brace level. - * XXX This will likely not work right if $() and ${} - * are intermixed. - */ - for (st->cp = st->tstr + 1; - *st->cp != '\0' && !(*st->cp == ':' && nest == 1); - st->cp++) { - if (*st->cp == '\\' && - (st->cp[1] == ':' || st->cp[1] == st->endc || - st->cp[1] == st->startc)) { - if (!needSubst) - copy = TRUE; - st->cp++; - continue; - } - if (*st->cp == '$') - needSubst = TRUE; - if (*st->cp == '(' || *st->cp == '{') - ++nest; - if (*st->cp == ')' || *st->cp == '}') { - --nest; - if (nest == 0) - break; - } - } - st->termc = *st->cp; - endpat = st->cp; - if (copy) { - /* - * Need to compress the \:'s out of the pattern, so - * allocate enough room to hold the uncompressed - * pattern (note that st->cp started at st->tstr+1, so - * st->cp - st->tstr takes the null byte into account) and - * compress the pattern into the space. - */ - pattern = bmake_malloc(st->cp - st->tstr); - for (cp2 = pattern, st->cp = st->tstr + 1; - st->cp < endpat; - st->cp++, cp2++) { - if ((*st->cp == '\\') && (st->cp+1 < endpat) && - (st->cp[1] == ':' || st->cp[1] == st->endc)) - st->cp++; - *cp2 = *st->cp; - } - *cp2 = '\0'; - endpat = cp2; - } else { - /* - * Either Var_Subst or VarModify will need a - * nul-terminated string soon, so construct one now. - */ - pattern = bmake_strndup(st->tstr+1, endpat - (st->tstr + 1)); - } - if (needSubst) { - /* pattern contains embedded '$', so use Var_Subst to expand it. */ - cp2 = pattern; - pattern = Var_Subst(NULL, cp2, st->ctxt, st->flags); - free(cp2); - } - if (DEBUG(VAR)) - fprintf(debug_file, "Pattern[%s] for [%s] is [%s]\n", - st->v->name, st->nstr, pattern); - if (*st->tstr == 'M') { - st->newStr = VarModify(st->ctxt, &st->parsestate, st->nstr, VarMatch, - pattern); - } else { - st->newStr = VarModify(st->ctxt, &st->parsestate, st->nstr, VarNoMatch, - pattern); - } - free(pattern); -} - -/* :S,from,to, */ -static Boolean -ApplyModifier_Subst(ApplyModifiersState *st) -{ - VarPattern pattern; - Var_Parse_State tmpparsestate; - - pattern.flags = 0; - tmpparsestate = st->parsestate; - st->delim = st->tstr[1]; - st->tstr += 2; - - /* - * If pattern begins with '^', it is anchored to the - * start of the word -- skip over it and flag pattern. - */ - if (*st->tstr == '^') { - pattern.flags |= VAR_MATCH_START; - st->tstr += 1; - } - - st->cp = st->tstr; - pattern.lhs = VarGetPattern( - st->ctxt, &st->parsestate, st->flags, &st->cp, st->delim, - &pattern.flags, &pattern.leftLen, NULL); - if (pattern.lhs == NULL) - return FALSE; - - pattern.rhs = VarGetPattern( - st->ctxt, &st->parsestate, st->flags, &st->cp, st->delim, - NULL, &pattern.rightLen, &pattern); - if (pattern.rhs == NULL) - return FALSE; - - /* - * Check for global substitution. If 'g' after the final - * delimiter, substitution is global and is marked that - * way. - */ - for (;; st->cp++) { - switch (*st->cp) { - case 'g': - pattern.flags |= VAR_SUB_GLOBAL; - continue; - case '1': - pattern.flags |= VAR_SUB_ONE; - continue; - case 'W': - tmpparsestate.oneBigWord = TRUE; - continue; - } - break; - } - - st->termc = *st->cp; - st->newStr = VarModify( - st->ctxt, &tmpparsestate, st->nstr, VarSubstitute, &pattern); - - /* Free the two strings. */ - free(UNCONST(pattern.lhs)); - free(UNCONST(pattern.rhs)); - st->delim = '\0'; - return TRUE; -} - -#ifndef NO_REGEX -/* :C,from,to, */ -static Boolean -ApplyModifier_Regex(ApplyModifiersState *st) -{ - VarREPattern pattern; - char *re; - int error; - Var_Parse_State tmpparsestate; - - pattern.flags = 0; - tmpparsestate = st->parsestate; - st->delim = st->tstr[1]; - st->tstr += 2; - - st->cp = st->tstr; - - re = VarGetPattern( - st->ctxt, &st->parsestate, st->flags, &st->cp, st->delim, - NULL, NULL, NULL); - if (re == NULL) - return FALSE; - - pattern.replace = VarGetPattern( - st->ctxt, &st->parsestate, st->flags, &st->cp, st->delim, - NULL, NULL, NULL); - if (pattern.replace == NULL) { - free(re); - return FALSE; - } - - for (;; st->cp++) { - switch (*st->cp) { - case 'g': - pattern.flags |= VAR_SUB_GLOBAL; - continue; - case '1': - pattern.flags |= VAR_SUB_ONE; - continue; - case 'W': - tmpparsestate.oneBigWord = TRUE; - continue; - } - break; - } - - st->termc = *st->cp; - - error = regcomp(&pattern.re, re, REG_EXTENDED); - free(re); - if (error) { - *st->lengthPtr = st->cp - st->start + 1; - VarREError(error, &pattern.re, "RE substitution error"); - free(pattern.replace); - return FALSE; - } - - pattern.nsub = pattern.re.re_nsub + 1; - if (pattern.nsub < 1) - pattern.nsub = 1; - if (pattern.nsub > 10) - pattern.nsub = 10; - pattern.matches = bmake_malloc(pattern.nsub * sizeof(regmatch_t)); - st->newStr = VarModify( - st->ctxt, &tmpparsestate, st->nstr, VarRESubstitute, &pattern); - regfree(&pattern.re); - free(pattern.replace); - free(pattern.matches); - st->delim = '\0'; - return TRUE; -} -#endif - -/* :tA, :tu, :tl, etc. */ -static Boolean -ApplyModifier_To(ApplyModifiersState *st) -{ - st->cp = st->tstr + 1; /* make sure it is set */ - if (st->tstr[1] != st->endc && st->tstr[1] != ':') { - if (st->tstr[1] == 's') { - /* Use the char (if any) at st->tstr[2] as the word separator. */ - VarPattern pattern; - - if (st->tstr[2] != st->endc && - (st->tstr[3] == st->endc || st->tstr[3] == ':')) { - /* ":ts<unrecognised><endc>" or - * ":ts<unrecognised>:" */ - st->parsestate.varSpace = st->tstr[2]; - st->cp = st->tstr + 3; - } else if (st->tstr[2] == st->endc || st->tstr[2] == ':') { - /* ":ts<endc>" or ":ts:" */ - st->parsestate.varSpace = 0; /* no separator */ - st->cp = st->tstr + 2; - } else if (st->tstr[2] == '\\') { - const char *xp = &st->tstr[3]; - int base = 8; /* assume octal */ - - switch (st->tstr[3]) { - case 'n': - st->parsestate.varSpace = '\n'; - st->cp = st->tstr + 4; - break; - case 't': - st->parsestate.varSpace = '\t'; - st->cp = st->tstr + 4; - break; - case 'x': - base = 16; - xp++; - goto get_numeric; - case '0': - base = 0; - goto get_numeric; - default: - if (isdigit((unsigned char)st->tstr[3])) { - char *ep; - get_numeric: - st->parsestate.varSpace = strtoul(xp, &ep, base); - if (*ep != ':' && *ep != st->endc) - return FALSE; - st->cp = ep; - } else { - /* ":ts<backslash><unrecognised>". */ - return FALSE; - } - break; - } - } else { - /* Found ":ts<unrecognised><unrecognised>". */ - return FALSE; - } - - st->termc = *st->cp; - - /* - * We cannot be certain that VarModify will be used - even if there - * is a subsequent modifier, so do a no-op VarSubstitute now to for - * str to be re-expanded without the spaces. - */ - pattern.flags = VAR_SUB_ONE; - pattern.lhs = pattern.rhs = "\032"; - pattern.leftLen = pattern.rightLen = 1; - - st->newStr = VarModify( - st->ctxt, &st->parsestate, st->nstr, VarSubstitute, &pattern); - } else if (st->tstr[2] == st->endc || st->tstr[2] == ':') { - /* Check for two-character options: ":tu", ":tl" */ - if (st->tstr[1] == 'A') { /* absolute path */ - st->newStr = VarModify( - st->ctxt, &st->parsestate, st->nstr, VarRealpath, NULL); - st->cp = st->tstr + 2; - st->termc = *st->cp; - } else if (st->tstr[1] == 'u') { - char *dp = bmake_strdup(st->nstr); - for (st->newStr = dp; *dp; dp++) - *dp = toupper((unsigned char)*dp); - st->cp = st->tstr + 2; - st->termc = *st->cp; - } else if (st->tstr[1] == 'l') { - char *dp = bmake_strdup(st->nstr); - for (st->newStr = dp; *dp; dp++) - *dp = tolower((unsigned char)*dp); - st->cp = st->tstr + 2; - st->termc = *st->cp; - } else if (st->tstr[1] == 'W' || st->tstr[1] == 'w') { - st->parsestate.oneBigWord = (st->tstr[1] == 'W'); - st->newStr = st->nstr; - st->cp = st->tstr + 2; - st->termc = *st->cp; - } else { - /* Found ":t<unrecognised>:" or ":t<unrecognised><endc>". */ - return FALSE; - } - } else { - /* Found ":t<unrecognised><unrecognised>". */ - return FALSE; - } - } else { - /* Found ":t<endc>" or ":t:". */ - return FALSE; - } - return TRUE; -} - -/* :[#], :[1], etc. */ -static int -ApplyModifier_Words(ApplyModifiersState *st) -{ - /* - * Look for the closing ']', recursively - * expanding any embedded variables. - * - * estr is a pointer to the expanded result, - * which we must free(). - */ - char *estr; - - st->cp = st->tstr + 1; /* point to char after '[' */ - st->delim = ']'; /* look for closing ']' */ - estr = VarGetPattern( - st->ctxt, &st->parsestate, st->flags, &st->cp, st->delim, - NULL, NULL, NULL); - if (estr == NULL) - return 'c'; /* report missing ']' */ - /* now st->cp points just after the closing ']' */ - st->delim = '\0'; - if (st->cp[0] != ':' && st->cp[0] != st->endc) { - /* Found junk after ']' */ - free(estr); - return 'b'; - } - if (estr[0] == '\0') { - /* Found empty square brackets in ":[]". */ - free(estr); - return 'b'; - } else if (estr[0] == '#' && estr[1] == '\0') { - /* Found ":[#]" */ - - /* - * We will need enough space for the decimal - * representation of an int. We calculate the - * space needed for the octal representation, - * and add enough slop to cope with a '-' sign - * (which should never be needed) and a '\0' - * string terminator. - */ - int newStrSize = (sizeof(int) * CHAR_BIT + 2) / 3 + 2; - - st->newStr = bmake_malloc(newStrSize); - if (st->parsestate.oneBigWord) { - strncpy(st->newStr, "1", newStrSize); - } else { - /* XXX: brk_string() is a rather expensive - * way of counting words. */ - char **av; - char *as; - int ac; - - av = brk_string(st->nstr, &ac, FALSE, &as); - snprintf(st->newStr, newStrSize, "%d", ac); - free(as); - free(av); - } - st->termc = *st->cp; - free(estr); - return 0; - } else if (estr[0] == '*' && estr[1] == '\0') { - /* Found ":[*]" */ - st->parsestate.oneBigWord = TRUE; - st->newStr = st->nstr; - st->termc = *st->cp; - free(estr); - return 0; - } else if (estr[0] == '@' && estr[1] == '\0') { - /* Found ":[@]" */ - st->parsestate.oneBigWord = FALSE; - st->newStr = st->nstr; - st->termc = *st->cp; - free(estr); - return 0; - } else { - char *ep; - /* - * We expect estr to contain a single - * integer for :[N], or two integers - * separated by ".." for :[start..end]. - */ - VarSelectWords_t seldata = { 0, 0 }; - - seldata.start = strtol(estr, &ep, 0); - if (ep == estr) { - /* Found junk instead of a number */ - free(estr); - return 'b'; - } else if (ep[0] == '\0') { - /* Found only one integer in :[N] */ - seldata.end = seldata.start; - } else if (ep[0] == '.' && ep[1] == '.' && ep[2] != '\0') { - /* Expecting another integer after ".." */ - ep += 2; - seldata.end = strtol(ep, &ep, 0); - if (ep[0] != '\0') { - /* Found junk after ".." */ - free(estr); - return 'b'; - } - } else { - /* Found junk instead of ".." */ - free(estr); - return 'b'; - } - /* - * Now seldata is properly filled in, - * but we still have to check for 0 as - * a special case. - */ - if (seldata.start == 0 && seldata.end == 0) { - /* ":[0]" or perhaps ":[0..0]" */ - st->parsestate.oneBigWord = TRUE; - st->newStr = st->nstr; - st->termc = *st->cp; - free(estr); - return 0; - } else if (seldata.start == 0 || seldata.end == 0) { - /* ":[0..N]" or ":[N..0]" */ - free(estr); - return 'b'; - } - /* Normal case: select the words described by seldata. */ - st->newStr = VarSelectWords( - st->ctxt, &st->parsestate, st->nstr, &seldata); - - st->termc = *st->cp; - free(estr); - return 0; - } -} - -/* :O or :Ox */ -static Boolean -ApplyModifier_Order(ApplyModifiersState *st) -{ - char otype; - - st->cp = st->tstr + 1; /* skip to the rest in any case */ - if (st->tstr[1] == st->endc || st->tstr[1] == ':') { - otype = 's'; - st->termc = *st->cp; - } else if ((st->tstr[1] == 'r' || st->tstr[1] == 'x') && - (st->tstr[2] == st->endc || st->tstr[2] == ':')) { - otype = st->tstr[1]; - st->cp = st->tstr + 2; - st->termc = *st->cp; - } else { - return FALSE; - } - st->newStr = VarOrder(st->nstr, otype); - return TRUE; -} - -/* :? then : else */ -static Boolean -ApplyModifier_IfElse(ApplyModifiersState *st) -{ - VarPattern pattern; - Boolean value; - int cond_rc; - VarPattern_Flags lhs_flags, rhs_flags; - - /* find ':', and then substitute accordingly */ - if (st->flags & VARF_WANTRES) { - cond_rc = Cond_EvalExpression(NULL, st->v->name, &value, 0, FALSE); - if (cond_rc == COND_INVALID) { - lhs_flags = rhs_flags = VAR_NOSUBST; - } else if (value) { - lhs_flags = 0; - rhs_flags = VAR_NOSUBST; - } else { - lhs_flags = VAR_NOSUBST; - rhs_flags = 0; - } - } else { - /* we are just consuming and discarding */ - cond_rc = value = 0; - lhs_flags = rhs_flags = VAR_NOSUBST; - } - pattern.flags = 0; - - st->cp = ++st->tstr; - st->delim = ':'; - pattern.lhs = VarGetPattern( - st->ctxt, &st->parsestate, st->flags, &st->cp, st->delim, - &lhs_flags, &pattern.leftLen, NULL); - if (pattern.lhs == NULL) - return FALSE; - - /* BROPEN or PROPEN */ - st->delim = st->endc; - pattern.rhs = VarGetPattern( - st->ctxt, &st->parsestate, st->flags, &st->cp, st->delim, - &rhs_flags, &pattern.rightLen, NULL); - if (pattern.rhs == NULL) - return FALSE; - - st->termc = *--st->cp; - st->delim = '\0'; - if (cond_rc == COND_INVALID) { - Error("Bad conditional expression `%s' in %s?%s:%s", - st->v->name, st->v->name, pattern.lhs, pattern.rhs); - return FALSE; - } - - if (value) { - st->newStr = UNCONST(pattern.lhs); - free(UNCONST(pattern.rhs)); - } else { - st->newStr = UNCONST(pattern.rhs); - free(UNCONST(pattern.lhs)); - } - if (st->v->flags & VAR_JUNK) - st->v->flags |= VAR_KEEP; - return TRUE; -} - -/* "::=", "::!=", "::+=", or "::?=" */ -static int -ApplyModifier_Assign(ApplyModifiersState *st) -{ - if (st->tstr[1] == '=' || - (st->tstr[2] == '=' && - (st->tstr[1] == '!' || st->tstr[1] == '+' || st->tstr[1] == '?'))) { - GNode *v_ctxt; /* context where v belongs */ - const char *emsg; - char *sv_name; - VarPattern pattern; - int how; - VarPattern_Flags vflags; - - if (st->v->name[0] == 0) - return 'b'; - - v_ctxt = st->ctxt; - sv_name = NULL; - ++st->tstr; - if (st->v->flags & VAR_JUNK) { - /* - * We need to bmake_strdup() it incase - * VarGetPattern() recurses. - */ - sv_name = st->v->name; - st->v->name = bmake_strdup(st->v->name); - } else if (st->ctxt != VAR_GLOBAL) { - Var *gv = VarFind(st->v->name, st->ctxt, 0); - if (gv == NULL) - v_ctxt = VAR_GLOBAL; - else - VarFreeEnv(gv, TRUE); - } - - switch ((how = *st->tstr)) { - case '+': - case '?': - case '!': - st->cp = &st->tstr[2]; - break; - default: - st->cp = ++st->tstr; - break; - } - st->delim = st->startc == PROPEN ? PRCLOSE : BRCLOSE; - pattern.flags = 0; - - vflags = (st->flags & VARF_WANTRES) ? 0 : VAR_NOSUBST; - pattern.rhs = VarGetPattern( - st->ctxt, &st->parsestate, st->flags, &st->cp, st->delim, - &vflags, &pattern.rightLen, NULL); - if (st->v->flags & VAR_JUNK) { - /* restore original name */ - free(st->v->name); - st->v->name = sv_name; - } - if (pattern.rhs == NULL) - return 'c'; - - st->termc = *--st->cp; - st->delim = '\0'; - - if (st->flags & VARF_WANTRES) { - switch (how) { - case '+': - Var_Append(st->v->name, pattern.rhs, v_ctxt); - break; - case '!': - st->newStr = Cmd_Exec(pattern.rhs, &emsg); - if (emsg) - Error(emsg, st->nstr); - else - Var_Set(st->v->name, st->newStr, v_ctxt); - free(st->newStr); - break; - case '?': - if ((st->v->flags & VAR_JUNK) == 0) - break; - /* FALLTHROUGH */ - default: - Var_Set(st->v->name, pattern.rhs, v_ctxt); - break; - } - } - free(UNCONST(pattern.rhs)); - st->newStr = varNoError; - return 0; - } - return 'd'; /* "::<unrecognised>" */ -} - -/* remember current value */ -static Boolean -ApplyModifier_Remember(ApplyModifiersState *st) -{ - st->cp = st->tstr + 1; /* make sure it is set */ - if (!STRMOD_MATCHX(st->tstr, "_", 1)) - return FALSE; - - if (st->tstr[1] == '=') { - char *np; - int n; - - st->cp++; - n = strcspn(st->cp, ":)}"); - np = bmake_strndup(st->cp, n + 1); - np[n] = '\0'; - st->cp = st->tstr + 2 + n; - Var_Set(np, st->nstr, st->ctxt); - free(np); - } else { - Var_Set("_", st->nstr, st->ctxt); - } - st->newStr = st->nstr; - st->termc = *st->cp; - return TRUE; -} - -#ifdef SYSVVARSUB -/* :from=to */ -static int -ApplyModifier_SysV(ApplyModifiersState *st) -{ - /* - * This can either be a bogus modifier or a System-V - * substitution command. - */ - VarPattern pattern; - Boolean eqFound = FALSE; - - pattern.flags = 0; - - /* - * First we make a pass through the string trying - * to verify it is a SYSV-make-style translation: - * it must be: <string1>=<string2>) - */ - st->cp = st->tstr; - st->cnt = 1; - while (*st->cp != '\0' && st->cnt) { - if (*st->cp == '=') { - eqFound = TRUE; - /* continue looking for st->endc */ - } else if (*st->cp == st->endc) - st->cnt--; - else if (*st->cp == st->startc) - st->cnt++; - if (st->cnt) - st->cp++; - } - if (*st->cp != st->endc || !eqFound) - return 0; - - st->delim = '='; - st->cp = st->tstr; - pattern.lhs = VarGetPattern( - st->ctxt, &st->parsestate, st->flags, &st->cp, st->delim, - &pattern.flags, &pattern.leftLen, NULL); - if (pattern.lhs == NULL) - return 'c'; - - st->delim = st->endc; - pattern.rhs = VarGetPattern( - st->ctxt, &st->parsestate, st->flags, &st->cp, st->delim, - NULL, &pattern.rightLen, &pattern); - if (pattern.rhs == NULL) - return 'c'; - - /* - * SYSV modifications happen through the whole - * string. Note the pattern is anchored at the end. - */ - st->termc = *--st->cp; - st->delim = '\0'; - if (pattern.leftLen == 0 && *st->nstr == '\0') { - st->newStr = st->nstr; /* special case */ - } else { - st->newStr = VarModify( - st->ctxt, &st->parsestate, st->nstr, VarSYSVMatch, &pattern); - } - free(UNCONST(pattern.lhs)); - free(UNCONST(pattern.rhs)); - return '='; -} -#endif - /* * Now we need to apply any modifiers the user wants applied. * These are: @@ -3287,21 +2541,42 @@ ApplyModifier_SysV(ApplyModifiersState *st) * ::!=<cmd> Assigns output of <cmd> as the new value of * variable. */ + +/* we now have some modifiers with long names */ +#define STRMOD_MATCH(s, want, n) \ + (strncmp(s, want, n) == 0 && (s[n] == endc || s[n] == ':')) +#define STRMOD_MATCHX(s, want, n) \ + (strncmp(s, want, n) == 0 && (s[n] == endc || s[n] == ':' || s[n] == '=')) +#define CHARMOD_MATCH(c) (c == endc || c == ':') + static char * ApplyModifiers(char *nstr, const char *tstr, - int const startc, int const endc, - Var * const v, GNode * const ctxt, int const flags, - int * const lengthPtr, void ** const freePtr) + int startc, int endc, + Var *v, GNode *ctxt, int flags, + int *lengthPtr, void **freePtr) { - ApplyModifiersState st = { - startc, endc, v, ctxt, flags, lengthPtr, freePtr, - nstr, tstr, tstr, tstr, - '\0', 0, '\0', 0, {' ', FALSE}, NULL - }; + const char *start; + const char *cp; /* Secondary pointer into str (place marker + * for tstr) */ + char *newStr; /* New value to return */ + char *ep; + char termc; /* Character which terminated scan */ + int cnt; /* Used to count brace pairs when variable in + * in parens or braces */ + char delim; + int modifier; /* that we are processing */ + Var_Parse_State parsestate; /* Flags passed to helper functions */ + time_t utc; /* for VarStrftime */ + + delim = '\0'; + parsestate.oneBigWord = FALSE; + parsestate.varSpace = ' '; /* word separator */ - while (*st.tstr && *st.tstr != st.endc) { + start = cp = tstr; - if (*st.tstr == '$') { + while (*tstr && *tstr != endc) { + + if (*tstr == '$') { /* * We may have some complex modifiers in a variable. */ @@ -3310,275 +2585,1145 @@ ApplyModifiers(char *nstr, const char *tstr, int rlen; int c; - rval = Var_Parse(st.tstr, st.ctxt, st.flags, &rlen, &freeIt); + rval = Var_Parse(tstr, ctxt, flags, &rlen, &freeIt); /* - * If we have not parsed up to st.endc or ':', + * If we have not parsed up to endc or ':', * we are not interested. */ if (rval != NULL && *rval && - (c = st.tstr[rlen]) != '\0' && + (c = tstr[rlen]) != '\0' && c != ':' && - c != st.endc) { + c != endc) { free(freeIt); goto apply_mods; } if (DEBUG(VAR)) { fprintf(debug_file, "Got '%s' from '%.*s'%.*s\n", - rval, rlen, st.tstr, rlen, st.tstr + rlen); + rval, rlen, tstr, rlen, tstr + rlen); } - st.tstr += rlen; + tstr += rlen; if (rval != NULL && *rval) { int used; - st.nstr = ApplyModifiers(st.nstr, rval, 0, 0, st.v, - st.ctxt, st.flags, &used, st.freePtr); - if (st.nstr == var_Error - || (st.nstr == varNoError && (st.flags & VARF_UNDEFERR) == 0) + nstr = ApplyModifiers(nstr, rval, + 0, 0, v, ctxt, flags, &used, freePtr); + if (nstr == var_Error + || (nstr == varNoError && (flags & VARF_UNDEFERR) == 0) || strlen(rval) != (size_t) used) { free(freeIt); - goto out; /* error already reported */ + goto out; /* error already reported */ } } free(freeIt); - if (*st.tstr == ':') - st.tstr++; - else if (!*st.tstr && st.endc) { - Error("Unclosed variable specification after complex " - "modifier (expecting '%c') for %s", st.endc, st.v->name); + if (*tstr == ':') + tstr++; + else if (!*tstr && endc) { + Error("Unclosed variable specification after complex modifier (expecting '%c') for %s", endc, v->name); goto out; } continue; } apply_mods: if (DEBUG(VAR)) { - fprintf(debug_file, "Applying[%s] :%c to \"%s\"\n", st.v->name, - *st.tstr, st.nstr); + fprintf(debug_file, "Applying[%s] :%c to \"%s\"\n", v->name, + *tstr, nstr); } - st.newStr = var_Error; - switch ((st.modifier = *st.tstr)) { + newStr = var_Error; + switch ((modifier = *tstr)) { case ':': { - int res = ApplyModifier_Assign(&st); - if (res == 'b') - goto bad_modifier; - if (res == 'c') + if (tstr[1] == '=' || + (tstr[2] == '=' && + (tstr[1] == '!' || tstr[1] == '+' || tstr[1] == '?'))) { + /* + * "::=", "::!=", "::+=", or "::?=" + */ + GNode *v_ctxt; /* context where v belongs */ + const char *emsg; + char *sv_name; + VarPattern pattern; + int how; + int vflags; + + if (v->name[0] == 0) + goto bad_modifier; + + v_ctxt = ctxt; + sv_name = NULL; + ++tstr; + if (v->flags & VAR_JUNK) { + /* + * We need to bmake_strdup() it incase + * VarGetPattern() recurses. + */ + sv_name = v->name; + v->name = bmake_strdup(v->name); + } else if (ctxt != VAR_GLOBAL) { + Var *gv = VarFind(v->name, ctxt, 0); + if (gv == NULL) + v_ctxt = VAR_GLOBAL; + else + VarFreeEnv(gv, TRUE); + } + + switch ((how = *tstr)) { + case '+': + case '?': + case '!': + cp = &tstr[2]; + break; + default: + cp = ++tstr; + break; + } + delim = startc == PROPEN ? PRCLOSE : BRCLOSE; + pattern.flags = 0; + + vflags = (flags & VARF_WANTRES) ? 0 : VAR_NOSUBST; + pattern.rhs = VarGetPattern(ctxt, &parsestate, flags, + &cp, delim, &vflags, + &pattern.rightLen, + NULL); + if (v->flags & VAR_JUNK) { + /* restore original name */ + free(v->name); + v->name = sv_name; + } + if (pattern.rhs == NULL) + goto cleanup; + + termc = *--cp; + delim = '\0'; + + if (flags & VARF_WANTRES) { + switch (how) { + case '+': + Var_Append(v->name, pattern.rhs, v_ctxt); + break; + case '!': + newStr = Cmd_Exec(pattern.rhs, &emsg); + if (emsg) + Error(emsg, nstr); + else + Var_Set(v->name, newStr, v_ctxt, 0); + free(newStr); + break; + case '?': + if ((v->flags & VAR_JUNK) == 0) + break; + /* FALLTHROUGH */ + default: + Var_Set(v->name, pattern.rhs, v_ctxt, 0); + break; + } + } + free(UNCONST(pattern.rhs)); + newStr = varNoError; + break; + } + goto default_case; /* "::<unrecognised>" */ + } + case '@': + { + VarLoop_t loop; + int vflags = VAR_NOSUBST; + + cp = ++tstr; + delim = '@'; + if ((loop.tvar = VarGetPattern(ctxt, &parsestate, flags, + &cp, delim, + &vflags, &loop.tvarLen, + NULL)) == NULL) goto cleanup; - if (res == 'd') - goto default_case; + + if ((loop.str = VarGetPattern(ctxt, &parsestate, flags, + &cp, delim, + &vflags, &loop.strLen, + NULL)) == NULL) + goto cleanup; + + termc = *cp; + delim = '\0'; + + loop.errnum = flags & VARF_UNDEFERR; + loop.ctxt = ctxt; + newStr = VarModify(ctxt, &parsestate, nstr, VarLoopExpand, + &loop); + Var_Delete(loop.tvar, ctxt); + free(loop.tvar); + free(loop.str); break; } - case '@': - ApplyModifier_At(&st); - break; - case '_': - if (!ApplyModifier_Remember(&st)) - goto default_case; - break; + case '_': /* remember current value */ + cp = tstr + 1; /* make sure it is set */ + if (STRMOD_MATCHX(tstr, "_", 1)) { + if (tstr[1] == '=') { + char *np; + int n; + + cp++; + n = strcspn(cp, ":)}"); + np = bmake_strndup(cp, n+1); + np[n] = '\0'; + cp = tstr + 2 + n; + Var_Set(np, nstr, ctxt, 0); + free(np); + } else { + Var_Set("_", nstr, ctxt, 0); + } + newStr = nstr; + termc = *cp; + break; + } + goto default_case; case 'D': case 'U': - ApplyModifier_Defined(&st); - break; + { + Buffer buf; /* Buffer for patterns */ + int nflags; + + if (flags & VARF_WANTRES) { + int wantres; + if (*tstr == 'U') + wantres = ((v->flags & VAR_JUNK) != 0); + else + wantres = ((v->flags & VAR_JUNK) == 0); + nflags = flags & ~VARF_WANTRES; + if (wantres) + nflags |= VARF_WANTRES; + } else + nflags = flags; + /* + * Pass through tstr looking for 1) escaped delimiters, + * '$'s and backslashes (place the escaped character in + * uninterpreted) and 2) unescaped $'s that aren't before + * the delimiter (expand the variable substitution). + * The result is left in the Buffer buf. + */ + Buf_Init(&buf, 0); + for (cp = tstr + 1; + *cp != endc && *cp != ':' && *cp != '\0'; + cp++) { + if ((*cp == '\\') && + ((cp[1] == ':') || + (cp[1] == '$') || + (cp[1] == endc) || + (cp[1] == '\\'))) + { + Buf_AddByte(&buf, cp[1]); + cp++; + } else if (*cp == '$') { + /* + * If unescaped dollar sign, assume it's a + * variable substitution and recurse. + */ + char *cp2; + int len; + void *freeIt; + + cp2 = Var_Parse(cp, ctxt, nflags, &len, &freeIt); + Buf_AddBytes(&buf, strlen(cp2), cp2); + free(freeIt); + cp += len - 1; + } else { + Buf_AddByte(&buf, *cp); + } + } + + termc = *cp; + + if ((v->flags & VAR_JUNK) != 0) + v->flags |= VAR_KEEP; + if (nflags & VARF_WANTRES) { + newStr = Buf_Destroy(&buf, FALSE); + } else { + newStr = nstr; + Buf_Destroy(&buf, TRUE); + } + break; + } case 'L': { - if ((st.v->flags & VAR_JUNK) != 0) - st.v->flags |= VAR_KEEP; - st.newStr = bmake_strdup(st.v->name); - st.cp = ++st.tstr; - st.termc = *st.tstr; + if ((v->flags & VAR_JUNK) != 0) + v->flags |= VAR_KEEP; + newStr = bmake_strdup(v->name); + cp = ++tstr; + termc = *tstr; break; } case 'P': - ApplyModifier_Path(&st); - break; + { + GNode *gn; + + if ((v->flags & VAR_JUNK) != 0) + v->flags |= VAR_KEEP; + gn = Targ_FindNode(v->name, TARG_NOCREATE); + if (gn == NULL || gn->type & OP_NOPATH) { + newStr = NULL; + } else if (gn->path) { + newStr = bmake_strdup(gn->path); + } else { + newStr = Dir_FindFile(v->name, Suff_FindPath(gn)); + } + if (!newStr) { + newStr = bmake_strdup(v->name); + } + cp = ++tstr; + termc = *tstr; + break; + } case '!': - if (!ApplyModifier_Exclam(&st)) - goto cleanup; - break; - case '[': { - int res = ApplyModifier_Words(&st); - if (res == 'b') - goto bad_modifier; - if (res == 'c') + const char *emsg; + VarPattern pattern; + pattern.flags = 0; + + delim = '!'; + emsg = NULL; + cp = ++tstr; + if ((pattern.rhs = VarGetPattern(ctxt, &parsestate, flags, + &cp, delim, + NULL, &pattern.rightLen, + NULL)) == NULL) goto cleanup; + if (flags & VARF_WANTRES) + newStr = Cmd_Exec(pattern.rhs, &emsg); + else + newStr = varNoError; + free(UNCONST(pattern.rhs)); + if (emsg) + Error(emsg, nstr); + termc = *cp; + delim = '\0'; + if (v->flags & VAR_JUNK) { + v->flags |= VAR_KEEP; + } break; } + case '[': + { + /* + * Look for the closing ']', recursively + * expanding any embedded variables. + * + * estr is a pointer to the expanded result, + * which we must free(). + */ + char *estr; + + cp = tstr+1; /* point to char after '[' */ + delim = ']'; /* look for closing ']' */ + estr = VarGetPattern(ctxt, &parsestate, + flags, &cp, delim, + NULL, NULL, NULL); + if (estr == NULL) + goto cleanup; /* report missing ']' */ + /* now cp points just after the closing ']' */ + delim = '\0'; + if (cp[0] != ':' && cp[0] != endc) { + /* Found junk after ']' */ + free(estr); + goto bad_modifier; + } + if (estr[0] == '\0') { + /* Found empty square brackets in ":[]". */ + free(estr); + goto bad_modifier; + } else if (estr[0] == '#' && estr[1] == '\0') { + /* Found ":[#]" */ + + /* + * We will need enough space for the decimal + * representation of an int. We calculate the + * space needed for the octal representation, + * and add enough slop to cope with a '-' sign + * (which should never be needed) and a '\0' + * string terminator. + */ + int newStrSize = + (sizeof(int) * CHAR_BIT + 2) / 3 + 2; + + newStr = bmake_malloc(newStrSize); + if (parsestate.oneBigWord) { + strncpy(newStr, "1", newStrSize); + } else { + /* XXX: brk_string() is a rather expensive + * way of counting words. */ + char **av; + char *as; + int ac; + + av = brk_string(nstr, &ac, FALSE, &as); + snprintf(newStr, newStrSize, "%d", ac); + free(as); + free(av); + } + termc = *cp; + free(estr); + break; + } else if (estr[0] == '*' && estr[1] == '\0') { + /* Found ":[*]" */ + parsestate.oneBigWord = TRUE; + newStr = nstr; + termc = *cp; + free(estr); + break; + } else if (estr[0] == '@' && estr[1] == '\0') { + /* Found ":[@]" */ + parsestate.oneBigWord = FALSE; + newStr = nstr; + termc = *cp; + free(estr); + break; + } else { + /* + * We expect estr to contain a single + * integer for :[N], or two integers + * separated by ".." for :[start..end]. + */ + VarSelectWords_t seldata = { 0, 0 }; + + seldata.start = strtol(estr, &ep, 0); + if (ep == estr) { + /* Found junk instead of a number */ + free(estr); + goto bad_modifier; + } else if (ep[0] == '\0') { + /* Found only one integer in :[N] */ + seldata.end = seldata.start; + } else if (ep[0] == '.' && ep[1] == '.' && + ep[2] != '\0') { + /* Expecting another integer after ".." */ + ep += 2; + seldata.end = strtol(ep, &ep, 0); + if (ep[0] != '\0') { + /* Found junk after ".." */ + free(estr); + goto bad_modifier; + } + } else { + /* Found junk instead of ".." */ + free(estr); + goto bad_modifier; + } + /* + * Now seldata is properly filled in, + * but we still have to check for 0 as + * a special case. + */ + if (seldata.start == 0 && seldata.end == 0) { + /* ":[0]" or perhaps ":[0..0]" */ + parsestate.oneBigWord = TRUE; + newStr = nstr; + termc = *cp; + free(estr); + break; + } else if (seldata.start == 0 || + seldata.end == 0) { + /* ":[0..N]" or ":[N..0]" */ + free(estr); + goto bad_modifier; + } + /* + * Normal case: select the words + * described by seldata. + */ + newStr = VarSelectWords(ctxt, &parsestate, + nstr, &seldata); + + termc = *cp; + free(estr); + break; + } + + } case 'g': - if (!ApplyModifier_Gmtime(&st)) + cp = tstr + 1; /* make sure it is set */ + if (STRMOD_MATCHX(tstr, "gmtime", 6)) { + if (tstr[6] == '=') { + utc = strtoul(&tstr[7], &ep, 10); + cp = ep; + } else { + utc = 0; + cp = tstr + 6; + } + newStr = VarStrftime(nstr, 1, utc); + termc = *cp; + } else { goto default_case; + } break; case 'h': - if (!ApplyModifier_Hash(&st)) + cp = tstr + 1; /* make sure it is set */ + if (STRMOD_MATCH(tstr, "hash", 4)) { + newStr = VarHash(nstr); + cp = tstr + 4; + termc = *cp; + } else { goto default_case; + } break; case 'l': - if (!ApplyModifier_Localtime(&st)) + cp = tstr + 1; /* make sure it is set */ + if (STRMOD_MATCHX(tstr, "localtime", 9)) { + if (tstr[9] == '=') { + utc = strtoul(&tstr[10], &ep, 10); + cp = ep; + } else { + utc = 0; + cp = tstr + 9; + } + newStr = VarStrftime(nstr, 0, utc); + termc = *cp; + } else { goto default_case; + } break; case 't': - if (!ApplyModifier_To(&st)) - goto bad_modifier; - break; + { + cp = tstr + 1; /* make sure it is set */ + if (tstr[1] != endc && tstr[1] != ':') { + if (tstr[1] == 's') { + /* + * Use the char (if any) at tstr[2] + * as the word separator. + */ + VarPattern pattern; + + if (tstr[2] != endc && + (tstr[3] == endc || tstr[3] == ':')) { + /* ":ts<unrecognised><endc>" or + * ":ts<unrecognised>:" */ + parsestate.varSpace = tstr[2]; + cp = tstr + 3; + } else if (tstr[2] == endc || tstr[2] == ':') { + /* ":ts<endc>" or ":ts:" */ + parsestate.varSpace = 0; /* no separator */ + cp = tstr + 2; + } else if (tstr[2] == '\\') { + const char *xp = &tstr[3]; + int base = 8; /* assume octal */ + + switch (tstr[3]) { + case 'n': + parsestate.varSpace = '\n'; + cp = tstr + 4; + break; + case 't': + parsestate.varSpace = '\t'; + cp = tstr + 4; + break; + case 'x': + base = 16; + xp++; + goto get_numeric; + case '0': + base = 0; + goto get_numeric; + default: + if (isdigit((unsigned char)tstr[3])) { + + get_numeric: + parsestate.varSpace = + strtoul(xp, &ep, base); + if (*ep != ':' && *ep != endc) + goto bad_modifier; + cp = ep; + } else { + /* + * ":ts<backslash><unrecognised>". + */ + goto bad_modifier; + } + break; + } + } else { + /* + * Found ":ts<unrecognised><unrecognised>". + */ + goto bad_modifier; + } + + termc = *cp; + + /* + * We cannot be certain that VarModify + * will be used - even if there is a + * subsequent modifier, so do a no-op + * VarSubstitute now to for str to be + * re-expanded without the spaces. + */ + pattern.flags = VAR_SUB_ONE; + pattern.lhs = pattern.rhs = "\032"; + pattern.leftLen = pattern.rightLen = 1; + + newStr = VarModify(ctxt, &parsestate, nstr, + VarSubstitute, + &pattern); + } else if (tstr[2] == endc || tstr[2] == ':') { + /* + * Check for two-character options: + * ":tu", ":tl" + */ + if (tstr[1] == 'A') { /* absolute path */ + newStr = VarModify(ctxt, &parsestate, nstr, + VarRealpath, NULL); + cp = tstr + 2; + termc = *cp; + } else if (tstr[1] == 'u') { + char *dp = bmake_strdup(nstr); + for (newStr = dp; *dp; dp++) + *dp = toupper((unsigned char)*dp); + cp = tstr + 2; + termc = *cp; + } else if (tstr[1] == 'l') { + char *dp = bmake_strdup(nstr); + for (newStr = dp; *dp; dp++) + *dp = tolower((unsigned char)*dp); + cp = tstr + 2; + termc = *cp; + } else if (tstr[1] == 'W' || tstr[1] == 'w') { + parsestate.oneBigWord = (tstr[1] == 'W'); + newStr = nstr; + cp = tstr + 2; + termc = *cp; + } else { + /* Found ":t<unrecognised>:" or + * ":t<unrecognised><endc>". */ + goto bad_modifier; + } + } else { + /* + * Found ":t<unrecognised><unrecognised>". + */ + goto bad_modifier; + } + } else { + /* + * Found ":t<endc>" or ":t:". + */ + goto bad_modifier; + } + break; + } case 'N': case 'M': - ApplyModifier_Match(&st); - break; + { + char *pattern; + const char *endpat; /* points just after end of pattern */ + char *cp2; + Boolean copy; /* pattern should be, or has been, copied */ + Boolean needSubst; + int nest; + + copy = FALSE; + needSubst = FALSE; + nest = 1; + /* + * In the loop below, ignore ':' unless we are at + * (or back to) the original brace level. + * XXX This will likely not work right if $() and ${} + * are intermixed. + */ + for (cp = tstr + 1; + *cp != '\0' && !(*cp == ':' && nest == 1); + cp++) + { + if (*cp == '\\' && + (cp[1] == ':' || + cp[1] == endc || cp[1] == startc)) { + if (!needSubst) { + copy = TRUE; + } + cp++; + continue; + } + if (*cp == '$') { + needSubst = TRUE; + } + if (*cp == '(' || *cp == '{') + ++nest; + if (*cp == ')' || *cp == '}') { + --nest; + if (nest == 0) + break; + } + } + termc = *cp; + endpat = cp; + if (copy) { + /* + * Need to compress the \:'s out of the pattern, so + * allocate enough room to hold the uncompressed + * pattern (note that cp started at tstr+1, so + * cp - tstr takes the null byte into account) and + * compress the pattern into the space. + */ + pattern = bmake_malloc(cp - tstr); + for (cp2 = pattern, cp = tstr + 1; + cp < endpat; + cp++, cp2++) + { + if ((*cp == '\\') && (cp+1 < endpat) && + (cp[1] == ':' || cp[1] == endc)) { + cp++; + } + *cp2 = *cp; + } + *cp2 = '\0'; + endpat = cp2; + } else { + /* + * Either Var_Subst or VarModify will need a + * nul-terminated string soon, so construct one now. + */ + pattern = bmake_strndup(tstr+1, endpat - (tstr + 1)); + } + if (needSubst) { + /* + * pattern contains embedded '$', so use Var_Subst to + * expand it. + */ + cp2 = pattern; + pattern = Var_Subst(NULL, cp2, ctxt, flags | VARF_WANTRES); + free(cp2); + } + if (DEBUG(VAR)) + fprintf(debug_file, "Pattern[%s] for [%s] is [%s]\n", + v->name, nstr, pattern); + if (*tstr == 'M') { + newStr = VarModify(ctxt, &parsestate, nstr, VarMatch, + pattern); + } else { + newStr = VarModify(ctxt, &parsestate, nstr, VarNoMatch, + pattern); + } + free(pattern); + break; + } case 'S': - if (!ApplyModifier_Subst(&st)) - goto cleanup; - break; + { + VarPattern pattern; + Var_Parse_State tmpparsestate; + + pattern.flags = 0; + tmpparsestate = parsestate; + delim = tstr[1]; + tstr += 2; + + /* + * If pattern begins with '^', it is anchored to the + * start of the word -- skip over it and flag pattern. + */ + if (*tstr == '^') { + pattern.flags |= VAR_MATCH_START; + tstr += 1; + } + + cp = tstr; + if ((pattern.lhs = VarGetPattern(ctxt, &parsestate, flags, + &cp, delim, + &pattern.flags, + &pattern.leftLen, + NULL)) == NULL) + goto cleanup; + + if ((pattern.rhs = VarGetPattern(ctxt, &parsestate, flags, + &cp, delim, NULL, + &pattern.rightLen, + &pattern)) == NULL) + goto cleanup; + + /* + * Check for global substitution. If 'g' after the final + * delimiter, substitution is global and is marked that + * way. + */ + for (;; cp++) { + switch (*cp) { + case 'g': + pattern.flags |= VAR_SUB_GLOBAL; + continue; + case '1': + pattern.flags |= VAR_SUB_ONE; + continue; + case 'W': + tmpparsestate.oneBigWord = TRUE; + continue; + } + break; + } + + termc = *cp; + newStr = VarModify(ctxt, &tmpparsestate, nstr, + VarSubstitute, + &pattern); + + /* + * Free the two strings. + */ + free(UNCONST(pattern.lhs)); + free(UNCONST(pattern.rhs)); + delim = '\0'; + break; + } case '?': - if (!ApplyModifier_IfElse(&st)) - goto cleanup; - break; + { + VarPattern pattern; + Boolean value; + int cond_rc; + int lhs_flags, rhs_flags; + + /* find ':', and then substitute accordingly */ + if (flags & VARF_WANTRES) { + cond_rc = Cond_EvalExpression(NULL, v->name, &value, 0, FALSE); + if (cond_rc == COND_INVALID) { + lhs_flags = rhs_flags = VAR_NOSUBST; + } else if (value) { + lhs_flags = 0; + rhs_flags = VAR_NOSUBST; + } else { + lhs_flags = VAR_NOSUBST; + rhs_flags = 0; + } + } else { + /* we are just consuming and discarding */ + cond_rc = value = 0; + lhs_flags = rhs_flags = VAR_NOSUBST; + } + pattern.flags = 0; + + cp = ++tstr; + delim = ':'; + if ((pattern.lhs = VarGetPattern(ctxt, &parsestate, flags, + &cp, delim, &lhs_flags, + &pattern.leftLen, + NULL)) == NULL) + goto cleanup; + + /* BROPEN or PROPEN */ + delim = endc; + if ((pattern.rhs = VarGetPattern(ctxt, &parsestate, flags, + &cp, delim, &rhs_flags, + &pattern.rightLen, + NULL)) == NULL) + goto cleanup; + + termc = *--cp; + delim = '\0'; + if (cond_rc == COND_INVALID) { + Error("Bad conditional expression `%s' in %s?%s:%s", + v->name, v->name, pattern.lhs, pattern.rhs); + goto cleanup; + } + + if (value) { + newStr = UNCONST(pattern.lhs); + free(UNCONST(pattern.rhs)); + } else { + newStr = UNCONST(pattern.rhs); + free(UNCONST(pattern.lhs)); + } + if (v->flags & VAR_JUNK) { + v->flags |= VAR_KEEP; + } + break; + } #ifndef NO_REGEX case 'C': - if (!ApplyModifier_Regex(&st)) - goto cleanup; - break; + { + VarREPattern pattern; + char *re; + int error; + Var_Parse_State tmpparsestate; + + pattern.flags = 0; + tmpparsestate = parsestate; + delim = tstr[1]; + tstr += 2; + + cp = tstr; + + if ((re = VarGetPattern(ctxt, &parsestate, flags, &cp, delim, + NULL, NULL, NULL)) == NULL) + goto cleanup; + + if ((pattern.replace = VarGetPattern(ctxt, &parsestate, + flags, &cp, delim, NULL, + NULL, NULL)) == NULL){ + free(re); + goto cleanup; + } + + for (;; cp++) { + switch (*cp) { + case 'g': + pattern.flags |= VAR_SUB_GLOBAL; + continue; + case '1': + pattern.flags |= VAR_SUB_ONE; + continue; + case 'W': + tmpparsestate.oneBigWord = TRUE; + continue; + } + break; + } + + termc = *cp; + + error = regcomp(&pattern.re, re, REG_EXTENDED); + free(re); + if (error) { + *lengthPtr = cp - start + 1; + VarREError(error, &pattern.re, "RE substitution error"); + free(pattern.replace); + goto cleanup; + } + + pattern.nsub = pattern.re.re_nsub + 1; + if (pattern.nsub < 1) + pattern.nsub = 1; + if (pattern.nsub > 10) + pattern.nsub = 10; + pattern.matches = bmake_malloc(pattern.nsub * + sizeof(regmatch_t)); + newStr = VarModify(ctxt, &tmpparsestate, nstr, + VarRESubstitute, + &pattern); + regfree(&pattern.re); + free(pattern.replace); + free(pattern.matches); + delim = '\0'; + break; + } #endif case 'q': case 'Q': - if (st.tstr[1] == st.endc || st.tstr[1] == ':') { - st.newStr = VarQuote(st.nstr, st.modifier == 'q'); - st.cp = st.tstr + 1; - st.termc = *st.cp; + if (tstr[1] == endc || tstr[1] == ':') { + newStr = VarQuote(nstr, modifier == 'q'); + cp = tstr + 1; + termc = *cp; break; } goto default_case; case 'T': - if (st.tstr[1] == st.endc || st.tstr[1] == ':') { - st.newStr = VarModify(st.ctxt, &st.parsestate, st.nstr, VarTail, + if (tstr[1] == endc || tstr[1] == ':') { + newStr = VarModify(ctxt, &parsestate, nstr, VarTail, NULL); - st.cp = st.tstr + 1; - st.termc = *st.cp; + cp = tstr + 1; + termc = *cp; break; } goto default_case; case 'H': - if (st.tstr[1] == st.endc || st.tstr[1] == ':') { - st.newStr = VarModify(st.ctxt, &st.parsestate, st.nstr, VarHead, + if (tstr[1] == endc || tstr[1] == ':') { + newStr = VarModify(ctxt, &parsestate, nstr, VarHead, NULL); - st.cp = st.tstr + 1; - st.termc = *st.cp; + cp = tstr + 1; + termc = *cp; break; } goto default_case; case 'E': - if (st.tstr[1] == st.endc || st.tstr[1] == ':') { - st.newStr = VarModify(st.ctxt, &st.parsestate, st.nstr, VarSuffix, + if (tstr[1] == endc || tstr[1] == ':') { + newStr = VarModify(ctxt, &parsestate, nstr, VarSuffix, NULL); - st.cp = st.tstr + 1; - st.termc = *st.cp; + cp = tstr + 1; + termc = *cp; break; } goto default_case; case 'R': - if (st.tstr[1] == st.endc || st.tstr[1] == ':') { - st.newStr = VarModify(st.ctxt, &st.parsestate, st.nstr, VarRoot, + if (tstr[1] == endc || tstr[1] == ':') { + newStr = VarModify(ctxt, &parsestate, nstr, VarRoot, NULL); - st.cp = st.tstr + 1; - st.termc = *st.cp; + cp = tstr + 1; + termc = *cp; break; } goto default_case; case 'r': - if (!ApplyModifier_Range(&st)) - goto default_case; - break; + cp = tstr + 1; /* make sure it is set */ + if (STRMOD_MATCHX(tstr, "range", 5)) { + int n; + + if (tstr[5] == '=') { + n = strtoul(&tstr[6], &ep, 10); + cp = ep; + } else { + n = 0; + cp = tstr + 5; + } + newStr = VarRange(nstr, n); + termc = *cp; + break; + } + goto default_case; case 'O': - if (!ApplyModifier_Order(&st)) - goto bad_modifier; - break; + { + char otype; + + cp = tstr + 1; /* skip to the rest in any case */ + if (tstr[1] == endc || tstr[1] == ':') { + otype = 's'; + termc = *cp; + } else if ( (tstr[1] == 'r' || tstr[1] == 'x') && + (tstr[2] == endc || tstr[2] == ':') ) { + otype = tstr[1]; + cp = tstr + 2; + termc = *cp; + } else { + goto bad_modifier; + } + newStr = VarOrder(nstr, otype); + break; + } case 'u': - if (st.tstr[1] == st.endc || st.tstr[1] == ':') { - st.newStr = VarUniq(st.nstr); - st.cp = st.tstr + 1; - st.termc = *st.cp; + if (tstr[1] == endc || tstr[1] == ':') { + newStr = VarUniq(nstr); + cp = tstr + 1; + termc = *cp; break; } goto default_case; #ifdef SUNSHCMD case 's': - if (st.tstr[1] == 'h' && (st.tstr[2] == st.endc || st.tstr[2] == ':')) { + if (tstr[1] == 'h' && (tstr[2] == endc || tstr[2] == ':')) { const char *emsg; - if (st.flags & VARF_WANTRES) { - st.newStr = Cmd_Exec(st.nstr, &emsg); + if (flags & VARF_WANTRES) { + newStr = Cmd_Exec(nstr, &emsg); if (emsg) - Error(emsg, st.nstr); + Error(emsg, nstr); } else - st.newStr = varNoError; - st.cp = st.tstr + 2; - st.termc = *st.cp; + newStr = varNoError; + cp = tstr + 2; + termc = *cp; break; } goto default_case; #endif default: default_case: - { + { #ifdef SYSVVARSUB - int res = ApplyModifier_SysV(&st); - if (res == 'c') + /* + * This can either be a bogus modifier or a System-V + * substitution command. + */ + VarPattern pattern; + Boolean eqFound; + + pattern.flags = 0; + eqFound = FALSE; + /* + * First we make a pass through the string trying + * to verify it is a SYSV-make-style translation: + * it must be: <string1>=<string2>) + */ + cp = tstr; + cnt = 1; + while (*cp != '\0' && cnt) { + if (*cp == '=') { + eqFound = TRUE; + /* continue looking for endc */ + } + else if (*cp == endc) + cnt--; + else if (*cp == startc) + cnt++; + if (cnt) + cp++; + } + if (*cp == endc && eqFound) { + + /* + * Now we break this sucker into the lhs and + * rhs. We must null terminate them of course. + */ + delim='='; + cp = tstr; + if ((pattern.lhs = VarGetPattern(ctxt, &parsestate, + flags, &cp, delim, &pattern.flags, + &pattern.leftLen, NULL)) == NULL) goto cleanup; - if (res != '=') + delim = endc; + if ((pattern.rhs = VarGetPattern(ctxt, &parsestate, + flags, &cp, delim, NULL, &pattern.rightLen, + &pattern)) == NULL) + goto cleanup; + + /* + * SYSV modifications happen through the whole + * string. Note the pattern is anchored at the end. + */ + termc = *--cp; + delim = '\0'; + if (pattern.leftLen == 0 && *nstr == '\0') { + newStr = nstr; /* special case */ + } else { + newStr = VarModify(ctxt, &parsestate, nstr, + VarSYSVMatch, + &pattern); + } + free(UNCONST(pattern.lhs)); + free(UNCONST(pattern.rhs)); + } else #endif { - Error("Unknown modifier '%c'", *st.tstr); - for (st.cp = st.tstr+1; - *st.cp != ':' && *st.cp != st.endc && *st.cp != '\0'; - st.cp++) + Error("Unknown modifier '%c'", *tstr); + for (cp = tstr+1; + *cp != ':' && *cp != endc && *cp != '\0'; + cp++) continue; - st.termc = *st.cp; - st.newStr = var_Error; + termc = *cp; + newStr = var_Error; } } } if (DEBUG(VAR)) { fprintf(debug_file, "Result[%s] of :%c is \"%s\"\n", - st.v->name, st.modifier, st.newStr); + v->name, modifier, newStr); } - if (st.newStr != st.nstr) { - if (*st.freePtr) { - free(st.nstr); - *st.freePtr = NULL; + if (newStr != nstr) { + if (*freePtr) { + free(nstr); + *freePtr = NULL; } - st.nstr = st.newStr; - if (st.nstr != var_Error && st.nstr != varNoError) { - *st.freePtr = st.nstr; + nstr = newStr; + if (nstr != var_Error && nstr != varNoError) { + *freePtr = nstr; } } - if (st.termc == '\0' && st.endc != '\0') { - Error("Unclosed variable specification (expecting '%c') " - "for \"%s\" (value \"%s\") modifier %c", - st.endc, st.v->name, st.nstr, st.modifier); - } else if (st.termc == ':') { - st.cp++; + if (termc == '\0' && endc != '\0') { + Error("Unclosed variable specification (expecting '%c') for \"%s\" (value \"%s\") modifier %c", endc, v->name, nstr, modifier); + } else if (termc == ':') { + cp++; } - st.tstr = st.cp; + tstr = cp; } -out: - *st.lengthPtr = st.tstr - st.start; - return st.nstr; + out: + *lengthPtr = tstr - start; + return (nstr); -bad_modifier: + bad_modifier: /* "{(" */ - Error("Bad modifier `:%.*s' for %s", (int)strcspn(st.tstr, ":)}"), st.tstr, - st.v->name); + Error("Bad modifier `:%.*s' for %s", (int)strcspn(tstr, ":)}"), tstr, + v->name); -cleanup: - *st.lengthPtr = st.cp - st.start; - if (st.delim != '\0') + cleanup: + *lengthPtr = cp - start; + if (delim != '\0') Error("Unclosed substitution for %s (%c missing)", - st.v->name, st.delim); - free(*st.freePtr); - *st.freePtr = NULL; - return var_Error; + v->name, delim); + free(*freePtr); + *freePtr = NULL; + return (var_Error); } /*- @@ -3612,25 +3757,25 @@ cleanup: */ /* coverity[+alloc : arg-*4] */ char * -Var_Parse(const char *str, GNode *ctxt, Varf_Flags flags, +Var_Parse(const char *str, GNode *ctxt, int flags, int *lengthPtr, void **freePtr) { - const char *tstr; /* Pointer into str */ - Var *v; /* Variable in invocation */ - Boolean haveModifier; /* TRUE if have modifiers for the variable */ - char endc; /* Ending character when variable in parens + const char *tstr; /* Pointer into str */ + Var *v; /* Variable in invocation */ + Boolean haveModifier;/* TRUE if have modifiers for the variable */ + char endc; /* Ending character when variable in parens * or braces */ - char startc; /* Starting character when variable in parens + char startc; /* Starting character when variable in parens * or braces */ - int vlen; /* Length of variable name */ - const char *start; /* Points to original start of str */ - char *nstr; /* New string, used during expansion */ - Boolean dynamic; /* TRUE if the variable is local and we're + int vlen; /* Length of variable name */ + const char *start; /* Points to original start of str */ + char *nstr; /* New string, used during expansion */ + Boolean dynamic; /* TRUE if the variable is local and we're * expanding it in a non-local context. This * is done to support dynamic sources. The * result is just the invocation, unaltered */ - const char *extramodifiers; /* extra modifiers to apply first */ - char name[2]; + const char *extramodifiers; /* extra modifiers to apply first */ + char name[2]; *freePtr = NULL; extramodifiers = NULL; @@ -3668,16 +3813,19 @@ Var_Parse(const char *str, GNode *ctxt, Varf_Flags flags, * when dynamic sources are expanded. */ switch (str[1]) { - case '@': - return UNCONST("$(.TARGET)"); - case '%': - return UNCONST("$(.MEMBER)"); - case '*': - return UNCONST("$(.PREFIX)"); - case '!': - return UNCONST("$(.ARCHIVE)"); + case '@': + return UNCONST("$(.TARGET)"); + case '%': + return UNCONST("$(.MEMBER)"); + case '*': + return UNCONST("$(.PREFIX)"); + case '!': + return UNCONST("$(.ARCHIVE)"); } } + /* + * Error + */ return (flags & VARF_UNDEFERR) ? var_Error : varNoError; } else { haveModifier = FALSE; @@ -3685,7 +3833,7 @@ Var_Parse(const char *str, GNode *ctxt, Varf_Flags flags, endc = str[1]; } } else { - Buffer buf; /* Holds the variable name */ + Buffer buf; /* Holds the variable name */ int depth = 1; endc = startc == PROPEN ? PRCLOSE : BRCLOSE; @@ -3694,26 +3842,35 @@ Var_Parse(const char *str, GNode *ctxt, Varf_Flags flags, /* * Skip to the end character or a colon, whichever comes first. */ - for (tstr = str + 2; *tstr != '\0'; tstr++) { - /* Track depth so we can spot parse errors. */ - if (*tstr == startc) + for (tstr = str + 2; *tstr != '\0'; tstr++) + { + /* + * Track depth so we can spot parse errors. + */ + if (*tstr == startc) { depth++; + } if (*tstr == endc) { if (--depth == 0) break; } - if (depth == 1 && *tstr == ':') + if (depth == 1 && *tstr == ':') { break; - /* A variable inside a variable, expand. */ + } + /* + * A variable inside a variable, expand + */ if (*tstr == '$') { int rlen; void *freeIt; - char *rval = Var_Parse(tstr, ctxt, flags, &rlen, &freeIt); - if (rval != NULL) + char *rval = Var_Parse(tstr, ctxt, flags, &rlen, &freeIt); + if (rval != NULL) { Buf_AddBytes(&buf, strlen(rval), rval); + } free(freeIt); tstr += rlen - 1; - } else + } + else Buf_AddByte(&buf, *tstr); } if (*tstr == ':') { @@ -3728,7 +3885,7 @@ Var_Parse(const char *str, GNode *ctxt, Varf_Flags flags, */ *lengthPtr = tstr - str; Buf_Destroy(&buf, TRUE); - return var_Error; + return (var_Error); } str = Buf_GetAll(&buf, &vlen); @@ -3760,9 +3917,10 @@ Var_Parse(const char *str, GNode *ctxt, Varf_Flags flags, if (v != NULL) { if (str[1] == 'D') { - extramodifiers = "H:"; - } else { /* F */ - extramodifiers = "T:"; + extramodifiers = "H:"; + } + else { /* F */ + extramodifiers = "T:"; } } } @@ -3782,18 +3940,20 @@ Var_Parse(const char *str, GNode *ctxt, Varf_Flags flags, * when dynamic sources are expanded. */ switch (*str) { - case '@': - case '%': - case '*': - case '!': - dynamic = TRUE; - break; + case '@': + case '%': + case '*': + case '!': + dynamic = TRUE; + break; } - } else if (vlen > 2 && *str == '.' && + } else if ((vlen > 2) && (*str == '.') && isupper((unsigned char) str[1]) && - (ctxt == VAR_CMD || ctxt == VAR_GLOBAL)) + ((ctxt == VAR_CMD) || (ctxt == VAR_GLOBAL))) { - int len = vlen - 1; + int len; + + len = vlen - 1; if ((strncmp(str, ".TARGET", len) == 0) || (strncmp(str, ".ARCHIVE", len) == 0) || (strncmp(str, ".PREFIX", len) == 0) || @@ -3813,7 +3973,7 @@ Var_Parse(const char *str, GNode *ctxt, Varf_Flags flags, char *pstr = bmake_strndup(start, *lengthPtr); *freePtr = pstr; Buf_Destroy(&buf, TRUE); - return pstr; + return(pstr); } else { Buf_Destroy(&buf, TRUE); return (flags & VARF_UNDEFERR) ? var_Error : varNoError; @@ -3849,39 +4009,43 @@ Var_Parse(const char *str, GNode *ctxt, Varf_Flags flags, * return. */ nstr = Buf_GetAll(&v->val, NULL); - if (strchr(nstr, '$') != NULL && (flags & VARF_WANTRES) != 0) { + if (strchr(nstr, '$') != NULL) { nstr = Var_Subst(NULL, nstr, ctxt, flags); *freePtr = nstr; } v->flags &= ~VAR_IN_USE; - if (nstr != NULL && (haveModifier || extramodifiers != NULL)) { + if ((nstr != NULL) && (haveModifier || extramodifiers != NULL)) { void *extraFree; int used; extraFree = NULL; if (extramodifiers != NULL) { - nstr = ApplyModifiers(nstr, extramodifiers, '(', ')', - v, ctxt, flags, &used, &extraFree); + nstr = ApplyModifiers(nstr, extramodifiers, '(', ')', + v, ctxt, flags, &used, &extraFree); } if (haveModifier) { - /* Skip initial colon. */ - tstr++; + /* Skip initial colon. */ + tstr++; - nstr = ApplyModifiers(nstr, tstr, startc, endc, - v, ctxt, flags, &used, freePtr); - tstr += used; - free(extraFree); + nstr = ApplyModifiers(nstr, tstr, startc, endc, + v, ctxt, flags, &used, freePtr); + tstr += used; + free(extraFree); } else { - *freePtr = extraFree; + *freePtr = extraFree; } } - *lengthPtr = tstr - start + (*tstr ? 1 : 0); + if (*tstr) { + *lengthPtr = tstr - start + 1; + } else { + *lengthPtr = tstr - start; + } if (v->flags & VAR_FROM_ENV) { - Boolean destroy = FALSE; + Boolean destroy = FALSE; if (nstr != Buf_GetAll(&v->val, NULL)) { destroy = TRUE; @@ -3916,13 +4080,13 @@ Var_Parse(const char *str, GNode *ctxt, Varf_Flags flags, free(v->name); free(v); } - return nstr; + return (nstr); } /*- *----------------------------------------------------------------------- * Var_Subst -- - * Substitute for all variables in the given string in the given context. + * Substitute for all variables in the given string in the given context * If flags & VARF_UNDEFERR, Parse_Error will be called when an undefined * variable is encountered. * @@ -3938,20 +4102,20 @@ Var_Parse(const char *str, GNode *ctxt, Varf_Flags flags, * The resulting string. * * Side Effects: - * None. + * None. The old string must be freed by the caller *----------------------------------------------------------------------- */ char * -Var_Subst(const char *var, const char *str, GNode *ctxt, Varf_Flags flags) +Var_Subst(const char *var, const char *str, GNode *ctxt, int flags) { - Buffer buf; /* Buffer for forming things */ - char *val; /* Value to substitute for a variable */ - int length; /* Length of the variable invocation */ - Boolean trailingBslash; /* variable ends in \ */ - void *freeIt = NULL; /* Set if it should be freed */ - static Boolean errorReported; /* Set true if an error has already - * been reported to prevent a plethora - * of messages when recursing */ + Buffer buf; /* Buffer for forming things */ + char *val; /* Value to substitute for a variable */ + int length; /* Length of the variable invocation */ + Boolean trailingBslash; /* variable ends in \ */ + void *freeIt = NULL; /* Set if it should be freed */ + static Boolean errorReported; /* Set true if an error has already + * been reported to prevent a plethora + * of messages when recursing */ Buf_Init(&buf, 0); errorReported = FALSE; @@ -3976,7 +4140,7 @@ Var_Subst(const char *var, const char *str, GNode *ctxt, Varf_Flags flags) * Skip as many characters as possible -- either to the end of * the string or to the next dollar sign (variable invocation). */ - const char *cp; + const char *cp; for (cp = str++; *str != '$' && *str != '\0'; str++) continue; @@ -3995,13 +4159,17 @@ Var_Subst(const char *var, const char *str, GNode *ctxt, Varf_Flags flags) Buf_AddBytes(&buf, 2, str); str += 2; expand = FALSE; - } else + } + else expand = TRUE; break; - } else { + } + else { const char *p; - /* Scan up to the end of the variable name. */ + /* + * Scan up to the end of the variable name. + */ for (p = &str[2]; *p && *p != ':' && *p != PRCLOSE && *p != BRCLOSE; p++) if (*p == '$') @@ -4023,12 +4191,13 @@ Var_Subst(const char *var, const char *str, GNode *ctxt, Varf_Flags flags) * Not the variable we want to expand, scan * until the next variable */ - for (; *p != '$' && *p != '\0'; p++) + for (;*p != '$' && *p != '\0'; p++) continue; Buf_AddBytes(&buf, p - str, str); str = p; expand = FALSE; - } else + } + else expand = TRUE; break; } @@ -4061,8 +4230,8 @@ Var_Subst(const char *var, const char *str, GNode *ctxt, Varf_Flags flags) * when the file is parsed. */ if (!errorReported) { - Parse_Error(PARSE_FATAL, "Undefined variable \"%.*s\"", - length, str); + Parse_Error(PARSE_FATAL, + "Undefined variable \"%.*s\"",length,str); } str += length; errorReported = TRUE; @@ -4093,13 +4262,74 @@ Var_Subst(const char *var, const char *str, GNode *ctxt, Varf_Flags flags) return Buf_DestroyCompact(&buf); } -/* Initialize the module. */ +/*- + *----------------------------------------------------------------------- + * Var_GetTail -- + * Return the tail from each of a list of words. Used to set the + * System V local variables. + * + * Input: + * file Filename to modify + * + * Results: + * The resulting string. + * + * Side Effects: + * None. + * + *----------------------------------------------------------------------- + */ +#if 0 +char * +Var_GetTail(char *file) +{ + return(VarModify(file, VarTail, NULL)); +} + +/*- + *----------------------------------------------------------------------- + * Var_GetHead -- + * Find the leading components of a (list of) filename(s). + * XXX: VarHead does not replace foo by ., as (sun) System V make + * does. + * + * Input: + * file Filename to manipulate + * + * Results: + * The leading components. + * + * Side Effects: + * None. + * + *----------------------------------------------------------------------- + */ +char * +Var_GetHead(char *file) +{ + return(VarModify(file, VarHead, NULL)); +} +#endif + +/*- + *----------------------------------------------------------------------- + * Var_Init -- + * Initialize the module + * + * Results: + * None + * + * Side Effects: + * The VAR_CMD and VAR_GLOBAL contexts are created + *----------------------------------------------------------------------- + */ void Var_Init(void) { VAR_INTERNAL = Targ_NewGN("Internal"); VAR_GLOBAL = Targ_NewGN("Global"); VAR_CMD = Targ_NewGN("Command"); + } @@ -4111,9 +4341,9 @@ Var_End(void) /****************** PRINT DEBUGGING INFO *****************/ static void -VarPrintVar(void *vp, void *data MAKE_ATTR_UNUSED) +VarPrintVar(void *vp) { - Var *v = (Var *)vp; + Var *v = (Var *)vp; fprintf(debug_file, "%-16s = %s\n", v->name, Buf_GetAll(&v->val, NULL)); } @@ -4126,5 +4356,12 @@ VarPrintVar(void *vp, void *data MAKE_ATTR_UNUSED) void Var_Dump(GNode *ctxt) { - Hash_ForEach(&ctxt->context, VarPrintVar, NULL); + Hash_Search search; + Hash_Entry *h; + + for (h = Hash_EnumFirst(&ctxt->context, &search); + h != NULL; + h = Hash_EnumNext(&search)) { + VarPrintVar(Hash_GetValue(h)); + } } |