[Warning: Long message ahead] Hello, Two months ago my laptop's backlight died, so I decided to install GNOME 2.10 in office, using jhbuild. The environment is a customized old Red Hat 7.3 with gcc 2.96. Basically it was missing many packages that are granted with recent distros. Here is a not-so-short report on issues that I faced during this three-day experiment. Not all problems discussed are about GNOME modules, but I included them for completeness. Next, many of these problems should have been fixed by no, excuse me for late report. I'm attaching patches for the very trivial problems. It takes a GNOME hacker with commit permission to all modules half an hour to apply them all. Most of them are about declaring variables after code, that the 2.96 doesn't like by default. So, I configured jhbuild with suggested autogenargs '--disable-static --disable-gtk-doc'. The first thing I learned after configuring jhbuild and trying to run was that I need to 'jhbuild bootstrap' first. I thought it would do that itself. Moreover, 'jhbuild sanitycheck' was not of any help at all, since I don't have DocBook stylesheets and it stops at that steps. I decided to compile without documentation, since I always browse them online, but as we will see, it's not that easy. I did a 'jhbuild tinderbox' so I could monitor the progress through web. First problem with jhbuild: tinderbox should be an option, like --tinderbox, so one can do 'jhbuild --tinderbox bootstrap' or 'jhbuild --tinderbox buildone' too. The DocBook stylesheets bites again when compiling gtk-doc. Moreover, it doesn't suggest where to get these missing stylesheets. That would be cool if --disable-gtk-doc would somehow magically remove gtk-doc from modules to build. I simply skipped the module. The immediate next module, glib, fails to compile without a working gtk-doc, even if passed --disable-gtk-doc, so I simply removed the check from configure.in and jumped back to autogen step. Seems like fontconfig needs expat, and cannot use libxml2 instead. So installed expat. Moreover, fontconfig cannot figure out where expat is installed. Had to manually pass --with-expat=.... Had to install FreeType for fontconfig to compile, but there's no configure dependency for that. Seems like gtk+ needs libpng at compile time for parsing the artwork shipped with it. It's not really an optional dependency. D-BUS is problematic with XML suite again. First, in configure it checks for expat libs, not headers, so it would fail at compile time when there's no expat headers installed. Next, advertises a --with-xml=libxml option in configure --help, but in my experience, it still needs expat (headers at least) to compile. Third, does not accept --with-expat=... and does not find expat. Had to change CFLAGS and LDFLAGS to make it find expat. Small question: D-BUS can make some use of Gtk+ if available. Is it useful to make Gtk+ a dependency of D-BUS in jhbuild? gnome-doc-utils needs to rotate autogen.sh from nagging about missing gnome-doc-utils! My solution was to put a single space before the GNOME_DOC_INIT in all configure.{in,ac} files in there. Patch attached. gnome-doc-utils needs DocBook stuff again. Jhbuild modulesets and module branches: After an stable 2.x release, modules start branching, so the modulesets need to be updated regularly. It would be better if jhbuild try a default module (gnome-2-10 for example), and fall back to HEAD if there's no such branch. Anyway, I wrote a couple shell scripts that use bonsai and viewcvs find branch violations in a moduleset. The scripts are attached as jhbuild_sanity.tar.gz. I get the following violations right now: [behdad epoch jhbuild_sanity]$ ./find_branch_violations 2.10 dasher file-roller gnome-doc-utils libgnomeprint libgnomeprintui librsvg vino zenity [behdad epoch jhbuild_sanity]$ ./find_branch_violations 2.8 eog gnomemm/gconfmm gnomemm/libglademm gnome-volume-manager gtranslator zenity [behdad epoch jhbuild_sanity]$ ./find_branch_violations 2.6 gnomemm/gnome-vfsmm libgtop ORBit2 zenity [behdad epoch jhbuild_sanity]$ ./find_branch_violations 2.4 nautilus-media Missing or extra dependencies (in jhbuild modulesets or generally): * opencdk requires libgcrypt. * Had to remove gnome-vfs's dependency on hal and howl to continue build. * libxklavier requires doxygen. * bug-buddy requires gnome-doc-utils. * Had to remove gnome-panel's dependency on evolution-data-server to continue without e-d-s. * gok requires gnome-speech. * gnome-system-tools requires libnautilus-extension. * nautilus requires libexif. * sound-juicer requires nautilus-cd-burner. * gnomemeeting requires libsdl, can be disabled though. Make it autodetect please. * gnomemeeting requires evolution-data-server. Misc packages missing I had to install: * gtk+ needs libpng as mentioned before. * libgnomecups requires cups which requires openssl. * evolution-data-server needs openssl, worse, it includes ssl.h instead of openssl/ssl.h * cups needs openssl, but doesn't check with configure? * sound-juicer requires musicbrainz. * gnome-vfs needs libbz2, known as bzip2 of course. Skipped modules: * hal is not easy to build on 2.4 systems. There are fixes on the net, but I simply skipped. * evolution-data-server: Needs NSS headers from Mozilla. Bug 154213. * gnome-nettool needs headers I couldn't figure out where to find. Misc: * libgpg-error ftp site was not available. Used mirror instead. * libart_lgpl library name didn't have .so extension, broke libgnomecanvas. * howl had some problem with .o vs .lo files. * openssl didn't build shared by default, also didn't copy the *.so.0.9.7 to $prefix/lib. * cups uses gcc options not available in 2.96, like -Wl,-soname,libcups.so.2 * cups: backend/ipp needed -lssl * gnome-speech/drivers/festival/festivalsynthesisdriver.c should include socket.h. Patch attached. * gnome-system-tools: Does -Werror I guess. Two very small fixes needed. Patch attached. * nautilus-cd-burner needs small fix: something may be used uninitialized. Patch attached. * gaim does not find openssl (-I needed), and finds libnss from mozilla 1.x, while needs mozilla 2. * Not a build problem, but totem does not work without an audio device. :( Declaring variables after code: Patches attached. * scrollkeeper/libs/install.c * evolution-data-server/servers/groupwise/* * libxklavier/libxklavier/* * librsvg/rsvg-structure.c * gnome-mag/magnifier/magnifier.c * gnome-speech/drivers/festival/festivalsynthesisdriver.c * gok/gok/gok-keyboard.c * gedit/plugins/taglist/gedit-taglist-plugin-parser.c * eog/libeog/eog-job-manager.c * gnopernicus: several places. * gal/gal/a11y/e-table/gal-a11y-e-cell-*.c * gtkhtml/src/htmltext.c Wild jhbuild ideas: * This isn't really needed to build GNOME, but many packages do not use pkg-config yet, so I find it useful if jhbuild sets CFLAGS, CPPFLAGS, CXXFLAGS, and LDFLAGS too, in the run command at least. * In the run command, it's useful if jhbuild set PREFIX environment variable. * The default action should IMHO be to start a shell, not to build. * The most annoying problem: Anonymous CVS repositories on fd.o need login, and there's a separate repo for each project. So, jhbuild really should login to anonymous CVS. That's not really hard. * Maybe add --with-xml=libxml in the sample jhbuildrc, donno. * This is a wild one: pass --with-PACKAGE for all packages that are already built to the upcoming configures. * A way to introduce soft dependencies: In other words, to say: "schedule this package before me if you can, but still build me if it's not possible, or that package fails to build." * Support mirrors for tarballs. * Option to build or install with 'make -k' instead of simply skipping. * Make default build do bootstrap too? * Anyway to automatically skip built packages? I know about --start-at, but after a while, with several broken packages spread all over the list, it becomes almost useless. * An option to stop on first failure, even in tinderbox mode. * Show version numbers for tarballs in log. * Add a softer --no-network, that does not download or update packages that exist locally, but does for those missing. * Should check that the branch from moduleset matches that from the CVS checkout, in case moduleset has been updated. Poooh, that was it, Happy GUADEC everybody, --behdad http://behdad.org/
Attachment:
behdad-patches.tar.gz
Description: GNU Zip compressed data
Attachment:
jhbuild_sanity.tar.gz
Description: GNU Zip compressed data