Building modular X.org with ''jhbuild''
This page provides brief instructions on using jhbuild, a Python-based build tool, to build modular X.Org. jhbuild was written to build GNOME from source, but has been adapted to many other projects.
- Ubuntu 9.10:
jhbuild: sudo apt-get install git-core gnome-common libglib2.0-dev docbook-xsl subversion automake1.4 automake1.7 automake1.9 automake1.10 guile-1.8 waf
Xorg: sudo apt-get install groff zlib1g-dev libfreetype6-dev libxml2-dev docbook gperf flex bison libssl-dev
- Debian 5.0 (lenny):
jhbuild: sudo apt-get install git-core gnome-common gnome-doc-utils make automake1.4 automake1.7 automake1.9 docbook-xsl cvs subversion guile-1.8
Xorg: sudo apt-get install groff zlib1g-devlib freetype6-dev g++ bison flex ...
- Fedora 12:
jhbuild: sudo yum install @gnome-devel @development-tools gnome-common glib2-devel gnome-doc-utils docbook-style-xsl waf
Xorg: sudo yum install zlib-devel freetype-devel libxml2-devel expat-devel gperf libgcrypt-devel
- jhbuild: Devel/git, GNOME/gnome-common, Devel/subversion
- Xorg: X11/libfreetype-devel, Devel/gperf ...
- FreeBSD 8.0:
jhbuild: ports devel/git, devel/gnome-common, devel/autoconf262, devel/automake14, devel/automake17, devel/automake18, devel/automake19, devel/automake110, devel/glib20, devel/subversion (don't use Apache 2.0 APR!), textproc/gnome-doc-utils (select all options for docbook-1.4!), textproc/intltool, lang/guile
Xorg: ports print/freetype2 ...
git clone git://git.gnome.org/jhbuild cd jhbuild ./autogen.sh make make install cp sample.jhbuildrc ~/.jhbuildrc
(On FreeBSD, do gmake && gmake install .)
Note: You may get an error message msgfmt isn't installed - it's in the GNU gettext package
Note: You may get a message saying you need to run make -f Makefile.plain install - All this omits is building the documentation, which is also at http://library.gnome.org/devel/jhbuild/
The jhbuild executable is installed to ~/.local/bin/jhbuild. You will need to either symlink to it, use the full path or add it to your $PATH.
Module Set and jhbuild Config File
Building the Server, and Everything It Depends On
To build everything, you can do:
mkdir -p $HOME/xorg/util git clone git://anongit.freedesktop.org/git/xorg/util/modular/ $HOME/xorg/util/modular jhbuild -f $HOME/xorg/util/modular/jhbuildrc
But often you would just want to build the X server and key drivers to enable support of your latest shiny hardware, without replacing all of your X libraries and utilities. In this case, you can build specific targets rather than everything.
You will need a minimal number of drivers as well as the server; rather than executing separate jhbuild commands, you can issue a single one listing all the targets you want to build. The input drivers for PS/2 keyboards and mice are: xf86-input-keyboard and xf86-input-mouse.
To build the server and dependencies, along with these drivers, you would type:
jhbuild -f $HOME/xorg/util/modular/jhbuildrc build xserver xf86-video-intel xf86-input-keyboard xf86-input-mouse
Other interesting targets include xorg-drivers which builds all maintained X.org drivers.
Note: rather than building the target xorg-fonts, which will build you an entire additional set of fonts, you may want to make a link in your $prefix area to link to your existing fonts. Unless you have built your X server with --enable-builtin-fonts it will need to access some fonts to start, even though few applications need legacy bitmap fonts anymore.
cd $prefix/lib/X11; ln -s /usr/share/fonts/X11 fonts
Other drivers you may need include the synaptics driver and/or wacom drivers, currently maintained elsewhere (fixme...).
DRM and Kernel Modules
The X server is finally using a device driver on many systems (e.g. Linux, BSD); this is called DRM. It consists of two parts, the generic DRM module and a driver specific to your hardware. Currently, the kernel modules are not built automatically by jhbuild; you can find them in drm/linux-core or drm/bsd-core. To build the drm driver,
make -C linux-core
You may want to install these where you will be able to use them from your /etc/modules file.
Building Other Modules
Other buildable modules include the applications (e.g. xbiff) and the libraries (e.g. libXfixes), plus there a couple of meta modules; xorg-libs will build all libs and xorg-apps will build all apps.
Running The Results
Now that your development environment is set up, you can try running it (as root).
rmmod i915 # assuming you're using Intel rmmod drm insmod <path_to_drm_tree_above>/linux-core/drm.ko insmod <path_to_drm_tree_above>/linux-core/i915.ko export LD_LIBRARY_PATH=$prefix/lib startx -- $prefix/bin/Xorg -verbose # make sure you have a ~/.xinitrc with what you want to run
And there you have it, a fresh stack ready for tracking & doing upstream development. Enjoy!
libGL runs "make" straight after the git pull (bug 26337). Workaround: shell out, run ./autogen.sh --prefix=$HOME/xorg-build , exit shell and try again.
There's no facility in jhbuild to mark these modules as only appropriate to some targets, so to permanently avoid building these modules, add the module to the skip configuration variable in your jhbuildrc configuration file. e.g. skip = [ 'xf86-video-impact', 'xf86-video-sunbw2' ]
nouveau won't build unless you already have libdrm_nouveau built. One way to do so is setting temporarily autogenargs = '--enable-nouveau-experimental-api' in jhbuildrc, and use the buildone libdrm jhbuild command.