まず、Tcl/Tk をシステムにインストールしてください。このとき、 コンパイルに必要なヘッダやライブラリもインストールするように してください(使用するバイナリパッケージによってはヘッダ等は 開発パッケージとして別にインストールする必要があるかも知れま せん)
注意として、現在の Ruby/Tk では、もはや Tcl/Tk のバージョン 8.0 より以前のものはメンテの対象になっていないことに注意して ください(動くかもしれませんけど)
ruby を build するときの configure のオプションに以下を含め てください(これらの指定はある程度自動検出されますが、Tcl/Tk のバージョンやインストール形態は様々なので、すべてに対応でき ていません)
./configure --with-tcllib=tcl8.3 \ --with-tklib=tk8.3 \ --with-tcl-include=/usr/include/tcl8.3 --with-X11-include=/usr/X11R6/include
--with-tcllib=XXX にはシステムに存在する libtclXXX.so や libtclXXX.a の tclXXX の部分を、
--with-tklib=XXX にはシステムに存在する libtkXXX.so や libtkXXX.a の tkXXX の部分を指定します。XXX の部分にはよく Tcl/Tk のバージョンを示す番号が付加されています。
--with-tcl-include=XXX には、tcl のヘッダファイルのあるパス を指定します。標準の /usr/include 等に置かれている場合には必 要ありません。もし、tk のヘッダファイルがこれとは別の場所に あるなら --with-tk-include=XXX も合わせて指定する必要があり ます。
tk のヘッダは X Window System のヘッダファイルを(たとえ、MS Windows 環境であっても)読もうとします。このヘッダが見つから ない場合は、--with-X11-include=XXX の XXX 部分に X のヘッダ ファイルのあるディレクトリを指定します。 (このため、Cygwin 環境で Ruby/Tk をコンパイルするには、XFree86 もイン ストールする必要があります。ただ、後述する bitWalk の Tcl/Tk パッケージには X のヘッダファイルが含まれているのでこの必要 はありません)
Tcl/Tk が Stub 機能を持つ場合(Tcl/Tk 8.1 以降)上記の代わりに 以下のように指定することを推奨します。
./configure --enable-tcltk_stubs \ --with-tcl-include=/usr/include/tcl8.3 \ --with-tcllib=tclstub83 \ --with-tklib=tkstub83 \ --with-X11-include=/usr/X11R6/include
--enable-tcltk_stubs により、Stub を使うことを明示します。
--with-tcllib=XXX にはシステムに存在する libtclstubXXX.so や libtcstublXXX.a の tclstubXXX の部分を、
--with-tklib=XXX にはシステムに存在する libtkstubXXX.so や libtkstubXXX.a の tkstubXXX の部分を指定します。
後は、いつものように
make make test make install
してください。
cygwin のデフォルトで入っているかもしれない tcl8.0 では Stub が使えず、 また日本語化がなされていません。
これを動作させるには、TCL_LIBRARY 環境変数を適切に設定する必要がありま す。この環境変数は Windows 形式のパスを指定する必要があります
$ export TCL_LIBRARY=`cygpath -w /usr/share/tcl8.0` $ ruby -Ks -rtk -e 'TkButton.new(nil, "text"=>"てすと") { command { puts "てすと" } }.pack' -e Tk.mainloop
以上のことから、Tcl/Tk 8.1 以降(国際化対応されています)のバイナリパッケージを別途 インストールすることを推奨します。
bitWalkの Tcl/Tkを使用する ruby を cygwin 環境で作成するには 以下のようにします。(上で説明してる「Ruby/Tk をソースからインストールするには...」 も参照してください)
(bitWalk の Tcl/Tk パッケージを d:\Tcl にインストールしたとする) $ cd ruby/ext/tcltklib $ ruby extconf.rb --with-{tcl,tk}-dir=/cygdrive/d/tcl \ --enable-tcltk_stubs \ --with-tcllib=tclstub83 \ --with-tklib=tkstub83 (configure 時に上記オプションを追加で指定しても良い) $ PATH=/cygdrive/d/Tcl/bin:$PATH (または) $ export RUBY_TCL_DLL=`cygpath -w /cygdrive/d/Tcl/bin/tcl83.dll` $ export RUBY_TK_DLL=`cygpath -w /cygdrive/d/Tcl/bin/tk83.dll` $ ruby -Ks -rtk -e 'TkButton.new(nil, "text"=>"てすと") { command { puts "てすと" } }.pack' -e Tk.mainloop
Ruby インストールガイドを参考にして下さい。
例えば、以下の組合せの場合
以下のようにすれば動作します
Cygwin 環境の ruby からのみ Tcl を使用する場合(必要なライブラリ、DLLをコピー)
普通に Tcl/Tk も使いたい場合
あるいは、
環境変数 RUBY_TCL_DLL, RUBY_TK_DLL を tcl83.dll, tk83.dll のあるパス に設定する(Windows 形式のパスで設定すること)
Windows から(autoexec.bat に設定するなど)
set RUBY_TCL_DLL=c:\Program Files\Tcl\bin\tcl83.dll set RUBY_TK_DLL=c:\Program Files\Tcl\bin\tk83.dll
Cygwin から(~/.bashrc に設定するなど)
export RUBY_TCL_DLL=`cygpath -w /cygdrive/c/Program\ Files/Tcl/bin/tcl83.dll` export RUBY_TK_DLL=`cygpath -w /cygdrive/c/Program\ Files/Tcl/bin/tk83.dll`