ソースコードはアーカイブか CVS 経由のいずれかで入手できる。
どこからか入手したらハードディスク上に展開する。
この文書では ~/src/ruby
にソースを置くとして話す。
~/src % tar zxf ruby-XXX.tar.gz
CVS を使う場合は以下のようにして入手できる。
~/src % cvs -d :pserver:anonymous@cvs.ruby-lang.org:/src login Password: anonymous ~/src % cvs -d :pserver:anonymous@cvs.ruby-lang.org:/src co ruby
CVSはオプションの順番にうるさいので、うっかり-D
オプションを
"ruby"
の後にしたりしてはすること。co
の直後に-D
を書かないとだめだ。
また-d
はcvs
自体に与えるオプションなのでco
より前に書かなければ
いけない。
CVSからチェックアウトした場合はまずconfigure
を生成する必要がある。
ソースツリーに入り、autoconf
と打てばいい。ただしruby 1.7
では
autoconf 2.50
以上が必須なので注意しよう。
~/src % cd ruby ~/src/ruby % autoconf ~/src/ruby % ls -F configure configure*
UNIX 系 OS での話が一番単純なので、まずはこれを例として話す。 Windows に関係ある話もあるのでいちおう一通り見ておいてほしい。 また Cygwin はほとんど UNIX 環境と同じなのでこちらの話が通用する。
コンパイルの原則的な手順は以下の通り。
~/src/ruby % ./configure ~/src/ruby % make ~/src/ruby % su ~/src/ruby # make install
configure
でシステムの環境を検出し、make
で実際に構築、
make install
でインストール。オプションとして、
install
の前に make test
をやってもいい。
以下、さらにconfigure
について細かい注意をする。
EWS4800
など一部のプラットホームでは
configure
に必ず --enable-shared
を付けないといけない。
~/src/ruby % ./configure --enable-shared
--enable-shared
というのはruby
コマンドのほとんどをダイナミック
リンクライブラリ(libruby.so
)として外に出すオプションだ。
必須でないプラットホームでも --enable-shared
を付けておくと
eruby
や mod_ruby
を作るときにダイナミックリンクになるので
便利である (でなければスタティックリンクになる)。
ruby
はデフォルトでは /usr/local
以下にインストールされるが、
必ずしも /usr
にインストールする権限があるとは限らない。
また /usr
以下にインストールしたいかもしれない。そういう場合は
--prefix
オプションを使うとよい。
% ./configure --prefix=/home/aamine
上記のようにすると /home/aamine/bin
に ruby
が入り、
/home/aamine/lib/ruby
以下にライブラリが入る。
もっと細かく、種別ごとに制御することもできる。
例えば --bindir
はバイナリのインストール先を直に指定できる。
% ./configure --bindir=/home/aamine/tmp/bin
ならば /home/aamine/tmp/bin
に ruby
がインストールされる。
ライブラリはデフォルト通り /usr/local/lib/ruby
にインストールされる。
このようなオプションには他に
--libdir --mandir
などがある。他にもいろいろあるが、
ruby
ではあまり役に立たないので省略する。全部見たければ
% ./configure --help
で見ることができる。
筆者はこんな仕事 (Rubyの本の執筆) をしている関係で、
ruby
全バージョンをインストールしている。そうすると
各バージョンの ruby
を別々の名前でインストールしないと
ならない。自分で手でやってもいいけど、面倒だ。
そういうときは --program-prefix
や --program-suffix
が使える。
% ./configure --program-suffix=-1.7
とすると、ruby
コマンドが ruby-1.7
という名前で
インストールされる。もちろん prefix
なら前に付くわけだ。
configure
を実行するときに各種の環境変数を設定しておくと
コンパイルフラグなどを変えることができる。
例えば CFLAGS なら cc
のコンパイルオプションだし、
CPPFLAGS ならプリプロセッサのフラグ、
LDFLAGS
ならリンカのフラグだ。
試してみよう。
gcc
でデバッグオプションのみにするには次のようにする。
# sh系 ~/src/ruby % CFLAGS=-g ./configure # csh系 ~/src/ruby % set CFLAGS='-g' ~/src/ruby % ./configure
ruby 1.7
以降 (と言うよりも autoconf 2.5x
以降) なら、
以下のように引数で渡すほうがよい。
~/src/ruby % ./configure CFLAGS=-g
これならシェルの違いにも影響されない。
ruby
では最適化のかけすぎは死に直結する。
gcc
なら -O2
まで。
他の cc
では関数のインライン展開をさせないように選ぶ。
また --omit-frame-pointer
も絶対にやってはならない。
最適化をかけすぎるとまずいというのは GC の影響である。
ruby
はマシンスタックの上に置かれた Ruby オブジェクトを
実行時にスキャンしているのだが、最適化しすぎると
オブジェクトの変数 (VALUE
型変数) が省略されてしまうことがある。
そうするとまだ使っているオブジェクトを解放されてしまい、落ちる。
MinGW
は本当に最小限のビルドツールしかないので、
configure
を
走らせるためには何か別のものが必要だ。現在その選択肢は
二つあり、一つが Cygwin でもう一つが MSYS
である。
この節を読むときにはまず Cygwin と MSYS の概略
のページを読んでおいてほしい。
まず Cygwin を使う方法。 以下のように Cygwin のプロンプトから CC を変更してビルドすればよい。
~/src/ruby % ./configure --enable-shared CC='gcc -mno-cygwin' CFLAGS='-pipe -g'
gcc
の -m
はコンフィグ依存のオプションで、
no-cygwin
によって
Cygwin DLL とリンクしないように指定している。
-mno-cygwin
と
-m no-cygwin
は違うので注意。
また MinGW でも --enable-shared
を付けておいたほうがいい。
make
以降は UNIX 系 OS の話とまったく同じである。
またソースツリー以外でコンパイルするときは
~/obj/ruby-mingw % CC='gcc -mno-cygwin' ../../src/ruby/configure --enable-shared
という感じに相対パスで configure
を指定したほうがいい。
ruby
のビルドには ruby
自身 (miniruby)
を使うが、
その ruby
は Cygwin のパスを理解できないからである。
Cygwin のパスと Windows のパスが偶然一致することもあるが、
そうでなければ意味不明のエラーになってしまう。
その点、相対パスなら Cygwin DLL があってもなくても
もう一つは MSYS (Minimum SYStem、MS とは関係ない) を使う方法。 その名の通り最小限しかない。 こちらは MSYS をインストールすればあとはそれを使って 普通にビルドすればよい。なにしろ MinGW のために作って あるのだから、相性に問題があるはずがないのだ。
~/src/ruby % ./configure --enable-shared ~/src/ruby % make ~/src/ruby % make install
この場合もやはり --enable-shared
を付ける。
また MSYS でもやはりパスの変換をやっているので、
ソースディレクトリで作らないと何かとエラーが起こりやすいようだ。
--prefix
などインストール先を付ける場合は、
必ず Windows ネイティブパスを使いドライブから始めるようにする。
ドライブを省略すると MSYS に中途半端に変換されてしまう。
別名 mswin32
版。
Visual C++ でコンパイルする場合はバージョン 5.0
以上が
必要である。SP もできるだけ入れておいたほうがいい。
Cygwin にしても MinGW にしてもパスの変換が入るのでどうしても ややこしいことが起こりがちだ。一方 Visual C++ を使う場合は 最初から最後まで Windows パスなので意外と問題が起きにくい。
まず DOS 窓を開く。そして VC++のコマンドラインツールを 使えるようにするため環境変数を設定するバッチファイルを実行する。
C:\> cd "\Program Files\Microsoft Visual Studio\VC98\bin" C:\Program Files\Microsoft Visual Studio\VC98\bin> vcvars32.bat
ただし Windows NT 系だと Visual C++ をインストールしたときに 環境変数を登録しておけるのでおそらく必要ない。
あとは ruby
のソースツリーにある win32\
に移動して、
configure.bat
と make
を実行すればよい。
C:\> cd C:\src\ruby\win32 C:\src\ruby\win32> configure.bat # configureに相当する C:\src\ruby\win32> nmake C:\src\ruby\win32> nmake DESTDIR="C:\Program Files\ruby" install
これで C:\Program Files\ruby\bin に ruby
がインストールされる。
なお、ruby
のソースコードを CVS からコンパイルするには
autoconf
や sed
や yacc
も
必要である。Visual Studio にそういうものは当然ないので、
CVS からコンパイルしたければ全部用意しなければならない。
(そういうときは Cygwin を入れて結果だけ使うのも一つの手である。
生成した結果だけ使えばいい。)
こうやってインストールした ruby
を使うときは、
もちろん毎回フルパスで指定してもいいが、面倒だ。
ruby
と打つだけで使えるようにするにはパスを
設定しておく必要がある。
9x 系 (95, 98, Me) の場合は
C:\autoexec.bat に ruby
の
インストール先ディレクトリを追加すればいい。
以下具体的に説明する。
まず C:\autoexec.bat をエディタで開き、最後に
SET PATH=%PATH%;C:\ruby\bin
という行を「追加」する
(C:\ruby\bin は ruby
コマンドがある場所に読み換える)。
このとき、絶対に他の行を変更しないこと。
うっかり変更して Windows が起動しなくなっても責任は取れない。
最後に Windows を再起動する。
NT系 (NT, 2000, XP) ならコントロールパネルから追加できる。 NT なら「システム」のメニュー [環境変数] で、 2000 / XP なら「システム」のメニュー [詳細]→[環境変数] で、設定する。
システムの全ユーザに使わせたいなら「システム環境変数」の PATH を設定する (administrator権限が必要)。 自分だけで使いたいなら「ユーザ環境変数」の PATH を設定する。 追加の方法は以下の通り。
PATH
はセミコロン区切りの文字列で、
それぞれがコマンドの入っているパスを指定している。
例えば
C:\windows;C:\windows\system
なら、C:\windows と C:\windows\system にあるコマンドは いきなりコマンド名だけで実行できる。これに C:\ruby\bin などを 追加すれば「ruby」と打つだけで ruby を実行できるわけだ。
以上を理解すればやるべきことは自明だと思う。
変数 PATH
が存在しないならば
C:\ruby\bin
という内容で新しく作る。
すでに変数 PATH
が存在するなら
セミコロンを入れて C:\ruby\bin を追加すればいい。
一つ注意しなければいけないのは、特定ユーザのみに追加する場合、
つまり「ユーザ環境変数」を設定する場合である。この場合すでに
システム全体の PATH
が存在するので、これも先頭に
入れておかなければいけない。この場合は次のように書く。
%PATH%;C:\ruby\bin
%PATH%
は「現在の PATH の値」に展開される。
つまり変数参照である。通常のプログラミング言語では代入・参照で
変数の見ためが変わらないのが普通だが、なぜかシェルだと違うことが多い。
それと、NT 系の場合は即座に変更が反映されるので再起動する必要はない。 ただし起動中のプロセスにまでは伝わらないので、コマンドプロンプトや Cygwin をすでに実行しているならもう一度起動しなおす。
Visual C++ では最初から最適のコンパイルフラグを付けてくれるので あまり変える必要はないと思うが、変えたければ以下のようにする。
C:\src\ruby> nmake OPTFLAGS="-Od"
ちなみにこれはデバッグオプションだ。
ただし Visual C++ を使うときは CFLAGS を直接上書き
してはならない。-DNT
が定義されなくなってしまう。
configure.bat
を別ディレクトリから実行すれば
ソースディレクトリ以外でもコンパイルできる。
C:\obj\ruby-mswin32> C:\src\ruby\win32\configure.bat C:\obj\ruby-mswin32> nmake
以下同じ。
Borland C++ Compiler でのコンパイルは Visual C++ と似ていて、専用ディレクトリに入って行う。
C:\src\ruby> cd bcc32 C:\src\ruby\bcc32> .\configure.bat C:\src\ruby\bcc32> make C:\src\ruby\bcc32> make install
環境変数を設定する場合には make
を
> make OPTFLAGS="-v"
のようにすればいい。
またソースディレクトリ以外でビルドするには、
やはり単に configure.bat
を別のディレクトリから
実行すればいい。
C:\obj\ruby-bcc> ..\..\src\ruby\bcc32\configure.bat
Borland C++ Compiler でコンパイルした場合もやはり
ruby
にパスを通しておく必要がある。
Visual C++ の「パスを通す」の項を参照のこと。
Copyright (c) 2002 Minero Aoki
<aamine@loveruby.net>