[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