require 'rake/clean'
require 'rake/packagetask'
require 'rake/gempackagetask'
task :default => 'test:unit'
DLEXT = Config::CONFIG['DLEXT']
VERS = '1.2.7'
spec =
Gem::Specification.new do |s|
s.name = "rdiscount"
s.version = VERS
s.summary = "Fast Implementation of Gruber's Markdown in C"
s.files = FileList['README.markdown','COPYING','Rakefile','test/**','{lib,ext}/**.rb','ext/*.{c,h}']
s.bindir = 'bin'
s.require_path = 'lib'
s.has_rdoc = true
s.extra_rdoc_files = ['COPYING']
s.test_files = FileList['test/*_test.rb']
s.extensions = ['ext/extconf.rb']
s.author = 'Ryan Tomayko'
s.email = 'r@tomayko.com'
s.homepage = 'http://github.com/rtomayko/rdiscount'
s.rubyforge_project = 'wink'
end
Rake::GemPackageTask.new(spec) do |p|
p.gem_spec = spec
p.need_tar_gz = true
p.need_tar = false
p.need_zip = false
end
# ==========================================================
# Ruby Extension
# ==========================================================
file 'ext/Makefile' => FileList['ext/{*.c,*.h,*.rb}'] do
chdir('ext') { ruby 'extconf.rb' }
end
CLEAN.include 'ext/Makefile', 'ext/mkmf.log'
file "ext/rdiscount.#{DLEXT}" => FileList['ext/Makefile', 'ext/*.{c,h,rb}'] do |f|
sh 'cd ext && make'
end
CLEAN.include 'ext/*.{o,bundle,so,dll}'
file "lib/rdiscount.#{DLEXT}" => "ext/rdiscount.#{DLEXT}" do |f|
cp f.prerequisites, "lib/", :preserve => true
end
desc 'Build the rdiscount extension'
task :build => "lib/rdiscount.#{DLEXT}"
# ==========================================================
# Testing
# ==========================================================
desc 'Run unit tests'
task 'test:unit' => [:build] do |t|
ruby 'test/markdown_test.rb'
end
desc 'Run conformance tests (MARKDOWN_TEST_VER=1.0)'
task 'test:conformance' => [:build] do |t|
script = "#{pwd}/bin/rdiscount"
test_version = ENV['MARKDOWN_TEST_VER'] || '1.0'
chdir("test/MarkdownTest_#{test_version}") do
sh "./MarkdownTest.pl --script='#{script}' --tidy"
end
end
desc 'Run version 1.0 conformance suite'
task 'test:conformance:1.0' => 'test:conformance'
desc 'Run 1.0.3 conformance suite'
task 'test:conformance:1.0.3' => [:build] do |t|
ENV['MARKDOWN_TEST_VER'] = '1.0.3'
Rake::Task['test:conformance'].invoke
end
desc 'Run unit and conformance tests'
task :test => %w[test:unit test:conformance]
desc 'Run benchmarks'
task :benchmark => :build do |t|
$:.unshift 'lib'
load 'test/benchmark.rb'
end
# ==========================================================
# Documentation
# ==========================================================
desc 'Generate API documentation'
task :doc => 'doc/index.html'
file 'doc/index.html' => FileList['lib/*.rb'] do |f|
sh((<<-end).gsub(/\s+/, ' '))
hanna --charset utf8 \
--fmt html \
--inline-source \
--line-numbers \
--main RDiscount \
--op doc \
--title 'RDiscount API Documentation' \
#{f.prerequisites.join(' ')}
end
end
CLEAN.include 'doc'
# ==========================================================
# Rubyforge
# ==========================================================
PKGNAME = "pkg/rdiscount-#{VERS}"
desc 'Publish new release to rubyforge'
task :release => [ "#{PKGNAME}.gem", "#{PKGNAME}.tar.gz" ] do |t|
sh <<-end
rubyforge add_release wink rdiscount #{VERS} #{PKGNAME}.gem &&
rubyforge add_file wink rdiscount #{VERS} #{PKGNAME}.tar.gz
end
end
desc 'Publish API docs to rubyforge'
task :publish => :doc do |t|
sh 'scp -rp doc/. rubyforge.org:/var/www/gforge-projects/wink/rdiscount'
end
# ==========================================================
# Discount Submodule
# ==========================================================
namespace :submodule do
desc 'Init the upstream submodule'
task :init do |t|
unless File.exist? 'discount/markdown.c'
rm_rf 'discount'
sh 'git submodule init discount'
sh 'git submodule update discount'
end
end
desc 'Update the discount submodule'
task :update => :init do
sh 'git submodule update discount' unless File.symlink?('discount')
end
file 'discount/markdown.c' do
Rake::Task['submodule:init'].invoke
end
task :exist => 'discount/markdown.c'
end
desc 'Gather required discount sources into extension directory'
task :gather => 'submodule:exist' do |t|
files =
FileList[
'discount/{markdown,mkdio,amalloc,cstring}.h',
'discount/{markdown,docheader,dumptree,generate,mkdio,resource}.c'
]
cp files, 'ext/',
:preserve => true,
:verbose => true
end