Global standard programming
with GNU Autotools
ウノウ株式会社
尾藤 正人
背景
UNIX(Like)は数が多い
● 歴史も長い
● 非互換性の問題
●
GNU Autotools の目的
高い互換性
● 簡単にパッケージ化
●
高い互換性の実現方法
●
●
●
●
●
テストによって非互換性の検出
OS、バージョンによる区別は原則
しない
基本ツール(sh, make)の非互換性に
は自動対応
どのOSでも使用可能な基本ツール
のみを使用
ラッパープログラムを使ってコマン
ドやオプションの差異を吸収
GNU Autotools とは?
autoconf
● automake
● libtool
● 互いに独立
●
autoconf
configure を生成
● GNU m4
● configure.ac(ルールフ
ァイル)
●
autoconf - configure
●
●
●
●
●
shスクリプト
関数、typedef、ライブラリ等の
テスト
config.hを出力
*.in(Makefile.in) -> *(Makefile)
[email protected]@/${foo}/g
autoconf - configure.ac
AC_INIT([foo],[0.0.1],[[email protected]])
AM_INIT_AUTOMAKE(foo, 0.0.1)
AC_CONFIG_SRCDIR([config.h.in])
AC_CONFIG_HEADERS([config.h])
AC_PROG_CC
AC_HEADER_STDC
AC_CHECK_HEADERS([unistd.h])
AC_TYPE_SIZE_T
AC_FUNC_MALLOC
AC_CHECK_FUNCS([strdup])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
autoconf - autoscan
ソースコードを再帰的
に自動検査
● configure.scanを生成
● configure.scanは
configure.acの雛形
●
autoconf - aclocal
configure.acを読み込む
● AM_で始まるm4マクロ
(automake用)を取得
● aclocal.m4に書き出す
●
autoconf - autoheader
configure.acを読み込む
● 記述に従ってconfig.h.in
を生成
●
automake
Makefile.inを生成
● Makefile.am(ルールファ
イル)
●
automake - Makefile.am
bin_PROGRAMS = foo
foo_SOURCES = foo.c foo.h
lib_LTLIBRARIES = libbar.la
libbar_la_SOURCES = bar.c bar.h
automake - 便利なMakefile
●
●
●
●
●
インストール先ディレクトリを簡単
に変更できる
make dist 一発でtarballを作成
インクルードパスは自動で追加(デ
ィレクトリを変更しても深くなって
も大丈夫)
make distclean 一発で初期化
configure.ac,Makefile.amが変わっ
た場合は自動で更新してくれる
libtool
shスクリプト
● ライブラリ生成のコマンド、
オプションはツール、環境に
よってまちまち
● libtoolを使う事で統一的なイ
ンターフェースでライブラリ
の生成が可能
●
libtool - libtoolize
autoconf,automakeと組
み合わせて使う時に必
要なファイルをローカ
ルにコピーしてくれる
● aclocal,libtoolize,aclocal
の順に実行
●
まとめ
GNU Autotoolsを使うと
互換性の高いプログラ
ムが簡単に書ける
● パッケージ化もラクチ
ン
● phpにはあまり関係ない
●
ダウンロード

プレゼン資料(PowerPoint) - unoh.github.com by unoh