Commit 05f8333e authored by Maximilien Colange's avatar Maximilien Colange

Add an option to enable C++14.

* configure.ac: add an option --enable-c++14.
* NEWS: mention the new option.
parent 878649c8
......@@ -19,6 +19,11 @@ New in spot 2.2.1.dev (Not yet released)
* If the system has an installed libltdl library, use it instead of
the one we distribute.
* The configure script has a new option --enable-c++14, to compile in
C++14 mode. Obviously you need a compiler that supports it. This allows
to check that nothing breaks when we will switch to C++14. This option
is also available in the configure script of buddy.
Bug fixes:
* scc_filter() had a left-over print statement that would print
......
......@@ -44,8 +44,18 @@ AC_PROG_CXX
AM_PROG_LEX
adl_CHECK_BISON
# Option to activate C/C++14
AC_ARG_ENABLE([c++14],
[AC_HELP_STRING([--enable-c++14],
[Use C++14.])],
[enable_14=yes], [enable_14=no])
# Activate at C11 for gnulib tests
AX_CHECK_COMPILE_FLAG([-std=c11], [CFLAGS="$CFLAGS -std=c11"])
if test x"${enable_14}" = xyes; then
AX_CHECK_COMPILE_FLAG([-std=c14], [CFLAGS="$CFLAGS -std=c14"])
else
AX_CHECK_COMPILE_FLAG([-std=c11], [CFLAGS="$CFLAGS -std=c11"])
fi
gl_INIT
......@@ -67,7 +77,42 @@ m4_define([_AX_CXX_COMPILE_STDCXX_11_testbody],
#include <chrono> // fails with some installation of clang
#include <map>
template <typename T>
template <typename T>
struct check
{
static_assert(sizeof(int) <= sizeof(T), "not big enough");
};
typedef check<check<bool>> right_angle_brackets;
auto f = std::make_shared<std::string>("shared_ptr");
int a;
decltype(a) b;
typedef check<int> check_type;
check_type c;
check_type&& cr = static_cast<check_type&&>(c);
auto d = a;
void test_emplace()
{
std::map<int, int> m;
m.emplace(1, 2); // fails with g++ 4.6
}
])])
# Turn on C++14 support
# This is currently a copy of the above code for C++11, feel free to add
# further tests here when necessary.
m4_define([_AX_CXX_COMPILE_STDCXX_14_testbody],
[AC_LANG_SOURCE([#include <memory>
#include <string>
#include <chrono> // fails with some installation of clang
#include <map>
template <typename T>
struct check
{
static_assert(sizeof(int) <= sizeof(T), "not big enough");
......@@ -93,14 +138,26 @@ m4_define([_AX_CXX_COMPILE_STDCXX_11_testbody],
}
])])
for f in -std=c++11 '-std=c++11 -stdlib=libc++' -std=c++0x
do
AX_CHECK_COMPILE_FLAG([$f], [CXXFLAGS="$CXXFLAGS $f" stdpass=true], [], [],
[_AX_CXX_COMPILE_STDCXX_11_testbody])
${stdpass-false} && break
done
if ! "${stdpass-false}"; then
AC_ERROR([unable to turn on C++11 mode with this compiler])
if test x"${enable_14}" = xyes; then
for f in -std=c++14 '-std=c++14 -stdlib=libc++' -std=c++1y
do
AX_CHECK_COMPILE_FLAG([$f], [CXXFLAGS="$CXXFLAGS $f" stdpass=true], [], [],
[_AX_CXX_COMPILE_STDCXX_14_testbody])
${stdpass-false} && break
done
if ! "${stdpass-false}"; then
AC_ERROR([unable to turn on C++14 mode with this compiler])
fi
else
for f in -std=c++11 '-std=c++11 -stdlib=libc++' -std=c++0x
do
AX_CHECK_COMPILE_FLAG([$f], [CXXFLAGS="$CXXFLAGS $f" stdpass=true], [], [],
[_AX_CXX_COMPILE_STDCXX_11_testbody])
${stdpass-false} && break
done
if ! "${stdpass-false}"; then
AC_ERROR([unable to turn on C++11 mode with this compiler])
fi
fi
AX_CHECK_BUDDY
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment