[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dennou-ruby:001791] Re: GTK対応 RubyDCL
- To: dennou-ruby@xxxxxxxxxxx
- Subject: [dennou-ruby:001791] Re: GTK対応 RubyDCL
- From: KOSHIRO Tsuyoshi <koshiro@xxxxxxxxxxxxxx>
- Date: Tue, 13 Jul 2004 16:09:37 +0900
神代です.
CygwinでのGTK対応RubyDCLの話題ですが,
At Wed, 30 Jun 2004 15:57:24 +0900, Seiya Nishizawa wrote:
> > > ソースを眺めながら思い出しました。
> > > gtk対応の場合 ruby-dcl は ruby-gtk に依存します。
> >
> > ありがとうございます.すっきりしました.
> > 一括インストーラでもそのように対処します.
この件は一応解決したはずだったのですが,実際にデモプログラムを動かすと,
$ ruby ximg01.rb
/usr/lib/ruby/site_ruby/1.8/i386-cygwin/numru/dcl_raw.so: dlopen: Win32 error 126 - /usr/lib/ruby/site_ruby/1.8/i386-cygwin/numru/dcl_raw.so (LoadError)
from /usr/lib/ruby/site_ruby/1.8/numru/dcl.rb:2
from ximg01.rb:12:in `require'
from ximg01.rb:12
とエラーになるのにしばらく悩まされていました.
どうも,あらかじめ glib2.so がロードされていないと,Ruby が dcl_raw.so
の dlopen に失敗してしまう,ということのようです.
$ irb
irb(main):001:0> require "numru/dcl"
LoadError: dlopen: Win32 error 126 - /usr/lib/ruby/site_ruby/1.8/i386-cygwin/numru/dcl_raw.so
from /usr/lib/ruby/site_ruby/1.8/i386-cygwin/numru/dcl_raw.so
from /usr/lib/ruby/site_ruby/1.8/numru/dcl.rb:2
from (irb):1:in `require'
from (irb):1
$ irb
irb(main):001:0> require "glib2"
=> true
irb(main):002:0> require "numru/dcl"
=> true
というわけで,Cygwinで GTK対応の場合のみ,dcl.rb の最初で
require "narray"
require "numru/dcl_raw"
となっているところを
require "narray"
require "glib2"
require "numru/dcl_raw"
と一行追加するように,extconf.rb のパッチを作ってみました.
# 前回ご指摘した "- lruby-glib2" の部分はお手元では直していただいた
# ということでしたが,そのライブラリのチェック方法とエラーメッセージ
# も変更したほうがよさそうなので,そこも含めて,ruby-dcl-1.4.0 に対す
# るパッチとなっています >堀之内さま
よろしくお願いします.
それから,以前西澤さんが作ってくれた Cygwinバイナリパッケージは,私が
引き継ぐことになりました.
それについても近々更新したいと思います.
--- ruby-dcl-1.4.0_orig/extconf.rb 2004-03-05 13:46:02.000000000 +0900
+++ ruby-dcl-1.4.0/extconf.rb 2004-07-13 14:41:48.000000000 +0900
@@ -3,7 +3,26 @@
require "mkmf"
require "ftools"
+require "tempfile"
+def insert(path, start_line, data)
+ temp = Tempfile.new("mytemp", File.dirname(path))
+ File.open(path) do |file|
+ start_line.times do
+ if line = file.gets
+ temp.write(line)
+ end
+ end
+ temp.write(data)
+ while line = file.gets
+ temp.write(line)
+ end
+ end
+ mode = File.stat(path).mode
+ File.rename(temp.path, path)
+ File.chmod(mode, path)
+end
+
dir_config('narray',$sitearchdir,$sitearchdir)
if ( ! ( have_header("narray.h") && have_header("narray_config.h") ) ) then
print <<-EOS
@@ -72,9 +91,10 @@
end
if /cygwin|mingw/ =~ RUBY_PLATFORM
- have_library("narray") || raise("ERROR: narray library is not found")
+ have_library("narray") || raise("ERROR: narray import library is not found")
if gtkversion == "2"
- $LOCAL_LIBS += "- lruby-glib2"
+ have_library("ruby-glib2") || raise("ERROR: ruby-glib2 import library is not found")
+ insert("lib/dcl.rb", 1, "require \"glib2\"\n")
end
end