[macruby-changes] [3347] MacRuby/trunk/rakelib

source_changes at macosforge.org source_changes at macosforge.org
Tue Jan 26 15:25:20 PST 2010


Revision: 3347
          http://trac.macosforge.org/projects/ruby/changeset/3347
Author:   eloy.de.enige at gmail.com
Date:     2010-01-26 15:25:19 -0800 (Tue, 26 Jan 2010)
Log Message:
-----------
Move extension builder code to Builder::Ext and clean builder.rake

Modified Paths:
--------------
    MacRuby/trunk/rakelib/builder.rake
    MacRuby/trunk/rakelib/builder.rb

Modified: MacRuby/trunk/rakelib/builder.rake
===================================================================
--- MacRuby/trunk/rakelib/builder.rake	2010-01-26 23:25:10 UTC (rev 3346)
+++ MacRuby/trunk/rakelib/builder.rake	2010-01-26 23:25:19 UTC (rev 3347)
@@ -302,7 +302,7 @@
     $builder.link_dylib(dylib, $builder.objs - ['main', 'gc-stub', 'miniprelude'])
     major, minor, teeny = NEW_RUBY_VERSION.scan(/\d+/)
     ["lib#{RUBY_SO_NAME}.#{major}.#{minor}.dylib", "lib#{RUBY_SO_NAME}.dylib"].each do |dylib_alias|
-      if !File.exist?(dylib_alias) or File.readlink(dylib_alias) != dylib  
+      if !File.exist?(dylib_alias) or File.readlink(dylib_alias) != dylib
         rm_f(dylib_alias)
         ln_s(dylib, dylib_alias)
       end
@@ -332,44 +332,11 @@
 EXTOUT = (ENV['EXTOUT'] or ".ext")
 INSTALLED_LIST = '.installed.list'
 SCRIPT_ARGS = "--make=\"/usr/bin/make\" --dest-dir=\"#{DESTDIR}\" --extout=\"#{EXTOUT}\" --mflags=\"\" --make-flags=\"\""
-EXTMK_ARGS = "#{SCRIPT_ARGS} --extension --extstatic"
 INSTRUBY_ARGS = "#{SCRIPT_ARGS} --data-mode=0644 --prog-mode=0755 --installed-list #{INSTALLED_LIST} --mantype=\"doc\" --sym-dest-dir=\"#{SYM_INSTDIR}\" --rdoc-output=\"doc\""
 
-EXTENSIONS = ['ripper', 'digest', 'etc', 'readline', 'libyaml', 'fcntl', 'socket', 'zlib', 'bigdecimal', 'openssl', 'json'].sort
-def perform_extensions_target(target)
-  commands = []
-  EXTENSIONS.map { |x| File.join('ext', x) }.each do |ext_dir|
-    Dir.glob(File.join(ext_dir, '**/extconf.rb')) do |p|
-      cmd = []
-      dir = File.dirname(p)
-      Dir.chdir(dir) do
-        srcdir = File.join(*dir.split(File::SEPARATOR).map { |x| '..' })
-        next if target == :clean and !File.exist?('Makefile')
-        if !File.exist?('Makefile') or File.mtime('extconf.rb') > File.mtime('Makefile')
-          cmd <<  "cd #{dir} && #{srcdir}/miniruby -I#{srcdir} -I#{srcdir}/lib -r rbconfig -e \"RbConfig::CONFIG['libdir'] = '#{srcdir}'; require './extconf.rb'\""
-        end
-        line = "cd #{dir} && /usr/bin/make top_srcdir=#{srcdir} ruby=\"#{srcdir}/miniruby -I#{srcdir} -I#{srcdir}/lib\" extout=#{srcdir}/.ext hdrdir=#{srcdir}/include arch_hdrdir=#{srcdir}/include"
-        case target
-          when :all
-            line << " libdir=#{srcdir}"
-          else
-            line << " #{target}"
-        end
-        cmd << line
-        cmd << 'rm -f Makefile' if target == :clean
-        commands << cmd
-      end
-    end
-  end
-  Builder.parallel_execute(commands)
-end
-
 desc "Build extensions"
 task :extensions => [:miniruby, "macruby:static"] do
-=begin
-  sh "./miniruby -I./lib -I.ext/common -I./- -r./ext/purelib.rb ext/extmk.rb #{EXTMK_ARGS}"
-=end
-  perform_extensions_target(:all)
+  Builder::Ext.build
 end
 
 desc "Generate RDoc files"
@@ -466,7 +433,7 @@
 
   desc "Install the extensions"
   task :install_ext do
-    perform_extensions_target(:install) 
+    Builder::Ext.install
   end
 
   desc "Install the framework"
@@ -495,12 +462,7 @@
 
   desc "Clean extension build files"
   task :ext do
-=begin
-    if File.exist?('./miniruby') 
-      sh "./miniruby -I./lib -I.ext/common -I./- -r./ext/purelib.rb ext/extmk.rb #{EXTMK_ARGS} -- clean"
-    end
-=end
-    perform_extensions_target(:clean)
+    Builder::Ext.clean
   end
 
   desc "Clean the RDoc files"

Modified: MacRuby/trunk/rakelib/builder.rb
===================================================================
--- MacRuby/trunk/rakelib/builder.rb	2010-01-26 23:25:10 UTC (rev 3346)
+++ MacRuby/trunk/rakelib/builder.rb	2010-01-26 23:25:19 UTC (rev 3347)
@@ -277,6 +277,82 @@
     end
     @obj_dependencies
   end
+  
+  class Ext
+    EXTENSIONS = ['ripper', 'digest', 'etc', 'readline', 'libyaml', 'fcntl', 'socket', 'zlib', 'bigdecimal', 'openssl', 'json'].sort
+    
+    def self.extension_dirs
+      EXTENSIONS.map do |name|
+        Dir.glob(File.join('ext', name, '**/extconf.rb'))
+      end.flatten.map { |f| File.dirname(f) }
+    end
+    
+    def self.build
+      commands = extension_dirs.map { |dir| new(dir).build_commands }
+      Builder.parallel_execute(commands)
+    end
+    
+    def self.install
+      extension_dirs.each do |dir|
+        sh new(dir).install_command
+      end
+    end
+    
+    def self.clean
+      extension_dirs.each do |dir|
+        new(dir).clean_commands.each { |cmd| sh(cmd) }
+      end
+    end
+    
+    attr_reader :dir
+    
+    def initialize(dir)
+      @dir = dir
+    end
+    
+    def srcdir
+      @srcdir ||= File.join(dir.split(File::SEPARATOR).map { |x| '..' })
+    end
+    
+    def makefile
+      @makefile ||= File.join(@dir, 'Makefile')
+    end
+    
+    def extconf
+      File.join(@dir, 'extconf.rb')
+    end
+    
+    def create_makefile_command
+      if !File.exist?(makefile) or File.mtime(extconf) > File.mtime(makefile)
+        "cd #{dir} && #{srcdir}/miniruby -I#{srcdir} -I#{srcdir}/lib -r rbconfig -e \"RbConfig::CONFIG['libdir'] = '#{srcdir}'; require './extconf.rb'\""
+      end
+    end
+    
+    def build_commands
+      [create_makefile_command, make_command(:all)].compact
+    end
+    
+    def clean_commands
+      return [] unless File.exist?(makefile)
+      [create_makefile_command, make_command(:clean), "rm -f #{makefile}"].compact
+    end
+    
+    def install_command
+      make_command(:install)
+    end
+    
+    private
+    
+    # Possible targets are:
+    # * all
+    # * install
+    # * clean
+    def make_command(target)
+      cmd = "cd #{dir} && /usr/bin/make top_srcdir=#{srcdir} ruby=\"#{srcdir}/miniruby -I#{srcdir} -I#{srcdir}/lib\" extout=#{srcdir}/.ext hdrdir=#{srcdir}/include arch_hdrdir=#{srcdir}/include"
+      cmd << (target == :all ? " libdir=#{srcdir}" : " #{target}")
+      cmd
+    end
+  end
 end
 
 $builder = Builder.new(OBJS)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100126/50c7efca/attachment-0001.html>


More information about the macruby-changes mailing list