Japanese

Rubyのconfigure.in読んでみる(1)

  • このエントリーをはてなブックマークに追加

以前はRubyのメソッド呼び出しについて調べましたが、 ふとRubyのビルドの仕組みが気になったので追っていきたいと思います。

Rubyのビルド Ruby(MRI)のビルドには以下のコマンドを実行しています。

% autoconf #=> configure.inを元にconfigureを作成する % ./configure #=> Makefile.inを元にMakefileを作成する % make #=> Makefileを実行してビルドする

リポジトリにあるのはconfigure.inとMakefile.inの2つで、 configureとMakefileはそれぞれビルドの過程で作成されています。

configure.in 今回は、まずconfigureを作成する過程から追っていきます。

autoconf autoconf自体ほぼ初見ですが…、GNUのツールで公式サイトにドキュメントがあります。 [http://www.gnu.org/software/autoconf/manual/autoconf.html]

AC_(autoconfの略と思われる)のprefixがつくマクロはドキュメントを参照する必要がありそうです。 まずconfigure.inに下記2つは必須らしい。

  • AC_INIT (package, version, [bug-report], [tarname], [url]) * 最初に書く

  • AC_OUTPUT * 最後に書く

configure.in全体の概要 configure.in全体は4.7KStepくらいありますが、 下のような作りになっているらしい

2AC_INIT() 3{

このあたりで初期処理 #=> ①

38{ # environment section #=> ②

735} 736{ # compiler section #=> ③

1020} 1021{ # header and library section #=> ④

3232} 3233{ # runtime section #=> ⑤

4039} 4040{ # build section #=> ⑥

4668AC_OUTPUT 4669} 4670}

以降は最後の結果出力など #=> ⑦

上記のように、ざっくり7つのセクションに分かれていそうです。 次回から順番に見ていきたいと思います。

その他 ところで現在はconfigure.inは曖昧だからconfigure.acが推奨らしい。

Previous versions of Autoconf promoted the name configure.in, which is somewhat ambiguous (the tool needed to process this file is not described by its extension), and introduces a slight confusion with config.h.in and so on (for which ‘.in’ means “to be processed by configure”). Using configure.ac is now preferred.

rubyはconfigure.inのままでいいのかな?