rake-compiler 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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