Feature #1198 » 0036-ax_cxx_compile_stdcxx.m4-Update-to-serial-25.patch
m4/ax_cxx_compile_stdcxx.m4 | ||
---|---|---|
#
|
||
# Check for baseline language coverage in the compiler for the specified
|
||
# version of the C++ standard. If necessary, add switches to CXX and
|
||
# CXXCPP to enable support. VERSION may be '11', '14', '17', or '20' for
|
||
# the respective C++ standard version.
|
||
# CXXCPP to enable support. VERSION may be '11', '14', '17', '20', or
|
||
# '23' for the respective C++ standard version.
|
||
#
|
||
# The second argument, if specified, indicates whether you insist on an
|
||
# extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g.
|
||
... | ... | |
# Copyright (c) 2016, 2018 Krzesimir Nowak <qdlacz@gmail.com>
|
||
# Copyright (c) 2019 Enji Cooper <yaneurabeya@gmail.com>
|
||
# Copyright (c) 2020 Jason Merrill <jason@redhat.com>
|
||
# Copyright (c) 2021 Jörn Heusipp <osmanx@problemloesungsmaschine.de>
|
||
# Copyright (c) 2021, 2024 Jörn Heusipp <osmanx@problemloesungsmaschine.de>
|
||
# Copyright (c) 2015, 2022, 2023, 2024 Olly Betts
|
||
#
|
||
# 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 18
|
||
#serial 25
|
||
dnl This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro
|
||
dnl (serial version number 13).
|
||
... | ... | |
[$1], [14], [ax_cxx_compile_alternatives="14 1y"],
|
||
[$1], [17], [ax_cxx_compile_alternatives="17 1z"],
|
||
[$1], [20], [ax_cxx_compile_alternatives="20"],
|
||
[$1], [23], [ax_cxx_compile_alternatives="23"],
|
||
[m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl
|
||
m4_if([$2], [], [],
|
||
[$2], [ext], [],
|
||
... | ... | |
dnl Test body for checking C++11 support
|
||
m4_define([_AX_CXX_COMPILE_STDCXX_testbody_11],
|
||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_11
|
||
[_AX_CXX_COMPILE_STDCXX_testbody_new_in_11]
|
||
)
|
||
dnl Test body for checking C++14 support
|
||
m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14],
|
||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_11
|
||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_14
|
||
[_AX_CXX_COMPILE_STDCXX_testbody_new_in_11
|
||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_14]
|
||
)
|
||
dnl Test body for checking C++17 support
|
||
m4_define([_AX_CXX_COMPILE_STDCXX_testbody_17],
|
||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_11
|
||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_14
|
||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_17
|
||
[_AX_CXX_COMPILE_STDCXX_testbody_new_in_11
|
||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_14
|
||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_17]
|
||
)
|
||
dnl Test body for checking C++20 support
|
||
m4_define([_AX_CXX_COMPILE_STDCXX_testbody_20],
|
||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_11
|
||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_14
|
||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_17
|
||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_20
|
||
[_AX_CXX_COMPILE_STDCXX_testbody_new_in_11
|
||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_14
|
||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_17
|
||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_20]
|
||
)
|
||
dnl Test body for checking C++23 support
|
||
m4_define([_AX_CXX_COMPILE_STDCXX_testbody_23],
|
||
[_AX_CXX_COMPILE_STDCXX_testbody_new_in_11
|
||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_14
|
||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_17
|
||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_20
|
||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_23]
|
||
)
|
||
... | ... | |
// MSVC always sets __cplusplus to 199711L in older versions; newer versions
|
||
// only set it correctly if /Zc:__cplusplus is specified as well as a
|
||
// /std:c++NN switch:
|
||
//
|
||
// https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/
|
||
//
|
||
// The value __cplusplus ought to have is available in _MSVC_LANG since
|
||
// Visual Studio 2015 Update 3:
|
||
//
|
||
// https://learn.microsoft.com/en-us/cpp/preprocessor/predefined-macros
|
||
//
|
||
// This was also the first MSVC version to support C++14 so we can't use the
|
||
// value of either __cplusplus or _MSVC_LANG to quickly rule out MSVC having
|
||
// C++11 or C++14 support, but we can check _MSVC_LANG for C++17 and later.
|
||
#elif __cplusplus < 201103L && !defined _MSC_VER
|
||
#error "This is not a C++11 compiler"
|
||
... | ... | |
#error "This is not a C++ compiler"
|
||
#elif __cplusplus < 201703L && !defined _MSC_VER
|
||
#elif (defined _MSVC_LANG ? _MSVC_LANG : __cplusplus) < 201703L
|
||
#error "This is not a C++17 compiler"
|
||
... | ... | |
} // namespace cxx17
|
||
#endif // __cplusplus < 201703L && !defined _MSC_VER
|
||
#endif // (defined _MSVC_LANG ? _MSVC_LANG : __cplusplus) < 201703L
|
||
]])
|
||
... | ... | |
#error "This is not a C++ compiler"
|
||
#elif __cplusplus < 202002L && !defined _MSC_VER
|
||
#elif (defined _MSVC_LANG ? _MSVC_LANG : __cplusplus) < 202002L
|
||
#error "This is not a C++20 compiler"
|
||
... | ... | |
} // namespace cxx20
|
||
#endif // __cplusplus < 202002L && !defined _MSC_VER
|
||
#endif // (defined _MSVC_LANG ? _MSVC_LANG : __cplusplus) < 202002L
|
||
]])
|
||
dnl Tests for new features in C++23
|
||
m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_23], [[
|
||
#ifndef __cplusplus
|
||
#error "This is not a C++ compiler"
|
||
#elif (defined _MSVC_LANG ? _MSVC_LANG : __cplusplus) < 202302L
|
||
#error "This is not a C++23 compiler"
|
||
#else
|
||
#include <version>
|
||
namespace cxx23
|
||
{
|
||
// As C++23 supports feature test macros in the standard, there is no
|
||
// immediate need to actually test for feature availability on the
|
||
// Autoconf side.
|
||
} // namespace cxx23
|
||
#endif // (defined _MSVC_LANG ? _MSVC_LANG : __cplusplus) < 202302L
|
||
]])
|