| Index: docs/linux_building_debug_gtk.md
|
| diff --git a/docs/linux_building_debug_gtk.md b/docs/linux_building_debug_gtk.md
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..75cdf93670c5f83d0303aaf2c6d889914d7b2d5c
|
| --- /dev/null
|
| +++ b/docs/linux_building_debug_gtk.md
|
| @@ -0,0 +1,110 @@
|
| +# Introduction
|
| +
|
| +Sometimes installing the debug packages for gtk and glib isn't quite enough.
|
| +(For instance, if the artifacts from -O2 are driving you bonkers in gdb, you
|
| +might want to rebuild with -O0.)
|
| +Here's how to build from source and use your local version without installing it.
|
| +
|
| +## 32-bit systems
|
| +
|
| +On Ubuntu, to download and build glib and gtk suitable for debugging:
|
| +
|
| +1. If you don't have a gpg key yet, generate one with gpg --gen-key.
|
| +
|
| +2. Create file ~/.devscripts containing DEBSIGN\_KEYID=yourkey, e.g.
|
| +DEBSIGN\_KEYID=CC91A262
|
| +(See http://www.debian.org/doc/maint-guide/ch-build.en.html
|
| +
|
| +3. If you're on a 32 bit system, do:
|
| +```
|
| +#!/bin/sh
|
| +set -x
|
| +set -e
|
| +# Workaround for "E: Build-dependencies for glib2.0 could not be satisfied"
|
| +# See also https://bugs.launchpad.net/ubuntu/+source/apt/+bug/245068
|
| +sudo apt-get install libgamin-dev
|
| +sudo apt-get build-dep glib2.0 gtk+2.0
|
| +rm -rf ~/mylibs
|
| +mkdir ~/mylibs
|
| +cd ~/mylibs
|
| +apt-get source glib2.0 gtk+2.0
|
| +cd glib2.0*
|
| +DEB_BUILD_OPTIONS="nostrip noopt debug" debuild
|
| +cd ../gtk+2.0*
|
| +DEB_BUILD_OPTIONS="nostrip noopt debug" debuild
|
| +```
|
| +This should take about an hour. If it gets stuck waiting for a zombie,
|
| +you may have to kill its closest parent (the makefile uses subshells,
|
| +and bash seems to get confused). When I did this, it continued successfully.
|
| +
|
| +At the very end, it will prompt you for the passphrase for your gpg key.
|
| +
|
| +Then, to run an app with those libraries, do e.g.
|
| +```
|
| +export LD_LIBRARY_PATH=$HOME/mylibs/gtk+2.0-2.16.1/debian/install/shared/usr/lib:$HOME/mylibs/gtk+2.0-2.20.1/debian/install/shared/usr/lib
|
| +```
|
| +
|
| +gdb ignores that variable, so in the debugger, you would have to do something like
|
| +```
|
| +set solib-search-path $HOME/mylibs/gtk+2.0-2.16.1/debian/install/shared/usr/lib:$HOME/mylibs/gtk+2.0-2.20.1/debian/install/shared/usr/lib
|
| +```
|
| +
|
| +See also http://sources.redhat.com/gdb/current/onlinedocs/gdb_17.html
|
| +
|
| +## 64-bit systems
|
| +
|
| +If you're on a 64 bit systems, you can do the above on a 32
|
| +bit system, and copy the result. Or try one of the following:
|
| +
|
| +### Building your own GTK
|
| +
|
| +```
|
| +apt-get source glib-2.0 gtk+-2.0
|
| +
|
| +export CFLAGS='-m32 -g'
|
| +export LDFLAGS=-L/usr/lib32
|
| +export LD_LIBRARY_PATH=/work/32/lib
|
| +export PKG_CONFIG_PATH=/work/32/lib/pkgconfig
|
| +
|
| +# glib
|
| +setarch i386 ./configure --prefix=/work/32 --enable-debug=yes
|
| +
|
| +# gtk
|
| +setarch i386 ./configure --prefix=/work/32 --enable-debug=yes --without-libtiff
|
| +```
|
| +
|
| +
|
| +### ia32-libs
|
| +_Note: Evan tried this and didn't get any debug libs at the end._
|
| +
|
| +Or you could try this instead:
|
| +```
|
| +#!/bin/sh
|
| +set -x
|
| +set -e
|
| +sudo apt-get build-dep ia32-libs
|
| +rm -rf ~/mylibs
|
| +mkdir ~/mylibs
|
| +cd ~/mylibs
|
| +apt-get source ia32-libs
|
| +cd ia32-libs*
|
| +DEB_BUILD_OPTIONS="nostrip noopt debug" debuild
|
| +```
|
| +
|
| +By default, this just grabs and unpacks prebuilt libraries; see
|
| +ia32-libs-2.7ubuntu6/fetch-and-build which documents a BUILD
|
| +variable which would force actual building.
|
| +This would take way longer, since it builds dozens of libraries.
|
| +I haven't tried it yet.
|
| +
|
| +#### Possible Issues
|
| +
|
| +debuild may fail with
|
| +```
|
| +gpg: [stdin]: clearsign failed: secret key not available
|
| +debsign: gpg error occurred! Aborting....
|
| +```
|
| +if you forget to create ~/.devscripts with the right contents.
|
| +
|
| +The build may fail with a "FAIL: abicheck.sh" if gold is your system
|
| +linker. Use ld instead.
|
|
|