Tizen 2.0 Release
[framework/graphics/cairo.git] / build / configure.ac.warnings
1 dnl Use lots of warning flags with with gcc and compatible compilers
2
3 dnl Note: if you change the following variable, the cache is automatically
4 dnl skipped and all flags rechecked.  So there's no need to do anything
5 dnl else.  If for any reason you need to force a recheck, just change
6 dnl MAYBE_WARN in an ignorable way (like adding whitespace)
7
8 # -Wcast-align generates lots of false positive reports we need to
9 # cast image data from uint8_t to uin32_t.
10
11 # -Wlogical-op causes too much noise from strcmp("literal", str)
12
13 MAYBE_WARN="-Wall -Wextra \
14 -Wold-style-definition -Wdeclaration-after-statement \
15 -Wmissing-declarations -Werror-implicit-function-declaration \
16 -Wnested-externs -Wpointer-arith -Wwrite-strings \
17 -Wsign-compare -Wstrict-prototypes -Wmissing-prototypes \
18 -Wpacked -Wswitch-enum -Wmissing-format-attribute \
19 -Wbad-function-cast -Wvolatile-register-var \
20 -Wstrict-aliasing=2 -Winit-self -Wunsafe-loop-optimizations \
21 -Wno-missing-field-initializers -Wno-unused-parameter \
22 -Wno-attributes -Wno-long-long -Winline"
23
24 # -Wunused-but-set-variable is too noisy at present
25 NO_WARN="-Wno-unused-but-set-variable"
26
27 dnl Sun Studio 12 likes to rag at us for abusing enums like
28 dnl having cairo_status_t variables hold cairo_int_status_t
29 dnl values.  It's bad, we know.  Now please be quiet.
30 MAYBE_WARN="$MAYBE_WARN -erroff=E_ENUM_TYPE_MISMATCH_ARG \
31                         -erroff=E_ENUM_TYPE_MISMATCH_OP"
32
33 dnl We also abuse the warning-flag facility to enable other compiler
34 dnl options.  Namely, the following:
35
36 dnl -flto working really needs a test link, not just a compile
37
38 safe_MAYBE_WARN="$MAYBE_WARN"
39 MAYBE_WARN="$MAYBE_WARN -flto"
40 AC_TRY_LINK([],[
41         int main(int argc, char **argv) { return 0; }
42 ],[],[
43         MAYBE_WARN="$safe_MAYBE_WARN"
44 ])
45
46 MAYBE_WARN="$MAYBE_WARN -fno-strict-aliasing -fno-common"
47
48 dnl Also to turn various gcc/glibc-specific preprocessor checks
49 MAYBE_WARN="$MAYBE_WARN -Wp,-D_FORTIFY_SOURCE=2"
50
51 MAYBE_WARN="$MAYBE_WARN $NO_WARN"
52
53 # invalidate cached value if MAYBE_WARN has changed
54 if test "x$cairo_cv_warn_maybe" != "x$MAYBE_WARN"; then
55         unset cairo_cv_warn_cflags
56 fi
57 AC_CACHE_CHECK([for supported warning flags], cairo_cv_warn_cflags, [
58         echo
59         WARN_CFLAGS=""
60
61         # Some warning options are not supported by all versions of
62         # gcc, so test all desired options against the current
63         # compiler.
64         #
65         # Note that there are some order dependencies
66         # here. Specifically, an option that disables a warning will
67         # have no net effect if a later option then enables that
68         # warnings, (perhaps implicitly). So we put some grouped
69         # options (-Wall and -Wextra) up front and the -Wno options
70         # last.
71
72         for W in $MAYBE_WARN; do
73                 CAIRO_CC_TRY_FLAG([$W],, [WARN_CFLAGS="$WARN_CFLAGS $W"])
74         done
75
76         cairo_cv_warn_cflags=$WARN_CFLAGS
77         cairo_cv_warn_maybe=$MAYBE_WARN
78
79         AC_MSG_CHECKING([which warning flags were supported])
80 ])
81 WARN_CFLAGS="$cairo_cv_warn_cflags"
82 CAIRO_CFLAGS="$CAIRO_CFLAGS $WARN_CFLAGS"
83
84 # We only wish to enable attribute(warn_unused_result) if we can prevent
85 # gcc from generating thousands of warnings about the misapplication of the
86 # attribute to void functions and variables.
87 AC_CACHE_CHECK([how to enable unused result warnings], cairo_cv_warn_unused_result, [
88         AC_REQUIRE([AC_PROG_GREP])
89         cairo_cv_warn_unused_result=""
90         if echo $WARN_CFLAGS | $GREP -e '-Wno-attributes' >/dev/null; then
91             CAIRO_CC_TRY_FLAG_SILENT(
92                         [-Wno-attributes],
93                         [__attribute__((__warn_unused_result__)) void f (void) {}
94                          __attribute__((__warn_unused_result__)) int g;],
95                         [cairo_cv_warn_unused_result="__attribute__((__warn_unused_result__))"])
96         fi
97 ])
98 AC_DEFINE_UNQUOTED([WARN_UNUSED_RESULT], [$cairo_cv_warn_unused_result],
99           [Define to the value your compiler uses to support the warn-unused-result attribute])
100
101 dnl check linker flags
102 AC_CACHE_CHECK([how to allow undefined symbols in shared libraries used by test suite], cairo_cv_test_undefined_ldflags,
103                [CAIRO_CC_TRY_FLAG_SILENT([-Wl,--allow-shlib-undefined], [],
104                                   [cairo_cv_test_undefined_ldflags="-Wl,--allow-shlib-undefined]")])
105 CAIRO_TEST_UNDEFINED_LDFLAGS="$cairo_cv_test_undefined_ldflags"
106 AC_SUBST(CAIRO_TEST_UNDEFINED_LDFLAGS)