forked from jruby/jruby-rack
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Rakefile
192 lines (166 loc) · 6.52 KB
/
Rakefile
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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
#--
# Copyright (c) 2010-2011 Engine Yard, Inc.
# Copyright (c) 2007-2009 Sun Microsystems, Inc.
# This source code is available under the MIT license.
# See the file LICENSE.txt for details.
#++
raise "JRuby-Rack must be built with JRuby: try again with `jruby -S rake'" unless defined?(JRUBY_VERSION)
require 'rake/clean'
require 'date'
require 'java'
def compile_classpath
if ENV['JRUBY_PARENT_CLASSPATH']
classpath = []
ENV['JRUBY_PARENT_CLASSPATH'].split(File::PATH_SEPARATOR).each {|p| classpath << p}
else
java_classpath = Java::JavaLang::System.getProperty("java.class.path").split(File::PATH_SEPARATOR)
java_classpath += Java::JavaLang::System.getProperty("sun.boot.class.path").split(File::PATH_SEPARATOR)
classpath = Dir["#{File.expand_path 'src/main/lib'}/*.jar"] + java_classpath
end
end
def test_classpath
compile_classpath + [File.expand_path("target/classes") + "/", File.expand_path("target/test-classes/") + "/"]
end
CLEAN << 'target'
directory 'target/classes'
desc "Compile java classes"
task :compile => "target/classes" do |t|
sh 'javac -Xlint:deprecation -Xlint:unchecked -classpath "' + compile_classpath.join(File::PATH_SEPARATOR) + '" -source 1.5 ' +
'-target 1.5 -d ' + t.prerequisites.first + ' ' + Dir["src/main/java/**/*.java"].join(" ")
end
directory 'target/test-classes'
desc "Compile classes used for test/spec"
task :compilespec => "target/test-classes" do |t|
sh 'javac -classpath "' + test_classpath.join(File::PATH_SEPARATOR) + '" -source 1.5 ' +
'-target 1.5 -d ' + t.prerequisites.first + ' ' + Dir["src/spec/java/**/*.java"].join(" ")
end
desc "Unpack the rack gem"
task :unpack_gem => "target" do |t|
Dir.chdir(t.prerequisites.first) do
gem_file = FileList["../src/main/lib/rack*.gem"].first
unless uptodate?("vendor/rack.rb", [__FILE__, gem_file])
mkdir_p "vendor"
require 'rubygems/installer'
path = File.basename(gem_file).sub(/\.gem$/, '')
Gem::Installer.new(gem_file, :unpack => true, :install_dir => path).unpack path
rack_dir = FileList["rack-*"].first
File.open("vendor/rack.rb", "w") do |f|
f << "dir = File.dirname(__FILE__)\n"
f << "if dir =~ /.jar!/ && dir !~ /^file:/\n"
f << "$LOAD_PATH.unshift 'file:' + dir + '/#{rack_dir}'\n"
f << "else\n"
f << "$LOAD_PATH.unshift dir + '/#{rack_dir}'\n"
f << "end\n"
f << "require 'rack'"
end
end
end
end
version_file = 'src/main/ruby/jruby/rack/version.rb'
load version_file
task :update_version do
if ENV["VERSION"] && ENV["VERSION"] != JRuby::Rack::VERSION
lines = File.readlines(version_file)
lines.each {|l| l.sub!(/VERSION =.*$/, %{VERSION = "#{ENV["VERSION"]}"})}
File.open(version_file, "wb") {|f| f.puts *lines }
end
end
task :test_resources => ["target/test-classes"] do |t|
FileList["src/spec/ruby/merb/gems/gems/merb-core-*/lib/*"].each do |f|
cp_r f, t.prerequisites.first
end
end
desc "Copy resources"
task :resources => ["target/classes", :unpack_gem, :update_version, :test_resources] do |t|
rack_dir = File.basename(FileList["target/rack-*"].first)
classes_dir = t.prerequisites.first
{ 'src/main/ruby' => classes_dir,
'target/vendor' => "#{classes_dir}/vendor",
"target/#{rack_dir}/lib" => "#{t.prerequisites.first}/vendor/#{rack_dir}"}.each do |src,dest|
mkdir_p dest
FileList["#{src}/*"].each do |f|
cp_r f, dest
end
end
meta_inf = File.join(t.prerequisites.first, "META-INF")
mkdir_p meta_inf
cp "src/main/tld/jruby-rack.tld", meta_inf
end
task :speconly do
if ENV['SKIP_SPECS'] && ENV['SKIP_SPECS'] == "true"
puts "Skipping specs due to SKIP_SPECS=#{ENV['SKIP_SPECS']}"
else
test_classpath.each {|p| $CLASSPATH << p }
opts = ["--format", "specdoc"]
opts << ENV['SPEC_OPTS'] if ENV['SPEC_OPTS']
spec = ENV['SPEC'] || File.join(Dir.getwd, "src/spec/ruby/**/*_spec.rb")
opts.push *FileList[spec].to_a
ENV['CLASSPATH'] = test_classpath.join(File::PATH_SEPARATOR)
ruby "-Isrc/spec/ruby", "-S", "spec", *opts
end
end
desc "Run specs"
task :spec => [:compile, :resources, :compilespec, :speconly]
task :test => :spec
file "target/jruby-rack-#{JRuby::Rack::VERSION}.jar" => :always_build do |t|
Rake::Task['spec'].invoke
sh "jar cf #{t.name} -C target/classes ."
end
task :always_build # dummy task to force jar to get built
desc "Create the jar"
task :jar => [:spec, "target/jruby-rack-#{JRuby::Rack::VERSION}.jar"]
task :default => :jar
task :install => "target/jruby-rack-#{JRuby::Rack::VERSION}.jar" do |t|
repos_dir = File.expand_path "~/.m2/repository/org/jruby/rack/jruby-rack/#{JRuby::Rack::VERSION}"
mkdir_p repos_dir
cp t.prerequisites.first, repos_dir
cp "pom.xml", "#{repos_dir}/jruby-rack-#{JRuby::Rack::VERSION}.pom"
end
task :classpaths do
puts "compile_classpath:",*compile_classpath
puts "test_classpath:", *test_classpath
end
file "target/gem/lib/jruby-rack.rb" do |t|
mkdir_p File.dirname(t.name)
File.open(t.name, "wb") do |f|
f << %q{require 'jruby/rack/version'
module JRubyJars
def self.jruby_rack_jar_path
File.expand_path("../jruby-rack-#{JRuby::Rack::VERSION}.jar", __FILE__)
end
require jruby_rack_jar_path if defined?(JRUBY_VERSION)
end
}
end
end
file "target/gem/lib/jruby/rack/version.rb" => "src/main/ruby/jruby/rack/version.rb" do |t|
mkdir_p File.dirname(t.name)
cp t.prerequisites.first, t.name
end
desc "Build gem"
task :gem => ["target/jruby-rack-#{JRuby::Rack::VERSION}.jar",
"target/gem/lib/jruby-rack.rb",
"target/gem/lib/jruby/rack/version.rb"] do |t|
cp FileList["History.txt", "LICENSE.txt", "README.md"], "target/gem"
cp t.prerequisites.first, "target/gem/lib"
if (jars = FileList["target/gem/lib/*.jar"].to_a).size > 1
abort "Too many jars! #{jars.map{|j| File.basename(j)}.inspect}\nRun a clean build first"
end
Dir.chdir("target/gem") do
gemspec = Gem::Specification.new do |s|
s.name = %q{jruby-rack}
s.version = JRuby::Rack::VERSION.sub(/-SNAPSHOT/, '')
s.authors = ["Nick Sieger"]
s.date = Date.today.to_s
s.description = %{JRuby-Rack is a combined Java and Ruby library that adapts the Java Servlet API to Rack. For JRuby only.}
s.summary = %q{Rack adapter for JRuby and Servlet Containers}
s.email = ["nick@nicksieger.com"]
s.files = FileList["./**/*"].exclude("*.gem").map{|f| f.sub(/^\.\//, '')}
s.homepage = %q{http://jruby.org}
s.has_rdoc = false
s.rubyforge_project = %q{jruby-extras}
end
Gem::Builder.new(gemspec).build
mv FileList['*.gem'], '..'
end
end