123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296 |
- # Rakefile for rake -*- ruby -*-
- # Copyright 2004, 2005, 2006 by Jim Weirich (jim@weirichhouse.org).
- # All rights reserved.
- # Permission is granted for use, copying, modification, distribution,
- # and distribution of modified versions of this work as long as the
- # above copyright notice is included.
- require 'rake/clean'
- require 'rake/testtask'
- require 'rake/rdoctask'
- begin
- require 'rubygems'
- require 'rake/gempackagetask'
- rescue Exception
- nil
- end
- # Determine the current version of the software
- CLOBBER.include('pkg')
- CURRENT_VERSION = '3.0.0'
- PKG_VERSION = ENV['REL'] ? ENV['REL'] : CURRENT_VERSION
- SRC_RB = FileList['lib/**/*.rb']
- # The default task is run if rake is given no explicit arguments.
- desc "Default Task"
- task :default => :test_all
- # Test Tasks ---------------------------------------------------------
- desc "Run all tests"
- task :test_all => [:test_units]
- task :ta => [:test_all]
- task :tu => [:test_units]
- Rake::TestTask.new("test_units") do |t|
- t.test_files = FileList['test/test*.rb']
- t.libs << "."
- t.verbose = false
- end
- # Create a task to build the RDOC documentation tree.
- rd = Rake::RDocTask.new("rdoc") { |rdoc|
- rdoc.rdoc_dir = 'html'
- rdoc.title = "Builder for Markup"
- rdoc.options << '--line-numbers' << '--inline-source' << '--main' << 'README.rdoc'
- rdoc.rdoc_files.include('lib/**/*.rb', '[A-Z]*', 'doc/**/*.rdoc')
- rdoc.template = 'doc/jamis.rb'
- }
- # ====================================================================
- # Create a task that will package the Rake software into distributable
- # gem files.
- PKG_FILES = FileList[
- 'lib/**/*.rb',
- 'test/**/*.rb',
- 'scripts/**/*.rb'
- ]
- PKG_FILES.exclude('test/testcssbuilder.rb')
- PKG_FILES.exclude('lib/builder/css.rb')
- BLANKSLATE_FILES = FileList[
- 'lib/blankslate.rb',
- 'test/test_blankslate.rb'
- ]
- if ! defined?(Gem)
- puts "Package Target requires RubyGEMs"
- else
- spec = Gem::Specification.new do |s|
- #### Basic information.
- s.name = 'builder'
- s.version = PKG_VERSION
- s.summary = "Builders for MarkUp."
- s.description = %{\
- Builder provides a number of builder objects that make creating structured data
- simple to do. Currently the following builder objects are supported:
- * XML Markup
- * XML Events
- }
- s.files = PKG_FILES.to_a
- s.require_path = 'lib'
- s.autorequire = 'builder'
- s.test_files = PKG_FILES.select { |fn| fn =~ /^test\/test/ }
- s.has_rdoc = true
- s.extra_rdoc_files = rd.rdoc_files.reject { |fn| fn =~ /\.rb$/ }.to_a
- s.rdoc_options <<
- '--title' << 'Builder -- Easy XML Building' <<
- '--main' << 'README.rdoc' <<
- '--line-numbers'
- s.author = "Jim Weirich"
- s.email = "jim@weirichhouse.org"
- s.homepage = "http://onestepback.org"
- end
- blankslate_spec = Gem::Specification.new do |s|
- #### Basic information.
- s.name = 'blankslate'
- s.version = PKG_VERSION
- s.summary = "Blank Slate base class."
- s.description = %{\
- BlankSlate provides a base class where almost all of the methods from Object and
- Kernel have been removed. This is useful when providing proxy object and other
- classes that make heavy use of method_missing.
- }
- s.files = BLANKSLATE_FILES.to_a
- s.require_path = 'lib'
- s.autorequire = 'builder'
- s.test_files = PKG_FILES.select { |fn| fn =~ /^test\/test/ }
- s.has_rdoc = true
- s.extra_rdoc_files = rd.rdoc_files.reject { |fn| fn =~ /\.rb$/ }.to_a
- s.rdoc_options <<
- '--title' << 'BlankSlate -- Base Class for building proxies.' <<
- '--main' << 'README.rdoc' <<
- '--line-numbers'
- s.author = "Jim Weirich"
- s.email = "jim@weirichhouse.org"
- s.homepage = "http://onestepback.org"
- end
- namespace 'builder' do
- Rake::GemPackageTask.new(spec) do |t|
- t.need_tar = true
- end
- end
- namespace 'blankslate' do
- Rake::GemPackageTask.new(blankslate_spec) do |t|
- t.need_tar = true
- end
- end
- task :package => ['builder:package', 'blankslate:package']
- end
- desc "Look for Debugging print lines"
- task :dbg do
- FileList['**/*.rb'].egrep /\bDBG|\bbreakpoint\b/
- end
- # RCov ---------------------------------------------------------------
- begin
- require 'rcov/rcovtask'
- Rcov::RcovTask.new do |t|
- t.libs << "test"
- t.rcov_opts = [
- '-xRakefile', '--text-report'
- ]
- t.test_files = FileList[
- 'test/test*.rb'
- ]
- t.output_dir = 'coverage'
- t.verbose = true
- end
- rescue LoadError
- # No rcov available
- end
- # Tags file ----------------------------------------------------------
- namespace "tags" do
- desc "Create a TAGS file"
- task :emacs => "TAGS"
- TAGS = 'xctags -e'
- file "TAGS" => SRC_RB do
- puts "Makings TAGS"
- sh "#{TAGS} #{SRC_RB}", :verbose => false
- end
- end
- # --------------------------------------------------------------------
- # Creating a release
- def announce(msg='')
- STDERR.puts msg
- end
- desc "Make a new release"
- task :release => [
- :prerelease,
- :clobber,
- :test_all,
- :update_version,
- :package,
- :tag] do
- announce
- announce "**************************************************************"
- announce "* Release #{PKG_VERSION} Complete."
- announce "* Packages ready to upload."
- announce "**************************************************************"
- announce
- end
- # Validate that everything is ready to go for a release.
- task :prerelease do
- announce
- announce "**************************************************************"
- announce "* Making RubyGem Release #{PKG_VERSION}"
- announce "* (current version #{CURRENT_VERSION})"
- announce "**************************************************************"
- announce
- # Is a release number supplied?
- unless ENV['REL']
- fail "Usage: rake release REL=x.y.z [REUSE=tag_suffix]"
- end
- # Is the release different than the current release.
- # (or is REUSE set?)
- if PKG_VERSION == CURRENT_VERSION && ! ENV['REUSE']
- fail "Current version is #{PKG_VERSION}, must specify REUSE=tag_suffix to reuse version"
- end
- # Are all source files checked in?
- if ENV['RELTEST']
- announce "Release Task Testing, skipping checked-in file test"
- else
- announce "Checking for unchecked-in files..."
- data = `cvs -q update`
- unless data =~ /^$/
- fail "CVS update is not clean ... do you have unchecked-in files?"
- end
- announce "No outstanding checkins found ... OK"
- end
- end
- task :update_version => [:prerelease] do
- if PKG_VERSION == CURRENT_VERSION
- announce "No version change ... skipping version update"
- else
- announce "Updating Builder version to #{PKG_VERSION}"
- open("Rakefile") do |rakein|
- open("Rakefile.new", "w") do |rakeout|
- rakein.each do |line|
- if line =~ /^CURRENT_VERSION\s*=\s*/
- rakeout.puts "CURRENT_VERSION = '#{PKG_VERSION}'"
- else
- rakeout.puts line
- end
- end
- end
- end
- mv "Rakefile.new", "Rakefile"
- if ENV['RELTEST']
- announce "Release Task Testing, skipping commiting of new version"
- else
- sh "cvs commit -m \"Updated to version #{PKG_VERSION}\" Rakefile"
- end
- end
- end
- desc "Tag all the CVS files with the latest release number (REL=x.y.z)"
- task :tag => [:prerelease] do
- reltag = "REL_#{PKG_VERSION.gsub(/\./, '_')}"
- reltag << ENV['REUSE'].gsub(/\./, '_') if ENV['REUSE']
- announce "Tagging CVS with [#{reltag}]"
- if ENV['RELTEST']
- announce "Release Task Testing, skipping CVS tagging"
- else
- sh %{cvs tag #{reltag}}
- end
- end
- desc "Install the jamis RDoc template"
- task :install_jamis_template do
- require 'rbconfig'
- dest_dir = File.join(Config::CONFIG['rubylibdir'], "rdoc/generators/template/html")
- fail "Unabled to write to #{dest_dir}" unless File.writable?(dest_dir)
- install "doc/jamis.rb", dest_dir, :verbose => true
- end
|