次: , 前: Complete, 上: Examples


3.2 古典的なプログラム

GNU helloは,古 典的単純さと融通性で有名です.このセクションでは,AutomakeをGNU Hello パッケージに使用する方法を示します.以下の例は,GNU Helloの最近のベー タバージョンからのものですが,著作権のコメント全体と同様に,管理者専用 のすべてのコードが取り除かれています.

もちろん,GNU Helloは伝統的な二行より幾分長くなっています.GNU Helloは 国際化されていて,オプション処理をして,そしてマニュアルとテストスイー トもあります.

GNU Helloのconfigure.acは以下のようになっています.注意 して下さい: 例にあるAC_INITAM_INIT_AUTOMAKEの呼出は, 推奨されない構文です.現在の手法は,Public macrosAM_INIT_AUTOMAKEの記述を参照して下さい.

     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])

`AM_'マクロは,Automake(あるいはGettextライブラリ)によって提供さ れています.残りは標準的なAutoconfマクロです.

最上位のMakefile.amは以下のようになっています.

     EXTRA_DIST = BUGS ChangeLog.O
     SUBDIRS = doc intl po src tests

御覧のように,ここでの仕事はすべてサブディレクトリで実際に実行されます.

pointlディレクトリは,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)\"