conundrum /様
		志村 弘之

Windows への RDTool へのインストールにはちょっと問題があるようです。
長くなりますが、このあいだ僕がインストールしたときのメモを後ろにつけます (RD文書!)
setup.rb のバージョンと、Windows での unlink の挙動に起因するもののようです。
# 僕の時にと微妙にエラーが違うのはちょっと心配。

まとめると次のようになると思います。

(1) setup.rb 差し替え
http://www.loveruby.net/ja/prog/setup.html
(2) setup config からやり直し
(3) 次の三つのファイルを手でコピー
* dot.rd2rc
* rdblockparser.ry
* rdinlineparser.ry
(Rubyインストール先)lib\ruby\site_ruby\1.8\rd にコピー


In message "[ruby-list:41161] Re: RD と rdoc  に関する newbie  な質問", <BAY109-F215088B19C47FBEBDD9E82E1950 / phx.gbl>, 
conundrum / wrote...
 >>|setup.rb:496:in `initialize': Permission denied - rdswap.rb 
 >(Errno::EACCES)
 >>
 >>|何がよくないのか、これをごらんになってピンとこられましたら、
 >>|情報をいただけませんでしょうか。
 >>
 >>インストールにはroot権限が必要なのではないでしょうか。
 >
 >環境の説明を書くのを忘れていました。
 >MSWin32版 - 1.8.2 、Cygwin版 - 1.8.3 です。
 >両方において administrator 権限のあるアカウントで作業しているので、
 >readme にかかれていた 「必要であれば su root 」は満たしていると
 >思っていたんですけど、まずいでしょうかね。

---------------------------------------+---------+---------+以上 2005/9/20

= RDTool インストール不調
2005/4/9 rdtool-0.6.16 ActiveScriptRuby_1.8.1.0

ちょっと(久しぶりに)RD形式文書が使いたくて、RDToolを入れてみようとしたが、setupでエラー
* rdtool-0.6.16
* ActiveScriptRUby_1.8.1.0

== adjusting shebang: rdswap.rb でエラー
setup.rb setup でエラーになる
  C:\add\ruby\rdtool\rdtool-0.6.16>setup.rb setup
  ---> bin
  adjusting shebang: rdswap.rb
  move_file rdswap.rb.tmp, rdswap.rb
   rdswap.rb.tmp:true, rdswap.rb:true
  
  C:/add/ruby/rdtool/RDTOOL~1.16/setup.rb:494:in `unlink': Permission denied - rdswap.rb 
(Errno::EACCES)
        from C:/add/ruby/rdtool/RDTOOL~1.16/setup.rb:494:in `move_file'
        from C:/add/ruby/rdtool/RDTOOL~1.16/setup.rb:1147:in `adjust_shebang'
        from C:/add/ruby/rdtool/RDTOOL~1.16/setup.rb:1138:in `open'
        from C:/add/ruby/rdtool/RDTOOL~1.16/setup.rb:1138:in `adjust_shebang'
        from C:/add/ruby/rdtool/RDTOOL~1.16/setup.rb:1130:in `setup_dir_bin'
        from C:/add/ruby/rdtool/RDTOOL~1.16/setup.rb:1129:in `each'
        from C:/add/ruby/rdtool/RDTOOL~1.16/setup.rb:1129:in `setup_dir_bin'
        from C:/add/ruby/rdtool/RDTOOL~1.16/setup.rb:1323:in `__send__'
         ... 8 levels...
        from C:/add/ruby/rdtool/RDTOOL~1.16/setup.rb:712:in `__send__'
        from C:/add/ruby/rdtool/RDTOOL~1.16/setup.rb:712:in `invoke'
        from C:/add/ruby/rdtool/RDTOOL~1.16/setup.rb:676:in `invoke'
        from C:/add/ruby/rdtool/RDTOOL~1.16/setup.rb:1354
  
  C:\add\ruby\rdtool\rdtool-0.6.16>
途中
  move_file rdswap.rb.tmp, rdswap.rb
   rdswap.rb.tmp:true, rdswap.rb:true
はデバッグ用に自分で同梱 setup.rb の move_fileメソッドに埋め込んだ puts 文
別に見ると、この時点では rdswap.rb.tmp, rdswap.rb 両方ある。
この move_fileメソッドで unlink rdswap.rb エラーになり、
呼び出してる adjust_shebangメソッドのrescueで rdswap.rb.tmpは unlink される。

rescure節での rdswap.rb.tmp の unlink はしてるけど、
こっちは `unlink': Permission denied - rdswap.rb (Errno::EACCES) になる。
途中の両方のファイルが存在する時点で、エクスプローラ-プロパティで
ファイル属性(セキュリティ、詳細)を見ても双方に違いは見えない。

ちなみに二つのファイルの違いは、最初の #!行の内容、unix-ruby系 -> Windows-ruby系。

== 手動/setup.rb更新?
ruby-1.8 で File.unlink の Windowsでの挙動が変わったとか?

半手動でファイルを置き換えてくとかも考えたが、setup.rb自体ちょっと古めなので
そっちも見てみる。

新しめの setup.rb との該当場所の比較
* move_fileメソッド
  * 変わりなし
* adjust_shebangメソッド
  * やってることは変わりないようだが、メソッドの呼び出しの構造とかは結構変わってる。
    ファイル権限とかは特に触れてない(もともとそうだった)
=== setup.rb 差し替え
差し替えて setup.rb setup してみる。
: setup.rb.org
  同梱(上記デバッグ用の改変)の改名
: setup.rb
  setup-3.2.4 より (Illusrubyでいつも使ってるやつ)

setup config をやり直す必要はあったが、その後は問題なく進んだ。
setup setup, setup install も大丈夫でした。

== とは、言え
C:\Program Files\ruby-1.8\bin に入った、rd2 ファイルを rd2.rb に改名。
そうすると、コマンドプロンプトで rd2.rb とタイプしての実行が可能になる。
  C:/PROGRA~1/ruby-1.8/bin/rd2.rb:79:in `load': No such file to load -- rd/dot.rd2rc (LoadError)
       from C:/PROGRA~1/ruby-1.8/bin/rd2.rb:79
今度はロードエラー。そんなのは確かにきてない。

パッケージの方をみると、libディレクトリには入ってる。
新しい setup.rb が .rbファイル以外を落としなんでしょう。
中はテキスト(ruby)ファイル。

それ系が他にも二つ。
* dot.rd2rc
* rdblockparser.ry
* rdinlineparser.ry

3つのファイルを手で C:\Program Files\ruby-1.8\lib\ruby\site_ruby\1.8\rd にコピー

動きました。
== 動いた
動いた

= rd2html-extインストール不調
2005/4/10 こちらもインストールに失敗する、
* rd2html-ext-0.1.4

== setup.rb config : 警告
  C:\add\ruby\rdtool\rd2html-ext-0.1.4>setup.rb config
  C:/add/ruby/rdtool/RD2HTM~1.4/setup.rb:643: warning: parenthesize argument(s) for future version
  setup.rb: entering config phase...
  setup.rb: config done.
config自体には成功するが、警告。643行目は下記、確かにこれはつらい。
    to = isdir(File.expand_path @config['so-dir'] + '/' + dest)

== setup.rb setup : エラー
  C:\add\ruby\rdtool\rd2html-ext-0.1.4>setup.rb setup
  C:/add/ruby/rdtool/RD2HTM~1.4/setup.rb:643: warning: parenthesize argument(s) for future version
  setup.rb: entering setup phase...
  setup failed
  couldn't find HOME environment -- expanding `~/.rd2rc'
  try "ruby setup.rb --help" for usage
同じ警告と、そして HOME だって。

C:\add\ruby\rdtool\rd2html-ext-0.1.4\setup ディレクトリ内の 
rd.rb のところで起きてるエラーです。
  class InstallerHook_rd < InstallerHook
    def pre_setup
      if File::exist?( dot = File::expand_path( "~/.rd2rc" ) )
        open( dot, "a" ) do |outf|
          outf.puts %q[require 'rd/head-filter']
        end
      end
    end
  end
フックファイルのようだけど、今のsetup.rbとはフックの定義が違うので、
単にsetup.rbを差し替えれば済むというもので無い様だ。
setup-3.2.4 でのフックの説明は下記。
  一般には、ディレクトリに入った直後に pre-TASK.rb を、ディレクトリを出る直前に post-TASK.rb を実行し
ます。

大体、"~/.rd2rc" ファイルって何?
: rd2html-ext.rd より
  :注意!
    ~/.rd2rcのない人は事前にrd/dot.rd2rcをコピーしてからインストールすること。
    それを忘れたときにはあわてずに
      $ ruby setup.rb setup
    を起動すること。

== 手動インストール
基本的にはファイルを入れるだけなので、もう良いから手でインストールする。

C:\add\ruby\rdtool\rd2html-ext-0.1.4\lib\rd 内の3ファイル、
head-filter.rb,rd2html-ext-lib.rb, rd2html-ext-opt.rb を、
C:\Program Files\ruby-1.8\lib\ruby\site_ruby\1.8\rd へ。

また、フックの動作のように、rd/dot.rd2rc には「require 'rd/head-filter'」という行を追加。
まあ、本来は大本の rd/dot.rd2rc ではなくて、各自の .rd2rc を使うのが筋なんだろうけど
Windows的にはこんなものでしょう。

= Web
dot.rd2rc で検索してみたが、同様の事例がいろいろ報告されている。

志村弘之  mailto: shimurahiroyuki / obun.co.jp