[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.2 Fine-grained control of install

The second most common way (30) to configure a package is to set prefix and exec-prefix to different values. This way, a system administrator on a heterogeneous network can arrange to have the architecture-independent files shared by all platforms. Typically this doesn’t save very much space, but it does make in-place bug fixing or platform-independent runtime configuration a lot easier.

To this end, Automake provides finer control to the user than a simple make install. For instance, the user can strip all the package executables at install time by running make install-strip (though we recommend setting the various ‘INSTALL’ environment variables instead; this is discussed later). More importantly, Automake provides a way to install the architecture-dependent and architecture-independent parts of a package independently.

In the above scenario, installing the architecture-independent files more than once is just a waste of time. Our hypothetical administrator can install those pieces exactly once, with make install-data, and then on each type of build machine install only the architecture-dependent files with make install-exec.

Nonstandard directories specified in ‘Makefile.am’ are also separated along ‘data’ and ‘exec’ lines, giving the user complete control over installation. If, and only if, the directory variable name contains the string ‘exec’, then items ending up in that directory will be installed by install-exec and not install-data.

At some sites, the paths referred to by software at runtime differ from those used to actually install the software. For instance, suppose ‘/usr/local’ is mounted read-only throughout the network. On the server, where new packages are built, the file system is available read-write as ‘/w/usr/local’ – a directory which is not mounted anywhere else. In this situation the sysadmin can configure and build using the runtime values, but use the ‘DESTDIR’ trick to temporarily change the paths at install time:

./configure --prefix=/usr/local
make DESTDIR=/w install

Note that ‘DESTDIR’ operates as a prefix only. Sometimes this isn’t enough. In this situation you can explicitly override each directory variable:

./configure --prefix=/usr/local
make prefix=/w/usr/local datadir=/w/usr/share install

Here is a full example (31) showing how you can unpack, configure, and build a typical GNU program on multiple machines at the same time:

sunos$ tar zxf foo-0.1.tar.gz
sunos$ mkdir sunos linux

In one window:

sunos$ cd sunos
sunos$ ../foo-0.1/configure --prefix=/usr/local \
> --exec-prefix=/usr/local/sunos
sunos$ make
sunos$ make install

And in another window:

sunos$ rsh linux
linux$ cd ~/linux
linux$ ../foo-0.1/configure --prefix=/usr/local \
> --exec-prefix=/usr/local/linux
linux$ make
linux$ make install-exec

In this example we install everything on the ‘sunos’ machine, but we only install the platform-dependent files on the ‘linux’ machine. We use a different exec-prefix, so for example GNU/Linux executables will end up in ‘/usr/local/linux/bin/’.

[ < ] [ > ]   [ << ] [ Up ] [ >> ]

This document was generated by Ben Elliston on July 10, 2015 using texi2html 1.82.