今回MinGWをすべて自分でビルドするにあたってのコンセプト
目標その1. ビルドに必要な開発補助ツール・ライブラリなども可能な限りソースからコンパイルする。現在の達成状況はこちら→mingw32編msys編
目標その2. 可能な限り最新版ソースを使用する。(svn、git利用も含む)
目標その3. UNIXからの移植がしやすいmingw-w64を使用。ただし32bitマシン上のネイティブ環境ですべてコンパイルすること。クロスコンパイル(Cygwinを含む)は無しの方向。

前回までのあらすじ。

新たにビルドした/new-msys に存在しているのは、msysCOREbashcoreutils だけという状態ですが、msys-1.0.dll に依存しないwgettar (bsdtar)は/mingw 以下にインストールするというローカルルールで構築していますので、make のソースのダウンロード・解凍が/new-msys のmsys.bat からでも可能になりました。
wget http://ftp.gnu.org/gnu/make/make-3.82.tar.gz
tar xvf make-3.82.tar.gz
そこで早速
cd make-3.82
./configure
とやってみますと、
./configure: line 539: sed: command not found
どうもsed とかいうヤツが必要らしいぞ!

ということで、もうしばらくこの茶番劇にお付き合いください・・・。


3-11. sed のインストール
(リスト番号108)

url : http://www.gnu.org/software/sed/
release : 4.2.2
git : git://git.savannah.gnu.org/sed.git

Stream EDitor の略で、テキストファイルの一括置換を行うソフトです。
mingw-gcc でもコンパイルが通りますが、生成されるバイナリは「ファイルの絶対パス(例:/C/baka/aho/manuke)をコマンドオプションといちいち勘違いして、毎回大量の警告が出る」という、相当うざいものでした。(これはmsys-1.0.dll の働きを知るという意味では良い教材です。)強引な解決法もあるのですが、おとなしくmsys-gcc を使うことにします。
git 版の最新ソースを使用するには、gnulib が必要になります。以下の2通りの方法があります。

(1) git のsubmodule 機能を使う
(cygwin)
cd sed
git submodule init
git submodule update

(2) gnulib を別途ダウンロードして、--gnuib-srcdir を指定する
(cygwin)
git clone git://git.savannah.gnu.org/gnulib.git gnulib

(msys)
cd sed
./bootstrap --gnulib-srcdir=../gnulib

gnulib はGNU の基本ライブラリセットで、MinGW でいうところの/bin/*.dll、/include/*.h、/lib/*.a といった通常のインストールは出来ず、常にソースコードのみ配布という変わったライブラリです。そのため、git で最新ソースツリーを使うことが推奨されています。
一見(1) の方法がスマートですが、gnulib が100MB 程度のボリュームがあるので、今後もgnulib を使うことを考慮して、(2) の方法を取ります。

./bootstrap --gnulib-srcdir=../gnulib
./configure --prefix=/sed
make
make install-strip

msys-dvlpr の環境は汚したくないというポリシーからインストール先は、/sed という仮のディレクトリを指定。make install が完了したら、新MSYS 環境(/new-msys)へまるごとコピーします。


※※※※※※※※※※※※※


sed も無事インストールできたので、問題のmake のconfigure スクリプトを動かしてみると、、、
./configure: line 1529: grep: command not found
今度はgrep が必要らしい。


3-12. grepのインストール (リスト番号39)

url : http://www.gnu.org/software/grep/
release : 2.14
git : git://git.savannah.gnu.org/grep.git

grep は、正規表現を用いて一致する行検索を行います。
git 版ソースはmingw-gcc、msys-gcc どちらもエラーが出るので、2.14 のソースをmingw-gcc でビルド。すると、いたって簡単に成功しました。

./configure --prefix=/mingw
make
make install-strip

mingw-gcc を使用したので、prefix は/mingw 。/mingw/bin は、当然/new-msysからもPATHが通っています。


※※※※※※※※※※※※※


grep も無事インストールできたので、懸案ののmake のconfigure スクリプトを動かしてみると、、、
./config.status: line 1135: awk: command not found
今度はawk(gawk) が必要らしい。


3-13. gawk のインストール (リスト番号29)

url : http://www.gnu.org/software/gawk/
release : 4.0.2
git : git://git.savannah.gnu.org/gawk.git

gawk もテキスト処理ツールで、上記sed、grep では不可能なこと、例えば○行目の△文字目を取り出す、などといったことができます。
git 版もリリース版もWindows のことは一切考慮されていないらしくコンパイルできませんでした。そこで、最終手段のmingw.org の改造済みソースで挑みます。気づかれた方もいると思いますが、今回のスクラッチビルドに挑戦するにあたっての優先順位は、

(1) git/svn ソース を mingw-gcc でビルド
(2) git/svn ソース を msys-gcc (msys-dvlpr) でビルド
(3) release ソース を mingw-gcc でビルド
(4) release ソース を msys-gcc (msys-dvlpr) でビルド
(5) mingw.org ソース を msys-gcc (msys-dvlpr) でビルド

となっています。(今決めました)

msys-dvlpr 環境のMSYSを起動して、
export MSYSTEM=MSYS
export PATH=/bin:$PATH

mkdir gawk
cd gawk

mingw-get source msys-gawk
./msys-build-gawk gawk-3.1.7.tar.xz
出来上がったgawk-*-bin.tar.lzma を解凍して、/new-msysにコピーして完了。


※※※※※※※※※※※※※


gawk も無事インストールできたので、念願ののmake のconfigure スクリプトを動かしてみると、、、

見事Makefile が生成されました!!
テンションも上がってきたので一気にmake まで突っ走ります!!
sh: make: command not found
・・・・・・・・・・・・・。あれ?


目標達成率 = 84 / 115 (残り 31) mingw32編msys編
今回 +3