Go to the previous, next section.

Variables for Installation Directories

Installation directories should always be named by variables, so it is easy to install in a nonstandard place. The standard names for these variables are:

`prefix'
A prefix used in constructing the default values of the variables listed below. The default value of prefix should be `/usr/local' (at least for now).

`exec_prefix'
A prefix used in constructing the default values of some of the variables listed below. The default value of exec_prefix should be $(prefix).

Generally, $(exec_prefix) is used for directories that contain machine-specific files (such as executables and subroutine libraries), while $(prefix) is used directly for other directories.

`bindir'
The directory for installing executable programs that users can run. This should normally be `/usr/local/bin', but write it as `$(exec_prefix)/bin'.

`libdir'
The directory for installing executable files to be run by the program rather than by users. Object files and libraries of object code should also go in this directory. The idea is that this directory is used for files that pertain to a specific machine architecture, but need not be in the path for commands. The value of libdir should normally be `/usr/local/lib', but write it as `$(exec_prefix)/lib'.

`datadir'
The directory for installing read-only data files which the programs refer to while they run. This directory is used for files which are independent of the type of machine being used. This should normally be `/usr/local/lib', but write it as `$(prefix)/lib'.

`statedir'
The directory for installing data files which the programs modify while they run. These files should be independent of the type of machine being used, and it should be possible to share them among machines at a network installation. This should normally be `/usr/local/lib', but write it as `$(prefix)/lib'.

`includedir'
The directory for installing header files to be included by user programs with the C `#include' preprocessor directive. This should normally be `/usr/local/include', but write it as `$(prefix)/include'.

Most compilers other than GCC do not look for header files in `/usr/local/include'. So installing the header files this way is only useful with GCC. Sometimes this is not a problem because some libraries are only really intended to work with GCC. But some libraries are intended to work with other compilers. They should install their header files in two places, one specified by includedir and one specified by oldincludedir.

`oldincludedir'
The directory for installing `#include' header files for use with compilers other than GCC. This should normally be `/usr/include'.

The Makefile commands should check whether the value of oldincludedir is empty. If it is, they should not try to use it; they should cancel the second installation of the header files.

A package should not replace an existing header in this directory unless the header came from the same package. Thus, if your Foo package provides a header file `foo.h', then it should install the header file in the oldincludedir directory if either (1) there is no `foo.h' there or (2) the `foo.h' that exists came from the Foo package.

To tell whether `foo.h' came from the Foo package, put a magic string in the file--part of a comment--and grep for that string.

`mandir'
The directory for installing the man pages (if any) for this package. It should include the suffix for the proper section of the manual--usually `1' for a utility. It will normally be `/usr/local/man/man1', but you should write it as `$(prefix)/man/man1'.

`man1dir'
The directory for installing section 1 man pages.
`man2dir'
The directory for installing section 2 man pages.
`...'
Use these names instead of `mandir' if the package needs to install man pages in more than one section of the manual.

Don't make the primary documentation for any GNU software be a man page. Write a manual in Texinfo instead. Man pages are just for the sake of people running GNU software on Unix, which is a secondary application only.

`manext'
The file name extension for the installed man page. This should contain a period followed by the appropriate digit; it should normally be `.1'.

`man1ext'
The file name extension for installed section 1 man pages.
`man2ext'
The file name extension for installed section 2 man pages.
`...'
Use these names instead of `manext' if the package needs to install man pages in more than one section of the manual.

`infodir'
The directory for installing the Info files for this package. By default, it should be `/usr/local/info', but it should be written as `$(prefix)/info'.

`srcdir'
The directory for the sources being compiled. The value of this variable is normally inserted by the configure shell script.

For example:

# Common prefix for installation directories.
# NOTE: This directory must exist when you start the install.
prefix = /usr/local
exec_prefix = $(prefix)
# Where to put the executable for the command `gcc'.
bindir = $(exec_prefix)/bin
# Where to put the directories used by the compiler.
libdir = $(exec_prefix)/lib
# Where to put the Info files.
infodir = $(prefix)/info

If your program installs a large number of files into one of the standard user-specified directories, it might be useful to group them into a subdirectory particular to that program. If you do this, you should write the install rule to create these subdirectories.

Do not expect the user to include the subdirectory name in the value of any of the variables listed above. The idea of having a uniform set of variable names for installation directories is to enable the user to specify the exact same values for several different GNU packages. In order for this to be useful, all the packages must be designed so that they will work sensibly when the user does so.

Go to the previous, next section.