cpp14.m4 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. AC_DEFUN([ACLOVE_CXX_FLAG_TEST], [ dnl WARNING: NOT REENTRANT
  2. aclove_cxx_flag_test_save_cflags="$CXXFLAGS"
  3. CXXFLAGS="$1"
  4. AC_MSG_CHECKING([whether $CXX supports flag $1])
  5. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])],
  6. [AC_MSG_RESULT([yes])]; $2,
  7. [AC_MSG_RESULT([no]); $3])
  8. CXXFLAGS="$aclove_cxx_flag_test_save_cflags"
  9. ])
  10. AC_DEFUN([ACLOVE_GET_GCC_VERSION], [
  11. aclove_gcc_version_found="yes"
  12. AC_COMPUTE_INT(aclove_gcc_version_major, __GNUC__,, aclove_gcc_version_found="no")
  13. AC_COMPUTE_INT(aclove_gcc_version_minor, __GNUC_MINOR__,, aclove_gcc_version_found="no")
  14. AC_COMPUTE_INT(aclove_gcc_version_patch, __GNUC_PATCHLEVEL__,, aclove_gcc_version_found="no")
  15. ])
  16. AC_DEFUN([ACLOVE_GET_CLANG_VERSION], [
  17. aclove_clang_version_found="yes"
  18. AC_COMPUTE_INT(aclove_clang_version_major, __clang_major__,, aclove_clang_version_found="no")
  19. AC_COMPUTE_INT(aclove_clang_version_minor, __clang_minor__,, aclove_clang_version_found="no")
  20. AC_COMPUTE_INT(aclove_clang_version_patch, __clang_patchlevel__,, aclove_clang_version_found="no")
  21. ])
  22. AC_DEFUN([ACLOVE_CPP14_TEST_FLAG], [
  23. aclove_cpp14_test_cxx14name="no"
  24. ACLOVE_CXX_FLAG_TEST([-std=c++14], aclove_cpp14_test_cxx14name="c++14", [])
  25. AS_VAR_IF([aclove_cpp14_test_cxx14name], [no],
  26. [AC_MSG_ERROR([LÖVE needs a C++ compiler with C++14 support])],
  27. [CXXFLAGS="$CXXFLAGS -std=$aclove_cpp14_test_cxx14name"])
  28. ])
  29. AC_DEFUN([ACLOVE_CPP14_CHECK_VERSION], [ dnl compiler, targetmajor, targetminor, on-failure
  30. aclove_cpp14_check_version_status="no"
  31. AC_MSG_CHECKING([whether $1 version is at least $2.$3])
  32. AS_IF([test "$aclove_[]$1[]_version_major" -gt $2], aclove_cpp14_check_version_status="yes")
  33. AS_IF([test "$aclove_[]$1[]_version_major" -eq $2 && test "$aclove_[]$1[]_version_minor" -ge $3], aclove_cpp14_check_version_status="yes")
  34. AC_MSG_RESULT([$aclove_cpp14_check_version_status])
  35. AS_VAR_IF([aclove_cpp14_check_version_status], [no],
  36. [$4])
  37. ])
  38. AC_DEFUN([ACLOVE_CPP14_TEST_VERSION_GCC], [
  39. ACLOVE_CPP14_CHECK_VERSION([gcc], 4, 9,
  40. [AC_MSG_ERROR([LÖVE needs a GCC version of at least 4.9])])
  41. ])
  42. AC_DEFUN([ACLOVE_CPP14_TEST_VERSION_CLANG], [
  43. ACLOVE_CPP14_CHECK_VERSION([clang], 3, 4,
  44. [AC_MSG_ERROR([LÖVE needs a clang version of at least 3.4])])
  45. ])
  46. AC_DEFUN([ACLOVE_CPP14_TEST], [
  47. ACLOVE_CPP14_TEST_FLAG
  48. ACLOVE_GET_GCC_VERSION
  49. ACLOVE_GET_CLANG_VERSION
  50. # Since clang also sets gcc headers, check clang after
  51. aclove_cpp14_test_compiler="unknown"
  52. AS_VAR_IF([aclove_gcc_version_found], [yes], aclove_cpp14_test_compiler="gcc")
  53. AS_VAR_IF([aclove_clang_version_found], [yes], aclove_cpp14_test_compiler="clang")
  54. AS_CASE([$aclove_cpp14_test_compiler],
  55. [gcc], [ACLOVE_CPP14_TEST_VERSION_GCC],
  56. [clang], [ACLOVE_CPP14_TEST_VERSION_CLANG],
  57. [AC_MSG_WARN([Could not determine compiler version])])
  58. ])