[ruby-list:41627] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb

From: 天野 竜太郎 <wn9r-amn@...>
Date: 2005-12-01 11:26:55 UTC
List: ruby-list #41627
天野竜太郎と申します。
詳しくないのですが、わかる範囲で。
現在のMacOSX10.4以降では、最初からTcl/Tk8.4.7がイン 
ストールされており、デフォルトのRuby-1.8.2からX11を 
立ち上げずにAqua状態でruby-tkが使えます 
(TclTkAquaをインストールしないで使えるという意味です)。
下記のような状況です。


$ ls -l /usr/lib/tk*
lrwxr-xr-x   1 root  wheel    69 11 14 17:11 /usr/lib/tkConfig.sh@ - 
 > ../../System/Library/Frameworks/Tk.framework/Versions/8.4/tkConfig.sh
-rwxr--r--   1 root  wheel  2350  3 21  2005 /usr/lib/tkimgConfig.sh*

$ ls -l /usr/lib/libtk*
lrwxr-xr-x   1 root  wheel  14 11 14 17:10 /usr/lib/libtk.dylib@ ->  
libtk8.4.dylib
lrwxr-xr-x   1 root  wheel  60 11 14 17:10 /usr/lib/libtk8.4.dylib@ - 
 > ../../System/Library/Frameworks/Tk.framework/Versions/8.4/Tk
lrwxr-xr-x   1 root  wheel  72 11 14 20:53 /usr/lib/libtkstub8.4.a@ - 
 > ../../System/Library/Frameworks/Tk.framework/Versions/8.4/ 
libtkstub8.4.a

$ ls -l /usr/include/tk*
lrwxr-xr-x   1 root  wheel  70 11 14 20:53 /usr/include/tk.h@ - 
 > ../../System/Library/Frameworks/Tk.framework/Versions/8.4/Headers/ 
tk.h
lrwxr-xr-x   1 root  wheel  75 11 14 20:53 /usr/include/tkDecls.h@ - 
 > ../../System/Library/Frameworks/Tk.framework/Versions/8.4/Headers/ 
tkDecls.h
lrwxr-xr-x   1 root  wheel  82 11 14 20:53 /usr/include/ 
tkIntXlibDecls.h@ -> ../../System/Library/Frameworks/Tk.framework/ 
Versions/8.4/Headers/tkIntXlibDecls.h
lrwxr-xr-x   1 root  wheel  76 11 14 20:53 /usr/include/tkMacOSX.h@ - 
 > ../../System/Library/Frameworks/Tk.framework/Versions/8.4/Headers/ 
tkMacOSX.h
lrwxr-xr-x   1 root  wheel  79 11 14 20:53 /usr/include/ 
tkPlatDecls.h@ -> ../../System/Library/Frameworks/Tk.framework/ 
Versions/8.4/Headers/tkPlatDecls.h

$ ls -l /usr/include/libtk*
ls: /usr/include/libtk*: No such file or directory

/System/Library/Frameworks 以下に
Tcl.frameworkとTk.frameworkがあります。

また、新しいRubyをインストールする際でも普通にインストール 
してRuby-Tkが使えます。
僕のところではruby-1.8.3を以下の手順でインストールしました 
が、X11を使わずにRuby-Tkが使えています。

./configure --enable-pthread --enable-shared
make
sudo make install
--enabled-sharedはなくても同じかもしれません。
この状態で、Terminalを立ち上げ
$ irb
irb(main):001:0> require "tk"
=> true
irb(main):002:0> Tk.mainloop
として出てくるウィンドウから「About Tcl Tk...」を選択すると
Tcl Tk 8.4.7
と出てきます。
ですから、最初からインストールされている8.4.7からバージョ 
ンアップしないのなら
--enable-tcltk-framework --enable-macosx-aqua
はいらないのだと思います。

次に緊急用に作ってある小さなパーティションに開発環境をインストー 
ルして試してみました。
環境
Mac OS 10.4.3 XCode2.2(gcc 4.01)
メインのパーティションと同じです。

TclTkAquaBI-8.4.10 インストール
readline-5.0 インストール
ruby-1.8.4-preview2
patchをあてる。
./configure --enable-pthread --enable-tcltk-framework --enable-macosx- 
aqua
make
sudo make install

これで、irbからTk.mainloopして出てくるウィンドウでは、
Tcl Tk 8.4.10となります。
ruby-1.8.4/ext/tk/sample/demos-jp/widget
を動かしてみましたが、動作がおかしいのは、
ラベル、ボタン、チェックボタン、ラジオボタンの
5.3状態チェックボタン
8.3状態ラジオボタン
上の二つは、RuntimeError: unknown option "-tristatevalue"  
となります

5.3状態チェックボタン
------------------------------------------------------------------------ 
-----------
RuntimeError: unknown option "-tristatevalue"
---< backtrace of Ruby side >-----
/usr/local/lib/ruby/1.8/tk.rb:1674:in `_invoke_without_enc'
/usr/local/lib/ruby/1.8/tk.rb:1674:in `_ip_invoke_core'
/usr/local/lib/ruby/1.8/tk.rb:1710:in `_tk_call_core'
/usr/local/lib/ruby/1.8/tk.rb:1738:in `tk_call_without_enc'
/usr/local/lib/ruby/1.8/tk.rb:4029:in `create_self'
/usr/local/lib/ruby/1.8/tk.rb:4012:in `initialize'
widget:617:in `_null_binding'
widget:556:in `_null_binding'
widget:556:in `_null_binding'
widget:568:in `invoke'
widget:219
/usr/local/lib/ruby/1.8/tk/event.rb:419:in  
`install_bind_for_event_class'
/usr/local/lib/ruby/1.8/tk.rb:1187:in `cb_eval'
/usr/local/lib/ruby/1.8/tk.rb:1138:in `call'
/usr/local/lib/ruby/1.8/tk.rb:1304:in `callback'
/usr/local/lib/ruby/1.8/tk.rb:1303:in `callback'
/usr/local/lib/ruby/1.8/tk.rb:1334:in `mainloop'
/usr/local/lib/ruby/1.8/tk.rb:1537:in `mainloop'
widget:888
---< backtrace of Tk side >-------
     invoked from within
"rb_out c00007 297 205"
     (command bound to event)
------------------------------------------------------------------------ 
--------

8.3状態ラジオボタン
------------------------------------------------------------------------ 
---------
RuntimeError: unknown option "-tristatevalue"
---< backtrace of Ruby side >-----
/usr/local/lib/ruby/1.8/tk.rb:2252:in `__invoke'
/usr/local/lib/ruby/1.8/tk.rb:2252:in `_invoke'
/usr/local/lib/ruby/1.8/tk.rb:1676:in `_ip_invoke_core'
/usr/local/lib/ruby/1.8/tk.rb:1710:in `_tk_call_core'
/usr/local/lib/ruby/1.8/tk.rb:1734:in `tk_call'
/usr/local/lib/ruby/1.8/tk.rb:3040:in `configure'
/usr/local/lib/ruby/1.8/tk.rb:3874:in `method_missing'
widget:641:in `_null_binding'
widget:636:in `_null_binding'
widget:635:in `_null_binding'
widget:556:in `_null_binding'
widget:556:in `_null_binding'
widget:568:in `invoke'
widget:219
/usr/local/lib/ruby/1.8/tk/event.rb:419:in  
`install_bind_for_event_class'
/usr/local/lib/ruby/1.8/tk.rb:1187:in `cb_eval'
/usr/local/lib/ruby/1.8/tk.rb:1138:in `call'
/usr/local/lib/ruby/1.8/tk.rb:1304:in `callback'
/usr/local/lib/ruby/1.8/tk.rb:1303:in `callback'
/usr/local/lib/ruby/1.8/tk.rb:1334:in `mainloop'
/usr/local/lib/ruby/1.8/tk.rb:1537:in `mainloop'
widget:888
---< backtrace of Tk side >-------
     invoked from within
"rb_out c00007 285 279"
     (command bound to event)
------------------------------------------------------------------------ 
----------

メニュー
2、メニューとカスケードを含んだウィンドウ(Tk8.x専用)
メニューが出てこない。
3、メニューとカスケードを含んだウィンドウ(機能に対応したバー 
ジョンのTkが必要)
メニューが出てこない。

ダイアログウィンドウ
1、メッセージボックス
いくつかボタンを押していると操作不能になり強制終了しかなくなる。
2、ファイル選択ダイアログ
機能していないと思います。

上記の不具合ですが、これはAquaTclTkをインストールしていな 
いデフォルトの10.4.3の方でも同じ不具合がでています。

また、上記のパーティションでいったんインストールした 
1.8.4pr2を削除して
./configure --enable-pthread
以下でインストールして、
$ irb
irb(main):001:0> require "tk"
=> true
irb(main):002:0> Tk.mainloop
として出てくるウィンドウから「About Tcl Tk...」を選択すると
Tcl Tk 8.4.7となります。
AquaTcl/Tkは、/usr/local/lib,/usr/local/includeにシンボ 
リックリンクは、張りませんので、デフォルトの8.4.7とリンク 
しています。

ruby-1.8.4/ext/tk/sample/demos-jp/widgetの動作に関しては、かなり 
荒いです。
他にも変な動作するものがあるかもしれません。

とりあえず報告まで。

Ryutaro Amano
wn9r-amn@asahi-net.or.jp



In This Thread