# Rantfile for Rant :) import "md5" import %w(rubytest rubydoc rubypackage autoclean win32/rubycmdwrapper sys/more) task :default => :test dist_files = sys["{bin,lib,test,doc,misc}/**/*"] dist_files.shun("html", "coverage") dist_files += sys["*"].no_dir.exclude("InstalledFiles", "Session.vim") dist_files.exclude("mk", "bench-*") hp_files = sys["doc/homepage/*"] rdoc_files = sys["README", "NEWS", "INSTALL", "doc/*.rdoc"] # remove when compiler stuff is getting useful... dist_files.exclude "lib/rant/compiler*", "lib/rant/import/c/program.rb" rdoc_opts = %w(-S -c UTF-8 --title Rant --main README) gen RubyPackage, "rant#{var :pkg_ext}" do |t| t.version = `#{sys.sp Env::RUBY_EXE} run_rant --version`.split[1] t.summary = "Rant is a Ruby based build tool." t.files = dist_files t.bindir = "bin" t.executable %w(rant rant-import) t.author = "Stefan Lang" t.email = "langstefan@gmx.at" t.rubyforge_project = "make" t.homepage = "http://make.rubyforge.org" t.has_rdoc = false t.gem_extra_rdoc_files = rdoc_files t.gem_rdoc_options = rdoc_opts desc "Create packages for distribution." t.package_task end desc "Generate documentation." gen RubyDoc do |g| g.verbose = true g.dir = "doc/html" g.files = rdoc_files g.opts = rdoc_opts + %w(-T doc/jamis.rb) end html_index = "doc/html/index.html" api_index = html_index.sub("index", "api") enhance "doc/html/index.html" do sys.rm_f api_index # remove old RDoc index page make "hp2doc" end task "hp2doc" do if test(?f, html_index) && !test(?f, api_index) sys.mv html_index, api_index end sys.cp hp_files, "doc/html" end desc "Publish html docs on make.rubyfore.org.", "Note: scp will prompt for rubyforge password." task "publish-docs" => :doc do sys "scp -r doc/html/* langi@rubyforge.org:/var/www/gforge-projects/make/" end task "publish-hp" do sys "scp -r doc/homepage/* langi@rubyforge.org:/var/www/gforge-projects/make/" end desc "Run basic tests." gen RubyTest do |g| g.libs << "test" g.pattern = 'test_*.rb' end desc "Run first test-project." gen RubyTest, :testp1 do |g| g.libs << "test" g.test_files = ["test/project1/test_project.rb"] end desc "Run second test project." gen RubyTest, :testp2 do |g| g.libs << "test" g.test_files = ["test/project2/test_project.rb"] end desc "Test small Ruby project." gen RubyTest, :testrb1 do |g| g.libs << "test" g.test_files = %w(test/project_rb1/test_project_rb1.rb) end desc "Test plugins." gen RubyTest, :testplugins do |g| g.libs << "test" g.test_files = sys["test/plugin/**/test_*"] end desc "Run all tests and generate coverage with rcov." task :cov do lp = File.expand_path "lib" sys.cd "test" do sys %W(rcov -xtutil.rb,ts_*,tc_*,test_* -I#{lp} ts_all.rb) end end desc "Test project with subdirs." gen RubyTest, :tsubdirs do |t| t.libs << "test" t.test_files = sys["test/subdirs/test_*.rb"] end desc "Test rant-import command." gen RubyTest, :trimport do |t| t.libs << "test" t.test_files = sys["test/rant-import/test_*.rb"] end desc "Test import/ libraries." gen RubyTest, :timport do |t| t.libs << "test" t.test_files = sys["test/import/**/test_*.rb"] end desc "Test C support." gen RubyTest, :tc do |t| t.libs << "test" t.test_files = sys["test/c/test_*.rb", "test/import/c/**/test_*.rb"] end desc "Run all tests." gen RubyTest, :tall do |g| g.libs << "test" g.test_files = sys["test/**/test_*.rb"] end task :t180 do |t| # my installed testrb version doesn't work with ruby-1.8.0 sys.cd "test" if var[:TEST] sys "ruby180", "-rtest/unit", "-I", sys.expand_path("@lib"), "-I", sys.expand_path("."), var[:TEST].sub(/^test\//, '') else sys "ruby180 ts_all.rb" end end desc "Remove autogenerated files." gen AutoClean, :clean var[:clean].include %w( InstalledFiles .config bench-rant bench-depsearch test/coverage ) # Just for quick visual testing of rant... task :please_fail do |t| sys "mix_nix_gibts" end task "to-win" => :package do win_dir = "/mnt/data_fat/stefan/Ruby" Dir["pkg/*"].each { |f| target = File.join(win_dir, File.basename(f)) make target => f do |t| sys.rm_rf target if test(?e, target) sys.cp_r f, t.name end } end desc "Install Rant." task :install do sys.ruby "setup.rb" # try to install man page man_path = ENV["MANPATH"] if man_path puts "trying to install rant(1) manpage..." require 'rbconfig' prefix = Config::CONFIG["prefix"] dirs = sys.split_path man_path man_dir = dirs.find{|d| d == "#{prefix}/man" } || dirs.first sys.install "doc/rant.1", "#{man_dir}/man1", :mode => 0644 if man_dir end end if Env.on_windows? enhance :install => (gen Win32::RubyCmdWrapper, sys["bin/*"]) end task "svn-clean" do `svn stat`.split(/\n/).each { |line| sys.clean line[7..-1] if line[0] == ?? } end task "check-168" do rbfiles = sys["bin/rant*", "lib/**/*.rb"] ok = [] bad = [] rbfiles.each { |fn| sys "ruby168 -c #{fn}" do |ps| (ps.exitstatus == 0 ? ok : bad) << fn end } puts "Bad files:" bad.each { |b| puts " #{b}" } puts "#{ok.size} of #{rbfiles.size} are OK" end task "fetch-svn-dump" do require 'net/http' require 'uri' url = URI.parse("http://svn.berlios.de/svndumps/rant-repos.gz") req = Net::HTTP::Get.new(url.path) puts "Starting download from: #{url}" res = Net::HTTP.start(url.host, url.port) { |http| http.request(req) } sys.write_to_file "../rant-repos.gz", res.body end # vim:ft=ruby