7 cc
= os
.environ
.get('CC', 'cc')
8 sink
= open(os
.devnull
, 'wb')
10 cc_is_clang
= 'clang' in subprocess
.check_output(
11 [cc
, '--version'], universal_newlines
=True, stderr
=sink
)
13 # We probably just don't have CC/cc.
16 def warning_supported(warning
):
17 return subprocess
.call([cc
, '-x', 'c', '-E', '-Werror',
18 '-W%s' % warning
, os
.devnull
], stdout
=sink
, stderr
=sink
) == 0
20 # This would be a problem
21 if not warning_supported('all'):
24 # If we aren't clang, make sure we have gcc 4.8 at least
27 v
= subprocess
.check_output([cc
, '-dumpversion'], stderr
=sink
).decode("utf-8")
28 v
= v
.strip(' \r\n').split('.')
30 if v
[0] < 4 or (v
[0] == 4 and v
[1] < 8):
38 print('-DNSS_NO_GCC48')
44 def set_warning(warning
, contra
=''):
45 if warning_supported(warning
):
46 print('-W%s%s' % (contra
, warning
))
49 # clang is unable to handle glib's expansion of strcmp and similar for
50 # optimized builds, so disable the resulting errors.
51 # See https://llvm.org/bugs/show_bug.cgi?id=20144
52 for w
in ['array-bounds',
53 'unevaluated-expression',
54 'parentheses-equality',
55 'tautological-type-limit-compare',
58 'implicit-fallthrough'
61 for w
in ['tautological-constant-in-range-compare',
62 'bitfield-enum-conversion',
64 'format-type-confusion',
69 'unreachable-code-return',
72 'implicit-function-declaration'
75 print('-Qunused-arguments')
79 if __name__
== '__main__':