[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