scc

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

commit 5aaed79b4831707fb38c38a89c7d3a6f39364658
parent 256aff0b07a9e3f3207513934280a1c283e17b28
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date:   Wed, 17 Jan 2024 20:35:46 +0100

make: Add -q flag

When the -q flag is used targets are not updated but makes
returns 1 if the target needs to be updated and 0 otherwise.
Lines beginning with + are executed anyway.

Diffstat:
Msrc/cmd/make/main.c | 6+++++-
Msrc/cmd/make/make.h | 2+-
Msrc/cmd/make/rules.c | 20++++++++++++++++----
3 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/src/cmd/make/main.c b/src/cmd/make/main.c @@ -24,7 +24,7 @@ #endif int kflag, dflag, nflag, iflag, sflag; -int eflag, pflag, tflag; +int eflag, pflag, tflag, qflag; int exitstatus; sig_atomic_t stop; @@ -183,6 +183,10 @@ parseflag(int flag, char **args, char ***argv) case 'p': pflag = 1; break; + case 'q': + qflag = 1; + appendmakeflags("-q"); + break; case 'r': addtarget(".SUFFIXES", 0); appendmakeflags("-r"); diff --git a/src/cmd/make/make.h b/src/cmd/make/make.h @@ -53,7 +53,7 @@ extern int putenv(char *); /* main.c */ extern int kflag, dflag, nflag, iflag, sflag; -extern int eflag, pflag, tflag; +extern int eflag, pflag, tflag, qflag; extern int exitstatus; #ifdef SIGABRT diff --git a/src/cmd/make/rules.c b/src/cmd/make/rules.c @@ -202,7 +202,7 @@ out_loop: fflush(stdout); } - if (nflag && !plus) + if ((nflag || qflag) && !plus) return 0; if (minus || iflag || ignore) @@ -476,11 +476,15 @@ rebuild(Target *tp, int *buildp) } } + if (tp->stamp == -1) + need = 1; + if (err) { warning("target %s not remade because of errors", tp->name); return 1; - } else if (tp->stamp == -1 || need) { + } else if (need) { *buildp = 1; + r = update(tp); if (r == 0) return 0; @@ -493,12 +497,14 @@ rebuild(Target *tp, int *buildp) warning("target %s: error %d", tp->name, r); return r; } + + return 0; } int build(char *name) { - int build; + int build, r;; if (!name) { if (!deftarget) { @@ -509,5 +515,11 @@ build(char *name) } debug("checking target %s'", name); - return rebuild(lookup(name), &build); + + build = 0; + r = rebuild(lookup(name), &build); + if (qflag && build) + exitstatus = 1; + + return r; }