From: "Kita." Date: 2003-12-28T10:59:29+09:00 Subject: [ruby-list:39009] (DOSISH?) ext/* インストール不具合 Kitaです。 ruby 1.8.1 のMinGW+MSYS(MS-Windows環境)によるビルドの インストール(make install)で不具合を確認しました。 ext/ 以下のライブラリが正常にインストールされませんでした。 (意図しないディレクトリにインストールされた) 現象詳細: % ./configure --eneble-shared --prefix=C:/Local/Ruby % make % make install とビルドして C:/Local/Ruby 以下にインストールされることを期待しましたが ext/ 以下のライブラリは意図しない場所へインストール(コピー)されました。 (具体的には、/Local/Ruby 以下にコピーされた) 原因調査: ext/ 以下の各ライブラリは各Makefileのinstallターゲットで インストールされますがそのMakefileは以下のようになっていました。 --- ここから ext/nkf/Makefile (抜粋) DESTDIR = C: prefix = $(DESTDIR)/Local/Ruby exec_prefix = $(prefix) sitedir = $(prefix)/lib/ruby/site_ruby rubylibdir = $(libdir)/ruby/$(ruby_version) --- ここまで DESTDIR にドライブレターが設定されています。 このDISTDIRを元にインストール先のディレクトリ名を生成しているようです。 とことが、インストールは ext/extmk.rb から make を起動しますが このときの起動引数が、make install で DESTDIR を指定しない場合、 make --unix DESTDIR="" install となっているので、Makefile内の DESTDIRつまりドライブレターを上書き してしまいインストール先が C:/Local/Ruby ではなく /Local/Ruby と なってしまっているようです。 この為、インストール先のドライブレターが省略された形でインストールが 実行されたようです。 ( MinGW+MSYS では、ドライブレターが省略された場合、MSYSの  インストールディレクトリを基準とするようです。  このため ext/ 以下のライブラリがうまくインストールされませんでした ) ドライブレターが省略された時の挙動は環境によって違うでしょう。 (cygwin+mingw, MSYS+MinGW, ... ) ドライブレターの問題なのでMinGW+MSYSに限らないと思います。 対策:  対策として ext/extmk.rb を修正してみました。  make install で DESTDIRが指定されなかった時は、make実行時にも  DESTDIRを指定しないようにするものです。 --- ruby/ext/extmk.rb Wed Dec 3 11:36:48 2003 +++ ruby-1.8.1/ext/extmk.rb Sun Dec 28 10:01:06 2003 @@ -149,7 +149,7 @@ end $continue = $mflags.set?(?k) - $mflags |= ["DESTDIR=#{$destdir}"] + $mflags |= ["DESTDIR=#{$destdir}"] if ($destdir.size > 0 || RUBY_PLATFORM !~ /mingw/) end parse_args() # DESTDIRの省略は他のプラットフォームでは悪影響あり? 逃げ道: % ./configure --eneble-shared --prefix="" % make % make DESTDIR=C:/Local/Ruby install とすれば無修正でも正常にインストールすることがができました。 ただ、bin/irb などの先頭行 #! ... ruby のrubyのフルパスが  make DESTDIR=C:/Local/Ruby install  で指定したディレクトリにならないという不満がありますが... (tcsh Win32版を使用しているので irb.bat などは使わないので) 以上、よろしくお願いします。 -------------------------------- Kita. E-mail tko-k@jcom.home.ne.jp --------------------------------