| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 | # ============================================================================#  http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_11.html# ============================================================================## SYNOPSIS##   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.##   This version of AX_CXX_COMPILE_STDCXX_11 will also check if specifying#   `-stdlib=libc++`` is required, as it is on current OSX systems using#   a clang which defaults to an old libstdc++.## 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) 2013 Nils Maier <maierman@web.de>##   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.#serial 3#modified to check fo -stdlib=libc++ (required on OSX)m4_define([_AX_CXX_COMPILE_STDCXX_11_testbody], [  #include <memory>  template <typename T>    struct check    {      static_assert(sizeof(int) <= sizeof(T), "not big enough");    };    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;    // Check std::shared_ptr is available, which might require -stdlib=libc++.    std::shared_ptr<check_type> ptr;])AC_DEFUN([AX_CXX_COMPILE_STDCXX_11], [dnl  m4_if([$1], [], [],        [$1], [ext], [],        [$1], [noext], [],        [m4_fatal([invalid argument `$1' to 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 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([_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      for lib in "" -stdlib=libc++; do        cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch$lib])        AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch $lib,                      $cachevar,          [ac_save_CXXFLAGS="$CXXFLAGS"          CXXFLAGS="$CXXFLAGS $switch $lib"          AC_COMPILE_IFELSE([AC_LANG_SOURCE([_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 $lib"          ac_success=yes          break 2        fi      done    done  fi])  m4_if([$1], [ext], [], [dnl  if test x$ac_success = xno; then    for switch in -std=c++11 -std=c++0x; do      for lib in "" -stdlib=libc++; do        cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch$lib])        AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch $lib,                      $cachevar,          [ac_save_CXXFLAGS="$CXXFLAGS"          CXXFLAGS="$CXXFLAGS $switch $lib"          AC_COMPILE_IFELSE([AC_LANG_SOURCE([_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 $lib"          ac_success=yes          break 2        fi      done    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])
 |