# -*- ruby -*-
#
# This is a Ruby file, used by the "rake" make-like program.
#
begin
# First, we use a few ruby things...
require 'rubygems'
require 'rake/gempackagetask'
end
require 'rake/rdoctask'
require 'rake/testtask'
require 'shellwords'
#
# 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.libs << 'test'
t.pattern = 'test/test*.rb'
t.verbose = true
end
def unreleasable_reason
can_release_package
unreleasable_reason
end
def can_release_package
reasons = []
unless news_is_current
reasons << 'the NEWS file is not current'
end
unless defined?(Gem)
reasons << 'RubyGems is not installed'
end
reason = if reasons.empty?
""
else
last = reasons.pop
("Can not release package because " +
(reasons.empty? ? "#{last}." :
(reasons.join(", ") + " and #{last}.")))
end
can_release = reason.length == 0
self.class.module_eval <<-END_OF_CODE
def unreleasable_reason
\"#{reason}\"
end
def can_release_package
#{can_release.inspect}
end
END_OF_CODE
can_release_package
end
# Is the NEWS file current?
def news_is_current
today = Time.now.strftime('%Y-%m-%d')
version = Regexp.new(Regexp.quote(PKG_VERSION))
if IO.readlines('NEWS').first =~
/= Changes in RubyMail #{PKG_VERSION} \(released #{today}\)$/
true
else
false
end
end
#
# These PKG_ variables are used by Rake's package rule.
#
PKG_VERSION = begin
version= IO.readlines('version').first.chomp
if version =~ /^\d+\.\d+\.\d+$/
version.untaint
else
fail "package version is bogus"
end
version
end
PKG_FILES = FileList.new('test/**/*',
'guide/**/*',
'lib/**/*',
'install.rb',
'NEWS',
'NOTES',
'README',
'THANKS',
'TODO',
'Rakefile',
'version')
#
# Teach Rake how to build the RDoc documentation for this package.
#
rdoc = Rake::RDocTask.new do |rdoc|
rdoc.main = 'README'
rdoc.rdoc_files.include("README", "NEWS", "THANKS",
"TODO", "guide/*.txt", "lib/**/*.rb")
rdoc.rdoc_files.exclude(/\bSCCS\b/,
"lib/rubymail/parser/*")
unreleased = if can_release_package
""
else
" (UNRELEASED!)"
end
rdoc.title = "RubyMail Documentation (version #{PKG_VERSION})"
rdoc.options << '--exclude' << 'SCCS'
end
# Make sure that we don't package anything that hasn't been tagged.
task :package => [ :can_release ]
desc "Check if the package is in a releasable state."
task :can_release do
unless can_release_package
puts unreleasable_reason
end
end
#
# Create a Gem::Specification right in the Rakefile, using some of the
# variables we have set up above.
#
if defined?(Gem)
spec = Gem::Specification.new do |s|
s.name = 'rmail'
s.version = PKG_VERSION + if can_release_package
''
else
'.666'
end
s.summary = 'A MIME mail parsing and generation library.'
s.description = <<-EOF
RMail is a lightweight mail library containing various utility classes and
modules that allow ruby scripts to parse, modify, and generate MIME mail
messages.
EOF
s.files = PKG_FILES.to_a
s.required_ruby_version = Gem::Version::Requirement.new(">= 1.8.1")
s.has_rdoc = true
s.extra_rdoc_files = rdoc.rdoc_files.reject { |fn| fn =~ /\.rb$/ }.to_a
s.rdoc_options.concat([ '--title', rdoc.title, '--main', rdoc.main,
rdoc.options ].flatten)
s.test_files = FileList['test/tc_*.rb'].to_a
s.author = "Matt Armstrong"
s.email = "matt@rfc20.org"
s.homepage = "http://www.rfc20.org/rubymail"
s.rubyforge_project = "rubymail"
end
#
# Use our Gem::Specification to make some package tasks.
#
Rake::GemPackageTask.new(spec) do |pkg|
pkg.need_zip = true
pkg.need_tar = true
end
end
desc "Install RubyMail using the standard install.rb script"
task :install do
ruby "install.rb"
end