scc

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

commit 61c6638246049b2085f1ef70e5b478c088d1f7da
parent 5bc57804faae91164edcd9f3aec054da4825b423
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date:   Mon, 17 Mar 2025 16:58:03 +0100

make: Check target name in dependencies

A target can have (and usually they have) dependencies with
other files, so we cannot assume that if we have a dependency
with build actions then we have a rule that is able to build
the target, because the build actions can be for other target.

Diffstat:
Msrc/cmd/scc-make/rules.c | 12++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/cmd/scc-make/rules.c b/src/cmd/scc-make/rules.c @@ -506,7 +506,7 @@ rebuild(Target *tp, int *buildp) q = *p; debug("checking dependency %s", q->name); - if (q->actions) + if (strcmp(q->name, tp->name) == 0 && q->actions) def = 1; build = 0; @@ -526,10 +526,14 @@ rebuild(Target *tp, int *buildp) } } - if (tp->stamp == -1) - need = 1; - else if (!def && inference(tp, NOFORCE)) + if (tp->stamp == -1) { need = 1; + } else if (!def) { + debug("no action found for %s, looking a inference rule", + tp->name); + if (inference(tp, NOFORCE)) + need = 1; + } if (err) { warning("target %s not remade because of errors", tp->name);