GNU hello <ftp://ftp.gnu.org/pub/gnu/hello/hello-1.3.tar.gz>
известен
своей классической простотой и многогранностью. В этом разделе показывается,
как Automake
может быть использован с пакетом GNU Hello
. Примеры,
приведенные ниже, взяты из последней бета-версии GNU Hello
, но убран
код, предназначенный только для разработчика пакета, а также сообщения
об авторских правах.
Конечно же, GNU Hello
использует больше возможностей, чем традиционная
двухстроковая программа: GNU Hello
работает с разными языками, выполняет
обработку ключей командной строки, имеет документацию и набор тестов.
Вот файл `configure.in'
из пакета GNU Hello
:
## Обработайте этот файл autoconf для получения
## скрипта configure.
AC_INIT(src/hello.c)
AM_INIT_Automake(hello, 1.3.11)
AM_CONFIG_HEADER(config.h)
## Установка доступных языков.
ALL_LINGUAS="de fr es ko nl no pl pt sl sv"
## Проверка наличия программ.
AC_PROG_CC
AC_ISC_POSIX
## Проверка библиотек.
## Проверка заголовочных файлов.
AC_STDC_HEADERS
AC_HAVE_HEADERS(string.h fcntl.h sys/file.h sys/param.h)
## Проверка библиотечных функций.
AC_FUNC_ALLOCA
## Проверка st_blksize в структуре stat
AC_ST_BLKSIZE
## макрос интернационализации
AM_GNU_GETTEXT
AC_OUTPUT([Makefile doc/Makefile intl/Makefile po/Makefile.in \
src/Makefile tests/Makefile tests/hello],
[chmod +x tests/hello])
Макросы `AM'
предоставляются Automake
(или библиотекой Gettext);
остальные макросы является макросами Autoconf
.
Файл `Makefile.am'
в корневом каталоге выглядит следующим образом:
EXTRA_DIST = BUGS ChangeLog.O
SUBDIRS = doc intl po src tests
Как видите, вся работа выполняется в подкаталогах. Каталоги `po'
и
`intl'
автоматически создаются программой gettextize
.
В файле `doc/Makefile.am'
мы видим строки:
info_TEXINFOS = hello.texi
hello_TEXINFOS = gpl.texi
Этого достаточно для сборки, установки и распространения руководства
GNU Hello
.
Вот содержимое файла `tests/Makefile.am'
:
TESTS = hello
EXTRA_DIST = hello.in testdata
Скрипт `hello'
создается configure
, и это единственная возможность для
тестирования. При выполнении make check
этот тест будет запущен.
В заключение приведем содержимое `src/Makefile.am'
, где и выполняется
вся настоящая работа:
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)"