Working in a separate prefix
I've been surprised in the past to discover that even some seasoned engineers didn't know how to use the autotools prefix feature. A sign they've been lucky enough and didn't have to deal with Autotools too much. Here's my attempt to provide some introduction to
Working with or in "a separate prefix" is working with libraries and binaries (well, anything produced by '
Let's take an example to make the discussion easier:
First, let's clone the needed git repositories:
Now it's time to compile i-g-t:
./configure --prefix
.Working with or in "a separate prefix" is working with libraries and binaries (well, anything produced by '
make install
' in an autotooled project really) installed in a different directory than the system-wide ones (/usr or even /usr/local that can become quite messy). It is the preferred way to hack on a full stack without polluting your base distribution and has several advantages:- One can hack on the whole stack without the fear of not being able to run your desktop environment you're working with if something goes wrong,
- More often than not, one needs a relatively recent library that your distribution doesn't ship with (say a recent libdrm). When working with the dependencies in a prefix, it's just a matter of recompiling it.
Let's take an example to make the discussion easier:
- We want to compile libdrm and intel-gpu-tools (because intel-gpu-needs needs a more recent libdrm than the one coming with your distribution),
- We want to use the
~/gfx
directory for our work, - git trees with be cloned in
~/gfx/sources
, ~/gfx/install
is chosen as the prefix.
First, let's clone the needed git repositories:
$ mkdir -p ~/gfx/sources ~/gfx/installThen you need to source a script that will set-up your environment with a few variables to tell the system to use the prefix (both at run-time and compile-time). A minimal version of that script for our example is (I store my per-project setup scripts to source at the root of the project, in our case ~/gfx):
$ cd ~/gfx/sources
$ git clone git://anongit.freedesktop.org/mesa/drm libdrm
$ git clone git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
$ cat ~/gfx/setup-envThen it's time to compile libdrm, telling the
PROJECT=~/gfx
export PATH=$PROJECT/install/bin:$PATH
export LD_LIBRARY_PATH=$PROJECT/install/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=$PROJECT/install/lib/pkgconfig:$PKG_CONFIG_PATH
export ACLOCAL_FLAGS="-I $PROJECT/install/share/aclocal $ACLOCAL_FLAG"
$ source ~/gfx/setup-env
configure
script that we want to install it in in our prefix:$ cd ~/gfx/sources/libdrmNote that you don't need to run "sudo make install" since we'll be installing in our prefix directory that is writeable by the current user.
$ ./autogen.sh --prefix=/home/damien/gfx/install
$ make
$ make install
Now it's time to compile i-g-t:
$ cd ~/gfx/sources/intel-gpu-toolsThe configure script may complain about dependencies (eg. cairo, SWIG,...). Different ways to solve those:
$ ./autogen.sh --prefix=/home/damien/gfx/install
$ make
$ make install
- For dependencies not directly linked with the graphics stack (like SWIG), it's recommended to use the development package provided by the distribution
- For old enough dependencies that don't change very often (like cairo) you can use the distribution development package or compile them in your prefix
- For dependencies more recent than your distribution ones, you need to install them in the chosen prefix.