Jan 31, 2009

Ruby 1.9.1-p0 : VC++ 2008 Express Edition でビルド


「Ruby 1.9.1をリリースしました。」、ということで作業メモ。
  • OS は Windows Vista SP1 (Home Premium) です。
  • "D:\Programs\Microsoft Visual Studio 9.0" に VC++ 2008 をインストールしてあります。
  • ところどころで cygwin 由来のツール (wget、tar, gzip, bzip2) を使っています。
まずスタートメニューから「Visual C++ 9.0 Express Edition > Visual Studio Tools > Visual Studio 2008 コマンド プロンプト」起動。作業場へ移動します。
D:\Programs\Microsoft Visual Studio 9.0\VC> d:
D:\> cd tmp
D:\tmp>
ソースをいただいてきたら展開しておきます。
D:\tmp> wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.1-p0.tar.bz2
...
D:\tmp> tar xvjf ruby-1.9.1-p0.tar.bz2
...
インストール先を指定して configure.bat を実行します。ここでは d:/ruby19 とします。
D:\tmp> cd ruby-1.9.1-p0
D:\tmp\ruby-1.9.1-p0> win32\configure.bat --prefix=d:/ruby19
Creating Makefile
confargs.c
type `D:\Programs\Microsoft Visual Studio 9.0\VC\BIN\nmake.exe to make ruby.
D:\tmp\ruby-1.9.1-p0>
ビルドとインストールを実行します。
※ 'compiling tk' の部分で時間がかかります。Tkのヘッダーファイルが無いかどうか、様々なインクルードパスを試しているようです。
D:\tmp\ruby-1.9.1-p0> nmake
...
D:\tmp\ruby-1.9.1-p0> nmake install
...
D:\tmp\ruby-1.9.1-p0> d:\ruby19\bin\ruby -v
ruby 1.9.1p0 (2009-01-30 revision 21907) [i386-mswin32_90]
ここまでの作業では RubyGems の実行に必要となる zlib.so がビルドされていません。以下で zlib.so のビルドとインストールを行います。 今 Ruby をビルドしたディレクトリはそのままにしておいて、適当な作業場へ移動します。
D:\tmp\ruby-1.9.1-p0>cd ..
zlib のソースコードをいただいて、ビルドを実行します。
D:\tmp> wget http://www.zlib.net/zlib-1.2.3.tar.gz
D:\tmp> tar xvzf zlib-1.2.3.tar.gz
D:\tmp> cd zlib-1.2.3
D:\tmp\zlib-1.2.3> nmake -f win32\Makefile.msc
D:\tmp\zlib-1.2.3> mt -manifest zlib1.dll.manifest -outputresource:zlib1.dll;2
Makefile.msc にはマニフェストを埋め込む記述が無かったので、手動で埋め込んでいることに注意してください。
できあがった zlib1.dll を ruby.exe が配置されている場所にコピーしておきます。
D:\tmp\zlib-1.2.3> copy zlib1.dll d:\ruby19\bin
zlib.so のビルドを行います。Ruby をビルドしたディレクトリにある ext\zlib へ移動します。
D:\tmp\zlib-1.2.3> cd ..\ruby-1.9.1-p0\ext\zlib
D:\tmp\ruby-1.9.1-p0\ext\zlib>
extconf.rb を実行して、Makefile を作り直します。先に zlib をビルドしたディレクトリを渡して、インクルードファイル zlib.h やリンクに必要なスタティックライブラリの場所を伝えます。
D:\tmp\ruby-1.9.1-p0\ext\zlib> d:\ruby19\bin\ruby.exe extconf.rb --with-zlib-include=d:\tmp\zlib-1.2.3 --with-zlib-lib=d:\tmp\zlib-1.2.3
checking for deflateReset() in z.lib... no
checking for deflateReset() in libz.lib... no
checking for deflateReset() in zlib1.lib... no
checking for deflateReset() in zlib.lib... yes
checking for zlib.h... yes
checking for kind of operating system... Win32
creating Makefile

D:\tmp\ruby-1.9.1-p0\ext\zlib>
ビルドとインストールを実行します。
D:\tmp\ruby-1.9.1-p0\ext\zlib>nmake
...
D:\tmp\ruby-1.9.1-p0\ext\zlib>nmake install

Microsoft(R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation.  All rights reserved.

install -c -p -m 0755 zlib.so d:\ruby19\lib\ruby\site_ruby\1.9.1\i386-msvcr90

D:\tmp\ruby-1.9.1-p0\ext\zlib>
お疲れ様でした。