ruby-changes:19021
From: nobu <ko1@a...>
Date: Tue, 8 Mar 2011 09:33:12 +0900 (JST)
Subject: [ruby-changes:19021] Ruby:r31059 (trunk): * common.mk (configure-ext, build-ext), ext/extmk.rb (extmake):
nobu 2011-03-08 09:33:05 +0900 (Tue, 08 Mar 2011) New Revision: 31059 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=31059 Log: * common.mk (configure-ext, build-ext), ext/extmk.rb (extmake): support paralell-make under ext. Modified files: trunk/ChangeLog trunk/common.mk trunk/configure.in trunk/ext/extmk.rb Index: configure.in =================================================================== --- configure.in (revision 31058) +++ configure.in (revision 31059) @@ -2908,6 +2908,8 @@ ruby_pc="${RUBY_BASE_NAME}-${MAJOR}.${MINOR}.pc" AC_SUBST(ruby_pc) +AC_SUBST(exec, [exec]) + AC_CONFIG_FILES($ruby_pc:template/ruby.pc.in, [ if sed ['s/\$(\([A-Za-z_][A-Za-z0-9_]*\))/${\1}/g;s/@[A-Za-z_][A-Za-z0-9_]*@//'] $ruby_pc > ruby.tmp.pc && Index: ChangeLog =================================================================== --- ChangeLog (revision 31058) +++ ChangeLog (revision 31059) @@ -1,3 +1,8 @@ +Tue Mar 8 09:32:48 2011 Nobuyoshi Nakada <nobu@r...> + + * common.mk (configure-ext, build-ext), ext/extmk.rb (extmake): + support paralell-make under ext. + Tue Mar 8 09:25:23 2011 Nobuyoshi Nakada <nobu@r...> * process.c (proc_setgroups): use getgrnam() if getgrnam_r() is Index: common.mk =================================================================== --- common.mk (revision 31058) +++ common.mk (revision 31059) @@ -140,7 +140,7 @@ all: showflags main docs main: showflags encs exts - @$(RUNCMD) $(MKMAIN_CMD) $(MAKE) + @$(NULLCMD) .PHONY: showflags exts enc trans: showflags @@ -162,8 +162,17 @@ "$(configure_args)" \ $(MESSAGE_END) -exts: $(MKMAIN_CMD) +exts: build-ext +EXTS_MK = exts.mk +$(EXTS_MK): $(MKFILES) incs $(PREP) $(RBCONFIG) $(LIBRUBY) + @$(MINIRUBY) $(srcdir)/ext/extmk.rb --make="$(MAKE)" --command-output=$(EXTS_MK) $(EXTMK_ARGS) configure + +configure-ext: $(EXTS_MK) + +build-ext: $(EXTS_MK) + $(Q)$(MAKE) -f $(EXTS_MK) $(MFLAGS) + $(MKMAIN_CMD): $(MKFILES) incs $(PREP) $(RBCONFIG) $(LIBRUBY) @$(MINIRUBY) $(srcdir)/ext/extmk.rb --make="$(MAKE)" --command-output=$@ $(EXTMK_ARGS) Index: ext/extmk.rb =================================================================== --- ext/extmk.rb (revision 31058) +++ ext/extmk.rb (revision 31059) @@ -17,6 +17,7 @@ $ignore = nil $message = nil $command_output = nil +$configure_only = false $progname = $0 alias $PROGRAM_NAME $0 @@ -90,8 +91,10 @@ end def extmake(target) - print "#{$message} #{target}\n" - $stdout.flush + unless $configure_only + print "#{$message} #{target}\n" + $stdout.flush + end FileUtils.mkpath target unless File.directory?(target) begin @@ -150,6 +153,10 @@ [conf, "#{$srcdir}/depend"].any? {|f| modified?(f, [t])}) then ok = false + if $configure_only + print "#{$message} #{target}\n" + $stdout.flush + end init_mkmf Logging::logfile 'mkmf.log' rm_f makefile @@ -177,7 +184,7 @@ return true end args = sysquote($mflags) - unless $destdir.to_s.empty? or $mflags.include?("DESTDIR") + unless $destdir.to_s.empty? or $mflags.defined?("DESTDIR") args += [sysquote("DESTDIR=" + relative_from($destdir, "../"+prefix))] end if $static @@ -186,7 +193,7 @@ end FileUtils.rm_f(old_cleanfiles - $distcleanfiles) FileUtils.rm_f(old_objs - $objs) - unless system($make, *args) + unless $configure_only or system($make, *args) $ignore or $continue or return false end $compiled[target] = true @@ -330,11 +337,13 @@ $mflags.unshift("INSTALL_PROG=install -c -p -m 0755", "INSTALL_DATA=install -c -p -m 0644", "MAKEDIRS=mkdir -p") if $dryrun + when /configure/ + $configure_only = true end end unless $message if target - $message = target.sub(/^(\w+)e?\b/, '\1ing').tr('-', ' ') + $message = target.sub(/^(\w+?)e?\b/, '\1ing').tr('-', ' ') else $message = "compiling" end @@ -445,6 +454,7 @@ extmake(d) or abort end end + $top_srcdir = srcdir $topdir = "." $hdrdir = hdrdir @@ -549,17 +559,14 @@ unless $destdir.to_s.empty? $mflags.defined?("DESTDIR") or $mflags << "DESTDIR=#{$destdir}" end -message = "making #{rubies.join(', ')}" -$mflags.concat(rubies) $makeflags.uniq! -$makeflags.concat(rubies) if $nmake == ?b unless (vars = $mflags.grep(/\A\w+=/n)).empty? open(mkf = "libruby.mk", "wb") do |tmf| tmf.puts("!include Makefile") tmf.puts - tmf.puts(*vars.map {|v| v.sub(/=/, " = ")}) + tmf.puts(*vars.map {|v| v.sub(/\=/, " = ")}) tmf.puts("PRE_LIBRUBY_UPDATE = del #{mkf}") end $mflags.unshift("-f#{mkf}") @@ -568,13 +575,55 @@ end $mflags.unshift("topdir=#$topdir") ENV.delete("RUBYOPT") -if $command_output +if $configure_only and $command_output + exts.map! {|d| "ext/#{d}"} + open($command_output, "wb") do |mf| + mf.puts "V = 0" + mf.puts "Q1 = $(V:1=)" + mf.puts "Q = $(Q1:0=@)" + mf.puts "ECHO1 = $(V:1=@:)" + mf.puts "ECHO = $(ECHO1:0=@echo)" + mf.puts + + mf.print "extensions =" + w = 12 + exts.each do |d| + if d.size + w > 70 + mf.print " \\\n\t " + w = 12 + end + mf.print " #{d}" + w += d.size + 1 + end + mf.puts + targets = %w[all install static install-so install-rb clean distclean realclean] + targets.each do |target| + mf.puts "#{target}: $(extensions:=/#{target})" + end + mf.puts + mf.puts "all: #{rubies.join(' ')}" + mf.puts "#{rubies.join(' ')}: $(extensions:=/all)" + rubies.each do |target| + mf.puts "#{target}:\n\t$(Q)$(MAKE) $(MFLAGS) $@" + end + mf.puts + exec = config_string("exec") {|s| s + " "} + targets.each do |target| + exts.each do |d| + mf.puts "#{d}/#{target}:\n\t$(Q)cd $(@D) && #{exec}$(MAKE) $(MFLAGS) $(@F)" + end + end + end +elsif $command_output + message = "making #{rubies.join(', ')}" message = "echo #{message}" + $mflags.concat(rubies) + $makeflags.concat(rubies) cmd = $makeflags.map {|ss|ss.sub(/.*[$(){};\s].*/, %q['\&'])}.join(' ') open($command_output, 'wb') do |ff| case $command_output when /\.sh\z/ - ff.puts message, "rm -f $0; exec \"$@\" #{cmd}" + ff.puts message, "rm -f \"$0\"; exec \"$@\" #{cmd}" when /\.bat\z/ ["@echo off", message, "%* #{cmd}", "del %0 & exit %ERRORLEVEL%"].each do |ss| ff.print ss, "\r\n" @@ -584,9 +633,11 @@ end ff.chmod(0755) end -else +elsif !$configure_only + message = "making #{rubies.join(', ')}" puts message $stdout.flush + $mflags.concat(rubies) system($make, *sysquote($mflags)) or exit($?.exitstatus) end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/