diff options
author | Tomek Mrugalski <tomasz@isc.org> | 2017-04-14 19:24:52 +0200 |
---|---|---|
committer | Tomek Mrugalski <tomasz@isc.org> | 2017-04-20 19:44:15 +0200 |
commit | fd3b6a3d7e44c1c25bf2285e89d3aab83c6d690a (patch) | |
tree | d162739fb30c443ac53b29e9432f4907b98f40e1 | |
parent | [master] Added ChangeLog entry for #5217. (diff) | |
download | kea-fd3b6a3d7e44c1c25bf2285e89d3aab83c6d690a.tar.xz kea-fd3b6a3d7e44c1c25bf2285e89d3aab83c6d690a.zip |
[5208] C++11 detection code moved to ax_cpp11.m4
-rw-r--r-- | configure.ac | 119 | ||||
-rw-r--r-- | m4macros/ax_cpp11.m4 | 122 |
2 files changed, 123 insertions, 118 deletions
diff --git a/configure.ac b/configure.ac index 04a700a7b6..2a230f4777 100644 --- a/configure.ac +++ b/configure.ac @@ -118,124 +118,7 @@ AC_CHECK_DECL([__clang__], [CLANGPP="yes"], [CLANGPP="no"]) AM_CONDITIONAL(USE_CLANGPP, test "X${CLANGPP}" = "Xyes") # Check for C++11 features support -CXX_SAVED=$CXX -feature= -for retry in "none" "--std=c++11" "--std=c++0x" "--std=c++1x" "fail"; do - if test "$retry" = "fail"; then - AC_MSG_ERROR([$feature (a C++11 feature) is not supported]) - fi - if test "$retry" != "none"; then - AC_MSG_WARN([unsupported C++11 feature]) - AC_MSG_NOTICE([retrying by adding $retry to $CXX]) - CXX="$CXX_SAVED $retry" - AC_MSG_CHECKING($retry support) - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [], - [int myincr = 1;])], - [AC_MSG_RESULT([yes])], - [AC_MSG_RESULT([no]) - continue]) - fi - - AC_MSG_CHECKING(std::unique_ptr support) - feature="std::unique_ptr" - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [#include <memory>], - [std::unique_ptr<int> a;])], - [AC_MSG_RESULT([yes])], - [AC_MSG_RESULT([no]) - continue]) - - AC_MSG_CHECKING(cbegin/cend support) - feature="cbegin/cend" - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [#include <string>], - [const std::string& s = "abcd"; - unsigned count = 0; - for (std::string::const_iterator i = s.cbegin(); - i != s.cend(); ++i) - if (*i == 'b') - ++count;])], - [AC_MSG_RESULT([yes])], - [AC_MSG_RESULT([no]) - continue]) - - AC_MSG_CHECKING(final method support) - feature="final method" - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [class Foo { - public: - virtual ~Foo() {}; - virtual void bar() final; - };],[])], - [AC_MSG_RESULT([yes])], - [AC_MSG_RESULT([no]) - continue]) - - AC_MSG_CHECKING(aggregate initialization support) - feature="aggregate initialization" - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [#include <vector>], - [std::vector<int> foo = { 1, 2, 3};])], - [AC_MSG_RESULT([yes])], - [AC_MSG_RESULT([no]) - continue]) - - AC_MSG_CHECKING(variadic template support) - feature="variadic template" - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [template<typename ... Args> - struct A { - void foo(Args... myargs) { return; }; - };], - [A<> a; - a.foo();])], - [AC_MSG_RESULT([yes])], - [AC_MSG_RESULT([no]) - continue]) - - AC_MSG_CHECKING(static_assert support) - feature="static_assert" - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [static_assert(1 + 1 == 2, "");], - [])], - [AC_MSG_RESULT([yes])], - [AC_MSG_RESULT([no]) - continue]) - - AC_MSG_CHECKING(template alias) - feature="template alias" - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [template<int i> - class I { - public: int get() { return i; }; - }; - using Zero = I<0>;], - [Zero Z; - return Z.get();])], - [AC_MSG_RESULT([yes])], - [AC_MSG_RESULT([no]) - continue]) - - AC_MSG_CHECKING(lambda support) - feature="lambda" - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [], - [auto myincr = [[]](int x) { return x + 1; };])], - [AC_MSG_RESULT([yes]) - break], - [AC_MSG_RESULT([no]) - continue]) -done +AX_ISC_CPP11 # Check for std::is_base_of support AC_MSG_CHECKING([for std::is_base_of]) diff --git a/m4macros/ax_cpp11.m4 b/m4macros/ax_cpp11.m4 new file mode 100644 index 0000000000..cf6b2ba6d6 --- /dev/null +++ b/m4macros/ax_cpp11.m4 @@ -0,0 +1,122 @@ +AC_DEFUN([AX_ISC_CPP11], [ + +CXX_SAVED=$CXX +feature= +for retry in "none" "--std=c++11" "--std=c++0x" "--std=c++1x" "fail"; do + if test "$retry" = "fail"; then + AC_MSG_ERROR([$feature (a C++11 feature) is not supported]) + fi + if test "$retry" != "none"; then + AC_MSG_WARN([unsupported C++11 feature]) + AC_MSG_NOTICE([retrying by adding $retry to $CXX]) + CXX="$CXX_SAVED $retry" + AC_MSG_CHECKING($retry support) + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [], + [int myincr = 1;])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + continue]) + fi + + AC_MSG_CHECKING(std::unique_ptr support) + feature="std::unique_ptr" + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [#include <memory>], + [std::unique_ptr<int> a;])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + continue]) + + AC_MSG_CHECKING(cbegin/cend support) + feature="cbegin/cend" + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [#include <string>], + [const std::string& s = "abcd"; + unsigned count = 0; + for (std::string::const_iterator i = s.cbegin(); + i != s.cend(); ++i) + if (*i == 'b') + ++count;])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + continue]) + + AC_MSG_CHECKING(final method support) + feature="final method" + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [class Foo { + public: + virtual ~Foo() {}; + virtual void bar() final; + };],[])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + continue]) + + AC_MSG_CHECKING(aggregate initialization support) + feature="aggregate initialization" + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [#include <vector>], + [std::vector<int> foo = { 1, 2, 3};])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + continue]) + + AC_MSG_CHECKING(variadic template support) + feature="variadic template" + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [template<typename ... Args> + struct A { + void foo(Args... myargs) { return; }; + };], + [A<> a; + a.foo();])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + continue]) + + AC_MSG_CHECKING(static_assert support) + feature="static_assert" + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [static_assert(1 + 1 == 2, "");], + [])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + continue]) + + AC_MSG_CHECKING(template alias) + feature="template alias" + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [template<int i> + class I { + public: int get() { return i; }; + }; + using Zero = I<0>;], + [Zero Z; + return Z.get();])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + continue]) + + AC_MSG_CHECKING(lambda support) + feature="lambda" + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [], + [auto myincr = [[]](int x) { return x + 1; };])], + [AC_MSG_RESULT([yes]) + break], + [AC_MSG_RESULT([no]) + continue]) +done + +])dnl AX_ISC_RPATH |