rake-compiler 0.6.0 → 0.7.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.
@@ -299,6 +299,16 @@ describe Rake::ExtensionTask do
299
299
  err.should match(/no configuration section for specified version of Ruby/)
300
300
  end
301
301
 
302
+ it 'should capture an action block to be executed when cross compiling' do
303
+ lambda {
304
+ Rake::ExtensionTask.new('extension_one') do |ext|
305
+ ext.cross_compiling do |gem_spec|
306
+ gem_spec.post_install_message = "Cross compiled gem"
307
+ end
308
+ end
309
+ }.should_not raise_error
310
+ end
311
+
302
312
  it 'should allow usage of RUBY_CC_VERSION to indicate a different version of ruby' do
303
313
  config = mock(Hash)
304
314
  config.should_receive(:[]).with("rbconfig-1.9.1").and_return('/path/to/ruby/1.9.1/rbconfig.rb')
@@ -421,7 +431,7 @@ describe Rake::ExtensionTask do
421
431
  end
422
432
 
423
433
  def mock_gem_spec(stubs = {})
424
- mock(Gem::Specification,
434
+ mock(Gem::Specification,
425
435
  { :name => 'my_gem', :platform => 'ruby' }.merge(stubs)
426
436
  )
427
437
  end
@@ -0,0 +1,182 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ require 'rake/javaextensiontask'
4
+ require 'rbconfig'
5
+
6
+ describe Rake::JavaExtensionTask do
7
+ context '#new' do
8
+ context '(basic)' do
9
+ it 'should raise an error if no name is provided' do
10
+ lambda {
11
+ Rake::JavaExtensionTask.new
12
+ }.should raise_error(RuntimeError, /Extension name must be provided/)
13
+ end
14
+
15
+ it 'should allow string as extension name assignation' do
16
+ ext = Rake::JavaExtensionTask.new('extension_one')
17
+ ext.name.should == 'extension_one'
18
+ end
19
+
20
+ it 'should allow string as extension name using block assignation' do
21
+ ext = Rake::JavaExtensionTask.new do |ext|
22
+ ext.name = 'extension_two'
23
+ end
24
+ ext.name.should == 'extension_two'
25
+ end
26
+
27
+ it 'should return itself for the block' do
28
+ from_block = nil
29
+ from_lasgn = Rake::JavaExtensionTask.new('extension_three') do |ext|
30
+ from_block = ext
31
+ end
32
+ from_block.should == from_lasgn
33
+ end
34
+
35
+ it 'should accept a gem specification as parameter' do
36
+ spec = mock_gem_spec
37
+ ext = Rake::JavaExtensionTask.new('extension_three', spec)
38
+ ext.gem_spec.should == spec
39
+ end
40
+
41
+ it 'should allow gem specification be defined using block assignation' do
42
+ spec = mock_gem_spec
43
+ ext = Rake::JavaExtensionTask.new('extension_four') do |ext|
44
+ ext.gem_spec = spec
45
+ end
46
+ ext.gem_spec.should == spec
47
+ end
48
+
49
+ it 'should allow forcing of platform' do
50
+ ext = Rake::JavaExtensionTask.new('weird_extension') do |ext|
51
+ ext.platform = 'java-128bit'
52
+ end
53
+ ext.platform.should == 'java-128bit'
54
+ end
55
+ end
56
+ end
57
+
58
+ context '(defaults)' do
59
+ before :each do
60
+ @ext = Rake::JavaExtensionTask.new('extension_one')
61
+ end
62
+
63
+ it 'should dump intermediate files to tmp/' do
64
+ @ext.tmp_dir.should == 'tmp'
65
+ end
66
+
67
+ it 'should copy build extension into lib/' do
68
+ @ext.lib_dir.should == 'lib'
69
+ end
70
+
71
+ it 'should look for Java files pattern (.java)' do
72
+ @ext.source_pattern.should == "**/*.java"
73
+ end
74
+
75
+ it 'should have no configuration options preset to delegate' do
76
+ @ext.config_options.should be_empty
77
+ end
78
+
79
+ it 'should default to Java platform' do
80
+ @ext.platform.should == 'java'
81
+ end
82
+
83
+ context '(tasks)' do
84
+ before :each do
85
+ Rake.application.clear
86
+ CLEAN.clear
87
+ CLOBBER.clear
88
+ end
89
+
90
+ context '(one extension)' do
91
+ before :each do
92
+ Rake::FileList.stub!(:[]).and_return(["ext/extension_one/source.java"])
93
+ @ext = Rake::JavaExtensionTask.new('extension_one')
94
+ @ext_bin = ext_bin('extension_one')
95
+ @platform = 'java'
96
+ end
97
+
98
+ context 'compile' do
99
+ it 'should define as task' do
100
+ Rake::Task.task_defined?('compile').should be_true
101
+ end
102
+
103
+ it "should depend on 'compile:{platform}'" do
104
+ pending 'needs fixing'
105
+ Rake::Task['compile'].prerequisites.should include("compile:#{@platform}")
106
+ end
107
+ end
108
+
109
+ context 'compile:extension_one' do
110
+ it 'should define as task' do
111
+ Rake::Task.task_defined?('compile:extension_one').should be_true
112
+ end
113
+
114
+ it "should depend on 'compile:extension_one:{platform}'" do
115
+ pending 'needs fixing'
116
+ Rake::Task['compile:extension_one'].prerequisites.should include("compile:extension_one:#{@platform}")
117
+ end
118
+ end
119
+
120
+ context 'lib/extension_one.jar' do
121
+ it 'should define as task' do
122
+ pending 'needs fixing'
123
+ Rake::Task.task_defined?("lib/#{@ext_bin}").should be_true
124
+ end
125
+
126
+ it "should depend on 'copy:extension_one:{platform}'" do
127
+ pending 'needs fixing'
128
+ Rake::Task["lib/#{@ext_bin}"].prerequisites.should include("copy:extension_one:#{@platform}")
129
+ end
130
+ end
131
+
132
+ context 'tmp/{platform}/extension_one/extension_one.jar' do
133
+ it 'should define as task' do
134
+ Rake::Task.task_defined?("tmp/#{@platform}/extension_one/#{@ext_bin}").should be_true
135
+ end
136
+
137
+ it "should depend on checkpoint file" do
138
+ Rake::Task["tmp/#{@platform}/extension_one/#{@ext_bin}"].prerequisites.should include("tmp/#{@platform}/extension_one/.build")
139
+ end
140
+ end
141
+
142
+ context 'tmp/{platform}/extension_one/.build' do
143
+ it 'should define as task' do
144
+ Rake::Task.task_defined?("tmp/#{@platform}/extension_one/.build").should be_true
145
+ end
146
+
147
+ it 'should depend on source files' do
148
+ Rake::Task["tmp/#{@platform}/extension_one/.build"].prerequisites.should include("ext/extension_one/source.java")
149
+ end
150
+ end
151
+
152
+ context 'clean' do
153
+ it "should include 'tmp/{platform}/extension_one' in the pattern" do
154
+ CLEAN.should include("tmp/#{@platform}/extension_one")
155
+ end
156
+ end
157
+
158
+ context 'clobber' do
159
+ it "should include 'lib/extension_one.jar'" do
160
+ CLOBBER.should include("lib/#{@ext_bin}")
161
+ end
162
+
163
+ it "should include 'tmp'" do
164
+ CLOBBER.should include('tmp')
165
+ end
166
+ end
167
+ end
168
+ end
169
+ end
170
+ private
171
+
172
+ def ext_bin(extension_name)
173
+ "#{extension_name}.jar"
174
+ end
175
+
176
+ def mock_gem_spec(stubs = {})
177
+ mock(Gem::Specification,
178
+ { :name => 'my_gem', :platform => 'ruby' }.merge(stubs)
179
+ )
180
+ end
181
+
182
+ end
@@ -28,6 +28,7 @@ $LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir)
28
28
 
29
29
  require 'rake/extensioncompiler'
30
30
 
31
+ MAKE = ENV['MAKE'] || %w[gmake make].find { |c| system(c, '-v') }
31
32
  USER_HOME = File.expand_path("~/.rake-compiler")
32
33
  RUBY_CC_VERSION = "ruby-#{ENV['VERSION'] || '1.8.6-p287'}"
33
34
  RUBY_SOURCE = ENV['SOURCE']
@@ -137,14 +138,14 @@ end
137
138
  # make
138
139
  file "#{USER_HOME}/builds/#{RUBY_CC_VERSION}/ruby.exe" => ["#{USER_HOME}/builds/#{RUBY_CC_VERSION}/Makefile"] do |t|
139
140
  chdir File.dirname(t.prerequisites.first) do
140
- sh "make"
141
+ sh MAKE
141
142
  end
142
143
  end
143
144
 
144
145
  # make install
145
146
  file "#{USER_HOME}/ruby/#{RUBY_CC_VERSION}/bin/ruby.exe" => ["#{USER_HOME}/builds/#{RUBY_CC_VERSION}/ruby.exe"] do |t|
146
147
  chdir File.dirname(t.prerequisites.first) do
147
- sh "make install"
148
+ sh "#{MAKE} install"
148
149
  end
149
150
  end
150
151
  task :install => ["#{USER_HOME}/ruby/#{RUBY_CC_VERSION}/bin/ruby.exe"]
data/tasks/common.rake CHANGED
@@ -9,8 +9,5 @@ task :default => [:spec, :features]
9
9
  # make packing depend on success of running specs and features
10
10
  task :package => [:spec, :features]
11
11
 
12
- # make the release re-generate the gemspec if required
13
- task :release => [:gemspec]
14
-
15
12
  # publish documentation when doing a release
16
13
  task :release => [:publish]
data/tasks/cucumber.rake CHANGED
@@ -1,15 +1,23 @@
1
1
  begin
2
- gem 'cucumber'
3
2
  require 'cucumber/rake/task'
4
- rescue Exception
5
- nil
3
+ rescue LoadError
4
+ warn "Cucumber gem is required, please install it. (gem install cucumber)"
6
5
  end
7
6
 
8
7
  if defined?(Cucumber)
9
- Cucumber::Rake::Task.new do |t|
10
- t.cucumber_opts = "--format pretty --no-source"
8
+ namespace :cucumber do
9
+ Cucumber::Rake::Task.new('default', 'Run features testing C extension support') do |t|
10
+ t.profile = 'default'
11
+ t.cucumber_opts = '--format pretty --no-source'
12
+ end
13
+ Cucumber::Rake::Task.new('java', 'Run features testing Java extension support') do |t|
14
+ t.profile = 'java'
15
+ t.cucumber_opts = '--format pretty --no-source'
16
+ end
17
+
18
+ desc 'Run all features'
19
+ task :all => [:default, :java]
11
20
  end
12
- else
13
- warn "Cucumber gem is required, please install it. (gem install cucumber)"
21
+ desc 'Alias for cucumber:default'
22
+ task :cucumber => 'cucumber:default'
14
23
  end
15
-
data/tasks/gem.rake CHANGED
@@ -3,26 +3,31 @@ 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.0"
6
+ s.version = "0.7.0"
7
7
  s.platform = Gem::Platform::RUBY
8
8
 
9
9
  # description and details
10
- s.summary = 'Rake-based Ruby C Extension task generator.'
11
- s.description = "Provide a standard and simplified way to build and package\nRuby C extensions using Rake as glue."
10
+ s.summary = 'Rake-based Ruby Extension (C, Java) task generator.'
11
+ s.description = "Provide a standard and simplified way to build and package\nRuby extensions (C, Java) using Rake as glue."
12
+
13
+ # requirements
14
+ s.required_ruby_version = ">= 1.8.6"
15
+ s.required_rubygems_version = ">= 1.3.5"
12
16
 
13
17
  # dependencies
14
18
  s.add_dependency 'rake', '>= 0.8.3', '< 0.9'
15
19
 
16
20
  # development dependencies
17
- #s.add_development_dependency 'rspec', '~> 1.1.9'
18
- #s.add_development_dependency 'rcov', '~> 0.8.1'
19
- #s.add_development_dependency 'cucumber', '~> 0.1.8'
21
+ s.add_development_dependency 'rspec', '~> 1.2.9'
22
+ s.add_development_dependency 'cucumber', '~> 0.4.4'
23
+ #s.add_development_dependency 'rcov', '~> 0.9.6'
20
24
 
21
25
  # components, files and paths
22
26
  s.files = FileList["features/**/*.{feature,rb}", "bin/rake-compiler",
23
27
  "lib/**/*.rb", "spec/**/*.rb", "tasks/**/*.rake",
24
28
  "Rakefile", "*.{rdoc,txt,yml}"]
25
29
 
30
+ s.bindir = 'bin'
26
31
  s.executables = ['rake-compiler']
27
32
 
28
33
  s.require_path = 'lib'
@@ -47,11 +52,3 @@ gem_package = Gem::PackageTask.new(GEM_SPEC) do |pkg|
47
52
  pkg.need_tar = false
48
53
  pkg.need_zip = false
49
54
  end
50
-
51
- file "#{GEM_SPEC.name}.gemspec" => ['Rakefile', 'tasks/gem.rake'] do |t|
52
- puts "Generating #{t.name}"
53
- File.open(t.name, 'w') { |f| f.puts GEM_SPEC.to_yaml }
54
- end
55
-
56
- desc "Generate or update the standalone gemspec file for the project"
57
- task :gemspec => ["#{GEM_SPEC.name}.gemspec"]
data/tasks/news.rake CHANGED
@@ -1,8 +1,7 @@
1
1
  begin
2
- gem 'rubyforge', '~> 1.0.1'
3
2
  require 'rubyforge'
4
- rescue Exception
5
- nil
3
+ rescue LoadError
4
+ warn "rubyforge gem is required to generate announces, please install it (gem install rubyforge)."
6
5
  end
7
6
 
8
7
  CLEAN.include('email.txt')
@@ -77,6 +76,4 @@ if defined?(RubyForge) then
77
76
  else
78
77
  warn "no GEM_SPEC is found or defined. 'announce' task cannot work without it."
79
78
  end
80
- else
81
- warn "rubyforge gem is required to generate announces, please install it (gem install rubyforge)."
82
79
  end
@@ -1,8 +1,7 @@
1
1
  begin
2
- gem 'rubyforge', '~> 1.0.1'
3
2
  require 'rubyforge'
4
- rescue Exception
5
- nil
3
+ rescue LoadError
4
+ warn "rubyforge gem is required to generate releases, please install it (gem install rubyforge)."
6
5
  end
7
6
 
8
7
  if defined?(RubyForge) then
@@ -39,6 +38,4 @@ if defined?(RubyForge) then
39
38
  else
40
39
  warn "You need a GEM_SPEC and DOC rdoc definitions present. task publish not defined."
41
40
  end
42
- else
43
- warn "rubyforge gem is required to generate releases, please install it (gem install rubyforge)."
44
41
  end
data/tasks/release.rake CHANGED
@@ -1,8 +1,7 @@
1
1
  begin
2
- gem 'rubyforge', '~> 1.0.1'
3
2
  require 'rubyforge'
4
- rescue Exception
5
- nil
3
+ rescue LoadError
4
+ warn "rubyforge gem is required to generate releases, please install it (gem install rubyforge)."
6
5
  end
7
6
 
8
7
  if defined?(RubyForge) then
@@ -69,6 +68,4 @@ if defined?(RubyForge) then
69
68
  else
70
69
  warn "no GEM_SPEC is found or defined. 'release' task cannot work without it."
71
70
  end
72
- else
73
- warn "rubyforge gem is required to generate releases, please install it (gem install rubyforge)."
74
71
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rake-compiler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luis Lavena
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-07-25 00:00:00 -03:00
12
+ date: 2009-12-08 00:00:00 -03:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -25,9 +25,29 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: "0.9"
27
27
  version:
28
+ - !ruby/object:Gem::Dependency
29
+ name: rspec
30
+ type: :development
31
+ version_requirement:
32
+ version_requirements: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ~>
35
+ - !ruby/object:Gem::Version
36
+ version: 1.2.9
37
+ version:
38
+ - !ruby/object:Gem::Dependency
39
+ name: cucumber
40
+ type: :development
41
+ version_requirement:
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: 0.4.4
47
+ version:
28
48
  description: |-
29
49
  Provide a standard and simplified way to build and package
30
- Ruby C extensions using Rake as glue.
50
+ Ruby extensions (C, Java) using Rake as glue.
31
51
  email: luislavena@gmail.com
32
52
  executables:
33
53
  - rake-compiler
@@ -42,20 +62,27 @@ files:
42
62
  - features/cross-compile.feature
43
63
  - features/cross-package-multi.feature
44
64
  - features/cross-package.feature
65
+ - features/java-compile.feature
66
+ - features/java-no-native-compile.feature
67
+ - features/java-package.feature
45
68
  - features/package.feature
46
69
  - features/step_definitions/compilation.rb
47
70
  - features/step_definitions/cross_compilation.rb
48
71
  - features/step_definitions/execution.rb
49
72
  - features/step_definitions/folders.rb
50
73
  - features/step_definitions/gem.rb
74
+ - features/step_definitions/java_compilation.rb
51
75
  - features/support/env.rb
52
76
  - features/support/file_template_helpers.rb
53
77
  - features/support/generator_helpers.rb
54
78
  - features/support/platform_extension_helpers.rb
55
79
  - bin/rake-compiler
80
+ - lib/rake/baseextensiontask.rb
56
81
  - lib/rake/extensioncompiler.rb
57
82
  - lib/rake/extensiontask.rb
83
+ - lib/rake/javaextensiontask.rb
58
84
  - spec/lib/rake/extensiontask_spec.rb
85
+ - spec/lib/rake/javaextensiontask_spec.rb
59
86
  - spec/spec_helper.rb
60
87
  - spec/support/capture_output_helper.rb
61
88
  - tasks/bin/cross-ruby.rake
@@ -88,20 +115,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
88
115
  requirements:
89
116
  - - ">="
90
117
  - !ruby/object:Gem::Version
91
- version: "0"
118
+ version: 1.8.6
92
119
  version:
93
120
  required_rubygems_version: !ruby/object:Gem::Requirement
94
121
  requirements:
95
122
  - - ">="
96
123
  - !ruby/object:Gem::Version
97
- version: "0"
124
+ version: 1.3.5
98
125
  version:
99
126
  requirements: []
100
127
 
101
128
  rubyforge_project: rake-compiler
102
- rubygems_version: 1.3.4
129
+ rubygems_version: 1.3.5
103
130
  signing_key:
104
131
  specification_version: 3
105
- summary: Rake-based Ruby C Extension task generator.
132
+ summary: Rake-based Ruby Extension (C, Java) task generator.
106
133
  test_files: []
107
134