# ============================================================================ # http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_11.html # ============================================================================ # # SYNOPSIS # # MM_AX_CXX_COMPILE_STDCXX_11([ext|noext],[mandatory|optional]) # # DESCRIPTION # # Check for baseline language coverage in the compiler for the C++11 # standard; if necessary, add switches to CXXFLAGS to enable support. # # The first argument, if specified, indicates whether you insist on an # extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g. # -std=c++11). If neither is specified, you get whatever works, with # preference for an extended mode. # # The second argument, if specified 'mandatory' or if left unspecified, # indicates that baseline C++11 support is required and that the macro # should error out if no mode with that support is found. If specified # 'optional', then configuration proceeds regardless, after defining # HAVE_CXX11 if and only if a supporting mode is found. # # LICENSE # # Copyright (c) 2008 Benjamin Kosnik <bkoz@redhat.com> # Copyright (c) 2012 Zack Weinberg <zackw@panix.com> # Copyright (c) 2013 Roy Stogner <roystgnr@ices.utexas.edu> # Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov <sokolov@google.com> # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. # Copied from ax_cxx_compile_stdcxx_11.m4 and added MM_ prefix to avoid # possible conflict with AX_CXX_COMPILE_STDCXX_11 in other modules. #serial 11 m4_define([_MM_AX_CXX_COMPILE_STDCXX_11_testbody], [[ template <typename T> struct check { static_assert(sizeof(int) <= sizeof(T), "not big enough"); }; struct Base { virtual void f() {} }; struct Child : public Base { virtual void f() override {} }; typedef check<check<bool>> right_angle_brackets; int a; decltype(a) b; typedef check<int> check_type; check_type c; check_type&& cr = static_cast<check_type&&>(c); auto d = a; auto l = [](){}; // Prevent Clang error: unused variable 'l' [-Werror,-Wunused-variable] struct use_l { use_l() { l(); } }; // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function because of this namespace test_template_alias_sfinae { struct foo {}; template<typename T> using member = typename T::member_type; template<typename T> void func(...) {} template<typename T> void func(member<T>*) {} void test(); void test() { func<foo>(0); } } ]]) AC_DEFUN([MM_AX_CXX_COMPILE_STDCXX_11], [dnl m4_if([$1], [], [], [$1], [ext], [], [$1], [noext], [], [m4_fatal([invalid argument `$1' to MM_AX_CXX_COMPILE_STDCXX_11])])dnl m4_if([$2], [], [ax_cxx_compile_cxx11_required=true], [$2], [mandatory], [ax_cxx_compile_cxx11_required=true], [$2], [optional], [ax_cxx_compile_cxx11_required=false], [m4_fatal([invalid second argument `$2' to MM_AX_CXX_COMPILE_STDCXX_11])]) AC_LANG_PUSH([C++])dnl ac_success=no AC_CACHE_CHECK(whether $CXX supports C++11 features by default, ax_cv_cxx_compile_cxx11, [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_MM_AX_CXX_COMPILE_STDCXX_11_testbody])], [ax_cv_cxx_compile_cxx11=yes], [ax_cv_cxx_compile_cxx11=no])]) if test x$ax_cv_cxx_compile_cxx11 = xyes; then ac_success=yes fi m4_if([$1], [noext], [], [dnl if test x$ac_success = xno; then for switch in -std=gnu++11 -std=gnu++0x; do cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch]) AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch, $cachevar, [ac_save_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS $switch" AC_COMPILE_IFELSE([AC_LANG_SOURCE([_MM_AX_CXX_COMPILE_STDCXX_11_testbody])], [eval $cachevar=yes], [eval $cachevar=no]) CXXFLAGS="$ac_save_CXXFLAGS"]) if eval test x\$$cachevar = xyes; then CXXFLAGS="$CXXFLAGS $switch" ac_success=yes break fi done fi]) m4_if([$1], [ext], [], [dnl if test x$ac_success = xno; then dnl HP's aCC needs +std=c++11 according to: dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf for switch in -std=c++11 -std=c++0x +std=c++11; do cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch]) AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch, $cachevar, [ac_save_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS $switch" AC_COMPILE_IFELSE([AC_LANG_SOURCE([_MM_AX_CXX_COMPILE_STDCXX_11_testbody])], [eval $cachevar=yes], [eval $cachevar=no]) CXXFLAGS="$ac_save_CXXFLAGS"]) if eval test x\$$cachevar = xyes; then CXXFLAGS="$CXXFLAGS $switch" ac_success=yes break fi done fi]) AC_LANG_POP([C++]) if test x$ax_cxx_compile_cxx11_required = xtrue; then if test x$ac_success = xno; then AC_MSG_ERROR([*** A compiler with support for C++11 language features is required.]) fi else if test x$ac_success = xno; then HAVE_CXX11=0 AC_MSG_NOTICE([No compiler with C++11 support was found]) else HAVE_CXX11=1 AC_DEFINE(HAVE_CXX11,1, [define if the compiler supports basic C++11 syntax]) fi AC_SUBST(HAVE_CXX11) fi ])
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
appdata-xml.m4 | File | 3.11 KB | 0644 |
|
appstream-xml.m4 | File | 2.94 KB | 0644 |
|
expat.m4 | File | 1.41 KB | 0644 |
|
gettext.m4 | File | 14.15 KB | 0644 |
|
glib-2.0.m4 | File | 8.17 KB | 0644 |
|
glib-gettext.m4 | File | 15.38 KB | 0644 |
|
gpg-error.m4 | File | 7.98 KB | 0644 |
|
gpgrt.m4 | File | 3.99 KB | 0644 |
|
gsettings.m4 | File | 3.5 KB | 0644 |
|
gtk-3.0.m4 | File | 8.03 KB | 0644 |
|
host-cpu-c-abi.m4 | File | 21.91 KB | 0644 |
|
iconv.m4 | File | 9.5 KB | 0644 |
|
intlmacosx.m4 | File | 3.15 KB | 0644 |
|
introspection.m4 | File | 5.01 KB | 0644 |
|
lib-ld.m4 | File | 5.24 KB | 0644 |
|
lib-link.m4 | File | 33.99 KB | 0644 |
|
lib-prefix.m4 | File | 11.66 KB | 0644 |
|
libcurl.m4 | File | 10.91 KB | 0644 |
|
libgcrypt.m4 | File | 6.1 KB | 0644 |
|
libtool.m4 | File | 299.85 KB | 0644 |
|
libxml2.m4 | File | 7.72 KB | 0644 |
|
ltargz.m4 | File | 2.61 KB | 0644 |
|
ltdl.m4 | File | 29.36 KB | 0644 |
|
ltoptions.m4 | File | 14.18 KB | 0644 |
|
ltsugar.m4 | File | 4.29 KB | 0644 |
|
ltversion.m4 | File | 714 B | 0644 |
|
lt~obsolete.m4 | File | 6.01 KB | 0644 |
|
mm-ax_cxx_compile_stdcxx.m4 | File | 19.1 KB | 0644 |
|
mm-ax_cxx_compile_stdcxx_11.m4 | File | 5.66 KB | 0644 |
|
mm-common.m4 | File | 1.64 KB | 0644 |
|
mm-dietlib.m4 | File | 4.57 KB | 0644 |
|
mm-doc.m4 | File | 10.27 KB | 0644 |
|
mm-module.m4 | File | 3.25 KB | 0644 |
|
mm-pkg.m4 | File | 3.87 KB | 0644 |
|
mm-warnings.m4 | File | 4.56 KB | 0644 |
|
nls.m4 | File | 1.21 KB | 0644 |
|
nspr.m4 | File | 2.76 KB | 0644 |
|
pkg.m4 | File | 10.01 KB | 0644 |
|
po.m4 | File | 18.39 KB | 0644 |
|
progtest.m4 | File | 3.02 KB | 0644 |
|
vala.m4 | File | 4.46 KB | 0644 |
|
vapigen.m4 | File | 3.4 KB | 0644 |
|
wayland-scanner.m4 | File | 428 B | 0644 |
|
xtrans.m4 | File | 6.38 KB | 0644 |
|