# Rantfile for Rant :) import "md5" import %w(rubytest rubydoc rubypackage autoclean win32/rubycmdwrapper sys/more) ENV["RANT_DEV_LIB_DIR"] = sys.expand_path("lib") task :default => :test dist_files = sys.filelist [ "NEWS", "README", "INSTALL", "COPYING", "Rantfile", "install.rb", "setup.rb", "run_rant", "run_import" ] dist_files.glob_unix "{bin,lib,test,doc,misc}/**/*" dist_files.exclude_name "html", "coverage" 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 task "dist-files" do puts dist_files 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." task :tall do puts "Running build tool tests..." make "trantfile" puts "Build tool tests successful." puts "Running library tests..." make "tlib" puts "All tests (build tool and library) successful." end gen RubyTest, :trantfile do |t| t.libs << "test" t.test_files = sys["test/**/test_*.rb"].exclude("test/lib/*") end gen RubyTest, :tlib do |t| t.libs << "test" t.test_files = sys["test/lib/**/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", "-w", "-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) ds = Time.now.strftime("%Y-%m-%d") puts "Starting download from: #{url}" res = Net::HTTP.start(url.host, url.port) { |http| http.request(req) } sys.write_to_file "../rant-repos_#{ds}.gz", res.body end task "rb-stats" do files = sys["lib/**/*.rb"] lines = 0 code_lines = 0 files.each { |fn| l, c = count_rb_lines(fn) lines += l code_lines += c } puts "Number of Ruby files under lib/: #{files.size}" puts " #{lines} total lines" puts " #{code_lines} LOC" files.exclude("lib/rant/archive*") lines = 0 code_lines = 0 files.each { |fn| l, c = count_rb_lines(fn) lines += l code_lines += c } puts " without lib/rant/archive/: #{files.size}" puts " #{lines} total lines" puts " #{code_lines} LOC" end def count_rb_lines(fn) lines = 0 code_lines = 0 in_multiline_comment = false File.readlines(fn).each { |line| lines += 1 case line when /=end(\s|$)/: in_multiline_comment = false next when /^\s*$/, /^\s*#/: next when /^=begin(\s|$)/ in_multiline_comment = true end code_lines += 1 unless in_multiline_comment } [lines, code_lines] end # vim:ft=ruby