Issues with jhbuild and fixes in other GNOME modules (fwd)



[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



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]