First cut at support for clang. We may want to have specific items for
authorguy <guy@f5534014-38df-0310-8fa8-9805f1628bb7>
Wed, 20 Apr 2011 03:22:19 +0000 (03:22 +0000)
committerguy <guy@f5534014-38df-0310-8fa8-9805f1628bb7>
Wed, 20 Apr 2011 03:22:19 +0000 (03:22 +0000)
"supports GCC-style -W flags", etc., and may want to improve the check
for "is this clang", as well as deciding what other stuff should be done
if we have clang as well.  clang should, I think, largely be
gcc-compatible at the command line.

git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@36729 f5534014-38df-0310-8fa8-9805f1628bb7

acinclude.m4
configure.in

index 05829bf382c8bce970095e5582c55d72b3a1654c..67eb67d9379ed00dbcb2bc6d4e061bdb5548dd6a 100644 (file)
@@ -1689,6 +1689,8 @@ AC_DEFUN([AC_WIRESHARK_GEOIP_CHECK],
 # defined ldflags. The defined flags are added to LDFLAGS only if the
 # compilation succeeds.
 #
+# XXX - clang as well?
+#
 AC_DEFUN([AC_WIRESHARK_GCC_LDFLAGS_CHECK],
 [GCC_OPTION="$1"
 AC_MSG_CHECKING(whether we can add $GCC_OPTION to LDFLAGS)
@@ -1716,14 +1718,14 @@ fi
 #
 # $1 : cflags to test
 #
-# The macro first determines if the compiler is GCC. Then compile with the
-# defined cflags. The defined flags are added to CFLAGS only if the compilation
-# succeeds.
+# The macro first determines if the compiler is GCC or clang. Then compile with
+# the defined cflags. The defined flags are added to CFLAGS only if the
+# compilation succeeds.
 #
 AC_DEFUN([AC_WIRESHARK_GCC_CFLAGS_CHECK],
 [GCC_OPTION="$1"
 AC_MSG_CHECKING(whether we can add $GCC_OPTION to CFLAGS)
-if test "x$GCC" != "x"; then
+if test "x$GCC" != "x" -o "x$CLANG" != "x" ; then
   CFLAGS_saved="$CFLAGS"
   CFLAGS="$CFLAGS $GCC_OPTION"
   AC_COMPILE_IFELSE([
index 1da5ce68304c5246422a02ad8ee1fe57fdb2a070..2c25d1884935ea043de7262a087559cf114773e2 100644 (file)
@@ -127,6 +127,18 @@ AC_SUBST(PYTHON)
 AC_SUBST(XSLTPROC)
 AC_SUBST(XMLLINT)
 
+#
+# Set CLANG if the compiler is clang, to handle compiler options
+# supported both by GCC and clang.  (This does *not* include
+# -no-cpp-precomp; clang says "clang: warning: argument unused during
+# compilation: '-no-cpp-precomp'" if you use it.)
+#
+if test "x$GCC" != "xyes" ; then
+       if test "x$CC" = "xclang" ; then
+               CLANG=yes
+       fi
+fi
+
 if test "x$CC_FOR_BUILD" = x
 then
        CC_FOR_BUILD=$CC
@@ -341,19 +353,22 @@ AC_WIRESHARK_GCC_LDFLAGS_CHECK([-Wl,--as-needed])
 # AC_WIRESHARK_GCC_LDFLAGS_CHECK([-fwhole-program])
 
 #
-# If we're running gcc add '-D_U_="__attribute__((unused))"' to CFLAGS as well,
-# so we can use _U_ to flag unused function arguments and not get warnings
-# about them. Otherwise, add '-D_U_=""', so that _U_ used to flag an unused
-# function argument will compile with non-GCC compilers.
+# If we're running GCC or clang, add '-D_U_="__attribute__((unused))"' to
+# CFLAGS as well, so we can use _U_ to flag unused function arguments and
+# not get warnings about them. Otherwise, add '-D_U_=""', so that _U_ used
+# to flag an unused function argument will compile with non-GCC, non-clang
+# compilers.
 #
-if test "x$GCC" = "xyes" ; then
+# XXX - other compilers?
+#
+if test "x$GCC" = "xyes" -o "x$CLANG" = "xyes" ; then
   CFLAGS="-D_U_=\"__attribute__((unused))\" $CFLAGS"
 else
   CFLAGS="-D_U_=\"\" $CFLAGS"
 fi
 
 #
-# If we're running gcc, will enable a barrier "stop on warning".
+# If we're running GCC or clang, enable a barrier "stop on warning".
 # This barrier is set for a very large part of the code. However, it is
 # typically not set for "generated" code  (flex, ans2wrs, idl2wrs, ...)
 #
@@ -361,9 +376,9 @@ warnings_as_errors_default="yes"
 AC_MSG_CHECKING(whether we should treat compiler warnings as errors)
 AC_ARG_ENABLE(warnings-as-errors,
   AC_HELP_STRING( [--enable-warnings-as-errors],
-                 [Treat warnings as errors (only for gcc). @<:@default=yes@:>@]),
+                 [Treat warnings as errors (only for GCC or clang). @<:@default=yes@:>@]),
 [
-  if test "x$GCC" = "xyes" -a "x$enableval" == "xyes" -a "x$wireshark_extra_gcc_flags" != "xyes"; then
+  if test \( "x$GCC" = "xyes" -o "x$CLANG" = "xyes" \) -a "x$enableval" == "xyes" -a "x$wireshark_extra_gcc_flags" != "xyes"; then
     with_warnings_as_errors="yes"
     AC_MSG_RESULT(yes)
   else
@@ -371,7 +386,7 @@ AC_ARG_ENABLE(warnings-as-errors,
     AC_MSG_RESULT(no)
   fi
 ],
-  if test "x$GCC" = "xyes" -a "x$wireshark_extra_gcc_flags" = "x" -a "x$warnings_as_errors_default" = "xyes"; then
+  if test \( "x$GCC" = "xyes" -o "x$CLANG" = "xyes" \) -a "x$wireshark_extra_gcc_flags" = "x" -a "x$warnings_as_errors_default" = "xyes"; then
     with_warnings_as_errors="yes"
     AC_MSG_RESULT(yes)
   else
@@ -661,12 +676,12 @@ AC_ARG_ENABLE(profile-build,
 AM_CONDITIONAL(USE_PROFILE_BUILD, test x$enable_profile_build = xyes)
 AC_MSG_CHECKING(if profile builds must be generated)
 if test "x$enable_profile_build" = "xyes" ; then
-       if test "x$GCC" = "xyes" ; then
+       if test "x$GCC" = "xyes" -o "x$CLANG" = "xyes" ; then
                AC_MSG_RESULT(yes)
                CFLAGS=" -pg $CFLAGS"
        else
                AC_MSG_RESULT(no)
-               echo "Building profile binaries currently only supported for GCC."
+               echo "Building profile binaries currently only supported for GCC and clang."
        fi
 else
        AC_MSG_RESULT(no)