aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rwxr-xr-xext/extmk.rb16
-rw-r--r--lib/mkmf.rb12
3 files changed, 20 insertions, 16 deletions
diff --git a/ChangeLog b/ChangeLog
index 6494271afc..9747d4fcfb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Wed Aug 31 15:36:10 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/extmk.rb: move TARGET_SO_DIR stuffs to mkmf.rb.
+
+ * lib/mkmf.rb (create_makefile): create target shared object files
+ under $(TARGET_SO_DIR) which is $sodir if it is defined with
+ $extout. [ruby-core:77058] [Bug #12681]
+
Wed Aug 31 01:56:55 2016 Yuichiro Kaneko <yui-knk@ruby-lang.org>
* doc/extension.ja.rdoc: [DOC] Fix a typo. [ci skip]
diff --git a/ext/extmk.rb b/ext/extmk.rb
index 0aaa483f26..1b86ff0d71 100755
--- a/ext/extmk.rb
+++ b/ext/extmk.rb
@@ -131,7 +131,7 @@ def extract_makefile(makefile, keep = true)
true
end
-def extmake(target, basedir = (maybestatic = 'ext'), &block)
+def extmake(target, basedir = (maybestatic = 'ext'))
unless $configure_only || verbose?
print "#{$message} #{target}\n"
$stdout.flush
@@ -225,7 +225,7 @@ def extmake(target, basedir = (maybestatic = 'ext'), &block)
load $0 = conf
end
else
- create_makefile(target, &block)
+ create_makefile(target)
end
$defs << "-DRUBY_EXPORT" if $static
ok = File.exist?(makefile)
@@ -243,7 +243,6 @@ def extmake(target, basedir = (maybestatic = 'ext'), &block)
ok &&= File.open(makefile){|f| s = f.gets and !s[DUMMY_SIGNATURE]}
unless ok
mf = ["# #{DUMMY_SIGNATURE}\n", *dummy_makefile(CONFIG["srcdir"])].join("")
- mf = yield mf if block
atomic_write_open(makefile) do |f|
f.print(mf)
end
@@ -571,15 +570,8 @@ Dir.chdir('gems')
extout = $extout
gems.each do |d|
$extout = extout.dup
- extmake(d, 'gems') do |mf|
- mf.sub!(/^RUBYARCHDIR *= *(\$\(extout\))\/(\$\(arch\))(.*)/) {
- "TARGET_SO_DIR = #$1/gems/#$2/#{d[%r{\A[^/]+}]}#$3\n" \
- "TARGET_SO_TIME = .gems.-.arch.-.#{d[/\A[^\/]+/]}.time"
- }
- mf.gsub!(/\bRUBYARCHDIR\b/, 'TARGET_SO_DIR')
- mf.gsub!(/\.TARGET_SO_DIR\.time/, '$(TARGET_SO_TIME)')
- mf
- end
+ $sodir = "$(extout)/gems/$(arch)/#{d[%r{\A[^/]+}]}"
+ extmake(d, 'gems')
end
$extout = extout
Dir.chdir('../ext')
diff --git a/lib/mkmf.rb b/lib/mkmf.rb
index c20e431978..b16600de6a 100644
--- a/lib/mkmf.rb
+++ b/lib/mkmf.rb
@@ -2303,9 +2303,13 @@ TIMESTAMP_DIR = #{$extout ? '$(extout)/.timestamp' : '.'}
" #"
# TODO: fixme
install_dirs.each {|d| mfile.print("%-14s= %s\n" % d) if /^[[:upper:]]/ =~ d[0]}
- n = ($extout ? '$(RUBYARCHDIR)/' : '') + '$(TARGET)'
+ sodir = !$extout ? '' :
+ $sodir ? $sodir+target_prefix :
+ '$(RUBYARCHDIR)'
+ n = '$(TARGET_SO_DIR)$(TARGET)'
mfile.print "
-TARGET_SO = #{($extout ? '$(RUBYARCHDIR)/' : '')}$(DLLIB)
+TARGET_SO_DIR =#{(sodir ? " #{sodir}/" : '')}
+TARGET_SO = $(TARGET_SO_DIR)$(DLLIB)
CLEANLIBS = $(TARGET_SO) #{config_string('cleanlibs') {|t| t.gsub(/\$\*/) {n}}}
CLEANOBJS = *.#{$OBJEXT} #{config_string('cleanobjs') {|t| t.gsub(/\$\*/, "$(TARGET)#{deffile ? '-$(arch)': ''}")} if target} *.bak
@@ -2331,7 +2335,7 @@ static: #{$extmk && !$static ? "all" : "$(STATIC_LIB)#{!$extmk ? " install-rb" :
end
dirs = []
mfile.print "install: install-so install-rb\n\n"
- sodir = (dir = "$(RUBYARCHDIR)").dup
+ dir = sodir.dup
mfile.print("install-so: ")
if target
f = "$(DLLIB)"
@@ -2450,7 +2454,7 @@ site-install-rb: install-rb
mfile.print "$(TARGET_SO): "
mfile.print "$(DEFFILE) " if makedef
mfile.print "$(OBJS) Makefile"
- mfile.print " #{timestamp_file('$(RUBYARCHDIR)', target_prefix)}" if $extout
+ mfile.print " #{timestamp_file(sodir, target_prefix)}" if $extout
mfile.print "\n"
mfile.print "\t$(ECHO) linking shared-object #{target_prefix.sub(/\A\/(.*)/, '\1/')}$(DLLIB)\n"
mfile.print "\t-$(Q)$(RM) $(@#{sep})\n"