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:
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;
}