Takeshi Komiya
katsu****@dd*****
2003年 11月 1日 (土) 22:59:08 JST
小宮です。 >>> 3. 使用する ruby core の自動選択 >>> >>> 既に少し前に ml で話されていましたが、 >>> ruby core を使用している ruby の version にあわせて >>> 自動的に切り替えてもらいたいなぁ、と感じました。 >> >>これは採用されていて、最新版では既にそうなっています。 >>そもそも最新版はRuby 1.8.1を使ったコアしかありませんが。;-) > > 送った直後に 3.0 preview が出ていたのですね(^^; > 少し読んでみます。 読んでみました。 bin/exerb で * --corefile option で指定していない * recipe file で指定していない 場合に RUBY_VERSION によって ruby core を切り替えているのですね。 私が考えていたのは 'cui' で示されている ruby core を RUBY_VERSION によって切り替えるというものでした。 せっかく書いたので(^^; post しておきます。 現状のものと比べると、 * lib/exerb/config.rb を書き換える必要がない * ruby version に合った ruby core が存在しない場合、cui/gui が nil になる (version mismatch な ruby core との結合を防げるかも?) * install されている core がすべて列挙される というメリットがあります。 デメリットは * ruby version が変わると、利用する core も変わってしまう (core を固定するには recipe で core version を指定する必要がある) あたりでしょうか。 = begin find_core.rb (same interface with lib/exerb/config.rb) #!/usr/bin/env ruby require 'rbconfig' module Exerb def self.find_core(searchdir) core_collection = {} searchdir.each do |dir| path = File.join(dir, '*.rbx') Dir[path].each do |core| name = File.basename(core) m = /^ruby(\d+)(\S+).rbx$/.match(name) label = sprintf("%d%s", m[1], m[2].sub(/^(c|g)/, '\1ui')) core_collection[label] = core end end # select default ruby-core. default_version = RUBY_VERSION.delete(".") %w(cui gui cuib guib cuirt guirt).each do |type| core = default_version + type core_collection[type] = core_collection[core] end core_collection end private_class_method :find_core TARGET = File.join(Config::CONFIG['rubylibdir'], 'exerb') CORE = find_core([TARGET, '.']) end if $0 == __FILE__ Exerb::CORE.to_a.sort.each{|core| printf("%s => %s\n", *core)} end =end 実行するとこんな感じの結果になります。(exerb + exerb-cc) % ruby1.8 -v ruby 1.8.0 (2003-10-05) [i386-linux] % ruby1.8 ~/work/work/work/searchcores.rb | grep ^cui cui => /usr/lib/ruby/1.8/exerb/ruby180c.rbx cuib => cuirt => % ruby1.6 -v ruby 1.6.8 (2003-07-09) [i386-linux] % ruby1.6 ~/work/work/work/searchcores.rb | grep ^cui cui => /usr/lib/ruby/1.6/exerb/ruby168c.rbx cuib => /usr/lib/ruby/1.6/exerb/ruby168cb.rbx cuirt => /usr/lib/ruby/1.6/exerb/ruby168crt.rbx 参考までに。 では。 --- 小宮 健<mailto:katsu****@ish*****>