Get Subprocess running for Mac OS X
authorPeter Griess <pgriess@fb.com>
Wed, 20 Nov 2013 21:51:57 +0000 (13:51 -0800)
committerPeter Griess <pgriess@fb.com>
Tue, 26 Nov 2013 15:05:18 +0000 (07:05 -0800)
Summary:
D1030008 added Subprocess to libfolly in automake builds. This
surfaced some ambient compilation errors that slipped through in my
prior run through porting this.
- Mac OS X uses a nonstandard location for wait.h
- Non-Linux platforms don't support prctl; gate that on Linux

Test Plan:
- fbmake runtests in fbcode
- make check on Mac OS X

Reviewed By: davejwatson@fb.com

FB internal diff: D1066273

Blame Revision: D1030008

folly/Subprocess.cpp
folly/Subprocess.h

index 846076dd22c0e7ccefe91e07917d5e4e4cf0666d..6581a5b87f764b76b75a4f8b4840c311012f4036 100644 (file)
 
 #include "folly/Subprocess.h"
 
+#if __linux__
 #include <sys/prctl.h>
+#endif
 #include <fcntl.h>
 #include <poll.h>
 #include <unistd.h>
-#include <wait.h>
 
 #include <array>
 #include <algorithm>
@@ -362,7 +363,7 @@ void Subprocess::spawnInternal(
   //
   // The parent also unblocks all signals as soon as vfork() returns.
   sigset_t allBlocked;
-  r = ::sigfillset(&allBlocked);
+  r = sigfillset(&allBlocked);
   checkUnixError(r, "sigfillset");
   sigset_t oldSignals;
 
@@ -445,6 +446,7 @@ int Subprocess::prepareChild(const Options& options,
     }
   }
 
+#if __linux__
   // Opt to receive signal on parent death, if requested
   if (options.parentDeathSignal_ != 0) {
     r = prctl(PR_SET_PDEATHSIG, options.parentDeathSignal_, 0, 0, 0);
@@ -452,6 +454,7 @@ int Subprocess::prepareChild(const Options& options,
       return errno;
     }
   }
+#endif
 
   return 0;
 }
index 74e9fe9b1e13a20890a0b7f2d47886c7406b60f1..b2c1330309f02a2f550ff6f1e496db2dda2e5420 100644 (file)
 
 #include <sys/types.h>
 #include <signal.h>
+#if __APPLE__
+#include <sys/wait.h>
+#else
 #include <wait.h>
+#endif
 
 #include <exception>
 #include <vector>
@@ -201,8 +205,7 @@ class Subprocess : private boost::noncopyable {
    public:
     Options()
       : closeOtherFds_(false),
-        usePath_(false),
-        parentDeathSignal_(0) {
+        usePath_(false) {
     }
 
     /**
@@ -261,6 +264,7 @@ class Subprocess : private boost::noncopyable {
      */
     Options& usePath() { usePath_ = true; return *this; }
 
+#if __linux__
     /**
      * Child will receive a signal when the parent exits.
      */
@@ -268,6 +272,7 @@ class Subprocess : private boost::noncopyable {
       parentDeathSignal_ = sig;
       return *this;
     }
+#endif
 
     /**
      * Helpful way to combine Options.
@@ -279,7 +284,9 @@ class Subprocess : private boost::noncopyable {
     FdMap fdActions_;
     bool closeOtherFds_;
     bool usePath_;
-    int parentDeathSignal_;
+#if __linux__
+    int parentDeathSignal_{0};
+#endif
   };
 
   static Options pipeStdin() { return Options().stdin(PIPE); }