[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:001793] Re: GTK対応 RubyDCL



神代です.

At Tue, 13 Jul 2004 16:33:49 +0900, Takeshi Horinouchi wrote:

> 話を戻しちゃうのかもしれませんが、確認です。
> 
> もともと、dcl の gtk 対応版は、gtk がインストールされてなくても
> 動く(そして、gtk がインストールされている場合だけgtk 対応する)
> という仕様になってたはずですが、一連の変更はその点大丈夫ですか?
> (DCL の C 版を二系統維持しなくてすむように、gtk があれば対応と
> いスタンスです。)
> この話はもっと前に書くべきでしたが、忘れてました。すみません。

この点は,大丈夫です.
RubyDCL の extconf.rb は,GTKそのものではなくて,DCL(C)がGTK対応か非対
応かを判定しています.

今回確認したのは,GTK非対応の場合は関係なくて,GTK対応である場合に

GTK <-> DCL(C) <-> RubyDCL

ではなくて

GTK <-> DCL(C) <-> (RubyDCL <-> Ruby-GTK)

であるということでした.
そうであるならば,Cygwinでは拡張ライブラリから拡張ライブラリを呼ぶとき
にちょっと一手間必要なので,そこを考慮するのが今回の変更です.
(もともと考慮されていたがtypoがあった部分 + 今日メールした新たな修正点)

ruby-dcl-1.4.0 の extconf.rb で GTKの有無でそれぞれどうしているかというと,

元のソースは

init.c.default
init.c.gtk
grph1_zgpack.c.org

が用意されていて,

GTKがない場合:
File.copy("init.c.default","init.c")

GTKがある場合:
File.copy("grph1_zgpack.c.org","grph1_zgpack.c")
File.copy("init.c.gtk","init.c")
$LOCAL_LIBS += "-lruby-glib2"  ← Cygwinの場合のみ

としています.
先ほどのメールは,これに加えて,dcl.rb を変更するものだったのですが,
おっしゃるとおりソースを直接書き換えるのはよくないですね.すみません.

> なお、cygwin だかどうかが実行時に簡単に判別できるなら、dcl.rb 中で
> 
>   require "glib2" if cygwin
>                      ^^^^^^ここは適宜書き換え
> 
> 的なことをする手もあります。

Cygwin かつ DCL(C)がGTK対応の場合なので,

if /cygwin/ =~ RUBY_PLATFORM and `cdclconfig --gtkversion`.chop == "2"
  require "glib2"
end

となりますでしょうか.

あるいは,init.c のように dcl.rb.default と dcl.rb.gtk を用意しておい
て同じようなことをやるとか.

# ちなみに,ruby-dcl-1.4.0.tar.gz を展開すると,ruby-dcl-1.4.0/lib/ に
# dcl.rb.tmp, dcl.rb_saved というのもあるのですが,これは不要ですか?