scc

simple c99 compiler
git clone git://git.simple-cc.org/scc
Log | Files | Refs | Submodules | README | LICENSE

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:
Msrc/cmd/make/main.c | 6+++---
Msrc/cmd/make/parser.c | 1+
Atests/make/execute/0002-fflag.sh | 24++++++++++++++++++++++++
Mtests/make/execute/Makefile | 1+
Dtests/make/execute/test.log | 3---
Atests/make/execute/test.mk | 6++++++
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)