]> git.lyx.org Git - lyx.git/commitdiff
Add support for libstdc++ assertions in autoconf builds
authorJean-Marc Lasgouttes <lasgouttes@lyx.org>
Sun, 4 Dec 2022 18:22:38 +0000 (19:22 +0100)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Sun, 4 Dec 2022 18:28:09 +0000 (19:28 +0100)
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
config/lyxinclude.m4

diff --git a/INSTALL b/INSTALL
index 330e7e11eaf32a5ffda737c1cdded5e7dfd1933f..8f2836c742037cf5d7a1f007768b8a211917c643 100644 (file)
--- 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.
 
 
 
index f7489eb45483cb168dba0c575806a37a9494089c..90113fdf37284b26f292f31ee575986ba8e74a51 100644 (file)
@@ -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