# encoding: utf-8 require 'rubygems' require 'rake' require 'rake/rdoctask' require 'rake/packagetask' require 'rake/gempackagetask' require 'rake/contrib/sshpublisher' require 'spec/rake/spectask' require 'rake/clean' require 'rbconfig' require 'rubyforge' $: << './lib' $: << './ext' require 'fastxml/fastxml_lib' full_name = "FastXml" short_name = full_name.downcase extension = "fastxml" ext = "ext" ext_so = "#{ext}/#{extension}.#{Config::CONFIG['DLEXT']}" ext_files = FileList[ "#{ext}/*.c", "#{ext}/*.h", "#{ext}/extconf.rb", "#{ext}/Makefile", "lib" ] CLEAN.include ["#{ext}/Makefile", "#{ext}/.o", "#{ext_so}", '*.gem'] # Many of these tasks were garnered from zenspider's Hoe # just forced to work my way desc 'Default: run unit tests.' task :default => ["#{extension}", :spec] spec = Gem::Specification.new do |s| s.name = short_name s.full_name s.version = FastXml::VERSION s.author = "Mark Guzman" s.email = "segfault@hasno.info" s.homepage = "http://rubyforge.org/fastxml" s.platform = Gem::Platform::RUBY s.summary = "Fast Xml Library" s.rubyforge_project = short_name s.description = "A simple ruby interface to libxml (with hpricot-like syntax)" s.files = FileList["{bin,lib,ext,test_data}/**/*"].to_a s.require_paths = %w[ ext lib ] s.extensions = [ "ext/extconf.rb" ] s.autorequire = short_name s.test_files = FileList["{specs}/**/*spec.rb"].to_a s.has_rdoc = true s.extra_rdoc_files = %w[README LICENSE] s.add_dependency("rspec", ">= 1.0.3") s.add_dependency("rake", ">= #{RAKEVERSION}") s.add_dependency("rubyforge", ">= #{::RubyForge::VERSION}") end desc "Builds just the #{extension} extension" task extension.to_sym => ["#{ext}/Makefile", ext_so ] file "#{ext}/Makefile" => ["#{ext}/extconf.rb"] do Dir.chdir(ext) do ruby "extconf.rb" end end file ext_so => ext_files do Dir.chdir(ext) do sh(PLATFORM =~ /win32/ ? 'nmake' : 'make') end #mkdir_p ARCHLIB #cp ext_so, ARCHLIB end desc "Task for cruise Control" task :cruise => ["clean", "#{extension}", "spec"] do out = ENV['CC_BUILD_ARTIFACTS'] system "mv coverage #{out}" if out end Spec::Rake::SpecTask.new do |t| t.rcov = true t.spec_files = FileList[ 'specs/*spec.rb' ] end Rake::RDocTask.new do |rd| rd.main = "README" rd.rdoc_files.include("README", "LICENSE", "ext/*.c", "lib/**/*.rb") rd.title = "%s (%s) Documentation" % [ full_name, spec.version ] rd.rdoc_dir = 'doc' end Rake::GemPackageTask.new(spec) do |pkg| pkg.need_tar = true end desc 'Clean up all the extras' task :clean => [ :clobber_rdoc, :clobber_package ] do %w[*.gem ri coverage*].each do |pattern| files = Dir[pattern] rm_rf files unless files.empty? end end desc 'Publish RDoc to RubyForge' task :publish_docs => [:clean, :rdoc] do config = YAML.load(File.read(File.expand_path("~/.rubyforge/user-config.yml"))) host = "#{config["username"]}@rubyforge.org" remote_dir = "/var/www/gforge-projects/#{spec.rubyforge_project}" local_dir = 'doc' sh %{rsync -av --delete #{local_dir}/ #{host}:#{remote_dir}} end desc 'Package and upload the release to rubyforge.' task :release => [:clean, :package] do |t| v = ENV["VERSION"] or abort "Must supply VERSION=x.y.z" abort "Versions don't match '#{v}' vs '#{spec.version}'" if v != spec.version.to_s pkg = "pkg/#{spec.name}-#{spec.version}" if $DEBUG then puts "release_id = rf.add_release #{spec.rubyforge_project.inspect}, #{spec.name.inspect}, #{version.inspect}, \"#{pkg}.tgz\"" puts "rf.add_file #{spec.rubyforge_project.inspect}, #{spec.name.inspect}, release_id, \"#{pkg}.gem\"" end rf = RubyForge.new puts "Logging in" rf.login changes = open("NOTES").readlines.join("") if File.exists?("NOTES") c = rf.userconfig c["release_notes"] = spec.description if spec.description c["release_changes"] = changes if changes c["preformatted"] = true files = ["#{pkg}.tgz", "#{pkg}.gem"].compact puts "Releasing #{spec.name} v. #{spec.version}" rf.add_release spec.rubyforge_project, spec.name, spec.version.to_s, *files end desc 'Install the package as a gem' task :install_gem => [:clean, :package] do sh "sudo gem install pkg/*.gem" end desc 'Run Benchmarks' namespace :bm do desc 'simple speedtest (atom rss)' task :speed => [ "#{extension}" ] do sh 'ruby ./benchmarks/speedtest.rb' end desc 'large file test (1MB)' task :largefile => [ "#{extension}" ] do sh 'ruby ./benchmarks/largefile.rb' end desc 'unicode file' task :unicode => [ "#{extension}" ] do sh 'ruby ./benchmarks/unicode.rb' end end