]> git.ipfire.org Git - thirdparty/asterisk.git/commit
Add C++ Standard detection to configure and fix a new C++20 compile issue
authorGeorge Joseph <gjoseph@sangoma.com>
Fri, 3 Jan 2025 22:38:52 +0000 (15:38 -0700)
committerGeorge Joseph <gjoseph@sangoma.com>
Mon, 6 Jan 2025 20:33:10 +0000 (13:33 -0700)
commitfb45a473cf7daf255352d6b6e32e8d6f2b4dae4f
treed9be3e76a932c309b7d68c48273b0731958d3965
parent9f6f9a60e575211f851ac038bc079c626755e3b9
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`.
autoconf/ast_cxx_check_std.m4 [new file with mode: 0644]
autoconf/ax_cxx_compile_stdcxx.m4 [new file with mode: 0644]
build_tools/menuselect-deps.in
configure
configure.ac
contrib/scripts/install_prereq
include/asterisk/autoconfig.h.in
include/asterisk/strings.h
menuselect/autoconfig.h.in
menuselect/configure