aboutsummaryrefslogtreecommitdiffstats
path: root/acinclude.m4
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2013-12-24 18:43:42 +0000
committerGuy Harris <guy@alum.mit.edu>2013-12-24 18:43:42 +0000
commit8713e0457b9ce2993d04d33e9eae715826850269 (patch)
treee0358623622e4d0b290c700739efadb7d2bd23d6 /acinclude.m4
parent68e7ccc5dc234425ae758f63bdbb8194c5c8d6a6 (diff)
Some warning options are, for reasons not entirely obvious to me, not
supported by some versions of g++ even though the corresponding version of gcc supports them. Other versions of g++, and clang, support them. Check, before adding a -W option for C++, whether the compiler supports it; that check must be done with -Werror, at least with g++, in order to get a non-zero exit status from the compiler. svn path=/trunk/; revision=54447
Diffstat (limited to 'acinclude.m4')
-rw-r--r--acinclude.m443
1 files changed, 42 insertions, 1 deletions
diff --git a/acinclude.m4 b/acinclude.m4
index bf55755921..61348f1489 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -1610,6 +1610,37 @@ AC_DEFUN([AC_WIRESHARK_CHECK_UNKNOWN_WARNING_OPTION_ERROR],
CFLAGS="$save_CFLAGS"
])
+dnl
+dnl Check whether, if you pass a valid-for-C-but-not-C++ option to the
+dnl compiler, it fails or just prints a warning message and succeeds.
+dnl Set ac_wireshark_non_cxx_warning_option_error to the appropriate flag
+dnl to force an error if it would otherwise just print a warning message
+dnl and succeed.
+dnl
+AC_DEFUN([AC_WIRESHARK_CHECK_NON_CXX_WARNING_OPTION_ERROR],
+ [
+ AC_MSG_CHECKING([whether the compiler fails when given an warning option not supported for C++])
+ save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CFLAGS -Wmissing-prototypes" # the prototypical one, no pun intended
+ AC_LANG_PUSH(C++)
+ AC_TRY_COMPILE(
+ [],
+ [return 0],
+ [
+ AC_MSG_RESULT([no, adding -Werror])
+ #
+ # We're assuming this is g++, where -Werror is the
+ # appropriate option to force the compiler to fail.
+ #
+ ac_wireshark_non_cxx_warning_option_error="-Werror"
+ ],
+ [
+ AC_MSG_RESULT([yes])
+ ])
+ AC_LANG_POP
+ CXXFLAGS="$save_CXXFLAGS"
+ ])
+
#
# AC_WIRESHARK_COMPILER_FLAGS_CHECK
#
@@ -1720,11 +1751,21 @@ if test "x$ac_supports_gcc_flags" = "xyes" ; then
#
# Not C-only; if this can be added to the C++ compiler flags, add them.
#
+ # If the option begins with "-W", add
+ # $ac_wireshark_unknown_warning_option_error, as per the above, and
+ # also add $ac_wireshark_non_cxx_warning_option_error, because at
+ # lease some versions of g++ whine about -Wmissing-prototypes, the
+ # fact that at least one of those versions refuses to warn about
+ # function declarations without an earlier declaration nonwithstanding;
+ # perhaps there's a reason not to warn about that with C++ even though
+ # warning about it can be a Good Idea with C, but it's not obvious to
+ # me).
+ #
AC_MSG_CHECKING(whether we can add $GCC_OPTION to CXXFLAGS)
CXXFLAGS_saved="$CXXFLAGS"
if expr "x$GCC_OPTION" : "x-W.*" >/dev/null
then
- CXXFLAGS="$CXXFLAGS $ac_wireshark_unknown_warning_option_error $GCC_OPTION"
+ CXXFLAGS="$CXXFLAGS $ac_wireshark_unknown_warning_option_error $ac_wireshark_non_cxx_warning_option_error $GCC_OPTION"
elif expr "x$GCC_OPTION" : "x-f.*" >/dev/null
then
CXXFLAGS="$CXXFLAGS -Werror $GCC_OPTION"