folly: allow folly::init to build on systems without the symbolizer (macOS)
[folly.git] / folly / init / Init.cpp
index 46d30a08750c3cf5bc945339e14678a8a43845c7..f325ba3487fb53f14410b27a3f1370384a8a8bd9 100644 (file)
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 #include <folly/init/Init.h>
-#include <folly/Singleton.h>
-#include <folly/experimental/symbolizer/SignalHandler.h>
 
 #include <glog/logging.h>
-#include <gflags/gflags.h>
+
+#include <folly/Singleton.h>
+#if !defined(__APPLE__) && !defined(_WIN32)
+#define USE_FOLLY_SYMBOLIZER 1
+#endif
+
+#ifdef USE_FOLLY_SYMBOLIZER
+#include <folly/experimental/symbolizer/SignalHandler.h>
+#endif
+#include <folly/portability/GFlags.h>
 
 namespace folly {
 
 void init(int* argc, char*** argv, bool removeFlags) {
+#ifdef USE_FOLLY_SYMBOLIZER
   // Install the handler now, to trap errors received during startup.
   // The callbacks, if any, can be installed later
   folly::symbolizer::installFatalSignalHandler();
+#else
+  google::InstallFailureSignalHandler();
+#endif
 
   google::ParseCommandLineFlags(argc, argv, removeFlags);
 
   auto programName = argc && argv && *argc > 0 ? (*argv)[0] : "unknown";
   google::InitGoogleLogging(programName);
 
+#ifdef USE_FOLLY_SYMBOLIZER
   // Don't use glog's DumpStackTraceAndExit; rely on our signal handler.
   google::InstallFailureFunction(abort);
+#endif
 
   // Move from the registration phase to the "you can actually instantiate
   // things now" phase.
   folly::SingletonVault::singleton()->registrationComplete();
 
+#ifdef USE_FOLLY_SYMBOLIZER
   // Actually install the callbacks into the handler.
   folly::symbolizer::installFatalSignalCallbacks();
+#endif
 }
 } //!folly