[exerb-dev:398] Re: exerb-2.6.7/doc/Makefile について

Zurück zum Archiv-Index

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*****>





exerb-developer メーリングリストの案内
Zurück zum Archiv-Index