rtomayko / rdiscount

Discount (For Ruby) Implementation of John Gruber's Markdown

This URL has Read+Write access

Ryan Tomayko (author)
Sat Aug 02 00:01:58 -0700 2008
rdiscount / Rakefile
100644 174 lines (139 sloc) 4.749 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
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