From: Jean-Marc Lasgouttes Date: Sun, 4 Dec 2022 18:22:38 +0000 (+0100) Subject: Add support for libstdc++ assertions in autoconf builds X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=e658113ea671024610a434b645d156f83c397493;p=features.git Add support for libstdc++ assertions in autoconf builds This is less powerful than stdlib-debug, but at least it does not change the ABI. This avoids crashes with Qt6 in particular. The new defaults are: - stdlib-assertions is enabled by default in development builds; - stdlib-debug has to be enabled explicitely. Fixes bug #12215. --- diff --git a/INSTALL b/INSTALL index 330e7e11ea..8f2836c742 100644 --- a/INSTALL +++ b/INSTALL @@ -109,12 +109,13 @@ flags: release prerelease development profiling gprof optimization -O2 -O2 -O -O2 -O2 assertions X X - stdlib-debug X + stdlib-assertions X + stdlib-debug warnings X X debug X X X X maintainer-mode X - The defaults are as follows in terms of version number + The defaults are as follows in terms of version number: release: stable release (2.x.y) prerelease: version number contains `alpha', `beta', `rc' or `pre'. development: version number contains `dev'. @@ -228,12 +229,17 @@ values): code which checks that some variables have sane values. Opposite is --disable-assertions. - o --enable-stdlib-debug adds some debug code in the standard - library; this slows down the code, but has been helpful in the - past to find bugs. Note that this is in general incompatible with - the system hunspell library (as of version 1.5). You may have to use - --disable-stdlib-debug when linking development versions against - your system's hunspell library. + o --enable-stdlib-assertions adds some bound checking code in the + libstdc++ standard library; this slows down the code, but has been + helpful in the past to find bugs. This has no effect when using + llvm's libc++ library. + + o --enable-stdlib-debug encompasses stdlib-assertions and adds + additional checks in libstdc++. Note that this changes the ABI and + is in general incompatible with the system hunspell library (as of + version 1.5). You may have to use --disable-stdlib-debug when + linking development versions against your system's hunspell + library. This has no effect when using llvm's libc++ library. diff --git a/config/lyxinclude.m4 b/config/lyxinclude.m4 index f7489eb454..90113fdf37 100644 --- a/config/lyxinclude.m4 +++ b/config/lyxinclude.m4 @@ -310,9 +310,14 @@ AC_ARG_ENABLE(debug, ) AC_ARG_ENABLE(stdlib-debug, - AS_HELP_STRING([--enable-stdlib-debug],[enable debug mode in the standard library]),, - [AS_CASE([$build_type], [dev*], [enable_stdlib_debug=yes], - [enable_stdlib_debug=no])] + AS_HELP_STRING([--enable-stdlib-debug],[enable debug mode in libstdc++]),, + [enable_stdlib_debug=no] +) + +AC_ARG_ENABLE(stdlib-assertions, + AS_HELP_STRING([--enable-stdlib-assertions],[enable assertions in libstdc++]),, + [AS_CASE([$build_type], [dev*], [enable_stdlib_assertions=yes], + [enable_stdlib_assertions=no])] ) ### set up optimization @@ -357,6 +362,10 @@ if test x$GXX = xyes; then CXX_VERSION="($clang_version)" fi + case $gxx_version in + 2.*|3.*|4.@<:@0-8@:>@*) AC_MSG_ERROR([gcc >= 4.9 is required]);; + esac + AM_CXXFLAGS="$lyx_optim $AM_CXXFLAGS" if test x$enable_debug = xyes ; then AM_CXXFLAGS="-g $AM_CXXFLAGS" @@ -381,9 +390,6 @@ if test x$GXX = xyes; then [AM_CXXFLAGS="$AM_CXXFLAGS -Wno-deprecated-copy"], [], [-Werror]) AC_LANG_POP(C++) fi - case $gxx_version in - 2.*|3.*|4.@<:@0-8@:>@*) AC_MSG_ERROR([gcc >= 4.9 is required]);; - esac if test x$enable_stdlib_debug = xyes ; then dnl FIXME: for clang/libc++, one should define _LIBCPP_DEBUG2=0 dnl See http://clang-developers.42468.n3.nabble.com/libc-debug-mode-td3336742.html @@ -396,6 +402,14 @@ if test x$GXX = xyes; then enable_stdlib_debug=no fi fi + if test x$enable_stdlib_assertions = xyes ; then + if test x$lyx_cv_lib_stdcxx = xyes ; then + lyx_flags="$lyx_flags stdlib-assertions" + AC_DEFINE(_GLIBCXX_ASSERTIONS, 1, [libstdc++ assertions mode]) + else + enable_stdlib_assertions=no + fi + fi fi # Some additional flags may be needed