Of course, GNU Hello is somewhat more featureful than your traditional two-liner. GNU Hello is internationalized, does option processing, and has a manual and a test suite.
Here is the configure.in
from GNU Hello.
Please note: The calls to AC_INIT
and AM_INIT_AUTOMAKE
in this example use a deprecated syntax. For the current approach,
see the description of AM_INIT_AUTOMAKE
in Public macros.
dnl Process this file with autoconf to produce a configure script. AC_INIT(src/hello.c) AM_INIT_AUTOMAKE(hello, 1.3.11) AM_CONFIG_HEADER(config.h) dnl Set of available languages. ALL_LINGUAS="de fr es ko nl no pl pt sl sv" dnl Checks for programs. AC_PROG_CC AC_ISC_POSIX dnl Checks for libraries. dnl Checks for header files. AC_STDC_HEADERS AC_HAVE_HEADERS(string.h fcntl.h sys/file.h sys/param.h) dnl Checks for library functions. AC_FUNC_ALLOCA dnl Check for st_blksize in struct stat AC_ST_BLKSIZE dnl internationalization macros AM_GNU_GETTEXT AC_OUTPUT([Makefile doc/Makefile intl/Makefile po/Makefile.in \ src/Makefile tests/Makefile tests/hello], [chmod +x tests/hello])
The AM_
macros are provided by Automake (or the Gettext library);
the rest are standard Autoconf macros.
The top-level Makefile.am
:
EXTRA_DIST = BUGS ChangeLog.O SUBDIRS = doc intl po src tests
As you can see, all the work here is really done in subdirectories.
The po
and intl
directories are automatically generated
using gettextize
; they will not be discussed here.
In doc/Makefile.am
we see:
info_TEXINFOS = hello.texi hello_TEXINFOS = gpl.texi
This is sufficient to build, install, and distribute the GNU Hello manual.
Here is tests/Makefile.am
:
TESTS = hello EXTRA_DIST = hello.in testdata
The script hello
is generated by configure
, and is the
only test case. make check
will run this test.
Last we have src/Makefile.am
, where all the real work is done:
bin_PROGRAMS = hello hello_SOURCES = hello.c version.c getopt.c getopt1.c getopt.h system.h hello_LDADD = @INTLLIBS@ @ALLOCA@ localedir = $(datadir)/locale INCLUDES = -I../intl -DLOCALEDIR=\"$(localedir)\"