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-08-22 14:21:59 -0400
commitbce25d5e123843c0e594d6d743981099f236c983 (patch)
tree8004123eeb9544d3874830b43d3133e5f5c37779 /SConstruct
parente9226c9e1e1f0f4990279f207c41f78289e7c2ea (diff)
downloadmongo-bce25d5e123843c0e594d6d743981099f236c983.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 4917d4c97ac..7e30882c31a 100644
--- a/SConstruct
+++ b/SConstruct
@@ -1698,6 +1698,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":
@@ -2082,6 +2105,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")