Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: master
Fetching contributors…

Cannot retrieve contributors at this time

170 lines (145 sloc) 5.1 kb
require 'rake/clean'
require 'rake/packagetask'
require 'rake/gempackagetask'
task :default => :test
DLEXT = Config::CONFIG['DLEXT']
VERS = '1.1'
spec =
Gem::Specification.new do |s|
s.name = "rpeg-markdown"
s.version = VERS
s.summary = "Fast Markdown implementation"
s.files = FileList[
'README.markdown','LICENSE','Rakefile',
'{lib,ext,test}/**.rb','ext/*.{c,h}',
'test/MarkdownTest*/**/*',
'bin/rpeg-markdown'
]
s.bindir = 'bin'
s.executables << 'rpeg-markdown'
s.require_path = 'lib'
s.has_rdoc = true
s.extra_rdoc_files = ['LICENSE']
s.test_files = FileList['test/markdown_test.rb']
s.extensions = ['ext/extconf.rb']
s.author = 'Ryan Tomayko'
s.email = 'r@tomayko.com'
s.homepage = 'http://github.com/rtomayko/rpeg-markdown'
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
namespace :submodule do
desc 'Init the peg-markdown submodule'
task :init do |t|
unless File.exist? 'peg-markdown/markdown.c'
rm_rf 'peg-markdown'
sh 'git submodule init peg-markdown'
sh 'git submodule update peg-markdown'
end
end
desc 'Update the peg-markdown submodule'
task :update => :init do
sh 'git submodule update peg-markdown' unless File.symlink?('peg-markdown')
end
file 'peg-markdown/markdown.c' do
Rake::Task['submodule:init'].invoke
end
task :exist => 'peg-markdown/markdown.c'
end
desc 'Gather required peg-markdown sources into extension directory'
task :gather => 'submodule:exist' do |t|
sh 'cd peg-markdown && make markdown_parser.c'
files =
FileList[
'peg-markdown/markdown_{peg.h,parser.c,output.c,lib.c,lib.h}',
'peg-markdown/{utility,parsing}_functions.c'
]
cp files, 'ext/',
:preserve => true,
:verbose => true
end
file 'ext/Makefile' => FileList['ext/{extconf.rb,*.c,*.h,*.rb}'] do
chdir('ext') { ruby 'extconf.rb' }
end
CLEAN.include 'ext/Makefile'
file "ext/peg_markdown.#{DLEXT}" => FileList['ext/Makefile', 'ext/*.{c,h,rb}'] do |f|
sh 'cd ext && make'
end
CLEAN.include 'ext/*.{o,bundle,so}'
file "lib/peg_markdown.#{DLEXT}" => "ext/peg_markdown.#{DLEXT}" do |f|
cp f.prerequisites, "lib/", :preserve => true
end
CLEAN.include "lib/*.{so,bundle}"
desc 'Build the peg_markdown extension'
task :build => "lib/peg_markdown.#{DLEXT}"
desc 'Run unit and conformance tests'
task :test => [ 'test:unit', 'test:conformance' ]
desc 'Run unit tests'
task 'test:unit' => [:build] do |t|
ruby 'test/markdown_test.rb'
end
desc "Run conformance tests (MARKDOWN_TEST_VER=#{ENV['MARKDOWN_TEST_VER'] ||= '1.0.3'})"
task 'test:conformance' => [:build] do |t|
script = "#{pwd}/bin/rpeg-markdown"
test_version = ENV['MARKDOWN_TEST_VER']
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' => [:build] do
ENV['MARKDOWN_TEST_VER'] = '1.0'
Rake::Task['test:conformance'].invoke
end
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
desc "See how much memory we're losing"
task 'test:mem' => %w[submodule:exist build] do |t|
$: << File.join(File.dirname(__FILE__), "lib")
require 'markdown'
FileList['test/mem.txt', 'peg-markdown/MarkdownTest_1.0.3/Tests/*.text'].each do |file|
printf "%s: \n", file
markdown = Markdown.new(File.read(file))
iterations = (ENV['N'] || 100).to_i
total, growth = [], []
iterations.times do |i|
start = Time.now
GC.start
markdown.to_html
duration = Time.now - start
GC.start
total << `ps -o rss= -p #{Process.pid}`.to_i
next if i == 0
growth << (total.last - (total[-2] || 0))
# puts "%03d: %06.02f ms / %dK used / %dK growth" % [ i, duration, total.last, growth.last ]
end
average = growth.inject(0) { |sum,x| sum + x } / growth.length
printf " %dK avg growth (per run) / %dK used (after %d runs)\n", average, total.last, iterations
end
end
# ==========================================================
# Rubyforge
# ==========================================================
PKGNAME = "pkg/rpeg-markdown-#{VERS}"
desc 'Publish new release to rubyforge'
task :release => [ "#{PKGNAME}.gem", "#{PKGNAME}.tar.gz" ] do |t|
sh <<-end
rubyforge add_release wink rpeg-markdown #{VERS} #{PKGNAME}.gem &&
rubyforge add_file wink rpeg-markdown #{VERS} #{PKGNAME}.tar.gz
end
end
Jump to Line
Something went wrong with that request. Please try again.