rake-compiler 0.7.9 → 0.8.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/History.txt +15 -0
- data/Isolate +4 -5
- data/Rakefile +2 -2
- data/features/compile.feature +8 -0
- data/features/cross-compile.feature +2 -2
- data/features/step_definitions/compilation.rb +13 -13
- data/lib/rake/baseextensiontask.rb +2 -0
- data/lib/rake/extensioncompiler.rb +1 -1
- data/lib/rake/extensiontask.rb +21 -6
- data/lib/rake/javaextensiontask.rb +9 -9
- data/spec/lib/rake/extensiontask_spec.rb +19 -6
- data/tasks/gem.rake +3 -4
- data/tasks/rspec.rake +1 -21
- metadata +46 -78
data/History.txt
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
=== 0.8.0 / 2012-01-08
|
2
|
+
|
3
|
+
* Enhancements:
|
4
|
+
* Invocation from command line now support extra options similar to RubyGems.
|
5
|
+
Closes #4 from Pull #47 [jonforums]
|
6
|
+
|
7
|
+
$ rake compile -- --with-opt-dir=/opt/local
|
8
|
+
|
9
|
+
* Bugfixes:
|
10
|
+
* Only emit cross-compilation warnings for C when `cross` is invoked.
|
11
|
+
Closes #16 from Pull #48 [mvz]
|
12
|
+
* Only emit warnings when invoking cross-compilation tasks for JRuby.
|
13
|
+
Pull #45 [jfirebaugh]
|
14
|
+
* Use x86 MinGW cross-compiler. Pull #49 [larskanis]
|
15
|
+
|
1
16
|
=== 0.7.9 / 2011-06-08
|
2
17
|
|
3
18
|
* Enhancements:
|
data/Isolate
CHANGED
data/Rakefile
CHANGED
@@ -12,9 +12,9 @@
|
|
12
12
|
#
|
13
13
|
|
14
14
|
begin
|
15
|
-
require
|
15
|
+
require "isolate/now"
|
16
16
|
rescue LoadError => e
|
17
|
-
|
17
|
+
abort "This project requires Isolate to work. Please `gem install isolate` and try again."
|
18
18
|
end
|
19
19
|
|
20
20
|
# load rakefile extensions (tasks)
|
data/features/compile.feature
CHANGED
@@ -13,6 +13,14 @@ Feature: Compile C code into Ruby extensions.
|
|
13
13
|
And binary extension 'extension_one' do exist in 'lib'
|
14
14
|
And 'tmp' folder is created
|
15
15
|
|
16
|
+
Scenario: compile an extension with extra options
|
17
|
+
Given a safe project directory
|
18
|
+
And a extension named 'extension_one'
|
19
|
+
And 'tmp' folder is deleted
|
20
|
+
When rake task 'compile -- --with-opt-dir=/opt/local' is invoked
|
21
|
+
Then rake task 'compile -- --with-opt-dir=/opt/local' succeeded
|
22
|
+
And output of rake task 'compile -- --with-opt-dir=/opt/local' contains /with-opt-dir/
|
23
|
+
|
16
24
|
Scenario: not recompile unmodified extension
|
17
25
|
Given a safe project directory
|
18
26
|
And a extension named 'extension_one'
|
@@ -16,7 +16,7 @@ Feature: Cross-compile C extensions
|
|
16
16
|
Given that all my source files are in place
|
17
17
|
And I'm running a POSIX operating system
|
18
18
|
And I've installed cross compile toolchain
|
19
|
-
When rake task 'cross compile RUBY_CC_VERSION=1.8.
|
20
|
-
Then rake task 'cross compile RUBY_CC_VERSION=1.8.
|
19
|
+
When rake task 'cross compile RUBY_CC_VERSION=1.8.7:1.9.2' is invoked
|
20
|
+
Then rake task 'cross compile RUBY_CC_VERSION=1.8.7:1.9.2' succeeded
|
21
21
|
And binaries for platform 'i386-mingw32' version '1.8' get copied
|
22
22
|
And binaries for platform 'i386-mingw32' version '1.9' get copied
|
@@ -24,31 +24,31 @@ Given /^a extension '(.*)' with forced platform '(.*)'$/ do |extension_name, for
|
|
24
24
|
end
|
25
25
|
|
26
26
|
Given /^that all my source files are in place$/ do
|
27
|
-
|
28
|
-
|
27
|
+
step "a safe project directory"
|
28
|
+
step "a extension cross-compilable 'extension_one'"
|
29
29
|
end
|
30
30
|
|
31
31
|
Given /^that all my Java source files are in place$/ do
|
32
|
-
|
33
|
-
|
32
|
+
step "a safe project directory"
|
33
|
+
step "a extension Java-compilable 'extension_one'"
|
34
34
|
end
|
35
35
|
|
36
36
|
Given /^that my gem source is all in place$/ do
|
37
|
-
|
38
|
-
|
39
|
-
|
37
|
+
step "a safe project directory"
|
38
|
+
step "a gem named 'gem_abc'"
|
39
|
+
step "a extension cross-compilable 'extension_one'"
|
40
40
|
end
|
41
41
|
|
42
42
|
Given /^that my JRuby gem source is all in place$/ do
|
43
|
-
|
44
|
-
|
45
|
-
|
43
|
+
step "a safe project directory"
|
44
|
+
step "a gem named 'gem_abc'"
|
45
|
+
step "a extension Java-compilable 'extension_one'"
|
46
46
|
end
|
47
47
|
|
48
48
|
Given /^that my gem source is all in place to target two platforms$/ do
|
49
|
-
|
50
|
-
|
51
|
-
|
49
|
+
step "a safe project directory"
|
50
|
+
step "a gem named 'gem_abc'"
|
51
|
+
step "a extension 'extension_one' multi cross-compilable"
|
52
52
|
end
|
53
53
|
|
54
54
|
Given /^not changed any file since$/ do
|
@@ -24,6 +24,7 @@ module Rake
|
|
24
24
|
attr_accessor :platform
|
25
25
|
attr_accessor :config_options
|
26
26
|
attr_accessor :source_pattern
|
27
|
+
attr_accessor :extra_options
|
27
28
|
|
28
29
|
def platform
|
29
30
|
@platform ||= RUBY_PLATFORM
|
@@ -42,6 +43,7 @@ module Rake
|
|
42
43
|
@ext_dir = "ext/#{@name}"
|
43
44
|
@lib_dir = 'lib'
|
44
45
|
@config_options = []
|
46
|
+
@extra_options = ARGV.select { |i| i =~ /\A--?/ }
|
45
47
|
end
|
46
48
|
|
47
49
|
def define
|
@@ -39,7 +39,7 @@ module Rake
|
|
39
39
|
paths = ENV['PATH'].split(File::PATH_SEPARATOR)
|
40
40
|
|
41
41
|
# the pattern to look into (captures *nix and windows executables)
|
42
|
-
pattern = "*mingw*gcc{,.*}"
|
42
|
+
pattern = "i?86*mingw*gcc{,.*}"
|
43
43
|
|
44
44
|
@mingw_gcc_executable = paths.find do |path|
|
45
45
|
# cleanup paths before globbing
|
data/lib/rake/extensiontask.rb
CHANGED
@@ -38,10 +38,6 @@ module Rake
|
|
38
38
|
|
39
39
|
def binary(platform = nil)
|
40
40
|
if platform == "java"
|
41
|
-
warn_once <<-EOF
|
42
|
-
Compiling a native C extension on JRuby. This is discouraged and a
|
43
|
-
Java extension should be preferred.
|
44
|
-
EOF
|
45
41
|
"#{name}.#{RbConfig::MAKEFILE_CONFIG['DLEXT']}"
|
46
42
|
else
|
47
43
|
super
|
@@ -106,6 +102,12 @@ Rerun `rake` under MRI Ruby 1.8.x/1.9.x to cross/native compile.
|
|
106
102
|
# binary in temporary folder depends on makefile and source files
|
107
103
|
# tmp/extension_name/extension_name.{so,bundle}
|
108
104
|
file "#{tmp_path}/#{binary(platf)}" => ["#{tmp_path}/Makefile"] + source_files do
|
105
|
+
jruby_compile_msg = <<-EOF
|
106
|
+
Compiling a native C extension on JRuby. This is discouraged and a
|
107
|
+
Java extension should be preferred.
|
108
|
+
EOF
|
109
|
+
warn_once(jruby_compile_msg) if defined?(JRUBY_VERSION)
|
110
|
+
|
109
111
|
chdir tmp_path do
|
110
112
|
sh make
|
111
113
|
end
|
@@ -140,10 +142,14 @@ Rerun `rake` under MRI Ruby 1.8.x/1.9.x to cross/native compile.
|
|
140
142
|
# add options to command
|
141
143
|
cmd.push(*options)
|
142
144
|
|
145
|
+
# add any extra command line options
|
146
|
+
unless extra_options.empty?
|
147
|
+
cmd.push(*extra_options)
|
148
|
+
end
|
149
|
+
|
143
150
|
chdir tmp_path do
|
144
151
|
# FIXME: Rake is broken for multiple arguments system() calls.
|
145
152
|
# Add current directory to the search path of Ruby
|
146
|
-
# Also, include additional parameters supplied.
|
147
153
|
sh cmd.join(' ')
|
148
154
|
end
|
149
155
|
end
|
@@ -272,7 +278,7 @@ Rerun `rake` under MRI Ruby 1.8.x/1.9.x to cross/native compile.
|
|
272
278
|
|
273
279
|
# warn the user about the need of configuration to use cross compilation.
|
274
280
|
unless File.exist?(config_path)
|
275
|
-
|
281
|
+
define_dummy_cross_platform_tasks
|
276
282
|
return
|
277
283
|
end
|
278
284
|
|
@@ -349,6 +355,15 @@ Rerun `rake` under MRI Ruby 1.8.x/1.9.x to cross/native compile.
|
|
349
355
|
end
|
350
356
|
end
|
351
357
|
|
358
|
+
def define_dummy_cross_platform_tasks
|
359
|
+
task 'cross' do
|
360
|
+
Rake::Task['compile'].clear
|
361
|
+
task 'compile' do
|
362
|
+
raise "rake-compiler must be configured first to enable cross-compilation"
|
363
|
+
end
|
364
|
+
end
|
365
|
+
end
|
366
|
+
|
352
367
|
def extconf
|
353
368
|
"#{@ext_dir}/#{@config_script}"
|
354
369
|
end
|
@@ -67,15 +67,6 @@ module Rake
|
|
67
67
|
install "#{tmp_path}/#{binary(platf)}", "#{lib_path}/#{binary(platf)}"
|
68
68
|
end
|
69
69
|
|
70
|
-
not_jruby_compile_msg = <<-EOF
|
71
|
-
WARNING: You're cross-compiling a binary extension for JRuby, but are using
|
72
|
-
another interpreter. If your Java classpath or extension dir settings are not
|
73
|
-
correctly detected, then either check the appropriate environment variables or
|
74
|
-
execute the Rake compilation task using the JRuby interpreter.
|
75
|
-
(e.g. `jruby -S rake compile:java`)
|
76
|
-
EOF
|
77
|
-
warn_once(not_jruby_compile_msg) unless defined?(JRUBY_VERSION)
|
78
|
-
|
79
70
|
file "#{tmp_path}/#{binary(platf)}" => "#{tmp_path}/.build" do
|
80
71
|
|
81
72
|
class_files = FileList["#{tmp_path}/**/*.class"].
|
@@ -92,6 +83,15 @@ execute the Rake compilation task using the JRuby interpreter.
|
|
92
83
|
end
|
93
84
|
|
94
85
|
file "#{tmp_path}/.build" => [tmp_path] + source_files do
|
86
|
+
not_jruby_compile_msg = <<-EOF
|
87
|
+
WARNING: You're cross-compiling a binary extension for JRuby, but are using
|
88
|
+
another interpreter. If your Java classpath or extension dir settings are not
|
89
|
+
correctly detected, then either check the appropriate environment variables or
|
90
|
+
execute the Rake compilation task using the JRuby interpreter.
|
91
|
+
(e.g. `jruby -S rake compile:java`)
|
92
|
+
EOF
|
93
|
+
warn_once(not_jruby_compile_msg) unless defined?(JRUBY_VERSION)
|
94
|
+
|
95
95
|
classpath_arg = java_classpath_arg(@classpath)
|
96
96
|
debug_arg = @debug ? '-g' : ''
|
97
97
|
|
@@ -283,16 +283,29 @@ describe Rake::ExtensionTask do
|
|
283
283
|
File.stub!(:open).and_yield(mock_fake_rb)
|
284
284
|
end
|
285
285
|
|
286
|
-
|
287
|
-
|
286
|
+
context 'if no rake-compiler configuration exists' do
|
287
|
+
before :each do
|
288
|
+
File.should_receive(:exist?).with(@config_file).and_return(false)
|
288
289
|
|
289
|
-
|
290
|
-
|
291
|
-
|
290
|
+
_, @err = capture_output do
|
291
|
+
Rake::ExtensionTask.new('extension_one') do |ext|
|
292
|
+
ext.cross_compile = true
|
293
|
+
end
|
292
294
|
end
|
293
295
|
end
|
294
296
|
|
295
|
-
|
297
|
+
it 'should not generate a warning' do
|
298
|
+
@err.should eq("")
|
299
|
+
end
|
300
|
+
|
301
|
+
it 'should create a dummy nested cross-compile target that raises an error' do
|
302
|
+
Rake::Task.should have_defined("cross")
|
303
|
+
Rake::Task["cross"].invoke
|
304
|
+
lambda {
|
305
|
+
Rake::Task["compile"].invoke
|
306
|
+
}.should raise_error(RuntimeError,
|
307
|
+
/rake-compiler must be configured first to enable cross-compilation/)
|
308
|
+
end
|
296
309
|
end
|
297
310
|
|
298
311
|
it 'should parse the config file using YAML' do
|
data/tasks/gem.rake
CHANGED
@@ -3,7 +3,7 @@ require 'rubygems/package_task'
|
|
3
3
|
GEM_SPEC = Gem::Specification.new do |s|
|
4
4
|
# basic information
|
5
5
|
s.name = "rake-compiler"
|
6
|
-
s.version = "0.
|
6
|
+
s.version = "0.8.0"
|
7
7
|
s.platform = Gem::Platform::RUBY
|
8
8
|
|
9
9
|
# description and details
|
@@ -18,9 +18,8 @@ GEM_SPEC = Gem::Specification.new do |s|
|
|
18
18
|
s.add_dependency 'rake'
|
19
19
|
|
20
20
|
# development dependencies
|
21
|
-
s.add_development_dependency 'rspec', '~> 2.
|
22
|
-
s.add_development_dependency 'cucumber', '~>
|
23
|
-
#s.add_development_dependency 'rcov', '~> 0.9.9'
|
21
|
+
s.add_development_dependency 'rspec', '~> 2.8.0'
|
22
|
+
s.add_development_dependency 'cucumber', '~> 1.1.4'
|
24
23
|
|
25
24
|
# components, files and paths
|
26
25
|
s.files = FileList["features/**/*.{feature,rb}", "bin/rake-compiler",
|
data/tasks/rspec.rake
CHANGED
@@ -1,29 +1,9 @@
|
|
1
1
|
begin
|
2
2
|
require "rspec/core/rake_task"
|
3
|
-
|
4
|
-
begin
|
5
|
-
require 'rcov'
|
6
|
-
rescue LoadError
|
7
|
-
warn "RCov gem is required, please install it (gem install rcov)."
|
8
|
-
end
|
9
|
-
|
10
|
-
rescue LoadError
|
3
|
+
rescue LoadError => e
|
11
4
|
warn "RSpec gem is required, please install it (gem install rspec)."
|
12
5
|
end
|
13
6
|
|
14
7
|
if defined?(RSpec::Core::RakeTask)
|
15
8
|
RSpec::Core::RakeTask.new(:spec)
|
16
|
-
|
17
|
-
if defined?(Rcov)
|
18
|
-
CLOBBER.include('coverage')
|
19
|
-
|
20
|
-
namespace :spec do
|
21
|
-
desc "Run all specs in spec directory with RCov"
|
22
|
-
RSpec::Core::RakeTask.new(:rcov) do |t|
|
23
|
-
t.rcov = true
|
24
|
-
t.rcov_opts = ["--exclude", "spec/*,features/*,gems/*"]
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
9
|
end
|
29
|
-
|
metadata
CHANGED
@@ -1,81 +1,61 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rake-compiler
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.8.0
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 7
|
9
|
-
- 9
|
10
|
-
version: 0.7.9
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Luis Lavena
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-01-08 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: rake
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &23233764 !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
version: "0"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
32
22
|
type: :runtime
|
33
|
-
version_requirements: *id001
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: rspec
|
36
23
|
prerelease: false
|
37
|
-
|
24
|
+
version_requirements: *23233764
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rspec
|
27
|
+
requirement: &23233056 !ruby/object:Gem::Requirement
|
38
28
|
none: false
|
39
|
-
requirements:
|
29
|
+
requirements:
|
40
30
|
- - ~>
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
|
43
|
-
segments:
|
44
|
-
- 2
|
45
|
-
- 6
|
46
|
-
- 0
|
47
|
-
version: 2.6.0
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 2.8.0
|
48
33
|
type: :development
|
49
|
-
version_requirements: *id002
|
50
|
-
- !ruby/object:Gem::Dependency
|
51
|
-
name: cucumber
|
52
34
|
prerelease: false
|
53
|
-
|
35
|
+
version_requirements: *23233056
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: cucumber
|
38
|
+
requirement: &23248788 !ruby/object:Gem::Requirement
|
54
39
|
none: false
|
55
|
-
requirements:
|
40
|
+
requirements:
|
56
41
|
- - ~>
|
57
|
-
- !ruby/object:Gem::Version
|
58
|
-
|
59
|
-
segments:
|
60
|
-
- 0
|
61
|
-
- 10
|
62
|
-
- 6
|
63
|
-
version: 0.10.6
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 1.1.4
|
64
44
|
type: :development
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *23248788
|
47
|
+
description: ! 'Provide a standard and simplified way to build and package
|
48
|
+
|
49
|
+
Ruby extensions (C, Java) using Rake as glue.'
|
69
50
|
email: luislavena@gmail.com
|
70
|
-
executables:
|
51
|
+
executables:
|
71
52
|
- rake-compiler
|
72
53
|
extensions: []
|
73
|
-
|
74
|
-
extra_rdoc_files:
|
54
|
+
extra_rdoc_files:
|
75
55
|
- README.rdoc
|
76
56
|
- LICENSE.txt
|
77
57
|
- History.txt
|
78
|
-
files:
|
58
|
+
files:
|
79
59
|
- features/compile.feature
|
80
60
|
- features/cross-compile.feature
|
81
61
|
- features/cross-package-multi.feature
|
@@ -119,44 +99,32 @@ files:
|
|
119
99
|
- LICENSE.txt
|
120
100
|
- cucumber.yml
|
121
101
|
homepage: http://github.com/luislavena/rake-compiler
|
122
|
-
licenses:
|
102
|
+
licenses:
|
123
103
|
- MIT
|
124
104
|
post_install_message:
|
125
|
-
rdoc_options:
|
105
|
+
rdoc_options:
|
126
106
|
- --main
|
127
107
|
- README.rdoc
|
128
108
|
- --title
|
129
109
|
- rake-compiler -- Documentation
|
130
|
-
require_paths:
|
110
|
+
require_paths:
|
131
111
|
- lib
|
132
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
112
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
133
113
|
none: false
|
134
|
-
requirements:
|
135
|
-
- -
|
136
|
-
- !ruby/object:Gem::Version
|
137
|
-
hash: 59
|
138
|
-
segments:
|
139
|
-
- 1
|
140
|
-
- 8
|
141
|
-
- 6
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
142
117
|
version: 1.8.6
|
143
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
118
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
144
119
|
none: false
|
145
|
-
requirements:
|
146
|
-
- -
|
147
|
-
- !ruby/object:Gem::Version
|
148
|
-
hash: 17
|
149
|
-
segments:
|
150
|
-
- 1
|
151
|
-
- 3
|
152
|
-
- 5
|
120
|
+
requirements:
|
121
|
+
- - ! '>='
|
122
|
+
- !ruby/object:Gem::Version
|
153
123
|
version: 1.3.5
|
154
124
|
requirements: []
|
155
|
-
|
156
125
|
rubyforge_project: rake-compiler
|
157
|
-
rubygems_version: 1.8.
|
126
|
+
rubygems_version: 1.8.15
|
158
127
|
signing_key:
|
159
128
|
specification_version: 3
|
160
129
|
summary: Rake-based Ruby Extension (C, Java) task generator.
|
161
130
|
test_files: []
|
162
|
-
|