buildr 1.3.5 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +153 -8
- data/README.rdoc +1 -1
- data/addon/buildr/antlr.rb +5 -5
- data/addon/buildr/drb.rb +18 -18
- data/addon/buildr/hibernate.rb +18 -14
- data/addon/buildr/javacc.rb +4 -4
- data/addon/buildr/jetty.rb +5 -5
- data/addon/buildr/nailgun.rb +23 -23
- data/addon/buildr/openjpa.rb +1 -1
- data/addon/buildr/org/apache/buildr/BuildrNail$Main.class +0 -0
- data/addon/buildr/org/apache/buildr/BuildrNail.class +0 -0
- data/addon/buildr/org/apache/buildr/JettyWrapper$1.class +0 -0
- data/addon/buildr/org/apache/buildr/JettyWrapper$BuildrHandler.class +0 -0
- data/addon/buildr/org/apache/buildr/JettyWrapper.class +0 -0
- data/addon/buildr/protobuf.rb +75 -0
- data/addon/buildr/xmlbeans.rb +5 -5
- data/buildr.buildfile +2 -2
- data/buildr.gemspec +8 -7
- data/doc/_layouts/default.html +2 -2
- data/doc/artifacts.textile +4 -4
- data/doc/building.textile +35 -3
- data/doc/contributing.textile +5 -0
- data/doc/download.textile +16 -5
- data/doc/extending.textile +38 -12
- data/doc/installing.textile +6 -5
- data/doc/languages.textile +182 -42
- data/doc/more_stuff.textile +2 -2
- data/doc/packaging.textile +14 -15
- data/doc/projects.textile +7 -2
- data/doc/quick_start.textile +4 -4
- data/doc/scripts/buildr-git.rb +63 -63
- data/doc/scripts/gitflow.rb +21 -21
- data/doc/settings_profiles.textile +9 -2
- data/doc/testing.textile +16 -5
- data/etc/KEYS +38 -0
- data/lib/buildr/core/application.rb +33 -27
- data/lib/buildr/core/build.rb +41 -28
- data/lib/buildr/core/cc.rb +172 -0
- data/lib/buildr/core/checks.rb +1 -1
- data/lib/buildr/core/common.rb +7 -6
- data/lib/buildr/core/compile.rb +7 -8
- data/lib/buildr/core/doc.rb +263 -0
- data/lib/buildr/core/environment.rb +6 -6
- data/lib/buildr/core/filter.rb +77 -35
- data/lib/buildr/core/generate.rb +7 -7
- data/lib/buildr/core/help.rb +1 -1
- data/lib/buildr/core/osx.rb +6 -6
- data/lib/buildr/core/progressbar.rb +4 -4
- data/lib/buildr/core/project.rb +144 -36
- data/lib/buildr/core/shell.rb +34 -34
- data/lib/buildr/core/test.rb +89 -20
- data/lib/buildr/core/transports.rb +8 -7
- data/lib/buildr/core/util.rb +77 -23
- data/lib/buildr/core.rb +1 -0
- data/lib/buildr/groovy/bdd.rb +5 -5
- data/lib/buildr/groovy/compiler.rb +19 -15
- data/lib/buildr/groovy/shell.rb +6 -6
- data/lib/buildr/ide/eclipse/java.rb +3 -3
- data/lib/buildr/ide/eclipse/plugin.rb +8 -5
- data/lib/buildr/ide/eclipse/scala.rb +4 -2
- data/lib/buildr/ide/eclipse.rb +148 -75
- data/lib/buildr/ide/idea.rb +2 -2
- data/lib/buildr/ide/idea7x.rb +23 -4
- data/lib/buildr/java/ant.rb +4 -4
- data/lib/buildr/java/bdd.rb +51 -54
- data/lib/buildr/java/cobertura.rb +57 -35
- data/lib/buildr/java/commands.rb +14 -5
- data/lib/buildr/java/compiler.rb +3 -217
- data/lib/buildr/java/deprecated.rb +4 -4
- data/lib/buildr/java/doc.rb +70 -0
- data/lib/buildr/java/emma.rb +22 -22
- data/lib/buildr/java/jruby.rb +4 -4
- data/lib/buildr/java/jtestr_runner.rb.erb +27 -25
- data/lib/buildr/java/org/apache/buildr/JavaTestFilter.class +0 -0
- data/lib/buildr/java/org/apache/buildr/JavaTestFilter.java +8 -3
- data/lib/buildr/java/packaging.rb +30 -29
- data/lib/buildr/java/pom.rb +4 -4
- data/lib/buildr/java/rjb.rb +6 -6
- data/lib/buildr/java/test_result.rb +61 -85
- data/lib/buildr/java/tests.rb +44 -27
- data/lib/buildr/java/version_requirement.rb +8 -8
- data/lib/buildr/java.rb +1 -0
- data/lib/buildr/packaging/archive.rb +55 -22
- data/lib/buildr/packaging/artifact.rb +75 -36
- data/lib/buildr/packaging/artifact_namespace.rb +90 -78
- data/lib/buildr/packaging/artifact_search.rb +5 -5
- data/lib/buildr/packaging/gems.rb +11 -7
- data/lib/buildr/packaging/package.rb +10 -7
- data/lib/buildr/packaging/tar.rb +14 -14
- data/lib/buildr/packaging/version_requirement.rb +30 -10
- data/lib/buildr/packaging/ziptask.rb +51 -13
- data/lib/buildr/scala/bdd.rb +25 -20
- data/lib/buildr/scala/compiler.rb +87 -40
- data/lib/buildr/scala/doc.rb +106 -0
- data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner.class +0 -0
- data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner.java +57 -0
- data/lib/buildr/scala/shell.rb +14 -9
- data/lib/buildr/scala/tests.rb +33 -26
- data/lib/buildr/scala.rb +1 -0
- data/lib/buildr/shell.rb +33 -33
- data/lib/buildr.rb +1 -1
- data/rakelib/all-in-one.rake +113 -0
- data/rakelib/checks.rake +1 -1
- data/rakelib/doc.rake +7 -0
- data/rakelib/package.rake +1 -1
- data/rakelib/release.rake +9 -6
- data/rakelib/rspec.rake +26 -7
- data/rakelib/setup.rake +15 -3
- data/rakelib/stage.rake +18 -11
- data/spec/addon/drb_spec.rb +25 -25
- data/spec/core/application_spec.rb +111 -21
- data/spec/core/build_spec.rb +16 -15
- data/spec/core/cc_spec.rb +174 -0
- data/spec/core/checks_spec.rb +34 -34
- data/spec/core/common_spec.rb +51 -5
- data/spec/core/compile_spec.rb +89 -14
- data/spec/core/extension_spec.rb +127 -19
- data/spec/core/generate_spec.rb +2 -2
- data/spec/core/project_spec.rb +10 -10
- data/spec/core/test_spec.rb +144 -35
- data/spec/core/transport_spec.rb +8 -8
- data/spec/core/util_spec.rb +63 -5
- data/spec/groovy/bdd_spec.rb +5 -5
- data/spec/groovy/compiler_spec.rb +29 -18
- data/spec/ide/eclipse_spec.rb +185 -9
- data/spec/ide/idea7x_spec.rb +22 -10
- data/spec/java/ant_spec.rb +9 -5
- data/spec/java/bdd_spec.rb +29 -37
- data/spec/java/cobertura_spec.rb +12 -12
- data/spec/java/commands_spec.rb +34 -0
- data/spec/java/compiler_spec.rb +53 -53
- data/spec/java/emma_spec.rb +11 -11
- data/spec/java/java_spec.rb +10 -10
- data/spec/java/packaging_spec.rb +67 -20
- data/spec/java/test_coverage_helper.rb +18 -18
- data/spec/java/tests_spec.rb +13 -9
- data/spec/packaging/archive_spec.rb +187 -20
- data/spec/packaging/artifact_namespace_spec.rb +172 -83
- data/spec/packaging/artifact_spec.rb +83 -18
- data/spec/packaging/packaging_spec.rb +41 -14
- data/spec/sandbox.rb +23 -12
- data/spec/scala/bdd_spec.rb +13 -8
- data/spec/scala/compiler_spec.rb +18 -13
- data/spec/scala/scala.rb +3 -3
- data/spec/scala/tests_spec.rb +46 -24
- data/spec/spec_helpers.rb +28 -10
- data/spec/version_requirement_spec.rb +25 -11
- metadata +149 -133
- data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner$.class +0 -0
- data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner.scala +0 -35
- data/rakelib/stage.rake~ +0 -213
data/lib/buildr/packaging/tar.rb
CHANGED
|
@@ -41,7 +41,7 @@ module Buildr
|
|
|
41
41
|
|
|
42
42
|
def initialize(*args, &block) #:nodoc:
|
|
43
43
|
super
|
|
44
|
-
self.gzip = name =~ /\.
|
|
44
|
+
self.gzip = name =~ /\.t?gz$/
|
|
45
45
|
self.mode = '0755'
|
|
46
46
|
end
|
|
47
47
|
|
|
@@ -54,13 +54,13 @@ module Buildr
|
|
|
54
54
|
def entry(entry_name)
|
|
55
55
|
Buildr::TarEntry.new(self, entry_name)
|
|
56
56
|
end
|
|
57
|
-
|
|
57
|
+
|
|
58
58
|
def entries() #:nodoc:
|
|
59
59
|
tar_entries = nil
|
|
60
60
|
with_uncompressed_tar { |tar| tar_entries = tar.entries }
|
|
61
61
|
tar_entries
|
|
62
62
|
end
|
|
63
|
-
|
|
63
|
+
|
|
64
64
|
# :call-seq:
|
|
65
65
|
# with_uncompressed_tar { |tar_entries| ... }
|
|
66
66
|
#
|
|
@@ -73,7 +73,7 @@ module Buildr
|
|
|
73
73
|
Archive::Tar::Minitar.open(name, &block)
|
|
74
74
|
end
|
|
75
75
|
end
|
|
76
|
-
|
|
76
|
+
|
|
77
77
|
private
|
|
78
78
|
|
|
79
79
|
def create_from(file_map)
|
|
@@ -110,15 +110,15 @@ module Buildr
|
|
|
110
110
|
end
|
|
111
111
|
|
|
112
112
|
end
|
|
113
|
-
|
|
114
|
-
|
|
113
|
+
|
|
114
|
+
|
|
115
115
|
class TarEntry #:nodoc:
|
|
116
|
-
|
|
116
|
+
|
|
117
117
|
def initialize(tar_task, entry_name)
|
|
118
118
|
@tar_task = tar_task
|
|
119
119
|
@entry_name = entry_name
|
|
120
120
|
end
|
|
121
|
-
|
|
121
|
+
|
|
122
122
|
# :call-seq:
|
|
123
123
|
# contain?(*patterns) => boolean
|
|
124
124
|
#
|
|
@@ -129,7 +129,7 @@ module Buildr
|
|
|
129
129
|
patterns.map { |pattern| Regexp === pattern ? pattern : Regexp.new(Regexp.escape(pattern.to_s)) }.
|
|
130
130
|
all? { |pattern| content =~ pattern }
|
|
131
131
|
end
|
|
132
|
-
|
|
132
|
+
|
|
133
133
|
# :call-seq:
|
|
134
134
|
# empty?() => boolean
|
|
135
135
|
#
|
|
@@ -137,7 +137,7 @@ module Buildr
|
|
|
137
137
|
def empty?()
|
|
138
138
|
read_content_from_tar.nil?
|
|
139
139
|
end
|
|
140
|
-
|
|
140
|
+
|
|
141
141
|
# :call-seq:
|
|
142
142
|
# exist() => boolean
|
|
143
143
|
#
|
|
@@ -147,13 +147,13 @@ module Buildr
|
|
|
147
147
|
@tar_task.with_uncompressed_tar { |tar| exist = tar.any? { |entry| entry.name == @entry_name } }
|
|
148
148
|
exist
|
|
149
149
|
end
|
|
150
|
-
|
|
150
|
+
|
|
151
151
|
def to_s #:nodoc:
|
|
152
152
|
@entry_name
|
|
153
153
|
end
|
|
154
|
-
|
|
154
|
+
|
|
155
155
|
private
|
|
156
|
-
|
|
156
|
+
|
|
157
157
|
def read_content_from_tar
|
|
158
158
|
content = Errno::ENOENT.new("No such file or directory - #{@entry_name}")
|
|
159
159
|
@tar_task.with_uncompressed_tar do |tar|
|
|
@@ -163,7 +163,7 @@ module Buildr
|
|
|
163
163
|
content
|
|
164
164
|
end
|
|
165
165
|
end
|
|
166
|
-
|
|
166
|
+
|
|
167
167
|
end
|
|
168
168
|
|
|
169
169
|
|
|
@@ -14,14 +14,34 @@
|
|
|
14
14
|
# the License.
|
|
15
15
|
|
|
16
16
|
|
|
17
|
+
# Rubygems 1.3.6 removed the 'version' accessor so monkey-patch it back to
|
|
18
|
+
# circumvent version validation. This is needed because Gem::Version doesn't
|
|
19
|
+
# accept version specs with dashes.
|
|
20
|
+
unless Gem::Version.new(0).respond_to?(:version=)
|
|
21
|
+
class Gem::Version
|
|
22
|
+
def version=(version)
|
|
23
|
+
@version = version.to_s
|
|
24
|
+
@version.strip!
|
|
25
|
+
|
|
26
|
+
# re-prime @segments
|
|
27
|
+
@segments = nil
|
|
28
|
+
segments
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
17
33
|
module Buildr
|
|
18
|
-
|
|
34
|
+
|
|
19
35
|
#
|
|
20
36
|
# See ArtifactNamespace#need
|
|
21
37
|
class VersionRequirement
|
|
22
|
-
|
|
38
|
+
|
|
23
39
|
CMP_PROCS = Gem::Requirement::OPS.dup
|
|
24
|
-
CMP_REGEX = Gem::Requirement::OP_RE
|
|
40
|
+
CMP_REGEX = if defined?(Gem::Requirement::OP_RE)
|
|
41
|
+
Gem::Requirement::OP_RE
|
|
42
|
+
else
|
|
43
|
+
Gem::Requirement::OPS.keys.map { |k| Regexp.quote k }.join "|"
|
|
44
|
+
end
|
|
25
45
|
CMP_CHARS = CMP_PROCS.keys.join
|
|
26
46
|
BOOL_CHARS = '\|\&\!'
|
|
27
47
|
VER_CHARS = '\w\.\-'
|
|
@@ -29,18 +49,18 @@ module Buildr
|
|
|
29
49
|
class << self
|
|
30
50
|
# is +str+ a version string?
|
|
31
51
|
def version?(str)
|
|
32
|
-
/^\s
|
|
52
|
+
/^\s*\d[#{VER_CHARS}]*\s*$/ === str
|
|
33
53
|
end
|
|
34
|
-
|
|
54
|
+
|
|
35
55
|
# is +str+ a version requirement?
|
|
36
56
|
def requirement?(str)
|
|
37
57
|
/[#{BOOL_CHARS}#{CMP_CHARS}\(\)]/ === str
|
|
38
58
|
end
|
|
39
|
-
|
|
59
|
+
|
|
40
60
|
# :call-seq:
|
|
41
61
|
# VersionRequirement.create(" >1 <2 !(1.5) ") -> requirement
|
|
42
62
|
#
|
|
43
|
-
# parse the +str+ requirement
|
|
63
|
+
# parse the +str+ requirement
|
|
44
64
|
def create(str)
|
|
45
65
|
instance_eval normalize(str)
|
|
46
66
|
rescue StandardError => e
|
|
@@ -61,7 +81,7 @@ module Buildr
|
|
|
61
81
|
vreq.negative = !vreq.negative
|
|
62
82
|
vreq
|
|
63
83
|
end
|
|
64
|
-
|
|
84
|
+
|
|
65
85
|
def normalize(str)
|
|
66
86
|
str = str.strip
|
|
67
87
|
if str[/[^\s\(\)#{BOOL_CHARS + VER_CHARS + CMP_CHARS}]/]
|
|
@@ -147,7 +167,7 @@ module Buildr
|
|
|
147
167
|
def &(other)
|
|
148
168
|
operation(:&, other)
|
|
149
169
|
end
|
|
150
|
-
|
|
170
|
+
|
|
151
171
|
# return the parsed expression
|
|
152
172
|
def to_s
|
|
153
173
|
str = requirements.map(&:to_s).join(" " + @op.to_s + " ").to_s
|
|
@@ -160,7 +180,7 @@ module Buildr
|
|
|
160
180
|
protected
|
|
161
181
|
attr_reader :requirements, :op
|
|
162
182
|
def operation(op, other)
|
|
163
|
-
@op ||= op
|
|
183
|
+
@op ||= op
|
|
164
184
|
if negative == other.negative && @op == op && other.requirements.size == 1
|
|
165
185
|
@requirements << other.requirements.first
|
|
166
186
|
self
|
|
@@ -106,7 +106,7 @@ module Buildr
|
|
|
106
106
|
end
|
|
107
107
|
|
|
108
108
|
|
|
109
|
-
# An object for unzipping a file into a target directory. You can tell it to include
|
|
109
|
+
# An object for unzipping/untarring a file into a target directory. You can tell it to include
|
|
110
110
|
# or exclude only specific files and directories, and also to map files from particular
|
|
111
111
|
# paths inside the zip file into the target directory. Once ready, call #extract.
|
|
112
112
|
#
|
|
@@ -131,7 +131,7 @@ module Buildr
|
|
|
131
131
|
# :call-seq:
|
|
132
132
|
# extract
|
|
133
133
|
#
|
|
134
|
-
# Extract the zip file into the target directory.
|
|
134
|
+
# Extract the zip/tgz file into the target directory.
|
|
135
135
|
#
|
|
136
136
|
# You can call this method directly. However, if you are using the #unzip method,
|
|
137
137
|
# it creates a file task for the target directory: use that task instead as a
|
|
@@ -148,16 +148,36 @@ module Buildr
|
|
|
148
148
|
|
|
149
149
|
# Otherwise, empty unzip creates target as a file when touching.
|
|
150
150
|
mkpath target.to_s
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
151
|
+
if zip_file.to_s.match /\.t?gz$/
|
|
152
|
+
#un-tar.gz
|
|
153
|
+
Zlib::GzipReader.open(zip_file.to_s) { |tar|
|
|
154
|
+
Archive::Tar::Minitar::Input.open(tar) do |inp|
|
|
155
|
+
inp.each do |tar_entry|
|
|
156
|
+
@paths.each do |path, patterns|
|
|
157
|
+
patterns.map([tar_entry]).each do |dest, entry|
|
|
158
|
+
next if entry.directory?
|
|
159
|
+
dest = File.expand_path(dest, target.to_s)
|
|
160
|
+
trace "Extracting #{dest}"
|
|
161
|
+
mkpath File.dirname(dest) rescue nil
|
|
162
|
+
#entry.restore_permissions = true
|
|
163
|
+
File.open(dest, 'w') {|f| f.write entry.read}
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
}
|
|
169
|
+
else
|
|
170
|
+
Zip::ZipFile.open(zip_file.to_s) do |zip|
|
|
171
|
+
entries = zip.collect
|
|
172
|
+
@paths.each do |path, patterns|
|
|
173
|
+
patterns.map(entries).each do |dest, entry|
|
|
174
|
+
next if entry.directory?
|
|
175
|
+
dest = File.expand_path(dest, target.to_s)
|
|
176
|
+
trace "Extracting #{dest}"
|
|
177
|
+
mkpath File.dirname(dest) rescue nil
|
|
178
|
+
entry.restore_permissions = true
|
|
179
|
+
entry.extract(dest) { true }
|
|
180
|
+
end
|
|
161
181
|
end
|
|
162
182
|
end
|
|
163
183
|
end
|
|
@@ -165,6 +185,24 @@ module Buildr
|
|
|
165
185
|
touch target.to_s
|
|
166
186
|
end
|
|
167
187
|
|
|
188
|
+
#reads the includes/excludes and apply them to the entry_name
|
|
189
|
+
def included?(entry_name)
|
|
190
|
+
@paths.each do |path, patterns|
|
|
191
|
+
return true if path.nil?
|
|
192
|
+
if entry_name =~ /^#{path}/
|
|
193
|
+
short = entry_name.sub(path, '')
|
|
194
|
+
if patterns.include.any? { |pattern| File.fnmatch(pattern, entry_name) } &&
|
|
195
|
+
!patterns.exclude.any? { |pattern| File.fnmatch(pattern, entry_name) }
|
|
196
|
+
# trace "tar_entry.full_name " + entry_name + " is included"
|
|
197
|
+
return true
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
# trace "tar_entry.full_name " + entry_name + " is excluded"
|
|
202
|
+
return false
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
|
|
168
206
|
# :call-seq:
|
|
169
207
|
# include(*files) => self
|
|
170
208
|
# include(*files, :path=>name) => self
|
|
@@ -303,7 +341,7 @@ module Buildr
|
|
|
303
341
|
#
|
|
304
342
|
# For example:
|
|
305
343
|
# unzip('all'=>'test.zip')
|
|
306
|
-
# unzip('src'=>'test.zip').include('README', 'LICENSE')
|
|
344
|
+
# unzip('src'=>'test.zip').include('README', 'LICENSE')
|
|
307
345
|
# unzip('libs'=>'test.zip').from_path('libs')
|
|
308
346
|
def unzip(args)
|
|
309
347
|
target, arg_names, zip_file = Buildr.application.resolve_args([args])
|
data/lib/buildr/scala/bdd.rb
CHANGED
|
@@ -20,29 +20,36 @@ require 'buildr/java/bdd'
|
|
|
20
20
|
require 'buildr/scala/tests'
|
|
21
21
|
|
|
22
22
|
module Buildr::Scala
|
|
23
|
-
|
|
23
|
+
|
|
24
24
|
# Specs is a Scala based BDD framework.
|
|
25
25
|
# To use in your project:
|
|
26
26
|
#
|
|
27
27
|
# test.using :specs
|
|
28
|
-
#
|
|
28
|
+
#
|
|
29
29
|
# This framework will search in your project for:
|
|
30
30
|
# src/spec/scala/**/*.scala
|
|
31
31
|
class Specs < Buildr::TestFramework::JavaBDD
|
|
32
32
|
@lang = :scala
|
|
33
33
|
@bdd_dir = :spec
|
|
34
34
|
|
|
35
|
-
VERSION = '1.
|
|
36
|
-
|
|
35
|
+
VERSION = '1.6.2.1'
|
|
36
|
+
|
|
37
37
|
class << self
|
|
38
38
|
def version
|
|
39
39
|
Buildr.settings.build['scala.specs'] || VERSION
|
|
40
40
|
end
|
|
41
|
-
|
|
41
|
+
|
|
42
42
|
def dependencies
|
|
43
|
-
|
|
43
|
+
unless @dependencies
|
|
44
|
+
super
|
|
45
|
+
# Add utility classes (e.g. SpecsSingletonRunner) and other dependencies
|
|
46
|
+
@dependencies |= [ File.join(File.dirname(__FILE__)) ] +
|
|
47
|
+
["org.scala-tools.testing:specs:jar:#{version}"] +
|
|
48
|
+
Check.dependencies + JUnit.dependencies + Scalac.dependencies
|
|
49
|
+
end
|
|
50
|
+
@dependencies
|
|
44
51
|
end
|
|
45
|
-
|
|
52
|
+
|
|
46
53
|
def applies_to?(project) #:nodoc:
|
|
47
54
|
!Dir[project.path_to(:source, bdd_dir, lang, '**/*.scala')].empty?
|
|
48
55
|
end
|
|
@@ -57,39 +64,37 @@ module Buildr::Scala
|
|
|
57
64
|
|
|
58
65
|
def initialize(task, options) #:nodoc:
|
|
59
66
|
super
|
|
60
|
-
|
|
67
|
+
|
|
61
68
|
specs = task.project.path_to(:source, :spec, :scala)
|
|
62
69
|
task.compile.from specs if File.directory?(specs)
|
|
63
|
-
|
|
70
|
+
|
|
64
71
|
resources = task.project.path_to(:source, :spec, :resources)
|
|
65
72
|
task.resources.from resources if File.directory?(resources)
|
|
66
73
|
end
|
|
67
|
-
|
|
74
|
+
|
|
68
75
|
def tests(dependencies)
|
|
69
|
-
dependencies += [task.compile.target.to_s]
|
|
70
76
|
candidates = filter_classes(dependencies, :interfaces => ['org.specs.Specification'])
|
|
71
|
-
|
|
77
|
+
|
|
72
78
|
Java.load # Java is already loaded, but just in case
|
|
73
|
-
|
|
79
|
+
|
|
74
80
|
filter = Java.org.apache.buildr.JavaTestFilter.new(dependencies.to_java(Java.java.lang.String))
|
|
75
81
|
filter.add_fields ['MODULE$'].to_java(Java.java.lang.String)
|
|
76
|
-
filter.filter(candidates.to_java(Java.java.lang.String))
|
|
82
|
+
filter.filter(candidates.to_java(Java.java.lang.String)).map { |s| s[0..(s.size - 2)] }
|
|
77
83
|
end
|
|
78
|
-
|
|
84
|
+
|
|
79
85
|
def run(specs, dependencies) #:nodoc:
|
|
80
|
-
dependencies += [task.compile.target.to_s, File.join(File.dirname(__FILE__))] + Scalac.dependencies
|
|
81
|
-
|
|
82
86
|
cmd_options = { :properties => options[:properties],
|
|
83
87
|
:java_args => options[:java_args],
|
|
84
|
-
:classpath => dependencies
|
|
88
|
+
:classpath => dependencies,
|
|
89
|
+
:name => false }
|
|
85
90
|
|
|
86
91
|
runner = 'org.apache.buildr.SpecsSingletonRunner'
|
|
87
92
|
specs.inject [] do |passed, spec|
|
|
88
93
|
begin
|
|
89
94
|
unless Util.win_os?
|
|
90
|
-
Java::Commands.java(runner, task.compile.target.to_s, '-c', spec, cmd_options)
|
|
95
|
+
Java::Commands.java(runner, task.compile.target.to_s, '-c', spec + '$', cmd_options)
|
|
91
96
|
else
|
|
92
|
-
Java::Commands.java(runner, task.compile.target.to_s, spec, cmd_options)
|
|
97
|
+
Java::Commands.java(runner, task.compile.target.to_s, spec + '$', cmd_options)
|
|
93
98
|
end
|
|
94
99
|
rescue => e
|
|
95
100
|
passed
|
|
@@ -19,30 +19,52 @@ require 'buildr/core/compile'
|
|
|
19
19
|
require 'buildr/packaging'
|
|
20
20
|
|
|
21
21
|
module Buildr::Scala
|
|
22
|
-
DEFAULT_VERSION = '2.7.
|
|
23
|
-
|
|
22
|
+
DEFAULT_VERSION = '2.7.7' # currently the latest (Oct 31, 2009)
|
|
23
|
+
|
|
24
24
|
class << self
|
|
25
|
-
|
|
26
|
-
# Retrieves the Scala version string from the
|
|
27
|
-
# standard library or nil if Scala is not
|
|
28
|
-
# available.
|
|
25
|
+
|
|
29
26
|
def version_str
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
27
|
+
warn "Use of Scala.version_str is deprecated. Use Scala.version instead"
|
|
28
|
+
version
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def installed_version
|
|
32
|
+
unless @installed_version
|
|
33
|
+
@installed_version = if Scalac.installed?
|
|
34
|
+
begin
|
|
35
|
+
# try to read the value from the properties file
|
|
36
|
+
props = Zip::ZipFile.open(File.expand_path('lib/scala-library.jar', Scalac.scala_home)) do |zipfile|
|
|
37
|
+
zipfile.read 'library.properties'
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
version_str = props.match(/version\.number\s*=\s*([^\s]+)/).to_a[1]
|
|
41
|
+
|
|
42
|
+
if version_str
|
|
43
|
+
md = version_str.match(/\d+\.\d[\d\.]*/) or
|
|
44
|
+
fail "Unable to parse Scala version: #{version_str}"
|
|
45
|
+
|
|
46
|
+
md[0].sub(/.$/, "") # remove trailing dot, if any
|
|
47
|
+
end
|
|
48
|
+
rescue => e
|
|
49
|
+
warn "Unable to parse library.properties in $SCALA_HOME/lib/scala-library.jar: #{e}"
|
|
50
|
+
nil
|
|
51
|
+
end
|
|
52
|
+
end
|
|
35
53
|
end
|
|
54
|
+
|
|
55
|
+
@installed_version
|
|
36
56
|
end
|
|
37
|
-
|
|
57
|
+
|
|
38
58
|
def version
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
59
|
+
Buildr.settings.build['scala.version'] || installed_version || DEFAULT_VERSION
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def compatible_28?
|
|
63
|
+
major, minor = version.match(/^(\d)\.(\d)/).to_a[1,2]
|
|
64
|
+
if major && minor
|
|
65
|
+
(major.to_i == 2 && minor.to_i >= 8) || (major.to_i > 2)
|
|
44
66
|
else
|
|
45
|
-
|
|
67
|
+
false
|
|
46
68
|
end
|
|
47
69
|
end
|
|
48
70
|
end
|
|
@@ -60,7 +82,7 @@ module Buildr::Scala
|
|
|
60
82
|
# * :debug -- Generate debugging info.
|
|
61
83
|
# * :other -- Array of options to pass to the Scalac compiler as is, e.g. -Xprint-types
|
|
62
84
|
class Scalac < Buildr::Compiler::Base
|
|
63
|
-
|
|
85
|
+
|
|
64
86
|
# The scalac compiler jars are added to classpath at load time,
|
|
65
87
|
# if you want to customize artifact versions, you must set them on the
|
|
66
88
|
#
|
|
@@ -69,27 +91,36 @@ module Buildr::Scala
|
|
|
69
91
|
# namespace before this file is required. This is of course, only
|
|
70
92
|
# if SCALA_HOME is not set or invalid.
|
|
71
93
|
REQUIRES = ArtifactNamespace.for(self) do |ns|
|
|
72
|
-
|
|
73
|
-
ns.
|
|
94
|
+
version = Buildr.settings.build['scala.version'] || DEFAULT_VERSION
|
|
95
|
+
ns.library! 'org.scala-lang:scala-library:jar:>=' + version
|
|
96
|
+
ns.compiler! 'org.scala-lang:scala-compiler:jar:>=' + version
|
|
74
97
|
end
|
|
75
|
-
|
|
98
|
+
|
|
76
99
|
class << self
|
|
77
100
|
def scala_home
|
|
78
101
|
env_home = ENV['SCALA_HOME']
|
|
79
|
-
|
|
102
|
+
|
|
80
103
|
@home ||= (if !env_home.nil? && File.exists?(env_home + '/lib/scala-library.jar') && File.exists?(env_home + '/lib/scala-compiler.jar')
|
|
81
104
|
env_home
|
|
82
105
|
else
|
|
83
106
|
nil
|
|
84
107
|
end)
|
|
85
108
|
end
|
|
86
|
-
|
|
109
|
+
|
|
87
110
|
def installed?
|
|
88
111
|
!scala_home.nil?
|
|
89
112
|
end
|
|
90
113
|
|
|
114
|
+
def use_installed?
|
|
115
|
+
if installed? && Buildr.settings.build['scala.version']
|
|
116
|
+
Buildr.settings.build['scala.version'] == Scala.installed_version
|
|
117
|
+
else
|
|
118
|
+
Buildr.settings.build['scala.version'].nil? && installed?
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
91
122
|
def dependencies
|
|
92
|
-
if
|
|
123
|
+
if use_installed?
|
|
93
124
|
['scala-library', 'scala-compiler'].map { |s| File.expand_path("lib/#{s}.jar", scala_home) }
|
|
94
125
|
else
|
|
95
126
|
REQUIRES.artifacts.map(&:to_s)
|
|
@@ -97,23 +128,24 @@ module Buildr::Scala
|
|
|
97
128
|
end
|
|
98
129
|
|
|
99
130
|
def use_fsc
|
|
100
|
-
|
|
131
|
+
use_installed? && ENV["USE_FSC"] =~ /^(yes|on|true)$/i
|
|
101
132
|
end
|
|
102
|
-
|
|
133
|
+
|
|
103
134
|
def applies_to?(project, task) #:nodoc:
|
|
104
135
|
paths = task.sources + [sources].flatten.map { |src| Array(project.path_to(:source, task.usage, src.to_sym)) }
|
|
105
136
|
paths.flatten!
|
|
106
|
-
|
|
137
|
+
|
|
107
138
|
# Just select if we find .scala files
|
|
108
139
|
paths.any? { |path| !Dir["#{path}/**/*.scala"].empty? }
|
|
109
140
|
end
|
|
110
141
|
end
|
|
111
|
-
|
|
142
|
+
|
|
112
143
|
Javac = Buildr::Compiler::Javac
|
|
113
144
|
|
|
114
145
|
OPTIONS = [:warnings, :deprecation, :optimise, :target, :debug, :other, :javac]
|
|
115
|
-
|
|
116
|
-
|
|
146
|
+
|
|
147
|
+
# Lazy evaluation to allow change in buildfile
|
|
148
|
+
Java.classpath << lambda { dependencies }
|
|
117
149
|
|
|
118
150
|
specify :language=>:scala, :sources => [:scala, :java], :source_ext => [:scala, :java],
|
|
119
151
|
:target=>'classes', :target_ext=>'class', :packaging=>:jar
|
|
@@ -124,25 +156,41 @@ module Buildr::Scala
|
|
|
124
156
|
options[:warnings] = verbose if options[:warnings].nil?
|
|
125
157
|
options[:deprecation] ||= false
|
|
126
158
|
options[:optimise] ||= false
|
|
159
|
+
options[:make] ||= :transitivenocp if Scala.compatible_28?
|
|
127
160
|
options[:javac] ||= {}
|
|
128
|
-
|
|
161
|
+
|
|
129
162
|
@java = Javac.new(project, options[:javac])
|
|
130
163
|
end
|
|
131
164
|
|
|
132
165
|
def compile(sources, target, dependencies) #:nodoc:
|
|
133
|
-
check_options
|
|
166
|
+
check_options(options, OPTIONS + (Scala.compatible_28? ? [:make] : []))
|
|
167
|
+
|
|
168
|
+
java_sources = java_sources(sources)
|
|
169
|
+
enable_dep_tracing = Scala.compatible_28? && java_sources.empty?
|
|
170
|
+
|
|
171
|
+
dependencies.unshift target if enable_dep_tracing
|
|
134
172
|
|
|
135
173
|
cmd_args = []
|
|
136
|
-
cmd_args << '-classpath' <<
|
|
174
|
+
cmd_args << '-classpath' << dependencies.join(File::PATH_SEPARATOR)
|
|
137
175
|
source_paths = sources.select { |source| File.directory?(source) }
|
|
138
176
|
cmd_args << '-sourcepath' << source_paths.join(File::PATH_SEPARATOR) unless source_paths.empty?
|
|
139
177
|
cmd_args << '-d' << File.expand_path(target)
|
|
140
178
|
cmd_args += scalac_args
|
|
179
|
+
|
|
180
|
+
if enable_dep_tracing
|
|
181
|
+
dep_dir = File.expand_path(target)
|
|
182
|
+
Dir.mkdir dep_dir unless File.exists? dep_dir
|
|
183
|
+
|
|
184
|
+
cmd_args << '-make:' + options[:make].to_s
|
|
185
|
+
cmd_args << '-dependencyfile'
|
|
186
|
+
cmd_args << File.expand_path('.scala-deps', dep_dir)
|
|
187
|
+
end
|
|
188
|
+
|
|
141
189
|
cmd_args += files_from_sources(sources)
|
|
142
190
|
|
|
143
191
|
unless Buildr.application.options.dryrun
|
|
144
192
|
trace((['scalac'] + cmd_args).join(' '))
|
|
145
|
-
|
|
193
|
+
|
|
146
194
|
if Scalac.use_fsc
|
|
147
195
|
system(([File.expand_path('bin/fsc', Scalac.scala_home)] + cmd_args).join(' ')) or
|
|
148
196
|
fail 'Failed to compile, see errors above'
|
|
@@ -151,15 +199,14 @@ module Buildr::Scala
|
|
|
151
199
|
begin
|
|
152
200
|
Java.scala.tools.nsc.Main.process(cmd_args.to_java(Java.java.lang.String))
|
|
153
201
|
rescue => e
|
|
154
|
-
fail "Scala compiler crashed:\n#{e.inspect}"
|
|
202
|
+
fail "Scala compiler crashed:\n#{e.inspect}"
|
|
155
203
|
end
|
|
156
204
|
fail 'Failed to compile, see errors above' if Java.scala.tools.nsc.Main.reporter.hasErrors
|
|
157
205
|
end
|
|
158
|
-
|
|
159
|
-
java_sources = java_sources(sources)
|
|
206
|
+
|
|
160
207
|
unless java_sources.empty?
|
|
161
208
|
trace 'Compiling mixed Java/Scala sources'
|
|
162
|
-
|
|
209
|
+
|
|
163
210
|
# TODO includes scala-compiler.jar
|
|
164
211
|
deps = dependencies + Scalac.dependencies + [ File.expand_path(target) ]
|
|
165
212
|
@java.compile(java_sources, target, deps)
|
|
@@ -187,7 +234,7 @@ module Buildr::Scala
|
|
|
187
234
|
end
|
|
188
235
|
|
|
189
236
|
end
|
|
190
|
-
|
|
237
|
+
|
|
191
238
|
end
|
|
192
239
|
|
|
193
240
|
# Scala compiler comes first, ahead of Javac, this allows it to pick
|