summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon J. Gerraty <sjg@FreeBSD.org>2017-07-24 00:52:52 +0000
committerSimon J. Gerraty <sjg@FreeBSD.org>2017-07-24 00:52:52 +0000
commit56028c60f45b9c206f7a9b968fa2bd0af5619581 (patch)
tree8ed88420a9b8a126de1a4b62e47f1a2b20bb1cc4
parent7ef48313e3a45ae781c4749db7eb4938f54da8cd (diff)
downloadsrc-test2-vendor/NetBSD/bmake/20170720.tar.gz
src-test2-vendor/NetBSD/bmake/20170720.zip
Import bmake-20170720vendor/NetBSD/bmake/20170720
compat.c: pass SIGINT etc onto child and wait for it to exit before we self-terminate.
-rw-r--r--ChangeLog7
-rw-r--r--Makefile4
-rw-r--r--compat.c30
-rw-r--r--job.c11
-rw-r--r--make.h8
-rw-r--r--nonints.h5
6 files changed, 47 insertions, 18 deletions
diff --git a/ChangeLog b/ChangeLog
index 424cfe20cd8a..c15589c284ad 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2017-07-20 Simon J. Gerraty <sjg@bad.crufty.net>
+
+ * Makefile (_MAKE_VERSION): 20170720
+ Merge with NetBSD make, pick up
+ o compat.c: pass SIGINT etc onto child and wait for it to exit
+ before we self-terminate.
+
2017-07-11 Simon J. Gerraty <sjg@bad.crufty.net>
* Makefile (_MAKE_VERSION): 20170711
diff --git a/Makefile b/Makefile
index 8cfe8b488f9f..f0b94966ab07 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
-# $Id: Makefile,v 1.94 2017/07/15 18:22:14 sjg Exp $
+# $Id: Makefile,v 1.95 2017/07/20 19:36:13 sjg Exp $
# Base version on src date
-_MAKE_VERSION= 20170711
+_MAKE_VERSION= 20170720
PROG= bmake
diff --git a/compat.c b/compat.c
index 3e16fffdb102..0fa4569df072 100644
--- a/compat.c
+++ b/compat.c
@@ -1,4 +1,4 @@
-/* $NetBSD: compat.c,v 1.106 2016/08/26 23:28:39 dholland Exp $ */
+/* $NetBSD: compat.c,v 1.107 2017/07/20 19:29:54 sjg Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -70,14 +70,14 @@
*/
#ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: compat.c,v 1.106 2016/08/26 23:28:39 dholland Exp $";
+static char rcsid[] = "$NetBSD: compat.c,v 1.107 2017/07/20 19:29:54 sjg Exp $";
#else
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)compat.c 8.2 (Berkeley) 3/19/94";
#else
-__RCSID("$NetBSD: compat.c,v 1.106 2016/08/26 23:28:39 dholland Exp $");
+__RCSID("$NetBSD: compat.c,v 1.107 2017/07/20 19:29:54 sjg Exp $");
#endif
#endif /* not lint */
#endif
@@ -118,6 +118,8 @@ __RCSID("$NetBSD: compat.c,v 1.106 2016/08/26 23:28:39 dholland Exp $");
static GNode *curTarg = NULL;
static GNode *ENDNode;
static void CompatInterrupt(int);
+static pid_t compatChild;
+static int compatSigno;
/*
* CompatDeleteTarget -- delete a failed, interrupted, or otherwise
@@ -176,8 +178,17 @@ CompatInterrupt(int signo)
}
if (signo == SIGQUIT)
_exit(signo);
- bmake_signal(signo, SIG_DFL);
- kill(myPid, signo);
+ /*
+ * If there is a child running, pass the signal on
+ * we will exist after it has exited.
+ */
+ compatSigno = signo;
+ if (compatChild > 0) {
+ KILLPG(compatChild, signo);
+ } else {
+ bmake_signal(signo, SIG_DFL);
+ kill(myPid, signo);
+ }
}
/*-
@@ -370,7 +381,7 @@ again:
/*
* Fork and execute the single command. If the fork fails, we abort.
*/
- cpid = vFork();
+ compatChild = cpid = vFork();
if (cpid < 0) {
Fatal("Could not fork");
}
@@ -483,7 +494,12 @@ again:
}
}
free(cmdStart);
-
+ compatChild = 0;
+ if (compatSigno) {
+ bmake_signal(compatSigno, SIG_DFL);
+ kill(myPid, compatSigno);
+ }
+
return (status);
}
diff --git a/job.c b/job.c
index 3718aecc169e..e4e471a0b64d 100644
--- a/job.c
+++ b/job.c
@@ -1,4 +1,4 @@
-/* $NetBSD: job.c,v 1.190 2017/04/16 21:23:43 riastradh Exp $ */
+/* $NetBSD: job.c,v 1.191 2017/07/20 19:29:54 sjg Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -70,14 +70,14 @@
*/
#ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: job.c,v 1.190 2017/04/16 21:23:43 riastradh Exp $";
+static char rcsid[] = "$NetBSD: job.c,v 1.191 2017/07/20 19:29:54 sjg Exp $";
#else
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)job.c 8.2 (Berkeley) 3/19/94";
#else
-__RCSID("$NetBSD: job.c,v 1.190 2017/04/16 21:23:43 riastradh Exp $");
+__RCSID("$NetBSD: job.c,v 1.191 2017/07/20 19:29:54 sjg Exp $");
#endif
#endif /* not lint */
#endif
@@ -348,11 +348,6 @@ static Job childExitJob; /* child exit pseudo-job */
(void)fprintf(fp, TARG_FMT, targPrefix, gn->name)
static sigset_t caught_signals; /* Set of signals we handle */
-#if defined(SYSV)
-#define KILLPG(pid, sig) kill(-(pid), (sig))
-#else
-#define KILLPG(pid, sig) killpg((pid), (sig))
-#endif
static void JobChildSig(int);
static void JobContinueSig(int);
diff --git a/make.h b/make.h
index d029db655e1b..54b655f810c2 100644
--- a/make.h
+++ b/make.h
@@ -1,4 +1,4 @@
-/* $NetBSD: make.h,v 1.102 2016/12/07 15:00:46 christos Exp $ */
+/* $NetBSD: make.h,v 1.103 2017/07/20 19:29:54 sjg Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -543,4 +543,10 @@ int cached_stat(const char *, void *);
#define PATH_MAX MAXPATHLEN
#endif
+#if defined(SYSV)
+#define KILLPG(pid, sig) kill(-(pid), (sig))
+#else
+#define KILLPG(pid, sig) killpg((pid), (sig))
+#endif
+
#endif /* _MAKE_H_ */
diff --git a/nonints.h b/nonints.h
index 170ea7f7c39e..550537d93014 100644
--- a/nonints.h
+++ b/nonints.h
@@ -143,6 +143,11 @@ int Str_Match(const char *, const char *);
char *Str_SYSVMatch(const char *, const char *, int *len);
void Str_SYSVSubst(Buffer *, char *, char *, int);
+#ifndef HAVE_STRLCPY
+/* strlcpy.c */
+size_t strlcpy(char *, const char *, size_t);
+#endif
+
/* suff.c */
void Suff_ClearSuffixes(void);
Boolean Suff_IsTransform(char *);