mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-02 19:16:15 +00:00
Add C++ Standard detection to configure and fix a new C++20 compile issue
* The autoconf-archive package contains macros useful for detecting C++
standard and testing other C++ capabilities but that package was never
included in the install_prereq script so many existing build environments
won't have it. Even if it is installed, older versions won't newer C++
standards and will actually cause an error if you try to test for that
version. To make it available for those environments, the
ax_cxx_compile_stdcxx.m4 macro has copied from the latest release of
autoconf-archive into the autoconf directory.
* A convenience wrapper(ast_cxx_check_std) around ax_cxx_compile_stdcxx was
also added so checking the standard version and setting the
asterisk-specific PBX_ variables becomes a one-liner:
`AST_CXX_CHECK_STD([std], [force_latest_std])`.
Calling that with a version of `17` for instance, will set PBX_CXX17
to 0 or 1 depending on whether the current c++ compiler supports stdc++17.
HAVE_CXX17 will also be 'defined" or not depending on the result.
* C++ compilers hardly ever default to the latest standard they support. g++
version 14 for instance supports up to C++23 but only uses C++17 by default.
If you want to use C++23, you have to add `-std=gnu++=23` to the g++
command line. If you set the second argument of AST_CXX_CHECK_STD to "yes",
the macro will automatically keep the highest `-std=gnu++` value that
worked and pass that to the Makefiles.
* The autoconf-archive package was added to install_prereq for future use.
* Updated configure.ac to use AST_CXX_CHECK_STD() to check for C++
versions 11, 14, 17, 20 and 23.
* Updated configure.ac to accept the `--enable-latest-cxx-std` option which
will set the second option to AST_CXX_CHECK_STD() to "yes". The default
is "no".
* ast_copy_string() in strings.h declares the 'sz' variable as volatile and
does an `sz--` on it later. C++20 no longer allows the `++` and `--`
increment and decrement operators to be used on variables declared as
volatile however so that was changed to `sz -= 1`.
(cherry picked from commit 79427c1ac1
)
This commit is contained in:
committed by
Asterisk Development Team
parent
3fe5aafd03
commit
4eae3395a7
21
configure.ac
21
configure.ac
@@ -240,6 +240,25 @@ fi
|
||||
AC_PROG_CXX
|
||||
AC_PROG_CPP
|
||||
AC_PROG_CXXCPP
|
||||
|
||||
# Do we want to force the C++ compiler to use the latest standard it supports?
|
||||
AC_ARG_ENABLE([latest-cxx-std],
|
||||
[AS_HELP_STRING([--enable-latest-cxx-std],
|
||||
[Force C++ compiler to use the latest standard it supports])],
|
||||
[case "${enableval}" in
|
||||
y|ye|yes) ENABLE_LATEST_CXX_STD=yes ;;
|
||||
n|no) ENABLE_LATEST_CXX_STD=no ;;
|
||||
*) AC_MSG_ERROR(bad value ${enableval} for --enable-latest-cxx-std) ;;
|
||||
esac], [ENABLE_LATEST_CXX_STD=no])
|
||||
|
||||
# Check to see if the C++ compiler supports STDC++11,14,17,20,23
|
||||
# These MUST be in ascending order.
|
||||
AST_CXX_CHECK_STD([11], [${ENABLE_LATEST_CXX_STD}])
|
||||
AST_CXX_CHECK_STD([14], [${ENABLE_LATEST_CXX_STD}])
|
||||
AST_CXX_CHECK_STD([17], [${ENABLE_LATEST_CXX_STD}])
|
||||
AST_CXX_CHECK_STD([20], [${ENABLE_LATEST_CXX_STD}])
|
||||
AST_CXX_CHECK_STD([23], [${ENABLE_LATEST_CXX_STD}])
|
||||
|
||||
# This macro is just copied into our local acinclude.m4 from libtool.m4 so that
|
||||
# the developers regenerating the configure script don't have to install libtool.
|
||||
AST_PROG_LD # note, does not work on FreeBSD
|
||||
@@ -844,7 +863,7 @@ AC_FUNC_CLOSEDIR_VOID
|
||||
AC_FUNC_ERROR_AT_LINE
|
||||
AST_FUNC_FORK
|
||||
AC_FUNC_FSEEKO
|
||||
AC_PROG_GCC_TRADITIONAL
|
||||
# AC_PROG_GCC_TRADITIONAL Obsolete
|
||||
# XXX: these are commented out until we determine whether it matters if our malloc()
|
||||
# acts exactly like glibc's or not
|
||||
# AC_FUNC_MALLOC
|
||||
|
Reference in New Issue
Block a user