Shift the job of defining NOMINMAX into source rather than the build system
authorChristopher Dykes <cdykes@fb.com>
Mon, 22 May 2017 22:19:00 +0000 (15:19 -0700)
committerFacebook Github Bot <facebook-github-bot@users.noreply.github.com>
Mon, 22 May 2017 22:20:02 +0000 (15:20 -0700)
Summary:
This makes it easier to consume Folly from a non-cmake project.
Note that this also requires making libevent, which was previously categorized as a semi-portable header into a non-portable header, meaning it can't be referenced directly. (libevent includes `Windows.h` in one of its headers -_-....)

Reviewed By: yfeldblum

Differential Revision: D5106051

fbshipit-source-id: 5ce2d4188c9036d6ab206af3036c8fd4b09516a4

CMake/FollyCompiler.cmake
folly/io/async/AsyncSignalHandler.h
folly/io/async/AsyncTimeout.h
folly/io/async/EventBase.h
folly/io/async/EventUtil.h
folly/portability/Event.h
folly/portability/Windows.h

index 31184ec..0065409 100755 (executable)
@@ -235,7 +235,6 @@ function(apply_folly_compile_options_to_target THETARGET)
   # And the extra defines:\r
   target_compile_definitions(${THETARGET}\r
     PUBLIC\r
-      NOMINMAX # This is needed because, for some absurd reason, one of the windows headers tries to define "min" and "max" as macros, which messes up most uses of std::numeric_limits.\r
       _CRT_NONSTDC_NO_WARNINGS # Don't deprecate posix names of functions.\r
       _CRT_SECURE_NO_WARNINGS # Don't deprecate the non _s versions of various standard library functions, because safety is for chumps.\r
       _SCL_SECURE_NO_WARNINGS # Don't deprecate the non _s versions of various standard library functions, because safety is for chumps.\r
index bd8cfff..f4b6bdf 100644 (file)
@@ -16,7 +16,7 @@
 #pragma once
 
 #include <folly/io/async/EventBase.h>
-#include <event.h>
+#include <folly/portability/Event.h>
 #include <map>
 
 namespace folly {
index e7754a1..5a4b2da 100644 (file)
@@ -25,7 +25,6 @@
 #include <folly/portability/Event.h>
 
 #include <boost/noncopyable.hpp>
-#include <event.h>
 #include <memory>
 #include <utility>
 
index fe6dcf1..487af05 100644 (file)
@@ -45,9 +45,9 @@
 #include <folly/io/async/HHWheelTimer.h>
 #include <folly/io/async/Request.h>
 #include <folly/io/async/TimeoutManager.h>
+#include <folly/portability/Event.h>
 #include <glog/logging.h>
 
-#include <event.h>  // libevent
 
 namespace folly {
 
index 86de9fa..2ba9af4 100644 (file)
@@ -21,7 +21,8 @@
 #pragma once
 
 #include <functional>
-#include <event.h>  // libevent
+
+#include <folly/portability/Event.h>
 
 namespace folly {
 
index 0d1526a..9adb778 100644 (file)
 
 #pragma once
 
+#ifdef _MSC_VER
+// This needs to be before the libevent include.
+# include <folly/portability/Windows.h>
+#endif
+
 #include <event.h>
 
 #ifdef _MSC_VER
 # include <event2/event_compat.h>
 # include <folly/portability/Fcntl.h>
-# include <folly/portability/Windows.h>
 #endif
 
 namespace folly {
index 2cb0bda..7ccfde8 100755 (executable)
 #include <direct.h> // nolint
 #endif
 
+#if defined(min) || defined(max)
+#error Windows.h needs to be included by this header, or else NOMINMAX needs \
+ to be defined before including it yourself.
+#endif
+
+// This is needed because, for some absurd reason, one of the windows headers
+// tries to define "min" and "max" as macros, which messes up most uses of
+// std::numeric_limits.
+#ifndef NOMINMAX
+#define NOMINMAX 1
+#endif
+
 #include <WinSock2.h>
 #include <Windows.h>