From a6a4b6f2052829c205319ecb0f5df553baedc9a4 Mon Sep 17 00:00:00 2001 From: Erik de Castro Lopo Date: Fri, 22 Nov 2013 18:13:36 +1100 Subject: [PATCH] Detect Clang masquerading as GCC. 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 | 3 +++ m4/clang.m4 | 31 +++++++++++++++++++++++++++++++ m4/really_gcc.m4 | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 66 insertions(+) create mode 100644 m4/clang.m4 create mode 100644 m4/really_gcc.m4 diff --git a/configure.ac b/configure.ac index 7f63a044..19320a4e 100644 --- a/configure.ac +++ b/configure.ac @@ -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 index 00000000..036f0e68 --- /dev/null +++ b/m4/clang.m4 @@ -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 +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 + ], + [ + #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 index 00000000..cba53ab3 --- /dev/null +++ b/m4/really_gcc.m4 @@ -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 +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 + ], + [ + #ifdef __clang__ + This is clang! + #endif + ], + ac_cv_c_compiler_gnu=yes, + ac_cv_c_compiler_gnu=no + ) + fi +])