| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
14.4 Checking the Distribution
Automake also generates a distcheck rule that can be of help to
ensure that a given distribution will actually work. distcheck
makes a distribution, then tries to do a VPATH build
(see section Parallel Build Trees (a.k.a. VPATH Builds)), run the test suite, and finally make another
tarball to ensure the distribution is self-contained.
Building the package involves running ‘./configure’. If you need
to supply additional flags to configure, define them in the
DISTCHECK_CONFIGURE_FLAGS variable, either in your top-level
‘Makefile.am’, or on the command line when invoking make.
If the distcheck-hook rule is defined in your top-level
‘Makefile.am’, then it will be invoked by distcheck after
the new distribution has been unpacked, but before the unpacked copy
is configured and built. Your distcheck-hook can do almost
anything, though as always caution is advised. Generally this hook is
used to check for potential distribution errors not caught by the
standard mechanism. Note that distcheck-hook as well as
DISTCHECK_CONFIGURE_FLAGS are not honored in a subpackage
‘Makefile.am’, but the DISTCHECK_CONFIGURE_FLAGS are
passed down to the configure script of the subpackage.
Speaking of potential distribution errors, distcheck also
ensures that the distclean rule actually removes all built
files. This is done by running ‘make distcleancheck’ at the end of
the VPATH build. By default, distcleancheck will run
distclean and then make sure the build tree has been emptied by
running ‘$(distcleancheck_listfiles)’. Usually this check will
find generated files that you forgot to add to the DISTCLEANFILES
variable (see section What Gets Cleaned).
The distcleancheck behavior should be OK for most packages,
otherwise you have the possibility to override the definition of
either the distcleancheck rule, or the
‘$(distcleancheck_listfiles)’ variable. For instance, to disable
distcleancheck completely, add the following rule to your
top-level ‘Makefile.am’:
distcleancheck:
@:
|
If you want distcleancheck to ignore built files that have not
been cleaned because they are also part of the distribution, add the
following definition instead:
distcleancheck_listfiles = \
find . -type f -exec sh -c 'test -f $(srcdir)/$$1 || echo $$1' \
sh '{}' ';'
|
The above definition is not the default because it's usually an error if
your Makefiles cause some distributed files to be rebuilt when the user
build the package. (Think about the user missing the tool required to
build the file; or if the required tool is built by your package,
consider the cross-compilation case where it can't be run.) There is
an entry in the FAQ about this (see section Files left in build directory after distclean), make sure you
read it before playing with distcleancheck_listfiles.
distcheck also checks that the uninstall rule works
properly, both for ordinary and DESTDIR builds. It does this
by invoking ‘make uninstall’, and then it checks the install tree
to see if any files are left over. This check will make sure that you
correctly coded your uninstall-related rules.
By default, the checking is done by the distuninstallcheck rule,
and the list of files in the install tree is generated by
‘$(distuninstallcheck_listfiles)’ (this is a variable whose value is
a shell command to run that prints the list of files to stdout).
Either of these can be overridden to modify the behavior of
distcheck. For instance, to disable this check completely, you
would write:
distuninstallcheck:
@:
|
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
