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 /m4macros/ax_cpp11.m4 | |
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
Diffstat (limited to 'm4macros/ax_cpp11.m4')
-rw-r--r-- | m4macros/ax_cpp11.m4 | 122 |
1 files changed, 122 insertions, 0 deletions
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 |