Apache OpenOffice (AOO) Bugzilla – Issue 15843
crashrep: pkg-config and other...
Last modified: 2003-07-23 14:35:15 UTC
Hi, crash-rep calls pkg-config to get the CFLAGS of GTK. It should read gtk-config --cflags What version of GTK do we require? I have: oo:~ # rpm -q gtk gtk-1.2.10-304 oo:~ # uname -a Linux oo 2.4.18-64GB-SMP #1 SMP Fri Apr 5 15:05:13 UTC 2002 i686 unknown and it gives me those errors: build -- version: 1.83 ============= Building project crashrep ============= /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/res ------------- /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx ------------------------------ Making: ../../unxlngi4.pro/obj/interface.obj /mnt/hdc2/pavel//BuildDir/ccache /opt/experimental/bin/g++ -fmessage-length=0 -c -I. -I. -I../inc -I../../inc -I../../unx/inc -I../../unxlngi4.pro/inc -I. -I/mnt/hdc2/pavel/BuildDir/ooo_11rc_src/solver/645/unxlngi4.pro/inc/stl -I/mnt/hdc2/pavel/BuildDir/ooo_11rc_src/solver/645/unxlngi4.pro/inc/external -I/mnt/hdc2/pavel/BuildDir/ooo_11rc_src/solver/645/unxlngi4.pro/inc -I/mnt/hdc2/pavel/BuildDir/ooo_11rc_src/solenv/unxlngi4/inc -I/mnt/hdc2/pavel/BuildDir/ooo_11rc_src/solenv/inc -I/mnt/hdc2/pavel/BuildDir/ooo_11rc_src/res -I/mnt/hdc2/pavel/BuildDir/ooo_11rc_src/solver/645/unxlngi4.pro/inc/stl -I/mnt/hdc2/pavel/BuildDir/ooo_11rc_src/solenv/inc/Xp31 -I/usr/lib/java/include -I/usr/lib/java/include/linux -I/usr/lib/java/include/native_threads/include -I/usr/X11R6/include -I. -I../../res -I. -O1 `gtk-config --cflags` -pipe -mcpu=pentiumpro -fno-for-scope -fpermissive -fno-rtti -include preinclude.h -fexceptions -fno-enforce-eh-specs -DLINUX -DUNX -DVCL -DGCC -DC300 -DINTEL -DCVER=C300 -D_USE_NAMESPACE -DGLIBC=2 -DX86 -D_PTHREADS -D_REENTRANT -DNEW_SOLAR -D_USE_NAMESPACE=1 -DSTLPORT_VERSION=400 -D__DMAKE -DUNIX -DCPPU_ENV=gcc3 -DSUPD=645 -DBUILD=8639 -DPRODUCT -DNDEBUG -DPRODUCT_FULL -DOSL_DEBUG_LEVEL=0 -DOPTIMIZE -DEXCEPTIONS_ON -DCUI -DSOLAR_JAVA -DSRX645 -DMULTITHREAD -o ../../unxlngi4.pro/obj/interface.o /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx: In constructor `WizardDialog::WizardDialog()': /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:40: `struct _GtkStyle' has no member named `font_desc' /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:40: `pango_font_description_get_size' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:40: (Each undeclared identifier is reported only once for each function it appears in.) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:42: `struct _GtkStyle' has no member named `font_desc' /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:42: `pango_font_description_set_size' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:70: `gtk_button_new_with_mnemonic' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:94: `G_CALLBACK' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx: In member function `void WizardDialog::show_messagebox(const _STL::string&)': /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:114: `GtkMessageType' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:114: parse error before `=' token /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:117: `GtkDialogFlags' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:117: parse error before numeric constant /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:124: `gtk_dialog_run' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx: In member function `gint WizardDialog::show_sendingstatus(bool)': /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:135: `GTK_DIALOG_MODAL' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:136: `GTK_STOCK_CANCEL' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:136: `GTK_STOCK_OK' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:137: `GTK_RESPONSE_REJECT' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:137: `GTK_RESPONSE_OK' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:138: `gtk_dialog_new_with_buttons' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx: In member function `void WizardDialog::hide_sendingstatus()': /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:161: `gtk_dialog_response' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx: In constructor `MainPage::MainPage(WizardDialog*)': /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:282: `gtk_label_new_with_mnemonic' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:292: `gtk_label_set_mnemonic_widget' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:306: `gtk_scrolled_window_set_shadow_type' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:309: `gtk_text_view_new' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:311: `GTK_TEXT_VIEW' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:311: `GTK_WRAP_WORD' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:311: `gtk_text_view_set_wrap_mode' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:339: `gtk_check_button_new_with_mnemonic' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:376: `G_OBJECT' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:376: `g_object_ref' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx: In destructor `virtual MainPage::~MainPage()': /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:381: `g_object_unref' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx: In member function `virtual void MainPage::update()': /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:388: `GtkTextIter' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:388: parse error before `,' token /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:389: `GtkTextBuffer' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:389: `pTextBuffer' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:389: `gtk_text_view_get_buffer' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:390: `start' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:390: `end' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:390: `gtk_text_buffer_get_bounds' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:391: `gtk_text_buffer_get_text' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx: In static member function `static gint MainPage::button_clicked(GtkWidget*, MainPage*)': /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:450: `gtk_text_view_set_editable' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:451: `pBuffer' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:452: `gtk_text_buffer_set_text' undeclared (first use this function) /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx: In constructor `OptionsDialog::OptionsDialog(GtkWindow*, _STL::hash_map<_STL::string, _STL::string, _STL::hash<_STL::string>, _STL::equal_to<_STL::string>, _STL::allocator<_STL::pair<const _STL::string, _STL::string> > >&)': /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx/interface.cxx:508: `gtk_radio_button_new_with_mnemonic' undeclared (first use this function) dmake: Error code 1, while making '../../unxlngi4.pro/obj/interface.obj' ---* TG_SLO.MK *--- ERROR: Error 65280 occurred while making /mnt/hdc2/pavel/BuildDir/ooo_11rc_src/crashrep/source/unx Why we do not use VCL instead? We should check for GTK in configure.
Hi, I tried this with gtk from 1-2 and it fails. I tried building this with pkg-config and gtk+-2.0 and I get the following compiler error: /src2/ooo11rc/crashrep/source/unx/mai n.cxx /src2/ooo11rc/crashrep/source/unx/main.cxx:65:22: _version.h: No such file or directory /src2/ooo11rc/crashrep/source/unx/main.cxx:97: warning: ISO C++ forbids declaration of `g_b DebugMode' with no type /src2/ooo11rc/crashrep/source/unx/main.cxx: In function `bool write_report(const _STL::hash _map<_STL::string, _STL::string, _STL::hash<_STL::string>, _STL::equal_to<_STL::string>, _S TL::allocator<_STL::pair<const _STL::string, _STL::string> > >&)': /src2/ooo11rc/crashrep/source/unx/main.cxx:337: `_INPATH' undeclared (first use this functi on) So either way, this will not build. Why isn't this using vcl? Kevin
Hi, Three other things: 1. pkg-config gives --only-mod-libs: unknown option 2. I changed crashrep/source/unx/main.cxx #include <_version.h> to instead be #include <vcl/_version.h> since there is no _version.h in the include path 3. The link command ends up with -W, with nothing after the comma which messes up the linker causing the final link to fail This happens because ... .IF "$(ENABLE_STATIC_GTK)" == "FALSE" GTKLINKFLAGS= .ELSE GTKLINKFLAGS=-Bstatic .ENDIF GTKLINKFLAGS is set to nothing but APP1STDLIBS=-Wl,$(GTKLINKFLAGS) ... So this has to be hacked away too. With all of these changes I can get it to build but ...
Hi, Some other things that should probably to be done for crash reporter: 1. fix declarations to be C style and not C++ to allow it to compile with -ansi (from Pavel) --- signal.c.~1.13.~ 2003-06-18 23:50:15.000000000 +0200 +++ signal.c 2003-06-21 16:28:15.000000000 +0200 @@ -327,12 +327,14 @@ void *stackframes[1024]; int iFrame; int nFrames = backtrace( stackframes, sizeof(stackframes)/sizeof(stackframes[0])); + FILE *xmlout; + FILE *stackout; pXMLTempName = tmpnam( szXMLTempNameBuffer ); pStackTempName = tmpnam( szStackTempNameBuffer ); - FILE *xmlout = fopen( pXMLTempName, "w" ); - FILE *stackout = fopen( pStackTempName, "w" ); + xmlout = fopen( pXMLTempName, "w" ); + stackout = fopen( pStackTempName, "w" ); fprintf( xmlout, "<errormail:Stack type=\"%s\">\n", STACKTYPE ); @@ -447,11 +449,10 @@ static void PrintStack( int sig ) { void *buffer[MAX_FRAME_COUNT]; + int size = backtrace( buffer, sizeof(buffer) / sizeof(buffer[0]) ); fprintf( stderr, "\n\nFatal exception: Signal %d\n", sig ); - int size = backtrace( buffer, sizeof(buffer) / sizeof(buffer[0]) ); - if ( size > 0 ) { fputs( "Stack:\n", stderr ); 2. handle case of 0 return from dladdr so that null stirng is not sent to strchr > dladdr( stackframes[iFrame], &dl_info); > > fprintf(stderr,"reached point 2\n");fflush(stderr); > > dli_fname = strrchr( dl_info.dli_fname, '/' ); > But there is no guarantee that dlinfo.dli_fname is not null > which in turn can generate a segfault in strchr > so need to check return vale of dladdr. 3. set sigaction so that signal handler can block other signals on entry to prevent recursion 4. change jre to no_jre in SOLARLIB to prevent libjpeg.so from JDK 1.3.1 builds from being linked into crash_report >SOLARLIB!:=$(SOLARLIB:s/jre/no_jre/) 5. define a BUILD_SPECIAL style macro so that SERVER= is filled in our bootstraprc #ifdef OSL_PRODUCT > #ifdef BUILD_SPECIAL > Value = "report.services.openoffice.org"; > #else > Value = ""; > #endif >
Hi, Adding myself to CC on this Kevin
signal.c is already fixed.
Hi, Did you add the fix for testing return value from dladdr in signal.c or is that still needed? Kevin
../../unxlngi4.pro/obj/main.o(.text+0x178): In function `write_stack(long)': : the use of `tmpnam' is dangerous, better use `mkstemp' This must be removed or else it will conflict with packaging rules and cuase problems.
@Kevin: no, only C++ vs. C changes.
Created attachment 7057 [details] short patch to replace tmpnam with mkstemp and to handle null dladdr fields
Created attachment 7058 [details] changes to crash_rep makefiles and main.cxx
Created attachment 7064 [details] a better signal_fix patch that changes fewer lines
Hi, I did not like my first signal_fix.txt patch since it did not proerly handle the ifdef case when no backtrace was desired. I also changed to many lines when a simpler version was possible. So please use new_signal_fix.txt as a patch file and not signal_fix.txt if you want things to build with mkstemp and handle the dladdr issue. Hope this helps, Kevin
Hi, --- source/unx/main.cxx.~1.6.~ 2003-06-20 13:08:59.000000000 -0400 +++ source/unx/main.cxx 2003-06-20 13:08:59.000000000 -0400 @@ -62,7 +62,7 @@ #include <interface.hxx> #include <cstdio> #include <sys/utsname.h> -#include <_version.h> +#include <vcl/_version.h> This didn't work for me. Because vcl was not built before crashrep in my environment, kernel-2.2.18, glibc-2.1.3, gcc-3.3, XFree86-4.1.0, jdk-1.4.1
Hi, As a workaround, simply add vcl as a dependency on the top line of crashrep/prj/build.lst cr crashrep : sal sysui gtk tools NULL In fact since we don't have a gtk module we should be replacing gtk with vcl This should allow the build to continue until a better fix is found. I certainly hope we are not going to add the mishmash that is gtk+2 to our build requirements or our source base. Kevin
I'll take over this one.
Target set.
Fixed non failsafe dladdr usage in sal/osl/unx/signal.c branch cws_srx645_ooo11rc rev 1.13.4.2 Use mkstemp instead of tmpnam in sal/osl/unx/signal.c branch cws_srx645_ooo11rc rev 1.13.4.4 Include <vcl/_version.h> to get _INPATH define and other in crashrep/source/unx/main.cxx branch cws_srx645_ooo11rc rev 1.6.6.2 Fixed linker command line if static gtk is NOT used in crashrep/source/unx/makefile.mk branch cws_srx645_ooo11rc rev 1.2.6.1 Didn't used the suggested fixed because they introduced some new errors. @Pavel: Please review and check if it works. @Kevin: Don't change the build lst in module crashrep as this will break SO build dependencies. Just ignore the warning of a missing gtk module until we have a bette solution.
Hi, Reopening this. Fixes are missing in crashrep/source/unx/makefile.mk --only-mod-libs does NOT exist in current pkg-config The following line needs to be added to both crashrep/source/unx/makefile.mk and crashrep/source/unx/res/makefile.mk SOLARLIB!:=$(SOLARLIB:s/jre/no_jre/) Otherwise during link SOLARLIB will find libjpeg.so from JDK 1.3.1 which has other pieces linked into it causing problems. Also, none of these changes have been committed to OOo 1.1RC yet. Kevin
Done in branch cws_srx645_ooo11rc. Will automaticly be commited to OOo 1.1RC by merging the branch by tomorrow.
Hi, Looks great! Thanks! Kevin
Hi, cvs update shows all fixes in place so verified. Kevin
We've still got the --only-mod-libs problem for ENABLE_STATIC_GTK=TRUE. Without this fixed I can't test linking statically to GTK. crashrep/source/unx$ ENABLE_STATIC_GTK=TRUE dmake ------------------------------ Making: ../../unxlngi4.pro/bin/crash_report.bin unx --only-mod-libs: unknown option dmake: Error code 1, while making '../../unxlngi4.pro/bin/crash_report.bin' ---* TG_SLO.MK *---
JA->HRO: Martin mentioned that the remaining problem of Chris might be a duplicate of an issue which you're working on ...? Reassigning to you
Please refrain from building crashrep with static linked gtk libraries and forget 'configure --use-static-gtk'. Without the pkg-config option '--only-mod-libs' some common libraries like dl etc. will be linked statically too. That would require additional changes to pkg-config. I was not aware that the pkg-config here differs from that available on a scratch OOo build. It's a better option to ship the needed GTK libraries (LGPL) with OOo and always link dynamically. For OOo 1.1 RC all builds for Linux x86 and Solaris will be done by SUN so we can provide a correct static linked version for download. I've submitted an issue 16528 to do this for OOo 1.1. Sorry for the inconvenience.
Hi, > It's a better option to ship the needed GTK libraries (LGPL) with OOo > and always link dynamically. > For OOo 1.1 RC all builds for Linux x86 and Solaris will be done by > SUN so we can provide a correct static linked version for download. > This is a joke right? You really want to add the gtk-+2.0 libs to the binary tarball people have to download (and all of the supporting libs too?). That seems completely crazy to add such a build requirement for anything like a crash reporter. Please simply rewrite crashreporter to use a X11, Xt and Xaw and drop all this idea of including gtk+2.0 libs in the installer. PPC Linux simply will not be shipping any gtk-2.0 libs and therefore probably not crashreporter in the future either then. I will instead ifdef the code in sal/osl/unx/signal.c to rename the created stack trace tmp files to include something more amenable to users with full date and ask the user to forward those files with any crashing bug report. Kevin
closed.