Next: Checking the Distribution, Previous: Fine-grained Distribution Control, Up: Distributing [Contents][Index]
Occasionally it is useful to be able to change the distribution before
it is packaged up. If the dist-hook
rule exists, it is run
after the distribution directory is filled, but before the actual
distribution archives are created.
Two variables that are available when writing dist-hook
rules are
‘$(distdir)’ and ‘$(top_distdir)’:
dist
rule
will copy files from the current directory before creating the
tarball. If you are at the top-level directory, then ‘distdir =
$(PACKAGE)-$(VERSION)’. When used from subdirectory named
foo/, then ‘distdir = ../$(PACKAGE)-$(VERSION)/foo’.
‘$(distdir)’ can be a relative or absolute path, do not assume
any form.
One use of the dist_hook
rule is for
removing unnecessary files that get recursively included by specifying
a directory in EXTRA_DIST
:
EXTRA_DIST = doc dist-hook: rm -rf `find $(distdir)/doc -type d -name .svn`
Note that the dist-hook
recipe shouldn’t assume that the regular
files in the distribution directory are writable; this might not be the
case if one is packaging from a read-only source tree, or when a
make distcheck
is being done. For similar reasons, the recipe
shouldn’t assume that the subdirectories put into the distribution
directory due to being listed in EXTRA_DIST
are
writable. So, if the dist-hook
recipe wants to modify the
content of an existing file (or EXTRA_DIST
subdirectory) in the
distribution directory, it should explicitly to make it writable first:
EXTRA_DIST = README doc dist-hook: chmod u+w $(distdir)/README $(distdir)/doc echo "Distribution date: `date`" >> README rm -f $(distdir)/doc/HACKING
Note that when packages are nested using AC_CONFIG_SUBDIRS
(see Subpackages), then ‘$(distdir)’ and
‘$(top_distdir)’ are relative to the package where ‘make
dist’ was run, not to any sub-packages involved.
Next: Checking the Distribution, Previous: Fine-grained Distribution Control, Up: Distributing [Contents][Index]