| 1 | # encoding: utf-8 |
|---|
| 2 | require 'rubygems' |
|---|
| 3 | require 'rake' |
|---|
| 4 | require 'rake/rdoctask' |
|---|
| 5 | require 'rake/packagetask' |
|---|
| 6 | require 'rake/gempackagetask' |
|---|
| 7 | require 'rake/contrib/sshpublisher' |
|---|
| 8 | require 'spec/rake/spectask' |
|---|
| 9 | require 'rake/clean' |
|---|
| 10 | require 'rbconfig' |
|---|
| 11 | require 'rubyforge' |
|---|
| 12 | |
|---|
| 13 | $: << './lib' |
|---|
| 14 | $: << './ext' |
|---|
| 15 | require 'fastxml/fastxml_lib' |
|---|
| 16 | full_name = "FastXml" |
|---|
| 17 | short_name = full_name.downcase |
|---|
| 18 | |
|---|
| 19 | extension = "fastxml" |
|---|
| 20 | ext = "ext" |
|---|
| 21 | ext_so = "#{ext}/#{extension}.#{Config::CONFIG['DLEXT']}" |
|---|
| 22 | ext_files = FileList[ |
|---|
| 23 | "#{ext}/*.c", |
|---|
| 24 | "#{ext}/*.h", |
|---|
| 25 | "#{ext}/extconf.rb", |
|---|
| 26 | "#{ext}/Makefile", |
|---|
| 27 | "lib" |
|---|
| 28 | ] |
|---|
| 29 | |
|---|
| 30 | |
|---|
| 31 | CLEAN.include ["#{ext}/Makefile", "#{ext}/.o", "#{ext_so}", '*.gem'] |
|---|
| 32 | |
|---|
| 33 | # Many of these tasks were garnered from zenspider's Hoe |
|---|
| 34 | # just forced to work my way |
|---|
| 35 | |
|---|
| 36 | desc 'Default: run unit tests.' |
|---|
| 37 | task :default => ["#{extension}", :spec] |
|---|
| 38 | |
|---|
| 39 | spec = Gem::Specification.new do |s| |
|---|
| 40 | s.name = short_name |
|---|
| 41 | s.full_name |
|---|
| 42 | s.version = FastXml::VERSION |
|---|
| 43 | s.author = "Mark Guzman" |
|---|
| 44 | s.email = "segfault@hasno.info" |
|---|
| 45 | s.homepage = "http://rubyforge.org/fastxml" |
|---|
| 46 | s.platform = Gem::Platform::RUBY |
|---|
| 47 | s.summary = "Fast Xml Library" |
|---|
| 48 | s.rubyforge_project = short_name |
|---|
| 49 | s.description = "A simple ruby interface to libxml (with hpricot-like syntax)" |
|---|
| 50 | s.files = FileList["{bin,lib,ext,test_data}/**/*"].to_a |
|---|
| 51 | s.require_paths = %w[ ext lib ] |
|---|
| 52 | s.extensions = [ "ext/extconf.rb" ] |
|---|
| 53 | s.autorequire = short_name |
|---|
| 54 | s.test_files = FileList["{specs}/**/*spec.rb"].to_a |
|---|
| 55 | s.has_rdoc = true |
|---|
| 56 | s.extra_rdoc_files = %w[README LICENSE] |
|---|
| 57 | s.add_dependency("rspec", ">= 1.0.3") |
|---|
| 58 | s.add_dependency("rake", ">= #{RAKEVERSION}") |
|---|
| 59 | s.add_dependency("rubyforge", ">= #{::RubyForge::VERSION}") |
|---|
| 60 | end |
|---|
| 61 | |
|---|
| 62 | desc "Builds just the #{extension} extension" |
|---|
| 63 | task extension.to_sym => ["#{ext}/Makefile", ext_so ] |
|---|
| 64 | |
|---|
| 65 | file "#{ext}/Makefile" => ["#{ext}/extconf.rb"] do |
|---|
| 66 | Dir.chdir(ext) do ruby "extconf.rb" end |
|---|
| 67 | end |
|---|
| 68 | |
|---|
| 69 | file ext_so => ext_files do |
|---|
| 70 | Dir.chdir(ext) do |
|---|
| 71 | sh(PLATFORM =~ /win32/ ? 'nmake' : 'make') |
|---|
| 72 | end |
|---|
| 73 | #mkdir_p ARCHLIB |
|---|
| 74 | #cp ext_so, ARCHLIB |
|---|
| 75 | end |
|---|
| 76 | |
|---|
| 77 | desc "Task for cruise Control" |
|---|
| 78 | task :cruise => ["clean", "#{extension}", "spec"] do |
|---|
| 79 | out = ENV['CC_BUILD_ARTIFACTS'] |
|---|
| 80 | system "mv coverage #{out}" if out |
|---|
| 81 | end |
|---|
| 82 | |
|---|
| 83 | Spec::Rake::SpecTask.new do |t| |
|---|
| 84 | t.rcov = true |
|---|
| 85 | t.spec_files = FileList[ 'specs/*spec.rb' ] |
|---|
| 86 | end |
|---|
| 87 | |
|---|
| 88 | Rake::RDocTask.new do |rd| |
|---|
| 89 | rd.main = "README" |
|---|
| 90 | rd.rdoc_files.include("README", "LICENSE", "ext/*.c", "lib/**/*.rb") |
|---|
| 91 | rd.title = "%s (%s) Documentation" % [ full_name, spec.version ] |
|---|
| 92 | rd.rdoc_dir = 'doc' |
|---|
| 93 | end |
|---|
| 94 | |
|---|
| 95 | |
|---|
| 96 | Rake::GemPackageTask.new(spec) do |pkg| |
|---|
| 97 | pkg.need_tar = true |
|---|
| 98 | end |
|---|
| 99 | |
|---|
| 100 | desc 'Clean up all the extras' |
|---|
| 101 | task :clean => [ :clobber_rdoc, :clobber_package ] do |
|---|
| 102 | %w[*.gem ri coverage*].each do |pattern| |
|---|
| 103 | files = Dir[pattern] |
|---|
| 104 | rm_rf files unless files.empty? |
|---|
| 105 | end |
|---|
| 106 | end |
|---|
| 107 | |
|---|
| 108 | desc 'Publish RDoc to RubyForge' |
|---|
| 109 | task :publish_docs => [:clean, :rdoc] do |
|---|
| 110 | config = YAML.load(File.read(File.expand_path("~/.rubyforge/user-config.yml"))) |
|---|
| 111 | host = "#{config["username"]}@rubyforge.org" |
|---|
| 112 | remote_dir = "/var/www/gforge-projects/#{spec.rubyforge_project}" |
|---|
| 113 | local_dir = 'doc' |
|---|
| 114 | sh %{rsync -av --delete #{local_dir}/ #{host}:#{remote_dir}} |
|---|
| 115 | end |
|---|
| 116 | |
|---|
| 117 | desc 'Package and upload the release to rubyforge.' |
|---|
| 118 | task :release => [:clean, :package] do |t| |
|---|
| 119 | v = ENV["VERSION"] or abort "Must supply VERSION=x.y.z" |
|---|
| 120 | abort "Versions don't match '#{v}' vs '#{spec.version}'" if v != spec.version.to_s |
|---|
| 121 | pkg = "pkg/#{spec.name}-#{spec.version}" |
|---|
| 122 | |
|---|
| 123 | if $DEBUG then |
|---|
| 124 | puts "release_id = rf.add_release #{spec.rubyforge_project.inspect}, #{spec.name.inspect}, #{version.inspect}, \"#{pkg}.tgz\"" |
|---|
| 125 | puts "rf.add_file #{spec.rubyforge_project.inspect}, #{spec.name.inspect}, release_id, \"#{pkg}.gem\"" |
|---|
| 126 | end |
|---|
| 127 | |
|---|
| 128 | rf = RubyForge.new |
|---|
| 129 | puts "Logging in" |
|---|
| 130 | rf.login |
|---|
| 131 | |
|---|
| 132 | changes = open("NOTES").readlines.join("") if File.exists?("NOTES") |
|---|
| 133 | c = rf.userconfig |
|---|
| 134 | c["release_notes"] = spec.description if spec.description |
|---|
| 135 | c["release_changes"] = changes if changes |
|---|
| 136 | c["preformatted"] = true |
|---|
| 137 | |
|---|
| 138 | files = ["#{pkg}.tgz", "#{pkg}.gem"].compact |
|---|
| 139 | |
|---|
| 140 | puts "Releasing #{spec.name} v. #{spec.version}" |
|---|
| 141 | rf.add_release spec.rubyforge_project, spec.name, spec.version.to_s, *files |
|---|
| 142 | end |
|---|
| 143 | |
|---|
| 144 | desc 'Install the package as a gem' |
|---|
| 145 | task :install_gem => [:clean, :package] do |
|---|
| 146 | sh "sudo gem install pkg/*.gem" |
|---|
| 147 | end |
|---|
| 148 | |
|---|
| 149 | desc 'Run Benchmarks' |
|---|
| 150 | namespace :bm do |
|---|
| 151 | desc 'simple speedtest (atom rss)' |
|---|
| 152 | task :speed => [ "#{extension}" ] do |
|---|
| 153 | sh 'ruby ./benchmarks/speedtest.rb' |
|---|
| 154 | end |
|---|
| 155 | |
|---|
| 156 | desc 'large file test (1MB)' |
|---|
| 157 | task :largefile => [ "#{extension}" ] do |
|---|
| 158 | sh 'ruby ./benchmarks/largefile.rb' |
|---|
| 159 | end |
|---|
| 160 | |
|---|
| 161 | desc 'unicode file' |
|---|
| 162 | task :unicode => [ "#{extension}" ] do |
|---|
| 163 | sh 'ruby ./benchmarks/unicode.rb' |
|---|
| 164 | end |
|---|
| 165 | end |
|---|