summaryrefslogtreecommitdiff
path: root/SConstruct
diff options
context:
space:
mode:
authorAndrew Morrow <acm@mongodb.com>2018-08-14 15:24:54 -0400
committerAndrew Morrow <acm@mongodb.com>2018-09-20 14:36:08 -0400
commit499f7c0f7dab2d3ed31cad84d3c96b5884436f5f (patch)
tree2bba9da77ddf283f74dae8ce10ad69a93e412887 /SConstruct
parentca7ee87306f3333a9ef1f89d7a272f36282ff963 (diff)
downloadmongo-499f7c0f7dab2d3ed31cad84d3c96b5884436f5f.tar.gz
SERVER-33912 Make warnings fatal for embedded builders
Also includes necessary feature flag and new clang warning suppressions (cherry picked from commit a81a923c2c44d69a39a81ade66572fafedfa4f03)
Diffstat (limited to 'SConstruct')
-rw-r--r--SConstruct28
1 files changed, 28 insertions, 0 deletions
diff --git a/SConstruct b/SConstruct
index 1d634b159bf..8c03735f32e 100644
--- a/SConstruct
+++ b/SConstruct
@@ -1723,6 +1723,29 @@ if env.ToolchainIs('msvc'):
if env.TargetOSIs('posix'):
+ # On linux, C code compiled with gcc/clang -std=c11 causes
+ # __STRICT_ANSI__ to be set, and that drops out all of the feature
+ # test definitions, resulting in confusing errors when we run C
+ # language configure checks and expect to be able to find newer
+ # POSIX things. Explicitly enabling _XOPEN_SOURCE fixes that, and
+ # should be mostly harmless as on Linux, these macros are
+ # cumulative. The C++ compiler already sets _XOPEN_SOURCE, and,
+ # notably, setting it again does not disable any other feature
+ # test macros, so this is safe to do. Other platforms like macOS
+ # and BSD have crazy rules, so don't try this there.
+ #
+ # Furthermore, as both C++ compilers appears to unconditioanlly
+ # define _GNU_SOURCE (because libstdc++ requires it), it seems
+ # prudent to explicitly add that too, so that C language checks
+ # see a consistent set of definitions.
+ if env.TargetOSIs('linux'):
+ env.AppendUnique(
+ CPPDEFINES=[
+ ('_XOPEN_SOURCE', 700),
+ '_GNU_SOURCE',
+ ],
+ )
+
# Everything on OS X is position independent by default. Solaris doesn't support PIE.
if not env.TargetOSIs('darwin', 'solaris'):
if get_option('runtime-hardening') == "on":
@@ -2108,6 +2131,11 @@ def doConfigure(myenv):
# As of clang-3.4, this warning appears in v8, and gets escalated to an error.
AddToCCFLAGSIfSupported(myenv, "-Wno-tautological-constant-out-of-range-compare")
+ # As of clang in Android NDK 17, these warnings appears in boost and/or ICU, and get escalated to errors
+ AddToCCFLAGSIfSupported(myenv, "-Wno-tautological-constant-compare")
+ AddToCCFLAGSIfSupported(myenv, "-Wno-tautological-unsigned-zero-compare")
+ AddToCCFLAGSIfSupported(myenv, "-Wno-tautological-unsigned-enum-zero-compare")
+
# New in clang-3.4, trips up things mostly in third_party, but in a few places in the
# primary mongo sources as well.
AddToCCFLAGSIfSupported(myenv, "-Wno-unused-const-variable")