/
gem.rake
116 lines (93 loc) · 3 KB
/
gem.rake
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
# $Id$
require 'rake/gempackagetask'
namespace :gem do
PROJ.spec = Gem::Specification.new do |s|
s.name = PROJ.name
s.version = PROJ.version
s.summary = PROJ.summary
s.authors = Array(PROJ.authors)
s.email = PROJ.email
s.homepage = Array(PROJ.url).first
s.rubyforge_project = PROJ.rubyforge_name
s.post_install_message = PROJ.post_install_message
s.description = PROJ.description
PROJ.dependencies.each do |dep|
s.add_dependency(*dep)
end
s.files = PROJ.files
s.executables = PROJ.executables.map {|fn| File.basename(fn)}
s.extensions = PROJ.files.grep %r/extconf\.rb$/
s.bindir = 'bin'
dirs = Dir["{#{PROJ.libs.join(',')}}"]
s.require_paths = dirs unless dirs.empty?
incl = Regexp.new(PROJ.rdoc_include.join('|'))
excl = PROJ.rdoc_exclude.dup.concat %w[\.rb$ ^(\.\/|\/)?ext]
excl = Regexp.new(excl.join('|'))
rdoc_files = PROJ.files.find_all do |fn|
case fn
when excl; false
when incl; true
else false end
end
s.rdoc_options = PROJ.rdoc_opts + ['--main', PROJ.rdoc_main]
s.extra_rdoc_files = rdoc_files
s.has_rdoc = true
if test ?f, PROJ.test_file
s.test_file = PROJ.test_file
else
s.test_files = PROJ.tests.to_a
end
# Do any extra stuff the user wants
# spec_extras.each do |msg, val|
# case val
# when Proc
# val.call(s.send(msg))
# else
# s.send "#{msg}=", val
# end
# end
end
desc 'Show information about the gem'
task :debug do
puts PROJ.spec.to_ruby
end
pkg = Rake::PackageTask.new(PROJ.name, PROJ.version) do |pkg|
pkg.need_tar = PROJ.need_tar
pkg.need_zip = PROJ.need_zip
pkg.package_files += PROJ.spec.files
end
Rake::Task['gem:package'].instance_variable_set(:@full_comment, nil)
gem_file = if PROJ.spec.platform == Gem::Platform::RUBY
"#{pkg.package_name}.gem"
else
"#{pkg.package_name}-#{PROJ.spec.platform}.gem"
end
desc "Build the gem file #{gem_file}"
task :package => "#{pkg.package_dir}/#{gem_file}"
file "#{pkg.package_dir}/#{gem_file}" => [pkg.package_dir] + PROJ.spec.files do
when_writing("Creating GEM") {
Gem::Builder.new(PROJ.spec).build
verbose(true) {
mv gem_file, "#{pkg.package_dir}/#{gem_file}"
}
}
end
desc 'Install the gem'
task :install => [:clobber, :package] do
sh "#{SUDO} #{GEM} install pkg/#{PROJ.spec.full_name}"
end
desc 'Uninstall the gem'
task :uninstall do
installed_list = Gem.source_index.find_name(PROJ.name)
if installed_list and installed_list.collect { |s| s.version.to_s}.include?(PROJ.version) then
sh "#{SUDO} #{GEM} uninstall -v '#{PROJ.version}' -i -x #{PROJ.name}"
end
end
desc 'Reinstall the gem'
task :reinstall => [:uninstall, :install]
end # namespace :gem
desc 'Alias to gem:package'
task :gem => 'gem:package'
task :clobber => 'gem:clobber_package'
remove_desc_for_task %w(gem:clobber_package)
# EOF