* ext/extmk.rb: prefer relative path.  [ruby-talk:93037]

Index: ext/extmk.rb
===================================================================
RCS file: /cvs/ruby/src/ruby/ext/extmk.rb,v
retrieving revision 1.53
diff -u -2 -p -d -r1.53 extmk.rb
--- ext/extmk.rb	17 Feb 2004 10:34:31 -0000	1.53
+++ ext/extmk.rb	21 Feb 2004 05:14:36 -0000
@@ -28,5 +28,5 @@ require 'mkmf'
 require 'getopts'
 
-$topdir = File.expand_path(".")
+$topdir = "."
 $top_srcdir = srcdir
 $hdrdir = $top_srcdir
@@ -53,5 +53,15 @@ def extmake(target)
 
   FileUtils.mkpath target unless File.directory?(target)
-  Dir.chdir(target) do
+  begin
+    dir = Dir.pwd
+    FileUtils.mkpath target unless File.directory?(target)
+    Dir.chdir target
+    top_srcdir = $top_srcdir
+    topdir = $topdir
+    prefix = "../" * (target.count("/")+1)
+    if File.expand_path(top_srcdir) != File.expand_path(top_srcdir, dir)
+      $hdrdir = $top_srcdir = prefix + top_srcdir
+    end
+    $topdir = prefix + $topdir
     $target = target
     $mdir = target
@@ -113,4 +123,8 @@ def extmake(target)
       $extpath |= $LIBPATH
     end
+  ensure
+    $hdrdir = $top_srcdir = top_srcdir
+    $topdir = topdir
+    Dir.chdir dir
   end
   begin
@@ -183,9 +197,5 @@ def parse_args()
   end
   if $extout
-    $absextout = File.expand_path(Config::expand($extout.dup), $topdir)
     $extout = '$(topdir)/'+$extout
-    unless Config::expand($extout.dup) == $absextout
-      $extout = $absextout
-    end
     $extout_prefix = $extout ? "$(extout)$(target_prefix)/" : ""
     $mflags << "extout=#$extout" << "extout_prefix=#$extout_prefix"
@@ -278,20 +288,28 @@ exts |= Dir.glob("#{ext_prefix}/*/**/MAN
 
 if $extout
+  Config.expand(extout = $extout+"/.")
   if $install
     Config.expand(dest = "#{$destdir}#{$rubylibdir}")
-    FileUtils.cp_r($absextout+"/.", dest, :verbose => true, :noop => $dryrun)
+    FileUtils.cp_r(extout, dest, :verbose => true, :noop => $dryrun)
     exit
   end
   unless $ignore
-    FileUtils.mkpath($absextout)
+    FileUtils.mkpath(extout)
   end
 end
 
+dir = Dir.pwd
 FileUtils::makedirs('ext')
 Dir::chdir('ext')
 
+if File.expand_path(srcdir) != File.expand_path(srcdir, dir)
+  $hdrdir = $top_srcdir = "../" + srcdir
+end
+$topdir = ".."
 exts.each do |d|
   extmake(d) or abort
 end
+$hdrdir = $top_srcdir = srcdir
+$topdir = "."
 
 if $ignore
@@ -299,5 +317,5 @@ if $ignore
   if $clean
     Dir.rmdir('ext') rescue nil
-    FileUtils.rm_rf($absextout) if $extout
+    FileUtils.rm_rf(extout) if $extout
   end
   exit
