summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authornagachika <nagachika@ruby-lang.org>2022-10-21 14:54:55 +0900
committernagachika <nagachika@ruby-lang.org>2022-10-21 14:54:55 +0900
commitd8c232935ea5920fd8d023db02b9443488da7252 (patch)
treeffcced7c3ad5efc9fa6c102ec8b39e70c0fb5673 /ext
parentc5a0856b4b34ecd2f5be070d454dbd3fc25d9529 (diff)
merge revision(s) 78d2be69b500e4552e0e75fdefd26606a0506009:
Move copying/linking extra files to Makefile so removed by `clean` --- ext/extmk.rb | 81 ++++++++++++++++++++++++----------------- tool/ln_sr.rb | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 161 insertions(+), 33 deletions(-) create mode 100755 tool/ln_sr.rb
Diffstat (limited to 'ext')
-rwxr-xr-xext/extmk.rb81
1 files changed, 48 insertions, 33 deletions
diff --git a/ext/extmk.rb b/ext/extmk.rb
index e2196ebfb5..57c874fa6f 100755
--- a/ext/extmk.rb
+++ b/ext/extmk.rb
@@ -37,6 +37,7 @@ require 'rbconfig'
$topdir = "."
$top_srcdir = srcdir
+inplace = File.identical?($top_srcdir, $topdir)
$" << "mkmf.rb"
load File.expand_path("lib/mkmf.rb", srcdir)
@@ -524,7 +525,10 @@ cond = proc {|ext, *|
end
ext_prefix = ext_prefix[$top_srcdir.size+1..-2]
+@ext_prefix = ext_prefix
+@inplace = inplace
extend Module.new {
+
def timestamp_file(name, target_prefix = nil)
if @gemname and name == '$(TARGET_SO_DIR)'
name = "$(arch)/gems/#{@gemname}#{target_prefix}"
@@ -540,6 +544,9 @@ extend Module.new {
return super unless @gemname
super(*args) do |conf|
conf.find do |s|
+ s.sub!(%r(^(srcdir *= *)\$\(top_srcdir\)/\.bundle/gems/[^/]+(?=/))) {
+ "gem_#{$&}\n" "#{$1}$(gem_srcdir)"
+ }
s.sub!(/^(TIMESTAMP_DIR *= *)\$\(extout\)/) {
"TARGET_TOPDIR = $(topdir)/.bundle\n" "#{$1}$(TARGET_TOPDIR)"
}
@@ -548,37 +555,65 @@ extend Module.new {
"#{$1}$(TARGET_GEM_DIR)$(target_prefix)"
}
end
- conf.any? {|s| /^TARGET *= *\S/ =~ s} and conf << %{
+
+ gemlib = File.directory?("#{$top_srcdir}/#{@ext_prefix}/#{@gemname}/lib")
+ if conf.any? {|s| /^TARGET *= *\S/ =~ s}
+ conf << %{
gem_platform = #{Gem::Platform.local}
# default target
all:
+gem = #{@gemname}
+
build_complete = $(TARGET_GEM_DIR)/gem.build_complete
install-so: build_complete
+clean-so:: clean-build_complete
+
build_complete: $(build_complete)
$(build_complete): $(TARGET_SO)
$(Q) $(TOUCH) $@
-clean-so::
+clean-build_complete:
-$(Q)$(RM) $(build_complete)
+
+install: gemspec
+clean: clean-gemspec
+
+gemspec = $(TARGET_TOPDIR)/specifications/$(gem).gemspec
+$(gemspec): $(gem_srcdir)/.bundled.$(gem).gemspec
+ $(Q) $(MAKEDIRS) $(@D)
+ $(Q) $(COPY) $(gem_srcdir)/.bundled.$(gem).gemspec $@
+
+gemspec: $(gemspec)
+
+clean-gemspec:
+ -$(Q)$(RM) $(gemspec)
+}
+
+ if gemlib
+ conf << %{
+install-rb: gemlib
+clean-rb:: clean-gemlib
+
+LN_S = #{config_string('LN_S')}
+CP_R = #{config_string('CP')} -r
+
+gemlib = $(TARGET_TOPDIR)/gems/$(gem)/lib
+gemlib:#{%{ $(gemlib)\n$(gemlib): $(gem_srcdir)/lib} if $nmake}
+ $(Q) $(RUBY) $(top_srcdir)/tool/ln_sr.rb -f $(gem_srcdir)/lib $(gemlib)
+
+clean-gemlib:
+ $(Q) $(#{@inplace ? 'NULLCMD' : 'RM_RF'}) $(gemlib)
}
+ end
+ end
+
conf
end
end
}
-if @gemname
- gemdir = File.join($top_srcdir, ext_prefix, @gemname)
- if File.exist?(spec_file = File.join(gemdir, ".bundled.#{@gemname}.gemspec")) or
- File.exist?(spec_file = File.join(gemdir, "#{@gemname}.gemspec"))
- dest = "#{File.dirname(ext_prefix)}/specifications"
- FileUtils.mkdir_p(dest)
- File.copy_stream(spec_file, "#{dest}/#{@gemname}.gemspec")
- puts "copied #{@gemname}.gemspec"
- end
-end
-
dir = Dir.pwd
FileUtils::makedirs(ext_prefix)
Dir::chdir(ext_prefix)
@@ -597,26 +632,6 @@ exts.each do |d|
end
end
-if @gemname
- src_gemlib = File.join($top_srcdir, ext_prefix, @gemname, "lib")
- src_gemlib = relative_from(src_gemlib, ([".."]*ext_prefix.count("/")).join("/"))
- gemlib = "#{@gemname}/lib"
- if File.directory?(src_gemlib)
- if File.exist?(gemlib)
- puts "using #{gemlib}"
- else
- begin
- FileUtils.mkdir_p(File.dirname(gemlib))
- File.symlink(relative_from(src_gemlib, ".."), gemlib)
- puts "linked #{gemlib}"
- rescue NotImplementedError, Errno::EPERM
- FileUtils.cp_r(src_gemlib, gemlib)
- puts "copied #{gemlib}"
- end
- end
- end
-end
-
$top_srcdir = srcdir
$topdir = "."
$hdrdir = hdrdir