Tested on x86_64-darwin21 (has __fork) and x86_64-darwin10 (does not).
OK for trunk?
thanks
Iain

--- 8< ---

It is not available on every OS version that we still test.

libphobos/ChangeLog:

        * Makefile.in: Regenerate.
        * configure: Regenerate.
        * libdruntime/Makefile.in: Regenerate.
        * libdruntime/core/internal/gc/impl/conservative/gc.d: Only
        use __fork if it is available.
        * libdruntime/gcc/config.d.in (Have___fork): New
        * m4/druntime/libraries.m4: Detect availabiliyt of __fork.
        * src/Makefile.in: Regenerate.
        * testsuite/Makefile.in: Regenerate.

Signed-off-by: Iain Sandoe <[email protected]>
---
 libphobos/Makefile.in                                |  1 +
 libphobos/configure                                  | 12 ++++++++++--
 libphobos/libdruntime/Makefile.in                    |  1 +
 .../core/internal/gc/impl/conservative/gc.d          |  9 +++++++--
 libphobos/libdruntime/gcc/config.d.in                |  3 +++
 libphobos/m4/druntime/libraries.m4                   |  3 +++
 libphobos/src/Makefile.in                            |  1 +
 libphobos/testsuite/Makefile.in                      |  1 +
 9 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/libphobos/Makefile.in b/libphobos/Makefile.in
index cd64fd531ca..313ed47a4c0 100644
--- a/libphobos/Makefile.in
+++ b/libphobos/Makefile.in
@@ -221,6 +221,7 @@ DCFG_HAVE_64BIT_ATOMICS = @DCFG_HAVE_64BIT_ATOMICS@
 DCFG_HAVE_ATOMIC_BUILTINS = @DCFG_HAVE_ATOMIC_BUILTINS@
 DCFG_HAVE_LIBATOMIC = @DCFG_HAVE_LIBATOMIC@
 DCFG_HAVE_QSORT_R = @DCFG_HAVE_QSORT_R@
+DCFG_HAVE___FORK = @DCFG_HAVE___FORK@
 DCFG_MINFO_BRACKETING = @DCFG_MINFO_BRACKETING@
 DCFG_THREAD_MODEL = @DCFG_THREAD_MODEL@
 DEFS = @DEFS@
diff --git a/libphobos/configure b/libphobos/configure
index 4f5be7d4ff4..02b3d2bfefa 100755
--- a/libphobos/configure
+++ b/libphobos/configure
@@ -654,6 +654,7 @@ LIBATOMIC
 DCFG_HAVE_LIBATOMIC
 DCFG_HAVE_64BIT_ATOMICS
 DCFG_HAVE_ATOMIC_BUILTINS
+DCFG_HAVE___FORK
 DCFG_HAVE_QSORT_R
 OS_DFLAGS
 OS_LINK_SPEC
@@ -11864,7 +11865,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11867 "configure"
+#line 11868 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11970,7 +11971,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11973 "configure"
+#line 11974 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -14779,6 +14780,13 @@ if test "x$ac_cv_func_qsort_r" = xyes; then :
 fi
 
 
+  DCFG_HAVE___FORK=false
+  ac_fn_c_check_func "$LINENO" "__fork" "ac_cv_func___fork"
+if test "x$ac_cv_func___fork" = xyes; then :
+  DCFG_HAVE___FORK=true
+fi
+
+
   ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
diff --git a/libphobos/libdruntime/Makefile.in 
b/libphobos/libdruntime/Makefile.in
index 1c0fa546dbb..0883f70fdc1 100644
--- a/libphobos/libdruntime/Makefile.in
+++ b/libphobos/libdruntime/Makefile.in
@@ -639,6 +639,7 @@ DCFG_HAVE_64BIT_ATOMICS = @DCFG_HAVE_64BIT_ATOMICS@
 DCFG_HAVE_ATOMIC_BUILTINS = @DCFG_HAVE_ATOMIC_BUILTINS@
 DCFG_HAVE_LIBATOMIC = @DCFG_HAVE_LIBATOMIC@
 DCFG_HAVE_QSORT_R = @DCFG_HAVE_QSORT_R@
+DCFG_HAVE___FORK = @DCFG_HAVE___FORK@
 DCFG_MINFO_BRACKETING = @DCFG_MINFO_BRACKETING@
 DCFG_THREAD_MODEL = @DCFG_THREAD_MODEL@
 DEFS = @DEFS@
diff --git a/libphobos/libdruntime/core/internal/gc/impl/conservative/gc.d 
b/libphobos/libdruntime/core/internal/gc/impl/conservative/gc.d
index 64b5bed43b1..bb2b2b1309f 100644
--- a/libphobos/libdruntime/core/internal/gc/impl/conservative/gc.d
+++ b/libphobos/libdruntime/core/internal/gc/impl/conservative/gc.d
@@ -50,6 +50,7 @@ import core.thread;
 static import core.memory;
 
 version (GNU) import gcc.builtins;
+version (GNU) import gcc.config : Have___fork;
 
 debug (PRINTF_TO_FILE) import core.stdc.stdio : sprintf, fprintf, fopen, 
fflush, FILE;
 else                   import core.stdc.stdio : sprintf, printf; // needed to 
output profiling results
@@ -100,7 +101,8 @@ private
 
         version (COLLECT_FORK)
             version (OSX)
-                pid_t __fork() nothrow;
+                static if (Have___fork)
+                  pid_t __fork() nothrow;
     }
 
     enum
@@ -3196,7 +3198,10 @@ struct Gcx
         }
         version (OSX)
         {
-            auto pid = __fork(); // avoids calling handlers (from libc source 
code)
+            static if (Have___fork)
+                auto pid = __fork(); // avoids calling handlers (from libc 
source code)
+            else
+                auto pid = fork();
         }
         else version (linux)
         {
diff --git a/libphobos/libdruntime/gcc/config.d.in 
b/libphobos/libdruntime/gcc/config.d.in
index e5fcd5073a9..75a1cd675c0 100644
--- a/libphobos/libdruntime/gcc/config.d.in
+++ b/libphobos/libdruntime/gcc/config.d.in
@@ -52,3 +52,6 @@ enum Have_Qsort_R = @DCFG_HAVE_QSORT_R@;
 
 // Whether libphobos been configured with --enable-cet.
 enum GNU_Enable_CET = @DCFG_ENABLE_CET@;
+
+// Do we have __fork function
+enum Have___fork = @DCFG_HAVE___FORK@;
diff --git a/libphobos/m4/druntime/libraries.m4 
b/libphobos/m4/druntime/libraries.m4
index 8dd9c7da107..0d664f892d7 100644
--- a/libphobos/m4/druntime/libraries.m4
+++ b/libphobos/m4/druntime/libraries.m4
@@ -207,6 +207,9 @@ AC_DEFUN([DRUNTIME_LIBRARIES_CLIB],
   DCFG_HAVE_QSORT_R=false
   AC_CHECK_FUNC(qsort_r, [DCFG_HAVE_QSORT_R=true])
   AC_SUBST(DCFG_HAVE_QSORT_R)
+  DCFG_HAVE___FORK=false
+  AC_CHECK_FUNC(__fork, [DCFG_HAVE___FORK=true])
+  AC_SUBST(DCFG_HAVE___FORK)
   AC_LANG_POP([C])
 ])
 
diff --git a/libphobos/src/Makefile.in b/libphobos/src/Makefile.in
index 64cc9c3d010..85c2f69df4f 100644
--- a/libphobos/src/Makefile.in
+++ b/libphobos/src/Makefile.in
@@ -374,6 +374,7 @@ DCFG_HAVE_64BIT_ATOMICS = @DCFG_HAVE_64BIT_ATOMICS@
 DCFG_HAVE_ATOMIC_BUILTINS = @DCFG_HAVE_ATOMIC_BUILTINS@
 DCFG_HAVE_LIBATOMIC = @DCFG_HAVE_LIBATOMIC@
 DCFG_HAVE_QSORT_R = @DCFG_HAVE_QSORT_R@
+DCFG_HAVE___FORK = @DCFG_HAVE___FORK@
 DCFG_MINFO_BRACKETING = @DCFG_MINFO_BRACKETING@
 DCFG_THREAD_MODEL = @DCFG_THREAD_MODEL@
 DEFS = @DEFS@
diff --git a/libphobos/testsuite/Makefile.in b/libphobos/testsuite/Makefile.in
index 3df08152b74..689b3e0a1b6 100644
--- a/libphobos/testsuite/Makefile.in
+++ b/libphobos/testsuite/Makefile.in
@@ -165,6 +165,7 @@ DCFG_HAVE_64BIT_ATOMICS = @DCFG_HAVE_64BIT_ATOMICS@
 DCFG_HAVE_ATOMIC_BUILTINS = @DCFG_HAVE_ATOMIC_BUILTINS@
 DCFG_HAVE_LIBATOMIC = @DCFG_HAVE_LIBATOMIC@
 DCFG_HAVE_QSORT_R = @DCFG_HAVE_QSORT_R@
+DCFG_HAVE___FORK = @DCFG_HAVE___FORK@
 DCFG_MINFO_BRACKETING = @DCFG_MINFO_BRACKETING@
 DCFG_THREAD_MODEL = @DCFG_THREAD_MODEL@
 DEFS = @DEFS@
-- 
2.39.2 (Apple Git-143)

Reply via email to