diff --git a/platform/unix/configure.ac b/platform/unix/configure.ac index 3429334e1..836091eb8 100644 --- a/platform/unix/configure.ac +++ b/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], diff --git a/platform/unix/m4/cpp11.m4 b/platform/unix/m4/cpp11.m4 new file mode 100644 index 000000000..924c9689d --- /dev/null +++ b/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])]) +])