Autotools
Autotoolsとは、主にUNIX系OSにおいてソフトウェアパッケージ開発を行うための、ツール及びフレームワークの一種である。このツールを使用することにより、多種多様なUNIX互換環境にパッケージを対応させることが容易になる。 Autotoolsは主に autoconf/automake/libtools の3つから成り立っている。
目次
パッケージ利用者側から視たAutotools
Autotoolsを用いて作成されたパッケージは容易に導入が可能である。典型的な場合、インストールまでの全工程が自動化されており、ソースコードを展開した後、以下のコマンドを入力するだけで全てが完了する。
./configure && make && make install
多くのUNIX用オープンソースソフトウェアで、この方式が採用されている。
configure
利用者の環境はさまざまであるがほとんどの場合、必要な設定はパッケージに同梱のプログラムconfigureを実行するだけで終了する。configureは環境を検査しソースコードの修正を行う。
configure(実はシェルスクリプトである)及び付属のスクリプト・Makefileなどは標準的なUNIXコマンドだけを使用しており、パッケージの利用者は、パッケージそのものの構築・運用に必要なソフトウェアを除いて、Autotoolsの為に特別なソフトウェアを導入する必要はない(Windows系OSではUNIXコマンドが標準で含まれていない為、別途Services for UNIXやCygwinなどのUNIX互換環境のインストールが必要である)。
また、自動的な環境検査が好ましくなかったり特別な設定が必要な場合、環境変数またはコマンド引数でconfigureの動作を調整できる。代表的なオプションを以下に説明する。
- --prefix=dir
- インストール先を変更する。--prefix=/opt/hugaとすると、実行ファイルは/opt/huga/bin,ライブラリは/opt/huga/libというふうに変更される。bin,libなどを個別に変更することも出来る。デフォルトは/usr/localである。OSベンダーなどが提供するバイナリパッケージでは、--prefix=/usrや--prefix=/opt/hugaなどの設定で構築されている場合が多い。root権限のないユーザや試しに利用したい場合は、--prefix=$HOME/hugaなどとすれば、他のユーザに影響を与えることを防止できる。
- --with-hoge
- 別のパッケージhogeを利用することを指定する。--with-hoge=dirでhogeのインストール先を指定できる場合もある。--with-hoge=no又は--without-hogeとすると逆に使用しないことを指定する。
- 環境変数 CC
- 環境変数CCを設定すると、その値がCコンパイラのコマンド名として使用される。設定しない場合はccまたは適切なOS標準のコンパイラに設定されるが、明示的に設定することで標準と異なるコンパイラを使用できる。
これ以外にも多くのオプションがあり、少ないパッケージでも10以上、多いパッケージでは数十から100以上の設定項目がある。利用者の設定に矛盾があったり、環境の機能に不足があれば診断情報を出力する。また、クロスコンパイル対応や、構築用の作業ディレクトリをソースコードと異なるディレクトリに設定する機能がある。
autoconf
autoconfは上で説明したconfigureを生成するためのプログラムである。
特徴
autoconf は、David Mackenzie がフリーソフトウェア財団での仕事で使うために、1991年の夏から開発を開始した。その後、様々な人に改良を加えられ、オープンソースのコミュニティでは最もよく使われるツールの1つとなった。
autoconf は Perl で使われる Metaconfig に似ている。かつて(X11R6.9 まで) X Window System で使われていた imake にも密接に関連するが、設計思想が異なる。
autoconf は、移植性の評価をバージョンではなく機能ベースで行う。例えば、SunOS 4 の C コンパイラは ISO C をサポートしていない。しかし、ユーザは ISO C 互換のコンパイラをインストールすることもできる。バージョンのみからでは、ISO C コンパイラの存在は検出できないが、機能ベースの手法ではユーザがインストールした ISO C コンパイラを発見できる。他にも、次のような利点がある。
- パッケージ開発後に生まれた新たな(未知の)システム上でも、うまく機能する。
- システムアドミニストレータがマシンをカスタマイズしても、それにうまく対応可能である。
- バージョンやパッチなどを詳細に把握しておく必要がない。
機能
M4言語のマクロとシェルスクリプトの断片で記述された入力ファイルconfigure.ac(古いバージョンではconfigure.in)を、autoconfがM4を用いて置換しconfigureを得る。(M4の言語仕様については項目m4 (プログラミング言語)を参照) 最終出力configureはBourne Shell用のシェルスクリプトで、数百行から数千行の長さがある。
以下に、簡単なconfigure.acの例を示す。
AC_INIT(hello, 1.9, address) # 必須設定 AC_CONFIG_SRCDIR([hello.c]) # このパッケージではhogeを使用可能である configureに--with-hogeが追加される。 #(実際には、この後に利用者が--with-hoge=yesとした場合の動作定義を記述する必要がある) AC_ARG_WITH(hoge, [Use hoge]) AC_PROG_CC # Cコンパイラの設定 configureが環境変数CCを使用する AC_OUTPUT([Makefile]) # Makefile.inを雛形にしてMakefileを生成
出力のconfigureは非常に長いので掲載しない。この場合、一般的なオプションはサポートされる。利用者の要求に応じてhogeを利用するがどうかを決定する。また、Cコンパイラを探し実行方法を確認し、その結果得られたコマンド名・必要オプションなどをMakefileに出力する。
automake
GNU Makefile標準に準拠したMakefileを簡単に作成できる。Makefile.amと呼ばれるファイルに、プログラムとソースコードの関係などを記述すると、Makefile.inを出力する。configureがMakefile.inに環境固有の設定を追加することで、構築用のMakefileとなる。
実行例
HelloWorldプログラムで例を示す
#Makefile.am #実行バイナリファイルの名前はhello bin_PROGRAMS = hello #helloのソースコードはhello.c,hello.h hello_SOURCES = hello.c hello.h
出力のMakefile.inは非常に長いので掲載しないが、期待した内容が得られる。 すなわち、configureを実行することでMakefileが生成される。このMakefileを用いてmakeコマンドを使用すると、hello.cをCコンパイラでコンパイルし、次いで標準ライブラリとリンクし、helloの実行形式が得られる。make installでは、helloはあるべき場所(ほとんどの場合は/usr/local/bin)にインストールされることになる。
関連項目
参考文献
『GNU Autoconf/Automake/Libtool』 Gary V. Vaughan, Ben Elliston, Tom Tromey, Ian Lance Taylor著 でびあんぐる監訳 ISBN 4-274-06411-5
外部リンク
- GNU Autoconf, Automake and Libtool (英語)
- GNU Autoconf home page
- GNU Autoconf macro archive
- The Goat Book homepage (aka the Autobook)
- Learning the GNU development tools @sourceforge
- gtkmm で知られる Murray Cumming が Autotool を解説したページ:*one *two
- Autotoolset home page
- チュートリアル:
- "Learning Autoconf and Automake" by Eleftherios Gkioulekas
- "Using Autoconf for fun and profit" by Axel Liljencrantz
- "非常に基本的な automake 用の雛型を用意しました" by Shimaki Matsubara
- "Autotools Tutorial" by Alexandre Duret-Lutz