Using jhbuild
So, in the GNOME-and-fd.o(freedesktop.org)-verse, there are
a few things I
want to run from the latest updates - evince, poppler and
cairo. Which
means I want to run the latest versions of their
dependencies as well.
So I decided to use jhbuild to build it
all. Last
month, GNOME
developer André Klapper wrote
in his blog about how little fun it is to build GNOME
from the
latest commits via jhbuild. Perhaps, but I finally did it - a
subset of GNOME anyhow.
The default jhbuild moduleset is gnome-3.0, but that builds
some of the
stuff I'm focused on from tarball's, which is supposed to be
deprecated
in jhbuild now anyhow. So I remove gnome-3.0 from my
.jhbuildrc and put
all of the devel modulesets into my
.jhbuildrc. But some of the dependencies were missing -
they were in
the non-devel modules. So I put all of those into my own
moduleset. As
my moduleset is local, I set use_local_modulesets to True -
even if
thats not necessary, I git pull from jhbuild before I run a
jhbuild, so
why not do that? I also put
module_autogenargs['evince'] = autogenargs \
+ ' --disable-nautilus '
into my .jhbuildrc to avoid those headaches with evince. I
skip a
number of modules people recommend to put in skip, like
mozilla,
although I don't believe they're dependencies in my chain.
I also add a
few pkgconfig path's to .jhbuildrc, on advice from the net. Of
course, I also install the packages on Ubuntu that the
jhbuild web site
recommends for Ubuntu 10.10.
Incidentally, here are the jhbuild dependencies for evince (and
epdfview):
Color code for nodes: green are packages in jhbuild "devel"
modulesets,
red are packages in jhbuild "non-devel" modulesets,
brown (libgcrypt and libgpg-error) are also in jhbuild
"non-devel" modulesets
and they are tarballs there,
purple are packages in jhbuild "devel" modulesets which
other packages might
have a hidden dependency to which is not shown in the
current jhbuild
modulesets. Finally blue are non-GNOME packages that no
GNOME module is
dependent on, but which are themselves dependent on some
GNOME modules.
I made the above dependency tree with graphviz, a tool which
makes doing
such dependency charts really easy.
Everything went pretty swimmingly until I started to reach
the top of the
chain. Poppler busted on some GObject introspection stuff -
I installed
gobject-introspection as a jhbuild module and updated the
poppler gir
include from Gdk-2.0 to Gdk-3.0 and it went sailing along.
Next up - gtk+ 3.0 broke. This happened to me a few days
before, when I was
taking my first stab at jhbuild. At that time, I looked at
the recent gtk+
code, saw the stuff breaking had changed recently, and did a
hard git reset
of gtk+ to a commit from 48 hours before - it installed
fine. This time the
commit done was the last one. I went on GNOME's IRC network
and tracked down
the developer who made the bad commit, he fixed it and I was
sailing along
again.
So now I get to evince. A few days ago I had some problems
with deprecated
combo box calls that had been removed from the dependency
libraries, but
there were patches for that in bugzilla. After patching
that, this time I
get an error that a set_scroll_adjustments call is failing.
I look in gtk+ and
see that they have been mucking with scrolling there
recently, and figure it
is due to that. I disable the call and compile. Evince
comes up and I can
look around, but it hangs on loading anything.
I check poppler's test programs and they are working. So I
encapsulate a
lightweight PDF viewer that depends on poppler and gtk+,
epdfview, into
my personal jhbuild moduleset and build it against these
libraries.
Epdfview comes up, and displays PDFs etc. fine. Ultimately,
epdfview and
evince are dependent upon almost entirely the same
libraries, except evince
depends on three more icon-related ones. And epdfview is
working. So either
evince is broken, or some library it depends on has changed,
meaning...
evince is broken, for the moment. But Epdfview works.