MinGWでRubyをビルドした時のメモ

Ruby 1.9を試してみようと思い立ち、ついでにRubyのビルドも試してみようとしたら結構時間がかかってしまったので、後々のために手順を書いておく。あちこちに現在のバージョンが入ったファイル名が出てくるが適当に読みかえてほしい。

ビルド環境の構築

まずはMinGWとMSYSをインストールする。

MinGW

MinGW - Minimalist GNU for Windows - Browse Files at SourceForge.netから Automated MinGW Installer のMinGW-5.1.6.exeをダウンロードしてインストール。

途中で何をインストールするか選択する画面になるので、そこで MinGW Make を選択*1

MSYS

次に、MinGW - Minimalist GNU for Windows - Browse Files at SourceForge.netから MSYS Base System のMSYS-1.0.11.exeをダウンロードしてインストール。

インストール後「Do you wish to continue with the post install?」と聞かれるので y と入力。「Do you have MinGW installed?」にも y と入力。その後「Where is your MinGW installation?」と聞かれるのでMinGWをインストールしたパスを入力。

さらに MSYS Supplementary Tools のmsysDTK-1.0.1.exeもインストールする。がRubyのビルドには不要かもしれない。

その後、MinGWとMSYSにパスを通す。

ライブラリ

これでとりあえずビルドが出来るようになったが、拡張ライブラリの一部がビルド出来ない。それを解決するためにライブラリを調達する。

Porting Libraries to Win32から下記のファイルをダウンロード。

  • gdbm-1.8.3-1-mingw32.zip
  • pdcurses-2.60-1-mingw32.zip
  • readline-4.3-2-mingw32.zip
  • zlib-1.1.4-1-mingw32.zip

IconvとOpenSSLについてはLibIconv for WindowsOpenSSL for Windowsから Binaries と Developer files をダウンロード。

Tcl/Tkについては今回はビルドしない。

それぞれを展開してinclude, libをMinGWディレクトリにコピー。bin/*.dllはパスの通った所へコピー。

Rubyのビルド

Ruby 1.8

いよいよRubyのビルドに入る。まずはRuby 1.8をビルドする。

ダウンロードからRuby 1.8ソースコードをダウンロードして、コマンドプロンプトでダウンロードしたディレクトリに移動後、tarで展開する。

$ tar xjf ruby-1.8.7-p249.tar.bz2
$ cd ruby-1.8.7-p249

次に./configureを実行する*2。--prefixにはインストール先のディレクトリを指定する。

$ sh ./configure --enable-shared --with-winsock2 --prefix=D:/ruby

そしてmake*3

$ mingw32-make
$ mingw32-make test

あとはmingw32-make install-allすればRubyのインストールが完了する。RDocをインストールしたくない場合はmingw32-make install-nodoc

Ruby 1.9

次にRuby 1.9をビルドする。

ダウンロードからRuby 1.9ソースコードをダウンロードして、同じように展開した後、./configureを実行する。今回は1.8系と共存するために--program-suffixを使っている。

$ sh ./configure --enable-shared --prefix=D:/ruby --program-suffix=19

後はRuby 1.8と同じ。

*1:私はg++ compilerも選択した。

*2:./configureのオプションの意味はrubyビルドガイドプログラミング言語 Ruby リファレンスマニュアルを参照。

*3:MSYSのmakeではなくmingw32-makeを使っているのはMSYSのmakeでRubyのビルドが失敗したことがあるから。MSYSのmakeでも大丈夫かもしれない。追記: MSYSのmakeでも大丈夫です。