summaryrefslogtreecommitdiffstats
path: root/unix
diff options
context:
space:
mode:
Diffstat (limited to 'unix')
-rw-r--r--unix/tcl.m41
-rw-r--r--unix/tclUnixPort.h14
2 files changed, 15 insertions, 0 deletions
diff --git a/unix/tcl.m4 b/unix/tcl.m4
index dfa812b..9d2c38c 100644
--- a/unix/tcl.m4
+++ b/unix/tcl.m4
@@ -2069,6 +2069,7 @@ dnl # preprocessing tests use only CPPFLAGS.
# Check for posix_spawnp() and friends unconditionally
AC_CHECK_FUNCS(posix_spawnp posix_spawn_file_actions_adddup2 posix_spawnattr_setflags)
+ AC_CHECK_FUNCS([vfork])
# FIXME: This subst was left in only because the TCL_DL_LIBS
# entry in tclConfig.sh uses it. It is not clear why someone
diff --git a/unix/tclUnixPort.h b/unix/tclUnixPort.h
index c2115df..ea4beac 100644
--- a/unix/tclUnixPort.h
+++ b/unix/tclUnixPort.h
@@ -636,6 +636,20 @@ extern char ** environ;
defined(HAVE_WEAK_IMPORT) && MAC_OS_X_VERSION_MIN_REQUIRED < 1050
# warning "Weak import of 64-bit CoreFoundation is not supported, will not run on Mac OS X < 10.5."
# endif
+# if defined(HAVE_POSIX_SPAWNP)
+/*
+ * Under macOS, test exec-17.1 fails (I/O setup after closing stdout) with
+ * posix_spawnp(), but the classic implementation (based on fork()+execvp())
+ * works without the severe performance implications with large memory
+ * footprints. So, deactivate HAVE_POSIX_SPAWNP
+ */
+# undef HAVE_POSIX_SPAWNP
+# endif
+#else
+# if defined(HAVE_POSIX_SPAWNP) && defined(HAVE_VFORK)
+# define USE_VFORK
+# undef HAVE_POSIX_SPAWNP
+# endif
#endif /* __APPLE__ */
/*