久しぶりにMinGWでRuby 1.8/1.9のビルドをしてみました

2012-03-04 色々と更新
2012-03-05 Tcl/Tkを追加
2012-04-03 Termcap は Ruby のビルドに必要ないことが判明したので削除

いい加減に1.9系に移行するためにRubyをビルドしてみた。その作業メモ。
(しかし、どの拡張ライブラリがビルドされていないのか簡単に確認する方法はないのだろうか。)

方針

  • ビルド済みバイナリは使わない
  • なるべく最新版を使用する
  • 拡張ライブラリが依存するライブラリは静的リンクする

ビルド環境はMinGW(GCC 4) + MSYS。シェルにはNYAOSを使用した。

変数

LIBS_PATH
拡張ライブラリ用のライブラリをインストールするディレクト
RUBY18_PATH
Ruby 1.8をインストールするディレクト
RUBY19_PATH
Ruby 1.9をインストールするディレクト

OpenSSL

展開に使用するtarはMSYSに入っている物にしなければならない。詳しくはINSTALL.W32を参照。

wget http://www.openssl.org/source/openssl-1.0.0g.tar.gz
tar zxf openssl-1.0.0g.tar.gz
cd openssl-1.0.0g

sh ./config --prefix=%LIBS_PATH% no-shared
make
make test
make install_sw

libiconv

wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
tar zxf libiconv-1.14.tar.gz
cd libiconv-1.14

sh ./configure --prefix=%LIBS_PATH% --enable-static --disable-shared --disable-nls
make
make check
make install

GDBM

GDBM 1.8.3にパッチを当ててビルド。

wget ftp://ftp.gnu.org/gnu/gdbm/gdbm-1.8.3.tar.gz
wget http://sites.google.com/site/wantora/download/gdbm-1.8.3-mingw.patch --content-disposition
tar zxf gdbm-1.8.3.tar.gz
cd gdbm-1.8.3

patch -p1 < ../gdbm-1.8.3-mingw.patch
sh ./configure --prefix=%LIBS_PATH% --enable-static --disable-shared
make
make install
make install-compat

PDCurses

wget http://sourceforge.net/projects/pdcurses/files/pdcurses/3.4/PDCurses-3.4.tar.gz/download
tar zxf PDCurses-3.4.tar.gz
cd PDCurses-3.4/win32

make -f mingwin32.mak
cp ../curses.h %LIBS_PATH%/include
cp pdcurses.a %LIBS_PATH%/lib/libcurses.a

zlib

wget http://prdownloads.sourceforge.net/libpng/zlib-1.2.6.tar.bz2?download
tar jxf zlib-1.2.6.tar.bz2
cd zlib-1.2.6

make -f win32/Makefile.gcc
make -f win32/Makefile.gcc test
make -f win32/Makefile.gcc install INCLUDE_PATH=%LIBS_PATH%/include LIBRARY_PATH=%LIBS_PATH%/lib BINARY_PATH=%LIBS_PATH%/bin

Readline

最新版はうちの環境*1ではなぜか動作がもっさりするので、Index of /win32のソースを使用。

wget http://jarp.does.notwork.org/win32/readline-4.3-2-src.zip
unzip readline-4.3-2-src.zip
cd readline-4.3-2/win32

make DLL=0 CC=gcc
make DLL=0 install prefix=%LIBS_PATH%
mv %LIBS_PATH%/lib/libhistory-static.a %LIBS_PATH%/lib/libhistory.a
mv %LIBS_PATH%/lib/libreadline-static.a %LIBS_PATH%/lib/libreadline.a

LibYAML

wget http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz
tar zxf yaml-0.1.4.tar.gz
cd yaml-0.1.4

sh ./configure --prefix=%LIBS_PATH% --enable-static --disable-shared CFLAGS=-DYAML_DECLARE_STATIC
make
make check
make install

libffi

wget ftp://sourceware.org/pub/libffi/libffi-3.0.10.tar.gz
tar zxf libffi-3.0.10.tar.gz
cd libffi-3.0.10

sh ./configure --prefix=%LIBS_PATH% --enable-static --disable-shared
make
make check
make install

Tcl/Tk

静的リンクだとうまく動かないので動的リンクにしている。

wget http://prdownloads.sourceforge.net/tcl/tcl8.5.11-src.tar.gz
wget http://prdownloads.sourceforge.net/tcl/tk8.5.11-src.tar.gz
tar zxf tcl8.5.11-src.tar.gz
tar zxf tk8.5.11-src.tar.gz
cd tcl8.5.11/win

sh ./configure --prefix=%LIBS_PATH% --enable-shared --enable-threads
make
make test
make install
cd ../../tk8.5.11/win

sh ./configure --prefix=%LIBS_PATH% --enable-shared  --enable-threads
make
make test
make install

Ruby 1.9

wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p125.tar.bz2
tar jxf ruby-1.9.3-p125.tar.bz2
cd ruby-1.9.3-p125

sh ./configure --prefix=%RUBY19_PATH% --enable-shared --with-opt-dir=%LIBS_PATH% --with-libffi-include=%LIBS_PATH%/lib/libffi-3.0.10/include --with-tclConfig-file=%LIBS_PATH%/lib/tclConfig.sh --with-tkConfig-file=%LIBS_PATH%/lib/tkConfig.sh CFLAGS="-DYAML_DECLARE_STATIC -DREADLINE_STATIC"
make
make check 2>&1 | tee make-check.log
make install-all

cd %LIBS_PATH%
cp -r lib/tcl8 lib/tcl8.5 lib/tk8.5 %RUBY19_PATH%/lib
cp bin/tcl85.dll bin/tk85.dll %RUBY19_PATH%/bin

Ruby 1.8

wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p358.tar.bz2
tar jxf ruby-1.8.7-p358.tar.bz2
cd ruby-1.8.7-p358

sh ./configure --prefix=%RUBY18_PATH% --enable-shared --with-winsock2 --with-opt-dir=%LIBS_PATH% --with-tclConfig-file=%LIBS_PATH%/lib/tclConfig.sh --with-tkConfig-file=%LIBS_PATH%/lib/tkConfig.sh CFLAGS="-DREADLINE_STATIC"
make
make check 2>&1 | tee make-check.log
make install-all

cd %LIBS_PATH%
cp -r lib/tcl8 lib/tcl8.5 lib/tk8.5 %RUBY18_PATH%/lib
cp bin/tcl85.dll bin/tk85.dll %RUBY18_PATH%/bin

*1:Windows7 SP1 + NYAOS + ckw