# Rakefile for rake -*- ruby -*- # Copyright 2003, 2004 by Jim Weirich (jim@weirichhouse.org) # All rights reserved. # This file is may be distributed under an MIT style license. See # MIT-LICENSE for details. begin require 'rubygems' require 'rake/gempackagetask' rescue Exception nil end require 'rake/clean' require 'rake/testtask' require 'rake/rdoctask' CLEAN.include('**/*.o') CLOBBER.include('doc/example/main') # Determine the current version of the software if `ruby -Ilib ./bin/rake --version` =~ /\S+$/ PKG_VERSION = $& else PKG_VERSION = "0.0.0" end SRC_RB = FileList['lib/**/*.rb'] # The default task is run if rake is given no explicit arguments. desc "Default Task" task :default => :test # Test Tasks --------------------------------------------------------- Rake::TestTask.new do |t| t.test_files = FileList['test/test*.rb'] t.verbose = true end Rake::TestTask.new(:testfun) do |t| t.pattern = 'test/fun*.rb' t.verbose = true end Rake::TestTask.new(:testcontrib) do |t| t.pattern = 'test/contrib/test*.rb' t.verbose = true end directory 'testdata' task :test => ['testdata'] desc "Run all test targets" task :testall => [:test, :testcontrib, :testfun] # Abbreviations task :ta => [:testall] task :tf => [:testfun] task :tc => [:testcontrib] # CVS Tasks ---------------------------------------------------------- desc "Tag all the CVS files with the latest release number (TAG=x)" task :tag do rel = "REL_" + PKG_VERSION.gsub(/\./, '_') rel << ENV['TAG'] if ENV['TAG'] puts rel sh %{cvs commit -m 'pre-tag commit'} sh %{cvs tag #{rel}} end # Install rake using the standard install.rb script. desc "Install the application" task :install do ruby "install.rb" end # Create a task to build the RDOC documentation tree. rd = Rake::RDocTask.new("rdoc") { |rdoc| rdoc.rdoc_dir = 'html' # rdoc.template = 'kilmer' # rdoc.template = 'css2' rdoc.title = "Rake -- Ruby Make" rdoc.options << '--line-numbers' << '--inline-source' << '--main' << 'README' rdoc.rdoc_files.include('README', 'MIT-LICENSE', 'TODO', 'CHANGES') rdoc.rdoc_files.include('lib/**/*.rb', 'doc/**/*.rdoc') rdoc.rdoc_files.exclude(/\bcontrib\b/) } # ==================================================================== # Create a task that will package the Rake software into distributable # tar, zip and gem files. PKG_FILES = FileList[ 'install.rb', '[A-Z]*', 'bin/**/*', 'lib/**/*.rb', 'test/**/*.rb', 'doc/**/*' ] PKG_FILES.exclude('doc/example/*.o') PKG_FILES.exclude(%r{doc/example/main$}) if ! defined?(Gem) puts "Package Target requires RubyGEMs" else spec = Gem::Specification.new do |s| #### Basic information. s.name = 'rake' s.version = PKG_VERSION s.summary = "Ruby based make-like utility." s.description = <<-EOF Rake is a Make-like program implemented in Ruby. Tasks and dependencies are specified in standard Ruby syntax. EOF #### Dependencies and requirements. #s.add_dependency('log4r', '> 1.0.4') #s.requirements << "" #### Which files are to be included in this gem? Everything! (Except CVS directories.) s.files = PKG_FILES.to_a #### C code extensions. #s.extensions << "ext/rmagic/extconf.rb" #### Load-time details: library and application (you will need one or both). s.require_path = 'lib' # Use these for libraries. s.autorequire = 'rake' s.bindir = "bin" # Use these for applications. s.executables = ["rake"] s.default_executable = "rake" #### Documentation and testing. s.has_rdoc = true s.extra_rdoc_files = rd.rdoc_files.reject { |fn| fn =~ /\.rb$/ }.to_a s.rdoc_options << '--title' << 'Rake -- Ruby Make' << '--main' << 'README' << '--line-numbers' #### Author and project details. s.author = "Jim Weirich" s.email = "jim@weirichhouse.org" s.homepage = "http://onestepback.org" s.rubyforge_project = "rake" end Rake::GemPackageTask.new(spec) do |pkg| #pkg.need_zip = true pkg.need_tar = true end end # Misc tasks ========================================================= def count_lines(filename) lines = 0 codelines = 0 open(filename) { |f| f.each do |line| lines += 1 next if line =~ /^\s*$/ next if line =~ /^\s*#/ codelines += 1 end } [lines, codelines] end def show_line(msg, lines, loc) printf "%6s %6s %s\n", lines.to_s, loc.to_s, msg end desc "Count lines in the main rake file" task :lines do total_lines = 0 total_code = 0 show_line("File Name", "LINES", "LOC") SRC_RB.each do |fn| lines, codelines = count_lines(fn) show_line(fn, lines, codelines) total_lines += lines total_code += codelines end show_line("TOTAL", total_lines, total_code) end ARCHIVEDIR = '/mnt/usb' task :archive => [:package] do cp FileList["pkg/*.tgz", "pkg/*.zip", "pkg/*.gem"], ARCHIVEDIR end # Define an optional publish target in an external file. If the # publish.rf file is not found, the publish targets won't be defined. load "publish.rf" if File.exist? "publish.rf"