]> git.lyx.org Git - lyx.git/commitdiff
Make callstack printing useful and optional
authorJean-Marc Lasgouttes <lasgouttes@lyx.org>
Mon, 25 Feb 2019 16:37:06 +0000 (17:37 +0100)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Mon, 25 Feb 2019 16:58:06 +0000 (17:58 +0100)
When callback printing is enabled, link lyx with -rdynamic, so that
stacks have LyX symbols available.

Add option --disable-callstack-printing to configure.

Running "size" on binary:
 * with callstack printing support
   text    data     bss     dec     hex filename
20891684   34680  107796 21034160 140f4b0 src/lyx

 * without callstack printing support
    text    data     bss     dec     hex filename
17953640   34648  107796 18096084 1141fd4 src/lyx

config/lyxinclude.m4
src/Makefile.am

index cf49495cbf188ea1ccc55c5356fcb97f69ff1ab5..8e1d2793cea063412af6811a757a62c3f178d974 100644 (file)
@@ -609,22 +609,29 @@ dnl prevent clash with system zlib that might be dragged in by other libs
 dnl Usage: LYX_CHECK_CALLSTACK_PRINTING: define LYX_CALLSTACK_PRINTING if the
 dnl        necessary APIs are available to print callstacks.
 AC_DEFUN([LYX_CHECK_CALLSTACK_PRINTING],
-[AC_CACHE_CHECK([whether printing callstack is possible],
-               [lyx_cv_callstack_printing],
-[AC_TRY_COMPILE([
-#include <execinfo.h>
-#include <cxxabi.h>
-], [
-       void* array[200];
-       size_t size = backtrace(array, 200);
-       backtrace_symbols(array, size);
-       int status = 0;
-       abi::__cxa_demangle("abcd", 0, 0, &status);
-],
-[lyx_cv_callstack_printing=yes], [lyx_cv_callstack_printing=no])])
+[AC_ARG_ENABLE([callstack-printing],
+               [AC_HELP_STRING([--disable-callstack-printing],[do not print a callstack when crashing])],
+               lyx_cv_callstack_printing=$enableval, lyx_cv_callstack_printing=yes)
+
+if test x"$lyx_cv_callstack_printing" = xyes; then
+  AC_CACHE_CHECK([whether printing callstack is possible],
+                [lyx_cv_callstack_printing],
+  [AC_TRY_COMPILE([
+  #include <execinfo.h>
+  #include <cxxabi.h>
+  ], [
+         void* array[200];
+         size_t size = backtrace(array, 200);
+         backtrace_symbols(array, size);
+         int status = 0;
+         abi::__cxa_demangle("abcd", 0, 0, &status);
+  ],, [lyx_cv_callstack_printing=no])])
+fi
 if test x"$lyx_cv_callstack_printing" = xyes; then
   AC_DEFINE([LYX_CALLSTACK_PRINTING], 1,
             [Define if callstack can be printed])
+  lyx_flags="$lyx_flags callback-printing"
+  AM_LDFLAGS="${AM_LDFLAGS} -rdynamic"
 fi
 ])
 
index d924a5eb0287484b5932347df9bb9bc8fd7f3551..ef1895914d77b74659320f89d727f3f1f08e4db8 100644 (file)
@@ -27,6 +27,8 @@ OTHERLIBS = $(BOOST_LIBS) $(MYTHES_LIBS) $(ENCHANT_LIBS) $(HUNSPELL_LIBS) \
 noinst_LIBRARIES = liblyxcore.a
 bin_PROGRAMS = lyx
 
+lyx_LDFLAGS = $(AM_LDFLAGS) $(QT_LDFLAGS)
+
 lyx_LDADD = \
        liblyxcore.a \
        liblyxmathed.a \
@@ -36,7 +38,6 @@ lyx_LDADD = \
        liblyxgraphics.a \
        support/liblyxsupport.a \
        $(OTHERLIBS) \
-       $(QT_LDFLAGS) \
        $(QT_LIB)
 
 if LYX_WIN_RESOURCE
@@ -46,7 +47,7 @@ if LYX_WIN_RESOURCE
 endif
 
 if INSTALL_MACOSX
-lyx_LDFLAGS = -framework AppKit -framework ApplicationServices \
+lyx_LDFLAGS += -framework AppKit -framework ApplicationServices \
        -Wl,-rpath,@loader_path/../Frameworks \
        -Wl,-rpath,@executable_path/../Frameworks \
        -Wl,-headerpad_max_install_names