前回、MSYSのPOSIX互換レイヤをバイナリインストールして利用する方法を取り上げました。
- MSYSのPOSIX互換レイヤと引数
http://7shi.hateblo.jp/entry/2012/05/05/220750
今回はソースからビルドする方法です。互換レイヤを利用するだけならビルドは不要ですが、ソースを調べたり改造したりするなら必要です。
まずソースをダウンロードします。
アーカイブの中身は単一ディレクトリにまとめられていません。ファイルが散らからないようにディレクトリを作ってから展開します。
$ mkdir msys-build $ cd msys-build $ tar xvf msysCORE-1.0.17-1-msys-1.0.17-src.tar.lzma
展開して出てきた msysCORE.RELEASE_NOTES.txt にビルド方法が説明されています。そのドキュメントに必要な情報はすべて書いてありますが、作業過程と補足的な情報を書きます。
ドキュメントにはビルドに必要なパッケージが列挙されていますが、以下のコマンドで不足分を自動的にインストールできます。
$ ./msysrlsbld -e build_dep
※ スクリプト名は MSYS ReLeaSe BuiLD に由来するようです。
ドキュメントにはオプション付きでMSYSを起動するよう指示があります。オプションで何が変わるのかを追ってみると、バッチファイルで環境変数MSYSTEM=MSYSをセットして、/etc/profileでパスの順序を入れ替えます。それを手動で行えば以下の通りです。
$ export MSYSTEM=MSYS $ export PATH=/bin:$PATH
パスをいじっているのはgccを切り替えるためです。MSYSのPOSIX互換レイヤはgcc-3.4.4でのビルドが推奨されています。先ほどビルドに必要なコマンドを追加インストールしましたが、その中にはgcc-3.4.4(/bin/gcc)が含まれます。通常のMSYSでは/mingw/bin/gccを使用しますが、パスの優先順位を入れ替えることで/bin/gccを使用するよう切り替えるわけです。
試しにgccを切り替えずに4.6.2のままビルドを行ったところ、source/newlib/libc/ctype/ctype_.cのコンパイルでalias属性がエラーになりました。対処方法は不明のため、素直に3.4.4を使った方が良さそうです。
後はビルドスクリプトを実行するだけです。環境変数MSYSTEM=MSYSでなければ(デフォルトはMINGW32)、ビルドがスキップされエラーになります。
$ ./msysrlsbld
ビルドが完了すれば自動的に配布物がアーカイブされます。
msysCORE-(略)-bin.tar.lzma | ランタイム |
msysCORE-(略)-dbg.tar.lzma | デバッグ情報付きランタイム |
msysCORE-(略)-dev.tar.lzma | ヘッダ・CRT・インポートライブラリなど |
msysCORE-(略)-doc.tar.lzma | ドキュメント |
msysCORE-(略)-ext.tar.lzma | コマンドなど |
msysCORE-(略)-lic.tar.lzma | ライセンスのドキュメント |
以上で互換レイヤのビルドは完了です。コマンドはMSYS特有のものしか含まれないため、shやlsなどのユーザーランドは別途ビルドすることになります。