summaryrefslogtreecommitdiffstats
path: root/usr.bin/make
diff options
context:
space:
mode:
authorgreen <green@FreeBSD.org>2000-08-16 23:31:43 +0000
committergreen <green@FreeBSD.org>2000-08-16 23:31:43 +0000
commitdc14c5e4fd05e3b9cfa3c48ed029ab111dd48329 (patch)
treecc0e62b51ed1e79e231d912ec8759b2cd884047f /usr.bin/make
parentd5af96afa040e66ed2df0eeeb0dc4ec7349132cc (diff)
downloadFreeBSD-src-dc14c5e4fd05e3b9cfa3c48ed029ab111dd48329.zip
FreeBSD-src-dc14c5e4fd05e3b9cfa3c48ed029ab111dd48329.tar.gz
Allow use of the ${MAKE_SHELL} variable to specify alternate shells for
make(1) to use. Setting it to "sh" and "ksh" are the only values which work right ATM; I wouldn't expect "csh" to get you far ;)
Diffstat (limited to 'usr.bin/make')
-rw-r--r--usr.bin/make/Makefile16
-rw-r--r--usr.bin/make/config.h2
-rw-r--r--usr.bin/make/job.c10
-rw-r--r--usr.bin/make/main.c13
4 files changed, 39 insertions, 2 deletions
diff --git a/usr.bin/make/Makefile b/usr.bin/make/Makefile
index da2c13d..7ef58f8 100644
--- a/usr.bin/make/Makefile
+++ b/usr.bin/make/Makefile
@@ -12,4 +12,20 @@ SRCS+= lstAppend.c lstAtEnd.c lstAtFront.c lstClose.c lstConcat.c \
lstMember.c lstNext.c lstOpen.c lstRemove.c lstReplace.c lstSucc.c
.PATH: ${.CURDIR}/lst.lib
+# Set the shell which make(1) uses. Bourne is the default, but a decent
+# Korn shell works fine, and much faster. Using the C shell for this
+# will almost certainly break everything, but it's Unix tradition to
+# allow you to shoot yourself in the foot if you want to :-)
+
+MAKE_SHELL?= sh
+.if ${MAKE_SHELL} == "csh"
+CFLAGS+= -DDEFSHELL=0
+.elif ${MAKE_SHELL} == "sh"
+CFLAGS+= -DDEFSHELL=1
+.elif ${MAKE_SHELL} == "ksh"
+CFLAGS+= -DDEFSHELL=2
+.else
+.error "MAKE_SHELL must be set to one of \"csh\", \"sh\" or \"ksh\"."
+.endif
+
.include <bsd.prog.mk>
diff --git a/usr.bin/make/config.h b/usr.bin/make/config.h
index 9d97eb5..1bf6e9f 100644
--- a/usr.bin/make/config.h
+++ b/usr.bin/make/config.h
@@ -39,8 +39,6 @@
* $FreeBSD$
*/
-#define DEFSHELL 1 /* Bourne shell */
-
/*
* DEFMAXJOBS
* DEFMAXLOCAL
diff --git a/usr.bin/make/job.c b/usr.bin/make/job.c
index f553768..213bed0 100644
--- a/usr.bin/make/job.c
+++ b/usr.bin/make/job.c
@@ -189,6 +189,16 @@ static Shell shells[] = {
"v", "e",
},
/*
+ * KSH description. The Korn shell has a superset of
+ * the Bourne shell's functionality.
+ */
+{
+ "ksh",
+ TRUE, "set -", "set -v", "set -", 5,
+ TRUE, "set -e", "set +e",
+ "v", "e",
+},
+ /*
* UNKNOWN.
*/
{
diff --git a/usr.bin/make/main.c b/usr.bin/make/main.c
index 9530a0e..2694eed 100644
--- a/usr.bin/make/main.c
+++ b/usr.bin/make/main.c
@@ -478,6 +478,13 @@ main(argc, argv)
/* avoid faults on read-only strings */
static char syspath[] = _PATH_DEFSYSPATH;
+#if DEFSHELL == 2
+ /*
+ * Turn off ENV to make ksh happier.
+ */
+ unsetenv("ENV");
+#endif
+
#ifdef RLIMIT_NOFILE
/*
* get rid of resource limit on file descriptors
@@ -1000,7 +1007,13 @@ Cmd_Exec(cmd, err)
(void) dup2(fds[1], 1);
(void) close(fds[1]);
+#if DEFSHELL == 1
(void) execv("/bin/sh", args);
+#elif DEFSHELL == 2
+ (void) execv("/bin/ksh", args);
+#else
+#error "DEFSHELL must be 1 or 2."
+#endif
_exit(1);
/*NOTREACHED*/
OpenPOWER on IntegriCloud