こんにちは、なかむら(う)です。
久し振りにerubyをmake installしようとして気付いたのですが、
Makefile中の$(RUBY)が単に$(RUBY_INSTALL_NAME)になっていて、こ
れにはパスが含まれていないため、現在のコンパイル対象となるruby
と同じファイル名で別のパスにtrunkのrubyがインストールされてい
て、そちらがPATH上で優先されている場合、trunkのrubyを使ってフ
ァイルをコピーしようとします。
結果として、trunkにはftoolsがないのでインストールできません。
日本語だと意味不明だと思うので例を示すと、こうなります。
$ which ruby
/usr/local/bin/ruby
$ ruby -v
ruby 1.9.0 (2008-02-24 revision 15591) [i386-netbsdelf]
$ /home/usa/bin/ruby -v
ruby 1.8.6 (2008-02-22 patchlevel 5000) [i386-netbsdelf]
$ /home/usa/bin/ruby configure.rb
...
$ make
...
# make install
:0:in `require': no such file to load -- ftools (LoadError)
...
fileutilsなりunなり使おうぜ、というのが正しい修正なのだと思い
ますが、期待してるのと違うrubyを実行しちゃうというのがそもそ
もまずそうな気がするので、そこを修正するパッチを用意してみま
した。
なお、本当はautoconf.rb(だっけ?)を直すべきなんでしょうが、手
元にないのでconfigure.rbを直接いじってます。
Index: Makefile.in
===================================================================
--- Makefile.in (revision 137)
+++ Makefile.in (working copy)
@@ -28,7 +28,7 @@ CC = @CC@
AR = @AR@
LD = @LD@
RANLIB = @RANLIB@
-RUBY = $(RUBY_INSTALL_NAME)
+RUBY = @RUBY@
CFLAGS = @CFLAGS@ -I. -I$(hdrdir)
LDFLAGS = @LDFLAGS@
Index: configure.rb
===================================================================
--- configure.rb (revision 137)
+++ configure.rb (working copy)
@@ -291,6 +291,11 @@ $CC = CONFIG["CC"]
$AR = CONFIG["AR"]
$LD = "$(CC)"
$RANLIB = CONFIG["RANLIB"]
+if File::ALT_SEPARATOR
+ $RUBY = "$(RUBY_INSTALL_NAME:#{File::SEPARATOR}=#{File::ALT_SEPARATOR})"
+else
+ $RUBY = "$(RUBY_INSTALL_NAME)"
+end
if not defined? CFLAGS
CFLAGS = CONFIG["CFLAGS"]
@@ -319,7 +324,7 @@ $LDSHARED = CONFIG["LDSHARED"]
$EXEEXT = CONFIG["EXEEXT"]
$DLEXT = CONFIG["DLEXT"]
-$RUBY_INSTALL_NAME = CONFIG["RUBY_INSTALL_NAME"]
+$RUBY_INSTALL_NAME = File.join("$(bindir)", CONFIG["RUBY_INSTALL_NAME"])
$RUBY_SHARED = (CONFIG["ENABLE_SHARED"] == "yes")
$LIBRUBYARG = CONFIG["LIBRUBYARG"]
if $RUBY_SHARED
@@ -375,6 +380,7 @@ AC_SUBST("CC")
AC_SUBST("AR")
AC_SUBST("LD")
AC_SUBST("RANLIB")
+AC_SUBST("RUBY")
AC_SUBST("CFLAGS")
AC_SUBST("DEFS")
それでは。
--
U.Nakamura <usa@...>