commit d19a2747314ec82992f5952c72b856c4fb8e05ac
parent daefa81af2a1a14c155ac4173a28ecd4afad6e88
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date: Wed, 17 Jan 2024 09:49:54 +0100
make: Fix MAKEFLAGS handling
MAKEFLAGS was cleared before reading it, so all the values from
MAKEFLAGS were lost. In the same way, parsing the flags in the
BSD format had a +1 error.
Diffstat:
6 files changed, 35 insertions(+), 6 deletions(-)
diff --git a/src/cmd/make/main.c b/src/cmd/make/main.c
@@ -120,7 +120,7 @@ getarg(char **args, char ***argv)
if ((*args)[1]) {
s = (*args) + 1;
- *args += strlen(s) - 1;
+ *args += strlen(*args) - 1;
return s;
}
@@ -253,11 +253,11 @@ parsemakeflags(void)
size_t len1, len2, n;
char *s, *t, **oargv, **argv, *flags;
- setmacro("MAKEFLAGS", "", EXPORT);
-
if ((flags = getenv("MAKEFLAGS")) == NULL)
return;
+ setmacro("MAKEFLAGS", "", EXPORT);
+
while (*flags == ' ' || *flags == '\t')
flags++;
diff --git a/src/cmd/make/parser.c b/src/cmd/make/parser.c
@@ -801,6 +801,7 @@ parse(char *fname)
return 0;
}
+ debug("parsing %s", fname);
push(FTFILE, fname, fp);
parseinput();
diff --git a/tests/make/execute/0002-fflag.sh b/tests/make/execute/0002-fflag.sh
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+trap 'rm -f $tmp1 $tmp2' EXIT INT QUIT HUP TERM
+
+tmp1=tmp1.$$
+tmp2=tmp2.$$
+
+(scc-make -f test.mk print-cc print-makeflags
+ scc-make -ftest.mk print-cc print-makeflags
+ MAKEFLAGS=-ftest.mk scc-make print-cc print-makeflags
+ MAKEFLAGS=ftest.mk scc-make print-cc print-makeflags) > $tmp1
+
+cat <<EOF > $tmp2
+c99
+
+c99
+
+c99
+
+c99
+
+EOF
+
+diff $tmp1 $tmp2
diff --git a/tests/make/execute/Makefile b/tests/make/execute/Makefile
@@ -15,3 +15,4 @@ hello:
@echo Hello World!
clean:
+ rm -f test.log
diff --git a/tests/make/execute/test.log b/tests/make/execute/test.log
@@ -1,3 +0,0 @@
-Test: 0001-rule.sh
-
-[PASS] 0001-rule.sh
diff --git a/tests/make/execute/test.mk b/tests/make/execute/test.mk
@@ -0,0 +1,6 @@
+
+print-cc:
+ @echo $(CC)
+
+print-makeflags:
+ @echo $(MAKEFLAGS)