Rakefile in libxml-ruby-0.5.2.0 vs Rakefile in libxml-ruby-0.5.3

- old
+ new

@@ -1,216 +1,38 @@ -require 'net/ftp' -require 'rake/clean' -require 'rake/testtask' -require 'rake/rdoctask' -require 'rake/gempackagetask' +require File.join(File.dirname(__FILE__), "setup.rb") -CLEAN.include '**/*.o' -CLEAN.include '**/*.so' -CLEAN.include 'html' -CLOBBER.include '**/*.log' -CLOBBER.include '**/Makefile' -CLOBBER.include '**/extconf.h' +# Run memory tests +# TODO: Ensure compile first (but only if needed) with make? -desc "Default Task (Build release)" -task :default => :release +desc "Run memory leak test." +task :memtest do -# Determine the current version of the software -if File.read('ext/xml/libxml.h') =~ /\s*RUBY_LIBXML_VERSION\s*['"](\d.+)['"]/ - CURRENT_VERSION = $1 -else - CURRENT_VERSION = "0.0.0" -end + live = ENV['live'] -if ENV['REL'] - PKG_VERSION = ENV['REL'] -else - PKG_VERSION = CURRENT_VERSION -end - -task :test_ver do - puts PKG_VERSION -end - -# Make tasks ----------------------------------------------------- -MAKECMD = ENV['MAKE_CMD'] || 'make' -MAKEOPTS = ENV['MAKE_OPTS'] || '' - -file 'ext/xml/Makefile' => 'ext/xml/extconf.rb' do - Dir.chdir('ext/xml') do - ruby 'extconf.rb' + unless live + $LOAD_PATH.unshift(File.expand_path('ext/libxml')) + $LOAD_PATH.unshift(File.expand_path('lib')) end -end + $LOAD_PATH.unshift('test') # NEEDED? -def make(target = '') - Dir.chdir('ext/xml') do - pid = fork { exec "#{MAKECMD} #{MAKEOPTS} #{target}" } - Process.waitpid pid - end - $?.exitstatus -end + glob = 'test/ets_*.rb' -# Let make handle dependencies between c/o/so - we'll just run it. -file 'ext/xml/libxml.so' => 'ext/xml/Makefile' do - m = make - fail "Make failed (status #{m})" unless m == 0 -end - -desc "Compile the shared object" -task :compile => 'ext/xml/libxml.so' - -desc "Install to your site_ruby directory" -task :install => :compile do - m = make 'install' - fail "Make install failed (status #{m})" unless m == 0 -end - -# Test Tasks --------------------------------------------------------- -task :ta => :alltests -task :tu => :unittests -task :test => :unittests -task :tm => :memtests - -Rake::TestTask.new(:alltests) do |t| - t.test_files = FileList[ - 'tests/runner.rb', - 'tests/contrib/*.rb', - ] - t.verbose = true -end - -Rake::TestTask.new(:unittests) do |t| - t.test_files = FileList['tests/runner.rb'] - t.verbose = false -end - -Rake::TestTask.new(:memtests) do |t| - t.test_files = FileList[ - 'rwtest/runner.rb' - ] - t.verbose = true -end - -#Rake::TestTask.new(:funtests) do |t| - # t.test_files = FileList['test/fun*.rb'] - #t.warning = true - #t.warning = true -#end - -task :unittests => :compile -task :alltests => :compile -task :memtests => :compile - -# RDoc Tasks --------------------------------------------------------- -desc "Create the RDOC documentation tree" -rd = Rake::RDocTask.new(:doc) do |rdoc| - rdoc.rdoc_dir = 'html' - rdoc.title = "Libxml-Ruby API" - rdoc.options << '--main' << 'README' - rdoc.rdoc_files.include('README', 'LICENSE', 'TODO') - rdoc.rdoc_files.include('ext/xml/ruby_xml*.c', 'ext/xml/libxml.rb') - rdoc.rdoc_files.include('*.rdoc') -end - -desc "Publish the RDoc documentation to project web site" -task :pubdoc => [ :doc ] do - unless ENV['RUBYFORGE_ACCT'] - raise "Need to set RUBYFORGE_ACCT to your rubyforge.org user name (e.g. 'fred')" - end - require 'rake/contrib/sshpublisher' - Rake::SshDirPublisher.new( - "#{ENV['RUBYFORGE_ACCT']}@rubyforge.org", - "/var/www/gforge-projects/libxml/doc", - "html" - ).upload -end - -# Packaging / Version number tasks ----------------------------------- -# Used during release packaging if a REL is supplied -task :update_version do - unless PKG_VERSION == CURRENT_VERSION - pkg_vernum = PKG_VERSION.tr('.','').sub(/^0*/,'') - pkg_vernum << '0' until pkg_vernum.length > 2 - - File.open('ext/xml/libxml.h.new','w+') do |f| - maj, min, mic, patch = /(\d+)\.(\d+)(?:\.(\d+))?(?:\.(\d+))?/.match(PKG_VERSION).captures - f << File.read('ext/xml/libxml.h'). - gsub(/RUBY_LIBXML_VERSION\s+"(\d.+)"/) { "RUBY_LIBXML_VERSION \"#{PKG_VERSION}\"" }. - gsub(/RUBY_LIBXML_VERNUM\s+\d+/) { "RUBY_LIBXML_VERNUM #{pkg_vernum}" }. - gsub(/RUBY_LIBXML_VER_MAJ\s+\d+/) { "RUBY_LIBXML_VER_MAJ #{maj}" }. - gsub(/RUBY_LIBXML_VER_MIN\s+\d+/) { "RUBY_LIBXML_VER_MIN #{min}" }. - gsub(/RUBY_LIBXML_VER_MIC\s+\d+/) { "RUBY_LIBXML_VER_MIC #{mic || 0}" }. - gsub(/RUBY_LIBXML_VER_PATCH\s+\d+/) { "RUBY_LIBXML_VER_PATCH #{patch || 0}" } + Dir[glob].each do |fn| + next if File.directory?(fn) + puts "test #{fn}" + f=Process.fork + if f.nil? + require fn + exit end - mv('ext/xml/libxml.h.new', 'ext/xml/libxml.h') + rss_k=0 + while (px=Process.wait2(f,Process::WNOHANG)).nil? + sleep 2 + rss_k2=`ps -o rss= -p #{f}`.to_i + rss_k=(rss_k2>rss_k) ? rss_k2 : rss_k + end + pid,status=px + puts "\nProcess #{pid} exited status #{status.exitstatus}, max rss(k) #{rss_k}" end -end -PKG_FILES = FileList[ - 'ext/xml/*.rb', - 'ext/xml/extconf.rb', - '[A-Z]*', - 'ext/xml/*.c', - 'ext/xml/*.inc', - 'ext/xml/ruby_xml*.h', - 'ext/xml/libxml.h', - 'tests/**/*', -] - -if ! defined?(Gem) - warn "Package Target requires RubyGEMs" -else - spec = Gem::Specification.new do |s| - - #### Basic information. - - s.name = 'libxml-ruby' - s.version = PKG_VERSION - s.summary = "LibXML2 bindings for Ruby" - s.description = <<-EOF - C-language bindings for Gnome LibXML2 and Ruby. Supports - high-speed, feature rich XML processing in Ruby apps. - EOF - s.extensions = 'ext/xml/extconf.rb' - - #### Which files are to be included in this gem? - - s.files = PKG_FILES.to_a - - #### Load-time details - s.require_path = 'lib' - - #### Documentation and testing. - s.has_rdoc = true - s.extra_rdoc_files = rd.rdoc_files.to_a - s.rdoc_options << - '--title' << 'Libxml-Ruby API' << - '--main' << 'README' - - s.test_files = Dir.glob('tests/*runner.rb') - - #### Author and project details. - - s.author = "Sean Chittenden" - s.email = "libxml-devel@rubyforge.org" - s.homepage = "http://libxml.rubyforge.org" - s.rubyforge_project = "libxml" - end - - # Quick fix for Ruby 1.8.3 / YAML bug - if (RUBY_VERSION == '1.8.3') - def spec.to_yaml - out = super - out = '--- ' + out unless out =~ /^---/ - out - end - end - - package_task = Rake::GemPackageTask.new(spec) do |pkg| - pkg.need_zip = true - pkg.need_tar_gz = true - pkg.package_dir = 'pkg' - end - - desc "Build a full release" - task :release => [:clobber, :update_version, :compile, :test, :package] end +