オープンソースソフトウェアでよく見かける configure スクリプトを自作してみる
これまで、configure スクリプトを使うことは何度もあったが、作ったことはなかった。
なんでも使うのと作るのは大違い、というわけで、試しにつくってみた。
環境は以下の通り。
まずは、Makefile を作りたいソースコード *.c があるディレクトリで autoscan を実行する。
$ autoscan
autom4te: configure.ac: no such file or directory
autoscan: /usr/bin/autom4te failed with exit status: 1
これで configure.scan が生成されている。(autoscan.log もできているが、ここでは無視)
生成されたファイルの中身。
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.AC_PREREQ(2.59)
AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
AC_CONFIG_SRCDIR([test.c])
AC_CONFIG_HEADER([config.h])# Checks for programs.
AC_PROG_CC# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_OUTPUT
生成された configure.scan を修正する。
- AC_INIT の括弧内にソースコード名を記述
- AC_PROG_INSTALL を追記
- AC_OUTPUT の後ろに (Makefile) を記入
- 修正したファイルを configure.in として保存する
できたファイルはこれ。
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.AC_PREREQ(2.59)
AC_INIT(test.c)
AC_CONFIG_SRCDIR([test.c])
AC_CONFIG_HEADER([config.h])# Checks for programs.
AC_PROG_CC# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_PROG_INSTALL
AC_OUTPUT(Makefile)
お次は install-sh をコピー。
$ cp /usr/share/automake-1.9/install-sh .
configure.in と install-sh が準備できたところで autoconf を実行すると configure スクリプトが生成される。
(autom4te.cache も生成されているが、ここでは無視)
$ autoconf
configure スクリプトが生成されたが、まだ実行してもエラーになる。 Makefile.in と config.h.in を作っておく必要がある。
まず Makefile.in。
SHELL = /bin/sh
TARGET = test
SRCS = test.c
OBJS = test.o
CC = @CC@
all: $(TARGET)
$(TARGET): $(OBJS)
$(CC) -o $@ $(OBJS)
.c.o:
$(CC) -c -o $@ $
ここで使っている Makefile のサフィックスルールやマクロについては、こちらが参考になった。
Make と Makefile の説明
$@ はターゲットファイル名になる。
$< は最初の依存ファイル名。
そして config.h.in。
#undef HAVE_STDIO_H
これで必要なファイルがそろったので、configure スクリプトを実行すると Makefile と config.h が作成されるようになる。
(stdio.h があるからか、この #undef は書かなくても手元の環境では Makefile を生成できた)
これは簡単な例なので、手作業の労力と大して変わらず、configure の有り難みが感じられないけど、Makefile が自動生成されている流れはとりあえずつかめた。
この記事の内容は 日経Linux 2009.2 を参考にして試してみた。
本格的に使っていくなら、.am も勉強した方がよさそうだ。
Autotools - Wikipedia