[#38919] Ruby 1.8.1 preview4 — matz@... (Yukihiro Matsumoto)

Hi,

44 messages 2003/12/22
[#38921] Re: Ruby 1.8.1 preview4 — "NAKAMURA, Hiroshi" <nakahiro@...> 2003/12/22

Hi, all,

[ruby-list:39009] (DOSISH?) ext/* インストール不具合

From: "Kita." <tko-k@...>
Date: 2003-12-28 01:59:29 UTC
List: ruby-list #39009
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/ 以下のライブラリは意図しない場所へインストール(コピー)されました。
(具体的には、<MSYS install dir>/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
--------------------------------

In This Thread

Prev Next