folly: allow folly::init to build on systems without the symbolizer (macOS)
authorWez Furlong <wez@fb.com>
Wed, 20 Jul 2016 17:58:54 +0000 (10:58 -0700)
committerFacebook Github Bot 8 <facebook-github-bot-8-bot@fb.com>
Wed, 20 Jul 2016 18:08:22 +0000 (11:08 -0700)
Summary:
This makes folly/init/Init.cpp compile on macOS by leveraging
equivalent functionality in the glog library when the folly symbolizer is not
available.  This is true for macOS and also for Windows.  I haven't done
anything to handle Windows in this diff.

Reviewed By: yfeldblum

Differential Revision: D3585509

fbshipit-source-id: 2e0c29520a53826acbf656a7a02659b4e905802f

folly/init/Init.cpp

index 5b07a9e9687dc851f714f441c54dc9d98030acb5..f325ba3487fb53f14410b27a3f1370384a8a8bd9 100644 (file)
 #include <glog/logging.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