mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
extmk.rb: build gems
* ext/extmk.rb: [EXPERIMENTAL] build extension libraries in extracted gems. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55789 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
26f59b09fe
commit
c7924b1305
2 changed files with 35 additions and 7 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
Mon Aug 1 21:39:52 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* ext/extmk.rb: [EXPERIMENTAL] build extension libraries in
|
||||||
|
extracted gems.
|
||||||
|
|
||||||
Mon Aug 1 16:07:18 2016 URABE Shyouhei <shyouhei@ruby-lang.org>
|
Mon Aug 1 16:07:18 2016 URABE Shyouhei <shyouhei@ruby-lang.org>
|
||||||
|
|
||||||
* include/ruby/ruby.h (struct RStruct): no longer.
|
* include/ruby/ruby.h (struct RStruct): no longer.
|
||||||
|
|
37
ext/extmk.rb
37
ext/extmk.rb
|
@ -135,7 +135,7 @@ def extract_makefile(makefile, keep = true)
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
def extmake(target)
|
def extmake(target, basedir = 'ext')
|
||||||
unless $configure_only || verbose?
|
unless $configure_only || verbose?
|
||||||
print "#{$message} #{target}\n"
|
print "#{$message} #{target}\n"
|
||||||
$stdout.flush
|
$stdout.flush
|
||||||
|
@ -147,7 +147,7 @@ def extmake(target)
|
||||||
parent = true
|
parent = true
|
||||||
d = target
|
d = target
|
||||||
until (d = File.dirname(d)) == '.'
|
until (d = File.dirname(d)) == '.'
|
||||||
if File.exist?("#{$top_srcdir}/ext/#{d}/extconf.rb")
|
if File.exist?("#{$top_srcdir}/#{basedir}/#{d}/extconf.rb")
|
||||||
parent = (/^all:\s*install/ =~ IO.read("#{d}/Makefile") rescue false)
|
parent = (/^all:\s*install/ =~ IO.read("#{d}/Makefile") rescue false)
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
|
@ -165,7 +165,7 @@ def extmake(target)
|
||||||
$topdir = prefix + $topdir
|
$topdir = prefix + $topdir
|
||||||
$target = target
|
$target = target
|
||||||
$mdir = target
|
$mdir = target
|
||||||
$srcdir = File.join($top_srcdir, "ext", $mdir)
|
$srcdir = File.join($top_srcdir, basedir, $mdir)
|
||||||
$preload = nil
|
$preload = nil
|
||||||
$objs = []
|
$objs = []
|
||||||
$srcs = []
|
$srcs = []
|
||||||
|
@ -184,7 +184,7 @@ def extmake(target)
|
||||||
}
|
}
|
||||||
mkconfig = {
|
mkconfig = {
|
||||||
"hdrdir" => ($hdrdir == top_srcdir) ? top_srcdir : "$(top_srcdir)/include",
|
"hdrdir" => ($hdrdir == top_srcdir) ? top_srcdir : "$(top_srcdir)/include",
|
||||||
"srcdir" => "$(top_srcdir)/ext/#{$mdir}",
|
"srcdir" => "$(top_srcdir)/#{basedir}/#{$mdir}",
|
||||||
"topdir" => $topdir,
|
"topdir" => $topdir,
|
||||||
}
|
}
|
||||||
rbconfig0.each_pair {|key, val| rbconfig[key] ||= val.dup}
|
rbconfig0.each_pair {|key, val| rbconfig[key] ||= val.dup}
|
||||||
|
@ -543,6 +543,14 @@ if $extout
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
FileUtils.makedirs('gems')
|
||||||
|
ext_prefix = "#$top_srcdir/gems"
|
||||||
|
gems = Dir.glob("#{ext_prefix}/**/extconf.rb").collect {|d|
|
||||||
|
d = File.dirname(d)
|
||||||
|
d.slice!(0, ext_prefix.length + 1)
|
||||||
|
d
|
||||||
|
}.sort
|
||||||
|
|
||||||
dir = Dir.pwd
|
dir = Dir.pwd
|
||||||
FileUtils::makedirs('ext')
|
FileUtils::makedirs('ext')
|
||||||
Dir::chdir('ext')
|
Dir::chdir('ext')
|
||||||
|
@ -559,6 +567,18 @@ exts.each do |d|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Dir.chdir('..')
|
||||||
|
FileUtils::makedirs('gems')
|
||||||
|
FileUtils::makedirs('.ext/gems')
|
||||||
|
Dir.chdir('gems')
|
||||||
|
extout = $extout
|
||||||
|
gems.each do |d|
|
||||||
|
$extout = extout.dup
|
||||||
|
extmake(d, 'gems')
|
||||||
|
end
|
||||||
|
$extout = extout
|
||||||
|
Dir.chdir('../ext')
|
||||||
|
|
||||||
$top_srcdir = srcdir
|
$top_srcdir = srcdir
|
||||||
$topdir = "."
|
$topdir = "."
|
||||||
$hdrdir = hdrdir
|
$hdrdir = hdrdir
|
||||||
|
@ -674,6 +694,7 @@ $mflags.unshift("topdir=#$topdir")
|
||||||
ENV.delete("RUBYOPT")
|
ENV.delete("RUBYOPT")
|
||||||
if $configure_only and $command_output
|
if $configure_only and $command_output
|
||||||
exts.map! {|d| "ext/#{d}/."}
|
exts.map! {|d| "ext/#{d}/."}
|
||||||
|
gems.map! {|d| "gems/#{d}/."}
|
||||||
atomic_write_open($command_output) do |mf|
|
atomic_write_open($command_output) do |mf|
|
||||||
mf.puts "V = 0"
|
mf.puts "V = 0"
|
||||||
mf.puts "Q1 = $(V:1=)"
|
mf.puts "Q1 = $(V:1=)"
|
||||||
|
@ -699,6 +720,7 @@ if $configure_only and $command_output
|
||||||
end
|
end
|
||||||
|
|
||||||
mf.macro "extensions", exts
|
mf.macro "extensions", exts
|
||||||
|
mf.macro "gems", gems
|
||||||
mf.macro "EXTOBJS", $extlist.empty? ? ["dmyext.#{$OBJEXT}"] : ["ext/extinit.#{$OBJEXT}", *$extobjs]
|
mf.macro "EXTOBJS", $extlist.empty? ? ["dmyext.#{$OBJEXT}"] : ["ext/extinit.#{$OBJEXT}", *$extobjs]
|
||||||
mf.macro "EXTLIBS", $extlibs
|
mf.macro "EXTLIBS", $extlibs
|
||||||
mf.macro "EXTLDFLAGS", $extflags.split
|
mf.macro "EXTLDFLAGS", $extflags.split
|
||||||
|
@ -719,14 +741,14 @@ if $configure_only and $command_output
|
||||||
mf.puts
|
mf.puts
|
||||||
targets = %w[all install static install-so install-rb clean distclean realclean]
|
targets = %w[all install static install-so install-rb clean distclean realclean]
|
||||||
targets.each do |tgt|
|
targets.each do |tgt|
|
||||||
mf.puts "#{tgt}: $(extensions:/.=/#{tgt})"
|
mf.puts "#{tgt}: $(extensions:/.=/#{tgt}) $(gems:/.=/#{tgt})"
|
||||||
mf.puts "#{tgt}: note" unless /clean\z/ =~ tgt
|
mf.puts "#{tgt}: note" unless /clean\z/ =~ tgt
|
||||||
end
|
end
|
||||||
mf.puts
|
mf.puts
|
||||||
mf.puts "clean:\n\t-$(Q)$(RM) ext/extinit.#{$OBJEXT}"
|
mf.puts "clean:\n\t-$(Q)$(RM) ext/extinit.#{$OBJEXT}"
|
||||||
mf.puts "distclean:\n\t-$(Q)$(RM) ext/extinit.c"
|
mf.puts "distclean:\n\t-$(Q)$(RM) ext/extinit.c"
|
||||||
mf.puts
|
mf.puts
|
||||||
mf.puts "#{rubies.join(' ')}: $(extensions:/.=/#{$force_static ? 'static' : 'all'})"
|
mf.puts "#{rubies.join(' ')}: $(extensions:/.=/#{$force_static ? 'static' : 'all'}) $(gems:/.=/all)"
|
||||||
submake = "$(Q)$(MAKE) $(MFLAGS) $(SUBMAKEOPTS)"
|
submake = "$(Q)$(MAKE) $(MFLAGS) $(SUBMAKEOPTS)"
|
||||||
mf.puts "all static: #{rubies.join(' ')}\n"
|
mf.puts "all static: #{rubies.join(' ')}\n"
|
||||||
$extobjs.each do |tgt|
|
$extobjs.each do |tgt|
|
||||||
|
@ -746,8 +768,9 @@ if $configure_only and $command_output
|
||||||
config_string("exec") {|str| submake << str << " "}
|
config_string("exec") {|str| submake << str << " "}
|
||||||
submake << "$(MAKE)"
|
submake << "$(MAKE)"
|
||||||
end
|
end
|
||||||
|
gems = exts + gems
|
||||||
targets.each do |tgt|
|
targets.each do |tgt|
|
||||||
exts.each do |d|
|
(tgt == 'static' ? exts : gems).each do |d|
|
||||||
mf.puts "#{d[0..-2]}#{tgt}:\n\t$(Q)#{submake} $(MFLAGS) V=$(V) $(@F)"
|
mf.puts "#{d[0..-2]}#{tgt}:\n\t$(Q)#{submake} $(MFLAGS) V=$(V) $(@F)"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Reference in a new issue