Detect Clang masquerading as GCC.
authorErik de Castro Lopo <erikd@mega-nerd.com>
Fri, 22 Nov 2013 07:13:36 +0000 (18:13 +1100)
committerErik de Castro Lopo <erikd@mega-nerd.com>
Fri, 22 Nov 2013 07:13:40 +0000 (18:13 +1100)
Autoconf detects the Clang compiler as GNU GCC (clang sets defines like
__GNUC__ etc) but Clang is *not* completely compatible. If we detect
Clang we set ac_vc_c_compiler_gnu to 'no'.

configure.ac
m4/clang.m4 [new file with mode: 0644]
m4/really_gcc.m4 [new file with mode: 0644]

index 7f63a04..19320a4 100644 (file)
@@ -35,6 +35,8 @@ m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
 LT_INIT([win32-dll disable-static pic-only])
 AM_PROG_AS
 AC_PROG_CXX
+XIPH_C_COMPILER_IS_CLANG
+XIPH_GCC_REALLY_IS_GCC
 AC_PROG_MAKE_SET
 
 AC_SYS_LARGEFILE
@@ -521,6 +523,7 @@ AC_MSG_RESULT([
 if test x$ac_cv_c_compiler_gnu = xyes ; then
        echo "    GCC version : ......................... ${GCC_VERSION}"
 fi
+       echo "    Compiler is Clang : ................... ${xiph_cv_c_compiler_clang}"
        echo "    Asm optimizations : ................... ${asm_optimisation}"
        echo "    Ogg/FLAC support : .................... ${have_ogg}"
 echo
diff --git a/m4/clang.m4 b/m4/clang.m4
new file mode 100644 (file)
index 0000000..036f0e6
--- /dev/null
@@ -0,0 +1,31 @@
+dnl @synopsis XIPH_C_COMPILER_IS_CLANG
+dnl
+dnl Find out if a compiler claiming to be gcc really is gcc (clang lies).
+dnl @version 1.0       Oct 31 2013
+dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
+dnl
+dnl Permission to use, copy, modify, distribute, and sell this file for any
+dnl purpose is hereby granted without fee, provided that the above copyright
+dnl and this permission notice appear in all copies.  No representations are
+dnl made about the suitability of this software for any purpose.  It is
+dnl provided "as is" without express or implied warranty.
+dnl
+
+
+AC_DEFUN([XIPH_C_COMPILER_IS_CLANG],
+[AC_CACHE_CHECK(whether we are using the CLANG C compiler,
+       xiph_cv_c_compiler_clang,
+       [       AC_LANG_ASSERT(C)
+               AC_TRY_LINK([
+                       #include <stdio.h>
+                       ],
+                       [
+                       #ifndef __clang__
+                               This is not clang!
+                       #endif
+                       ],
+               xiph_cv_c_compiler_clang=yes,
+               xiph_cv_c_compiler_clang=no
+               ])
+       )]
+)
diff --git a/m4/really_gcc.m4 b/m4/really_gcc.m4
new file mode 100644 (file)
index 0000000..cba53ab
--- /dev/null
@@ -0,0 +1,32 @@
+dnl @synopsis XIPH_GCC_REALLY_IS_GCC
+dnl
+dnl Find out if a compiler claiming to be gcc really is gcc (clang lies).
+dnl @version 1.0       Oct 31 2013
+dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
+dnl
+dnl Permission to use, copy, modify, distribute, and sell this file for any
+dnl purpose is hereby granted without fee, provided that the above copyright
+dnl and this permission notice appear in all copies.  No representations are
+dnl made about the suitability of this software for any purpose.  It is
+dnl provided "as is" without express or implied warranty.
+dnl
+
+# If the configure script has already detected GNU GCC, then make sure it
+# isn't CLANG masquerading as GCC.
+
+AC_DEFUN([XIPH_GCC_REALLY_IS_GCC],
+[      AC_LANG_ASSERT(C)
+       if test "x$ac_cv_c_compiler_gnu" = "xyes" ; then
+               AC_TRY_LINK([
+                       #include <stdio.h>
+                       ],
+                       [
+                       #ifdef __clang__
+                               This is clang!
+                       #endif
+                       ],
+               ac_cv_c_compiler_gnu=yes,
+               ac_cv_c_compiler_gnu=no
+               )
+               fi
+])