Next: A deep hierarchy, Previous: A tricker example, Up: Some example packages [Index]
Automake, of course, uses itself to generate its Makefile.in. Since Automake is a shallow package, it has more than one Makefile.am. Here is the top-level Makefile.am:
## Process this file with automake to create Makefile.in
AUTOMAKE_OPTIONS = gnits
MAINT_CHARSET = latin1
PERL = @PERL@
SUBDIRS = tests
bin_SCRIPTS = automake
info_TEXINFOS = automake.texi
pkgdata_DATA = clean-kr.am clean.am compile-kr.am compile-vars.am \
compile.am data.am depend.am \
dist-vars.am footer.am header.am header-vars.am \
kr-vars.am libraries-vars.am \
libraries.am library.am mans-vars.am \
program.am programs.am remake-hdr.am \
remake-subd.am remake.am scripts.am subdirs.am tags.am tags-subd.am \
tags-clean.am \
texi-version.am texinfos-vars.am texinfos.am \
libraries-clean.am programs-clean.am data-clean.am \
COPYING INSTALL texinfo.tex \
ansi2knr.c ansi2knr.1 \
aclocal.m4
## These must all be executable when installed.
pkgdata_SCRIPTS = config.guess config.sub install-sh mdate-sh mkinstalldirs
CLEANFILES = automake
# The following requires a fixed version of the Emacs 19.30 etags.
ETAGS_ARGS = automake.in --lang=none \
--regex='/^@node[ \t]+\([^,]+\)/\1/' automake.texi
## `test -x' is not portable. So we use Perl instead. If Perl
## doesn't exist, then this test is meaningless anyway.
# Check to make sure some installed files are executable.
installcheck-local:
$(PERL) -e "exit ! -x '$(pkgdatadir)/config.guess';"
$(PERL) -e "exit ! -x '$(pkgdatadir)/config.sub';"
$(PERL) -e "exit ! -x '$(pkgdatadir)/install-sh';"
$(PERL) -e "exit ! -x '$(pkgdatadir)/mdate-sh';"
$(PERL) -e "exit ! -x '$(pkgdatadir)/mkinstalldirs';"
# Some simple checks:
# * syntax check with perl4 and perl5.
# * make sure the scripts don't use 'true'
# * expect no instances of '${...}'
# These are only really guaranteed to work on my machine.
maintainer-check: automake check
$(PERL) -c -w automake
@if grep '^[^#].*true' $(srcdir)/[a-z]*.am; then \
echo "can't use 'true' in GNU Makefile" 1>&2; \
exit 1; \
else :; fi
@if test `fgrep '$${' $(srcdir)/[a-z]*.am | wc -l` -ne 0; then \
echo "found too many uses of '\$${'" 1>&2; \
exit 1; \
fi
if $(SHELL) -c 'perl4.036 -v' >/dev/null 2>&1; then \
perl4.036 -c -w automake; \
else :; fi
# Tag before making distribution. Also, don't make a distribution if
# checks fail. Also, make sure the NEWS file is up-to-date.
cvs-dist: maintainer-check
@if sed 1q NEWS | grep -e "$(VERSION)" > /dev/null; then :; else \
echo "NEWS not updated; not releasing" 1>&2; \
exit 1; \
fi
cvs tag `echo "Release-$(VERSION)" | sed 's/\./-/g'`
$(MAKE) dist
As you can see, Automake defines many of its own rules, to make the
maintainer’s job easier. For instance the cvs-dist rule
automatically tags the current version in the CVS repository, and then
makes a standard distribution.
Automake consists primarily of one program, automake, and a
number of auxiliary scripts. Automake also installs a number of
programs which are possibly installed via the ‘--add-missing’
option; these scripts are listed in the pkgdata_SCRIPTS variable.
Automake also has a tests subdirectory, as indicated in the
SUBDIRS variable above. Here is tests/Makefile.am:
## Process this file with automake to create Makefile.in AUTOMAKE_OPTIONS = gnits TESTS = mdate.test vtexi.test acoutput.test instexec.test checkall.test \ acoutnoq.test acouttbs.test libobj.test proginst.test acoutqnl.test \ confincl.test spelling.test prefix.test badprog.test depend.test EXTRA_DIST = defs
This is where all the tests are really run. defs is an
initialization file used by each test script; it is explicitly mentioned
because automake has no way of automatically finding it.
Next: A deep hierarchy, Previous: A tricker example, Up: Some example packages [Index]