[LyX/master] Add support for libstdc++ assertions in autoconf builds
Jean-Marc Lasgouttes
lasgouttes at lyx.org
Sun Dec 4 17:33:10 UTC 2022
commit e658113ea671024610a434b645d156f83c397493
Author: Jean-Marc Lasgouttes <lasgouttes at lyx.org>
Date: Sun Dec 4 19:22:38 2022 +0100
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.
---
INSTALL | 22 ++++++++++++++--------
config/lyxinclude.m4 | 26 ++++++++++++++++++++------
2 files changed, 34 insertions(+), 14 deletions(-)
diff --git a/INSTALL b/INSTALL
index 330e7e1..8f2836c 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 f7489eb..90113fd 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
More information about the lyx-cvs
mailing list