From 4028eefe6190551c8be96cd451337dea2808742b Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Mon, 25 Feb 2019 17:37:06 +0100 Subject: [PATCH] Make callstack printing useful and optional 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 | 33 ++++++++++++++++++++------------- src/Makefile.am | 5 +++-- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/config/lyxinclude.m4 b/config/lyxinclude.m4 index cf49495cbf..8e1d2793ce 100644 --- a/config/lyxinclude.m4 +++ b/config/lyxinclude.m4 @@ -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 -#include -], [ - 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 + #include + ], [ + 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 ]) diff --git a/src/Makefile.am b/src/Makefile.am index d924a5eb02..ef1895914d 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -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 -- 2.39.2