summaryrefslogtreecommitdiff
path: root/autoconf
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2014-01-15 19:19:13 +0000
committerChandler Carruth <chandlerc@gmail.com>2014-01-15 19:19:13 +0000
commit0893113a05af8b67799965685e96c11a59908a95 (patch)
treee7e453cf9f6c6f4c90ce4d740ca091e62b3ce23b /autoconf
parent96f3b25e8a61cd79e8d65ff31ff3df079ae50ec1 (diff)
downloadllvm-0893113a05af8b67799965685e96c11a59908a95.tar.gz
llvm-0893113a05af8b67799965685e96c11a59908a95.tar.bz2
llvm-0893113a05af8b67799965685e96c11a59908a95.tar.xz
Sink the autoconf check for sufficiently modern host toolchain below the
enable flag that selects the C++ standard library to use with the host toolchain. Otherwise we end up testing the wrong config. I'm not really happy about this placement, but its pragmatic and should unblock the Apple builders. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199325 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'autoconf')
-rw-r--r--autoconf/configure.ac152
1 files changed, 77 insertions, 75 deletions
diff --git a/autoconf/configure.ac b/autoconf/configure.ac
index 7e399fcddd..243b2ceec9 100644
--- a/autoconf/configure.ac
+++ b/autoconf/configure.ac
@@ -115,81 +115,6 @@ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#if ! __clang__
AC_LANG_POP([C++])
AC_MSG_RESULT([${llvm_cv_cxx_compiler}])
-dnl Check both GCC and Clang for sufficiently modern versions. These checks can
-dnl be bypassed by passing a flag if necessary on a platform.
-AC_ARG_ENABLE(compiler-version-checks,
- AS_HELP_STRING([--enable-compiler-version-checks],
- [Check the version of the host compiler (default is YES)]),,
- enableval=default)
-case "$enableval" in
- no)
- ;;
- yes|default)
- AC_LANG_PUSH([C++])
- case "$llvm_cv_cxx_compiler" in
- clang)
- AC_MSG_CHECKING([whether Clang is new enough])
- AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
-#if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 1)
-#error This version of Clang is too old to build LLVM
-#endif
-]])],
- [AC_MSG_RESULT([yes])],
- [AC_MSG_RESULT([no])
- AC_MSG_ERROR([
-The selected Clang compiler is not new enough to build LLVM. Please upgrade to
-Clang 3.1. You may pass --disable-compiler-version-checks to configure to
-bypass these sanity checks.])])
-
- dnl Note that libstdc++4.6 is known broken for C++11 builds. The errors
- dnl are sometimes deeply confusing though. Here we test for an obvious
- dnl incomplete feature in 4.6's standard library that was completed in
- dnl 4.7's.
- AC_MSG_CHECKING([whether Clang will select a modern C++ standard library])
- llvm_cv_old_cxxflags="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS -std=c++0x"
- AC_LINK_IFELSE([AC_LANG_SOURCE([[
-#include <atomic>
-std::atomic<float> x(0.0f);
-int main() { return (float)x; }
-]])],
- [AC_MSG_RESULT([yes])],
- [AC_MSG_RESULT([no])
- AC_MSG_ERROR([
-We detected a missing feature in the standard C++ library that was known to be
-missing in libstdc++4.6 and implemented in libstdc++4.7. There are numerous
-C++11 problems with 4.6's library, and we don't support GCCs or libstdc++ older
-than 4.7. You will need to update your system and ensure Clang uses the newer
-standard library.
-
-If this error is incorrect or you need to force things to work, you may pass
-'--disable-compiler-version-checks' to configure to bypass this test.])])
- CXXFLAGS="$llvm_cv_old_cxxflags"
- ;;
- gcc)
- AC_MSG_CHECKING([whether GCC is new enough])
- AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
-#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7)
-#error This version of GCC is too old to build LLVM
-#endif
-]])],
- [AC_MSG_RESULT([yes])],
- [AC_MSG_RESULT([no])
- AC_MSG_ERROR([
-The selected GCC C++ compiler is not new enough to build LLVM. Please upgrade
-to GCC 4.7. You may pass --disable-compiler-version-checks to configure to
-bypass these sanity checks.])])
- ;;
- unknown)
- ;;
- esac
- AC_LANG_POP([C++])
- ;;
- *)
- AC_MSG_ERROR([Invalid setting for --enable-compiler-version-checks. Use "yes" or "no"])
- ;;
-esac
-
dnl Configure all of the projects present in our source tree. While we could
dnl just AC_CONFIG_SUBDIRS on the set of directories in projects that have a
dnl configure script, that usage of the AC_CONFIG_SUBDIRS macro is deprecated.
@@ -582,6 +507,83 @@ case "$enableval" in
*) AC_MSG_ERROR([Invalid setting for --enable-libcpp. Use "yes" or "no"]) ;;
esac
+dnl Check both GCC and Clang for sufficiently modern versions. These checks can
+dnl be bypassed by passing a flag if necessary on a platform. We have to do
+dnl these checks here so that we have the configuration of the standard C++
+dnl library finished.
+AC_ARG_ENABLE(compiler-version-checks,
+ AS_HELP_STRING([--enable-compiler-version-checks],
+ [Check the version of the host compiler (default is YES)]),,
+ enableval=default)
+case "$enableval" in
+ no)
+ ;;
+ yes|default)
+ AC_LANG_PUSH([C++])
+ case "$llvm_cv_cxx_compiler" in
+ clang)
+ AC_MSG_CHECKING([whether Clang is new enough])
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
+#if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 1)
+#error This version of Clang is too old to build LLVM
+#endif
+]])],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([no])
+ AC_MSG_ERROR([
+The selected Clang compiler is not new enough to build LLVM. Please upgrade to
+Clang 3.1. You may pass --disable-compiler-version-checks to configure to
+bypass these sanity checks.])])
+
+ dnl Note that libstdc++4.6 is known broken for C++11 builds. The errors
+ dnl are sometimes deeply confusing though. Here we test for an obvious
+ dnl incomplete feature in 4.6's standard library that was completed in
+ dnl 4.7's.
+ AC_MSG_CHECKING([whether Clang will select a modern C++ standard library])
+ llvm_cv_old_cxxflags="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -std=c++0x"
+ AC_LINK_IFELSE([AC_LANG_SOURCE([[
+#include <atomic>
+std::atomic<float> x(0.0f);
+int main() { return (float)x; }
+]])],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([no])
+ AC_MSG_ERROR([
+We detected a missing feature in the standard C++ library that was known to be
+missing in libstdc++4.6 and implemented in libstdc++4.7. There are numerous
+C++11 problems with 4.6's library, and we don't support GCCs or libstdc++ older
+than 4.7. You will need to update your system and ensure Clang uses the newer
+standard library.
+
+If this error is incorrect or you need to force things to work, you may pass
+'--disable-compiler-version-checks' to configure to bypass this test.])])
+ CXXFLAGS="$llvm_cv_old_cxxflags"
+ ;;
+ gcc)
+ AC_MSG_CHECKING([whether GCC is new enough])
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
+#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7)
+#error This version of GCC is too old to build LLVM
+#endif
+]])],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([no])
+ AC_MSG_ERROR([
+The selected GCC C++ compiler is not new enough to build LLVM. Please upgrade
+to GCC 4.7. You may pass --disable-compiler-version-checks to configure to
+bypass these sanity checks.])])
+ ;;
+ unknown)
+ ;;
+ esac
+ AC_LANG_POP([C++])
+ ;;
+ *)
+ AC_MSG_ERROR([Invalid setting for --enable-compiler-version-checks. Use "yes" or "no"])
+ ;;
+esac
+
dnl --enable-cxx11 : check whether or not to use -std=c++11 on the command line
AC_ARG_ENABLE(cxx11,
AS_HELP_STRING([--enable-cxx11],