パスワードを忘れた? アカウント作成
6765552 journal
GNU is Not Unix

t-nissieの日記: 【電脳】Autotoolsについてのメモ Ver. 2.0

日記 by t-nissie

同種のものは巷に溢れているが、とりあえず自分用のメモ。
HTML版はここ。今後はこれを更新。
Ver. 1.0はここ
誤りの指摘やコメントなどいただけたらうれしいです。

= Autotoolsについてのメモ
このメモはGNU Autotoolsのautoconfとautomakeとを使って
フリーソフトウェアの配布用パッケージを作る方法を解説している。
FortranのプロジェクトにAutotoolsを使う場合の注意点も書いてある。
 
== はじめに
たいていのGNUのフリーソフトウェアは次のようにtar ballを展開して、
./configure && make && make installとすることで簡単にソースからインストールすることができる。
  tar xf feram-X.YY.ZZ.tar.xz
  $ cd feram-X.YY.ZZ
  $ mkdir Linux   # Use build directory.
  $ cd Linux
  $ ../configure --help
  $ ../configure
  $ make
  $ make check
  $ sudo make install
AutotoolsはそんなGNU流のフリーソフトウェアパッケージの
構築を半自動化するためのツールである。最終目的はmake dist
で foo-1.2.tar.gzなどという[パッケージ名]-[version].tar.gz
形式のパッケージが自動生成できるようになること。
 
== 必要なもの
GNUの2つのパッケージautoconfとautomakeとを開発用のマシン
にインストールしておく必要がある。また、GNU makeやbashそして
GNU M4も最新のものを用意したほうがよい。
  * autoconf http://www.gnu.org/software/autoconf/
  * automake http://www.gnu.org/software/automake/
  * make     http://www.gnu.org/software/make/
  * bash     http://www.gnu.org/software/bash/
  * M4       http://www.gnu.org/software/m4/
たいていのLinuxディストリビューションにはこれらのツールの
パッケージがある。たとえばDebianやUbuntuなら
  $ sudo apt-get install autoconf automake libtool autoconf-doc libtool-doc
でインストールできる。
 
== コマンドとファイル
Autotools (autoconf and automake) では Fig:process に示すとおり
いくつかのコマンドとファイルとによって処理が進む。
実際はautoreconfが自動でやってくれる。
以下に関連すコマンドとファイルを列挙した。
\Fig:process doc/figures/autoconf-automake-process.jpg
Autotools(autoconf と automake)による作業の流れ。
実際はautoreconfが自動でやってくれる。
(この図はクリエイティブコモンズライセンスの下に
http://commons.wikimedia.org/wiki/File:Autoconf-automake-process.svg
から配布されているもの。)
/Fig:process
 
=== 関連コマンド
  autoscan       configure.acの雛形configure.scanを生成。
  autoreconf     定番。-vオプションを付けて実行すれば何をしているのかがわかる。
                以下のコマンド自動的に再実行してくれる。
  autoconf       configure.ac を元に configure を生成。
  automake       Makefile.amからMakefile.inを生成。
                オプション -a を付けて実行すると必要なファイルを
                /usr/local/share/automake-1.11/ からリンクしてくれる。
  autoheader     config.h.in を作ってくれる。
  aclocal        aclocal.m4を作ってくれる。
 
=== 関連するファイルとディレクトリ
  configure.ac   configureの雛型。自分で書く。
  Makefile.am    Makefileの雛型のMakefile.inの雛型。自分で書く。
                ライセンスをGPL以外にしたい場合はMakefile.amに
                AUTOMAKE_OPTIONS = foreign と書いておく。
                書いておかないとGLPが採用されてCOPYING等をコピーしてくれる。
  config/gnu/    ファイルがごちゃごちゃ出来てイヤな場合はMakefile.amに
                AC_CONFIG_AUX_DIR(config/gnu)と指定するとmissing等がそこに置かれる。
  config.guess   Makefile.amにAC_CANONICAL_TARGETなどと書くとautomake -aが
                用意してくれるOSやCPUの自動判別をしてくれるスクリプト。
  config.h.in    config.hの雛型。autoheaderによりMakefile.amやconfigure.acから自動的に作られる。
  config.h       configure.acにAC_CONFIG_HEADERS([config.h])と指定。
                ないとコンパイルオプションが長くややこしくなるので、使ったほうがよい。
  config.log     configure の実行時のログ。問題が起きたら読む。
  config.status  configure を実行すると出来るスクリプト。foo.in から foo を作るのは実はこいつ。
  missing        automake -a が用意してくれる謎のスクリプト。
 
== 使用方法
=== メモ
  * ある程度開発が進んで、ソースとMakefileができあがってからAutotoolsを使いはじめるとよい。
  * autoconfとautomakeのマニュアル http://www.gnu.org/software/autoconf/manual/autoconf.html
   http://www.gnu.org/software/automake/manual/automake.html やinofoを参照せよ。
  * よくできたパッケージを参考にしてconfigure.ac, Makefile.am, scr/Makefile.amを見よう見まねで書く。
  * automake -aやautoreconfで生成されるファイルはSubversionなどのリポジトリに登録しないほうがよい。
=== Fortranについてのメモ
  * AutotoolsはFortranのプロジェクトにも使える。
  * AC_LANG(Fortran), AC_PROG_FC(gfortran ifort)などを使う。
  * 関係する変数はFC, FCFLAGS, FCLIBS, CPPFLAGSなど。
  * Fortranでもcpp(Cプリプロセッサ)を使うと便利。
   その場合、ソースのファイルの名拡張子は.Fを使う。.F90はGNU makeのデフォルトでないので使わない。
  * AC_FC_FREEFORM()で自由形式のオプションがわかる。
=== 手順
configure.ac, Makefile.am, scr/Makefile.amを書いて、
  $ autoreconf -v
  $ automake --add-missing   # 初回にautoreconfで実効を要求されたとき
  $ autoreconf -v            # 念のためもう一度
  $ ./configure
  $ make                     # コンパイルできることを確認
  $ make distclean           # Makefileなどをきれいさっぱり消す
  $ ./configure
  $ make dist                # 配布用パッケージの作成
=== make checkでテストの自動化
Makefile.amに
  TESTS=foo.sh bar.sh
と書いておけば
  $ make check
でfoo.shとbar.shとがテストとして実行される。
ソフトウェアのテストを自動化できる。
foo.shとbar.shとはカレントディレクトリになければsrcdirの中も探されるので、
build directoryの中でもテストができる。
ただし、foo.shとbar.shとは自動的にパッケージに入れてくれるわけではないので、
Makefile.amの中のEXTRA_DISTに次のように加えておく必要がある。
  EXTRA_DIST = README \
              foo.sh \
              bar.sh
=== automakeのオプション
automakeのオプションはconfigure.acの中にAM_INIT_AUTOMAKEで指定する。例えば
  AM_INIT_AUTOMAKE([1.11.1 no-dist-gzip dist-xz])
では、automakeのバージョン1.11.1以上を使用することを強制し、
パッケージをtar.gzでなくtar.xzで作るように指定している。
 
== Autotoolsの使用方法として参考になるパッケージ
=== LHa for Unix
シンプル。
http://www2m.biglobe.ne.jp/~dolphin/lha/lha-unix.htm
=== ntp
大規模。libtoolも使われている。
http://support.ntp.org/bin/view/Main/WebHome
=== feram
小規模。Fortranで書かれている。
http://loto.sourceforge.net/feram/
  * configure.ac    https://sourceforge.net/p/loto/code/HEAD/tree/feram/trunk/configure.ac
  * Makefile.am     https://sourceforge.net/p/loto/code/HEAD/tree/feram/trunk/Makefile.am
  * src/Makefile.am https://sourceforge.net/p/loto/code/HEAD/tree/feram/trunk/src/Makefile.am
 
== まとめ
autoconfとautomakeとの使い方を説明した。
他に共有ライブラリを操るための libtool http://www.gnu.org/software/libtool/ もある。
これらGNU Autotoolsを活用すれば、簡単に配布用のフリーソフトウェアパッケージを作ることができる。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

犯人はmoriwaka -- Anonymous Coward

読み込み中...