[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]