Browse Source

Extend c++11 tests in configure script

Now also checks if gcc is at least version 4.7 or clang is at least version 3.1
Bart van Strien 10 years ago
parent
commit
acca06907e
2 changed files with 71 additions and 14 deletions
  1. 2 14
      platform/unix/configure.ac
  2. 69 0
      platform/unix/m4/cpp11.m4

+ 2 - 14
platform/unix/configure.ac

@@ -19,23 +19,11 @@ AC_LANG([C++])
 
 includes=
 
-AC_DEFUN([ACLOVE_CXX_FLAG_TEST], # WARNING: NOT REENTRANT
-		 [aclove_cxx_flag_test_save_cflags="$CXXFLAGS"
-		  CXXFLAGS="$1"
-		  AC_MSG_CHECKING([whether $CXX supports flag $1])
-		  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])],
-			  [AC_MSG_RESULT([yes])]; $2,
-			  [AC_MSG_RESULT([no]); $3])
-		  CXXFLAGS="$aclove_cxx_flag_test_save_cflags"])
-
 AC_DEFUN([LOVE_MSG_ERROR],
 		 [AC_MSG_ERROR([LÖVE needs "$1"[,] please install "$1" with development files and try again])])
 
-# C++11 support
-cxx11name="no"
-ACLOVE_CXX_FLAG_TEST([-std=c++0x], cxx11name="c++0x", [])
-ACLOVE_CXX_FLAG_TEST([-std=c++11], cxx11name="c++11", [])
-AS_VAR_IF([cxx11name], [no], AC_MSG_ERROR([LÖVE needs a C++ compiler with C++11 support]), CXXFLAGS="$CXXFLAGS -std=$cxx11name")
+# C++11 support in m4/cpp11.m4
+ACLOVE_CPP11_TEST
 
 # Allow people on OSX to use autotools, they need their platform files
 AC_ARG_ENABLE([osx],

+ 69 - 0
platform/unix/m4/cpp11.m4

@@ -0,0 +1,69 @@
+AC_DEFUN([ACLOVE_CXX_FLAG_TEST], [ dnl WARNING: NOT REENTRANT
+	aclove_cxx_flag_test_save_cflags="$CXXFLAGS"
+	CXXFLAGS="$1"
+	AC_MSG_CHECKING([whether $CXX supports flag $1])
+	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])],
+		[AC_MSG_RESULT([yes])]; $2,
+		[AC_MSG_RESULT([no]); $3])
+	CXXFLAGS="$aclove_cxx_flag_test_save_cflags"
+])
+
+AC_DEFUN([ACLOVE_GET_GCC_VERSION], [
+	aclove_gcc_version_found="yes"
+	AC_COMPUTE_INT(aclove_gcc_version_major, __GNUC__,, aclove_gcc_version_found="no")
+	AC_COMPUTE_INT(aclove_gcc_version_minor, __GNUC_MINOR__,, aclove_gcc_version_found="no")
+	AC_COMPUTE_INT(aclove_gcc_version_patch, __GNUC_PATCHLEVEL__,, aclove_gcc_version_found="no")
+])
+
+AC_DEFUN([ACLOVE_GET_CLANG_VERSION], [
+	aclove_clang_version_found="yes"
+	AC_COMPUTE_INT(aclove_clang_version_major, __clang_major__,, aclove_clang_version_found="no")
+	AC_COMPUTE_INT(aclove_clang_version_minor, __clang_minor__,, aclove_clang_version_found="no")
+	AC_COMPUTE_INT(aclove_clang_version_patch, __clang_patchlevel__,, aclove_clang_version_found="no")
+])
+
+AC_DEFUN([ACLOVE_CPP11_TEST_FLAG], [
+	aclove_cpp11_test_cxx11name="no"
+	ACLOVE_CXX_FLAG_TEST([-std=c++0x], aclove_cpp11_test_cxx11name="c++0x", [])
+	ACLOVE_CXX_FLAG_TEST([-std=c++11], aclove_cpp11_test_cxx11name="c++11", [])
+	AS_VAR_IF([aclove_cpp11_test_cxx11name], [no],
+		[AC_MSG_ERROR([LÖVE needs a C++ compiler with C++11 support])],
+		[CXXFLAGS="$CXXFLAGS -std=$aclove_cpp11_test_cxx11name"])
+])
+
+AC_DEFUN([ACLOVE_CPP11_CHECK_VERSION], [ dnl compiler, targetmajor, targetminor, on-failure
+	aclove_cpp11_check_version_status="no"
+	AC_MSG_CHECKING([whether $1 version is at least $2.$3])
+	AS_IF([test "$aclove_[]$1[]_version_major" -gt $2], aclove_cpp11_check_version_status="yes")
+	AS_IF([test "$aclove_[]$1[]_version_major" -eq $2 && test "$aclove_[]$1[]_version_minor" -ge $3], aclove_cpp11_check_version_status="yes")
+	AC_MSG_RESULT([$aclove_cpp11_check_version_status])
+	AS_VAR_IF([aclove_cpp11_check_version_status], [no],
+		[$4])
+])
+
+AC_DEFUN([ACLOVE_CPP11_TEST_VERSION_GCC], [
+	ACLOVE_CPP11_CHECK_VERSION([gcc], 4, 7,
+		[AC_MSG_ERROR([LÖVE needs a GCC version of at least 4.7])])
+])
+
+AC_DEFUN([ACLOVE_CPP11_TEST_VERSION_CLANG], [
+	ACLOVE_CPP11_CHECK_VERSION([clang], 3, 1,
+		[AC_MSG_ERROR([LÖVE needs a clang version of at least 3.1])])
+])
+
+AC_DEFUN([ACLOVE_CPP11_TEST], [
+	ACLOVE_CPP11_TEST_FLAG
+
+	ACLOVE_GET_GCC_VERSION
+	ACLOVE_GET_CLANG_VERSION
+
+	# Since clang also sets gcc headers, check clang after
+	aclove_cpp11_test_compiler="unknown"
+	AS_VAR_IF([aclove_gcc_version_found], [yes], aclove_cpp11_test_compiler="gcc")
+	AS_VAR_IF([aclove_clang_version_found], [yes], aclove_cpp11_test_compiler="clang")
+
+	AS_CASE([$aclove_cpp11_test_compiler],
+		[gcc], [ACLOVE_CPP11_TEST_VERSION_GCC],
+		[clang], [ACLOVE_CPP11_TEST_VERSION_CLANG],
+		[AC_MSG_WARN([Could not determine compiler version])])
+])