# Rakefile for Rack. -*-ruby-*- require 'rake/rdoctask' require 'rake/testtask' desc "Run all the tests" task :default => [:test] desc "Do predistribution stuff" task :predist => [:chmod, :changelog, :rdoc] desc "Make an archive as .tar.gz" task :dist => [:fulltest, :predist] do sh "git archive --format=tar --prefix=#{release}/ HEAD^{tree} >#{release}.tar" sh "pax -waf #{release}.tar -s ':^:#{release}/:' RDOX SPEC ChangeLog doc" sh "gzip -f -9 #{release}.tar" end # Helper to retrieve the "revision number" of the git tree. def git_tree_version if File.directory?(".git") @tree_version ||= `git describe`.strip.sub('-', '.') @tree_version << ".0" unless @tree_version.count('.') == 2 else $: << "lib" require 'rack' @tree_version = Rack.release end @tree_version end def gem_version git_tree_version.gsub(/-.*/, '') end def release "rack-#{git_tree_version}" end def manifest `git ls-files`.split("\n") end desc "Make binaries executable" task :chmod do Dir["bin/*"].each { |binary| File.chmod(0775, binary) } Dir["test/cgi/test*"].each { |binary| File.chmod(0775, binary) } end desc "Generate a ChangeLog" task :changelog do File.open("ChangeLog", "w") { |out| `git log -z`.split("\0").map { |chunk| author = chunk[/Author: (.*)/, 1].strip date = chunk[/Date: (.*)/, 1].strip desc, detail = $'.strip.split("\n", 2) detail ||= "" detail = detail.gsub(/.*darcs-hash:.*/, '') detail.rstrip! out.puts "#{date} #{author}" out.puts " * #{desc.strip}" out.puts detail unless detail.empty? out.puts } } end desc "Generate RDox" task "RDOX" do sh "specrb -Ilib:test -a --rdox >RDOX" end desc "Generate Rack Specification" task "SPEC" do File.open("SPEC", "wb") { |file| IO.foreach("lib/rack/lint.rb") { |line| if line =~ /## (.*)/ file.puts $1 end } } end desc "Run all the fast tests" task :test do sh "specrb -Ilib:test -w #{ENV['TEST'] || '-a'} #{ENV['TESTOPTS'] || '-t "^(?!Rack::Handler|Rack::Adapter|Rack::Session::Memcache|Rack::Auth::OpenID)"'}" end desc "Run all the tests" task :fulltest => [:chmod] do sh "specrb -Ilib:test -w #{ENV['TEST'] || '-a'} #{ENV['TESTOPTS']}" end begin require 'rubygems' require 'rake' require 'rake/clean' require 'rake/packagetask' require 'rake/gempackagetask' require 'fileutils' rescue LoadError # Too bad. else spec = Gem::Specification.new do |s| s.name = "rack" s.version = gem_version s.platform = Gem::Platform::RUBY s.summary = "a modular Ruby webserver interface" s.description = <<-EOF Rack provides minimal, modular and adaptable interface for developing web applications in Ruby. By wrapping HTTP requests and responses in the simplest way possible, it unifies and distills the API for web servers, web frameworks, and software in between (the so-called middleware) into a single method call. Also see http://rack.rubyforge.org. EOF s.files = manifest + %w(SPEC RDOX) s.bindir = 'bin' s.executables << 'rackup' s.require_path = 'lib' s.has_rdoc = true s.extra_rdoc_files = ['README', 'SPEC', 'RDOX', 'KNOWN-ISSUES'] s.test_files = Dir['test/{test,spec}_*.rb'] s.author = 'Christian Neukirchen' s.email = 'chneukirchen@gmail.com' s.homepage = 'http://rack.rubyforge.org' s.rubyforge_project = 'rack' end Rake::GemPackageTask.new(spec) do |p| p.gem_spec = spec p.need_tar = false p.need_zip = false end end desc "Generate RDoc documentation" Rake::RDocTask.new(:rdoc) do |rdoc| rdoc.options << '--line-numbers' << '--inline-source' << '--main' << 'README' << '--title' << 'Rack Documentation' << '--charset' << 'utf-8' rdoc.rdoc_dir = "doc" rdoc.rdoc_files.include 'README' rdoc.rdoc_files.include 'KNOWN-ISSUES' rdoc.rdoc_files.include 'SPEC' rdoc.rdoc_files.include 'RDOX' rdoc.rdoc_files.include('lib/rack.rb') rdoc.rdoc_files.include('lib/rack/*.rb') rdoc.rdoc_files.include('lib/rack/*/*.rb') end task :rdoc => ["SPEC", "RDOX"] task :pushsite => [:rdoc] do sh "rsync -avz doc/ chneukirchen@rack.rubyforge.org:/var/www/gforge-projects/rack/doc/" sh "rsync -avz site/ chneukirchen@rack.rubyforge.org:/var/www/gforge-projects/rack/" end begin require 'rcov/rcovtask' Rcov::RcovTask.new do |t| t.test_files = FileList['test/{spec,test}_*.rb'] t.verbose = true # uncomment to see the executed command t.rcov_opts = ["--text-report", "-Ilib:test", "--include-file", "^lib,^test", "--exclude-only", "^/usr,^/home/.*/src,active_"] end rescue LoadError end