Module Name: src Committed By: rillig Date: Tue Jul 9 19:43:02 UTC 2024
Modified Files: src/usr.bin/make: main.c make.h parse.c src/usr.bin/make/unit-tests: cmd-errors-jobs.exp cmd-errors-jobs.mk cmd-errors.exp cmd-errors.mk dep-var.exp moderrs.exp varmisc.exp varmod-assign.exp varmod-hash.exp varmod-select-words.exp varmod-subst.exp Log Message: make: error out on parse/evaluation errors in shell commands The expression ${VAR:X} has an unknown modifier ':X'. Previously, this expression errored out when the expression was evaluated at parse time, but not when the expression was evaluated when generating the commands to bring a target up to date. The errors were previously reported, they didn't affect the exit status, though. Now, errors in expressions are handled in the same way, regardless of the time at which they are evaluated. To generate a diff of this commit: cvs rdiff -u -r1.630 -r1.631 src/usr.bin/make/main.c cvs rdiff -u -r1.342 -r1.343 src/usr.bin/make/make.h cvs rdiff -u -r1.733 -r1.734 src/usr.bin/make/parse.c cvs rdiff -u -r1.8 -r1.9 src/usr.bin/make/unit-tests/cmd-errors-jobs.exp \ src/usr.bin/make/unit-tests/cmd-errors.mk cvs rdiff -u -r1.7 -r1.8 src/usr.bin/make/unit-tests/cmd-errors-jobs.mk \ src/usr.bin/make/unit-tests/dep-var.exp cvs rdiff -u -r1.11 -r1.12 src/usr.bin/make/unit-tests/cmd-errors.exp cvs rdiff -u -r1.41 -r1.42 src/usr.bin/make/unit-tests/moderrs.exp cvs rdiff -u -r1.22 -r1.23 src/usr.bin/make/unit-tests/varmisc.exp cvs rdiff -u -r1.26 -r1.27 src/usr.bin/make/unit-tests/varmod-assign.exp cvs rdiff -u -r1.5 -r1.6 src/usr.bin/make/unit-tests/varmod-hash.exp cvs rdiff -u -r1.3 -r1.4 src/usr.bin/make/unit-tests/varmod-select-words.exp cvs rdiff -u -r1.6 -r1.7 src/usr.bin/make/unit-tests/varmod-subst.exp Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/make/main.c diff -u src/usr.bin/make/main.c:1.630 src/usr.bin/make/main.c:1.631 --- src/usr.bin/make/main.c:1.630 Sun Jul 7 09:54:12 2024 +++ src/usr.bin/make/main.c Tue Jul 9 19:43:01 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: main.c,v 1.630 2024/07/07 09:54:12 rillig Exp $ */ +/* $NetBSD: main.c,v 1.631 2024/07/09 19:43:01 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -111,7 +111,7 @@ #include "trace.h" /* "@(#)main.c 8.3 (Berkeley) 3/19/94" */ -MAKE_RCSID("$NetBSD: main.c,v 1.630 2024/07/07 09:54:12 rillig Exp $"); +MAKE_RCSID("$NetBSD: main.c,v 1.631 2024/07/09 19:43:01 rillig Exp $"); #if defined(MAKE_NATIVE) __COPYRIGHT("@(#) Copyright (c) 1988, 1989, 1990, 1993 " "The Regents of the University of California. " @@ -1604,7 +1604,7 @@ main_CleanUp(void) static int main_Exit(bool outOfDate) { - if (opts.strict && (main_errors > 0 || Parse_NumErrors() > 0)) + if ((opts.strict && main_errors > 0) || parseErrors > 0) return 2; /* Not 1 so -q can distinguish error */ return outOfDate ? 1 : 0; } Index: src/usr.bin/make/make.h diff -u src/usr.bin/make/make.h:1.342 src/usr.bin/make/make.h:1.343 --- src/usr.bin/make/make.h:1.342 Sun Jul 7 09:54:12 2024 +++ src/usr.bin/make/make.h Tue Jul 9 19:43:01 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: make.h,v 1.342 2024/07/07 09:54:12 rillig Exp $ */ +/* $NetBSD: make.h,v 1.343 2024/07/09 19:43:01 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -861,6 +861,7 @@ const char *cached_realpath(const char * bool GetBooleanExpr(const char *, bool); /* parse.c */ +extern int parseErrors; void Parse_Init(void); #ifdef CLEANUP void Parse_End(void); @@ -874,7 +875,6 @@ void Parse_File(const char *, int); void Parse_PushInput(const char *, unsigned, unsigned, Buffer, struct ForLoop *); void Parse_MainName(GNodeList *); -int Parse_NumErrors(void) MAKE_ATTR_USE; unsigned int CurFile_CondMinDepth(void) MAKE_ATTR_USE; void Parse_GuardElse(void); void Parse_GuardEndif(void); Index: src/usr.bin/make/parse.c diff -u src/usr.bin/make/parse.c:1.733 src/usr.bin/make/parse.c:1.734 --- src/usr.bin/make/parse.c:1.733 Sun Jul 7 07:50:57 2024 +++ src/usr.bin/make/parse.c Tue Jul 9 19:43:01 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: parse.c,v 1.733 2024/07/07 07:50:57 rillig Exp $ */ +/* $NetBSD: parse.c,v 1.734 2024/07/09 19:43:01 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -105,7 +105,7 @@ #include "pathnames.h" /* "@(#)parse.c 8.3 (Berkeley) 3/19/94" */ -MAKE_RCSID("$NetBSD: parse.c,v 1.733 2024/07/07 07:50:57 rillig Exp $"); +MAKE_RCSID("$NetBSD: parse.c,v 1.734 2024/07/09 19:43:01 rillig Exp $"); /* Detects a multiple-inclusion guard in a makefile. */ typedef enum { @@ -231,7 +231,7 @@ static StringList targCmds = LST_INIT; */ static GNode *order_pred; -static int parseErrors; +int parseErrors; /* * The include chain of makefiles. At index 0 is the top-level makefile from @@ -3012,9 +3012,3 @@ Parse_MainName(GNodeList *mainList) Global_Append(".TARGETS", mainNode->name); } - -int -Parse_NumErrors(void) -{ - return parseErrors; -} Index: src/usr.bin/make/unit-tests/cmd-errors-jobs.exp diff -u src/usr.bin/make/unit-tests/cmd-errors-jobs.exp:1.8 src/usr.bin/make/unit-tests/cmd-errors-jobs.exp:1.9 --- src/usr.bin/make/unit-tests/cmd-errors-jobs.exp:1.8 Fri Jul 5 18:59:33 2024 +++ src/usr.bin/make/unit-tests/cmd-errors-jobs.exp Tue Jul 9 19:43:01 2024 @@ -6,4 +6,4 @@ make: in target "unclosed-modifier": whi make: in target "unknown-modifier": while evaluating variable "UNKNOWN" with value "": Unknown modifier "Z" : unknown-modifier--eol : end-eol -exit status 0 +exit status 2 Index: src/usr.bin/make/unit-tests/cmd-errors.mk diff -u src/usr.bin/make/unit-tests/cmd-errors.mk:1.8 src/usr.bin/make/unit-tests/cmd-errors.mk:1.9 --- src/usr.bin/make/unit-tests/cmd-errors.mk:1.8 Fri Jul 5 18:59:33 2024 +++ src/usr.bin/make/unit-tests/cmd-errors.mk Tue Jul 9 19:43:01 2024 @@ -1,4 +1,4 @@ -# $NetBSD: cmd-errors.mk,v 1.8 2024/07/05 18:59:33 rillig Exp $ +# $NetBSD: cmd-errors.mk,v 1.9 2024/07/09 19:43:01 rillig Exp $ # # Demonstrate how errors in expressions affect whether the commands # are actually executed in compat mode. @@ -33,5 +33,4 @@ end: # expect: : end-eol : $@-eol -# XXX: Despite the parse errors, the exit status is 0. -# expect: exit status 0 +# expect: exit status 2 Index: src/usr.bin/make/unit-tests/cmd-errors-jobs.mk diff -u src/usr.bin/make/unit-tests/cmd-errors-jobs.mk:1.7 src/usr.bin/make/unit-tests/cmd-errors-jobs.mk:1.8 --- src/usr.bin/make/unit-tests/cmd-errors-jobs.mk:1.7 Fri Jul 5 18:59:33 2024 +++ src/usr.bin/make/unit-tests/cmd-errors-jobs.mk Tue Jul 9 19:43:01 2024 @@ -1,4 +1,4 @@ -# $NetBSD: cmd-errors-jobs.mk,v 1.7 2024/07/05 18:59:33 rillig Exp $ +# $NetBSD: cmd-errors-jobs.mk,v 1.8 2024/07/09 19:43:01 rillig Exp $ # # Demonstrate how errors in expressions affect whether the commands # are actually executed in jobs mode. @@ -35,5 +35,4 @@ unknown-modifier: end: : $@-eol -# XXX: Despite the parse errors, the exit status is 0. -# expect: exit status 0 +# expect: exit status 2 Index: src/usr.bin/make/unit-tests/dep-var.exp diff -u src/usr.bin/make/unit-tests/dep-var.exp:1.7 src/usr.bin/make/unit-tests/dep-var.exp:1.8 --- src/usr.bin/make/unit-tests/dep-var.exp:1.7 Sun Jun 2 15:31:26 2024 +++ src/usr.bin/make/unit-tests/dep-var.exp Tue Jul 9 19:43:01 2024 @@ -27,4 +27,4 @@ def2 a-def2-b 1-2-NDIRECT_2-2-1 ) -exit status 0 +exit status 2 Index: src/usr.bin/make/unit-tests/cmd-errors.exp diff -u src/usr.bin/make/unit-tests/cmd-errors.exp:1.11 src/usr.bin/make/unit-tests/cmd-errors.exp:1.12 --- src/usr.bin/make/unit-tests/cmd-errors.exp:1.11 Fri Jul 5 18:59:33 2024 +++ src/usr.bin/make/unit-tests/cmd-errors.exp Tue Jul 9 19:43:01 2024 @@ -6,4 +6,4 @@ make: in target "unclosed-modifier": whi make: in target "unknown-modifier": while evaluating variable "UNKNOWN" with value "": Unknown modifier "Z" : unknown-modifier--eol : end-eol -exit status 0 +exit status 2 Index: src/usr.bin/make/unit-tests/moderrs.exp diff -u src/usr.bin/make/unit-tests/moderrs.exp:1.41 src/usr.bin/make/unit-tests/moderrs.exp:1.42 --- src/usr.bin/make/unit-tests/moderrs.exp:1.41 Fri Jul 5 19:47:22 2024 +++ src/usr.bin/make/unit-tests/moderrs.exp Tue Jul 9 19:43:01 2024 @@ -112,4 +112,4 @@ make: in target "mod-sysv-parse": while 1 1 2 x3 5 8 1x3 21 34 -exit status 0 +exit status 2 Index: src/usr.bin/make/unit-tests/varmisc.exp diff -u src/usr.bin/make/unit-tests/varmisc.exp:1.22 src/usr.bin/make/unit-tests/varmisc.exp:1.23 --- src/usr.bin/make/unit-tests/varmisc.exp:1.22 Fri Jul 5 18:59:33 2024 +++ src/usr.bin/make/unit-tests/varmisc.exp Tue Jul 9 19:43:01 2024 @@ -68,4 +68,4 @@ make: in target "varerror-unclosed": whi varerror-unclosed:end target1-flags: we have: one two target2-flags: we have: one two three four -exit status 0 +exit status 2 Index: src/usr.bin/make/unit-tests/varmod-assign.exp diff -u src/usr.bin/make/unit-tests/varmod-assign.exp:1.26 src/usr.bin/make/unit-tests/varmod-assign.exp:1.27 --- src/usr.bin/make/unit-tests/varmod-assign.exp:1.26 Fri Jul 5 19:47:22 2024 +++ src/usr.bin/make/unit-tests/varmod-assign.exp Tue Jul 9 19:43:01 2024 @@ -57,4 +57,4 @@ target: TARGET_TARGET_VAR = new-value Global: TARGET_GLOBAL_VAR = new-value Global: TARGET_ENV_VAR = new-value target: TARGET_NEW_VAR = new-value -exit status 0 +exit status 2 Index: src/usr.bin/make/unit-tests/varmod-hash.exp diff -u src/usr.bin/make/unit-tests/varmod-hash.exp:1.5 src/usr.bin/make/unit-tests/varmod-hash.exp:1.6 --- src/usr.bin/make/unit-tests/varmod-hash.exp:1.5 Thu Jul 4 17:47:54 2024 +++ src/usr.bin/make/unit-tests/varmod-hash.exp Tue Jul 9 19:43:01 2024 @@ -6,4 +6,4 @@ make: in target "all": while evaluating make: in target "all": while evaluating variable "12345" with value "12345": Unknown modifier "hashed" -exit status 0 +exit status 2 Index: src/usr.bin/make/unit-tests/varmod-select-words.exp diff -u src/usr.bin/make/unit-tests/varmod-select-words.exp:1.3 src/usr.bin/make/unit-tests/varmod-select-words.exp:1.4 --- src/usr.bin/make/unit-tests/varmod-select-words.exp:1.3 Thu Jul 4 18:53:37 2024 +++ src/usr.bin/make/unit-tests/varmod-select-words.exp Tue Jul 9 19:43:01 2024 @@ -123,4 +123,4 @@ LIST:tw:C/ /,/g="one two three four five LIST:tw:C/ /,/1g="one two three four five six" LIST:tw:tW:C/ /,/="one,two three four five six" LIST:tW:tw:C/ /,/="one two three four five six" -exit status 0 +exit status 2 Index: src/usr.bin/make/unit-tests/varmod-subst.exp diff -u src/usr.bin/make/unit-tests/varmod-subst.exp:1.6 src/usr.bin/make/unit-tests/varmod-subst.exp:1.7 --- src/usr.bin/make/unit-tests/varmod-subst.exp:1.6 Fri Jul 5 19:47:22 2024 +++ src/usr.bin/make/unit-tests/varmod-subst.exp Tue Jul 9 19:43:01 2024 @@ -59,4 +59,4 @@ mod-subst-dollar:$40: mod-subst-dollar:U8: mod-subst-dollar:$$$$: mod-subst-dollar:$$$good3 -exit status 0 +exit status 2