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.
- data/History.txt +50 -1
- data/README.rdoc +59 -31
- data/cucumber.yml +3 -0
- data/features/java-compile.feature +22 -0
- data/features/java-no-native-compile.feature +33 -0
- data/features/java-package.feature +24 -0
- data/features/step_definitions/compilation.rb +16 -0
- data/features/step_definitions/cross_compilation.rb +2 -9
- data/features/step_definitions/execution.rb +26 -4
- data/features/step_definitions/gem.rb +12 -0
- data/features/step_definitions/java_compilation.rb +7 -0
- data/features/support/env.rb +0 -1
- data/features/support/file_template_helpers.rb +36 -0
- data/features/support/generator_helpers.rb +28 -1
- data/features/support/platform_extension_helpers.rb +13 -0
- data/lib/rake/baseextensiontask.rb +84 -0
- data/lib/rake/extensioncompiler.rb +1 -1
- data/lib/rake/extensiontask.rb +48 -54
- data/lib/rake/javaextensiontask.rb +225 -0
- data/spec/lib/rake/extensiontask_spec.rb +11 -1
- data/spec/lib/rake/javaextensiontask_spec.rb +182 -0
- data/tasks/bin/cross-ruby.rake +3 -2
- data/tasks/common.rake +0 -3
- data/tasks/cucumber.rake +16 -8
- data/tasks/gem.rake +11 -14
- data/tasks/news.rake +2 -5
- data/tasks/rdoc_publish.rake +2 -5
- data/tasks/release.rake +2 -5
- metadata +34 -7
data/History.txt
CHANGED
@@ -1,4 +1,53 @@
|
|
1
|
-
=== 0.
|
1
|
+
=== 0.7.0 / 2009-12-08
|
2
|
+
|
3
|
+
* Enhancements
|
4
|
+
* Allow generation of JRuby extensions. Thanks to Alex Coles (myabc) for the
|
5
|
+
contribution.
|
6
|
+
This will allow, with proper JDK tools, cross compilation of JRuby gems
|
7
|
+
from MRI.
|
8
|
+
|
9
|
+
Rake::JavaExtensionTask.new('my_java_extension', GEM_SPEC) do |ext|
|
10
|
+
# most of ExtensionTask options can be used
|
11
|
+
# plus, java_compiling:
|
12
|
+
ext.java_compiling do |gem_spec|
|
13
|
+
gem_spec.post_install_message = "This is a native JRuby gem!"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
Please note that cross-compiling JRuby gems requires either JRUBY_HOME or
|
18
|
+
JRUBY_PARENT_CLASSPATH environment variables being properly set.
|
19
|
+
|
20
|
+
* Allow alteration of the Gem Specification when cross compiling. Closes GH-3
|
21
|
+
This is useful to indicate a custom requirement message, like DLLs
|
22
|
+
installation or similar.
|
23
|
+
|
24
|
+
Rake::ExtensionTask.new('my_extension', GEM_SPEC) do |ext|
|
25
|
+
ext.cross_compile = true
|
26
|
+
# ...
|
27
|
+
ext.cross_compiling do |gem_spec|
|
28
|
+
gem_spec.post_install_message = "You've installed a binary version of this gem"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
* Bugfixes
|
33
|
+
* Detect GNU make independently of distribution based naming.
|
34
|
+
Thanks to flori for patches.
|
35
|
+
* Usage of #dup to duplicate gemspec instead of YAML dumping.
|
36
|
+
* No longer support Ruby older than 1.8.6
|
37
|
+
* No longer support RubyGems older than 1.3.5
|
38
|
+
* Force definition of binary directory and executables. Closes GH-11
|
39
|
+
* Workaround path with spaces issues using relative paths. Closes GH-6
|
40
|
+
* Removed gemspec, GitHub gems no more
|
41
|
+
|
42
|
+
* Known issues
|
43
|
+
* Usage of rake-compiler under projects with Jeweler requires some tweaks
|
44
|
+
Please read issue GH-73 for Jeweler:
|
45
|
+
http://github.com/technicalpickles/jeweler/issues#issue/73
|
46
|
+
|
47
|
+
For a workaround, look here:
|
48
|
+
http://gist.github.com/251663
|
49
|
+
|
50
|
+
=== 0.6.0 / 2009-07-25
|
2
51
|
|
3
52
|
* Enhancements
|
4
53
|
* Implemented 'fat-binaries' generation for cross compiling
|
data/README.rdoc
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
= rake-compiler
|
2
2
|
|
3
|
-
rake-compiler aims to help Gem developers
|
4
|
-
|
3
|
+
rake-compiler aims to help Gem developers deal with Ruby extensions, simplifying
|
4
|
+
code and reducing duplication.
|
5
5
|
|
6
|
-
It
|
7
|
-
|
6
|
+
It followss *convention over configuration* and sets a standardized structure to
|
7
|
+
build and package both C and Java extensions in your gems.
|
8
8
|
|
9
|
-
This is the result of experiences dealing with several Gems that required
|
10
|
-
|
11
|
-
|
9
|
+
This is the result of experiences dealing with several Gems that required native
|
10
|
+
extensions across platforms and different user configurations where details like
|
11
|
+
portability and clarity of code were lacking.
|
12
12
|
|
13
13
|
== An Overview
|
14
14
|
|
@@ -18,9 +18,12 @@ Let's summarize what rake-compiler provides:
|
|
18
18
|
|
19
19
|
* Painlessly build extensions on different platforms (Linux, OSX and Windows).
|
20
20
|
|
21
|
+
* Painlessly build extensions for different Ruby implementations (JRuby,
|
22
|
+
Rubinius and MRI).
|
23
|
+
|
21
24
|
* Allow multiple extensions be compiled inside the same gem.
|
22
25
|
|
23
|
-
* Mimics RubyGems installation process, so helps as test environment.
|
26
|
+
* Mimics RubyGems installation process, so helps as a test environment.
|
24
27
|
|
25
28
|
* Simplify cross platform compilation of extensions (target Windows from Linux).
|
26
29
|
|
@@ -32,13 +35,6 @@ First, you need to install the gem:
|
|
32
35
|
|
33
36
|
$ gem install rake-compiler
|
34
37
|
|
35
|
-
Since this package is in constant evolution, you could try installing it
|
36
|
-
from GitHub:
|
37
|
-
|
38
|
-
$ gem install luislavena-rake-compiler --source http://gems.github.com
|
39
|
-
|
40
|
-
The development gem is usually in pretty good shape actually.
|
41
|
-
|
42
38
|
== Now what? (Usage)
|
43
39
|
|
44
40
|
Now that you have the gem installed, let's give your project some structure.
|
@@ -46,11 +42,12 @@ Now that you have the gem installed, let's give your project some structure.
|
|
46
42
|
=== Structure
|
47
43
|
|
48
44
|
Let's say we want to compile an extension called 'hello_world', so we should
|
49
|
-
organize the code and folders that will help rake-compiler do
|
45
|
+
organize the code and folders that will help rake-compiler do its job:
|
50
46
|
|
51
47
|
|-- ext
|
52
48
|
| `-- hello_world
|
53
49
|
| |-- extconf.rb
|
50
|
+
| |-- HelloWorldService.java
|
54
51
|
| `-- hello_world.c
|
55
52
|
|-- lib
|
56
53
|
`-- Rakefile
|
@@ -63,20 +60,28 @@ to find code and also contribute back to your project more easily.
|
|
63
60
|
So now it's time to introduce the code to compile our extension:
|
64
61
|
|
65
62
|
# File: Rakefile
|
66
|
-
|
63
|
+
|
67
64
|
require 'rake/extensiontask'
|
68
|
-
|
65
|
+
|
69
66
|
Rake::ExtensionTask.new('hello_world')
|
70
67
|
|
71
68
|
Ok, that's it. No other line of code.
|
72
69
|
|
70
|
+
If we wanted to do the same for a JRuby extension (written in Java):
|
71
|
+
|
72
|
+
# File: Rakefile
|
73
|
+
|
74
|
+
require 'rake/javaextensiontask'
|
75
|
+
|
76
|
+
Rake::JavaExtensionTask.new('hello_world')
|
77
|
+
|
73
78
|
=== Compile process
|
74
79
|
|
75
80
|
Those *two* lines of code automatically added the needed rake tasks to build
|
76
|
-
the hello_world extension:
|
81
|
+
the hello_world extension. Running Rake on 1.8.x/1.9 (MRI):
|
77
82
|
|
78
83
|
$ rake -T
|
79
|
-
(in /home/user/
|
84
|
+
(in /home/user/my_extension)
|
80
85
|
rake compile # Compile the extension(s)
|
81
86
|
rake compile:hello_world # Compile just the hello_world extension
|
82
87
|
|
@@ -91,6 +96,10 @@ NOTE: Please be aware that building C extensions requires the proper
|
|
91
96
|
development environment for your Platform, which includes libraries, headers
|
92
97
|
and build tools. Check your distro / vendor documentation on how to install it.
|
93
98
|
|
99
|
+
NOTE: Building Java extensions requires the <tt>javac</tt>, part of the Java
|
100
|
+
Development Kit (JDK). This should be included by default on Mac OS X, and
|
101
|
+
downloadable from http://java.sun.com for other operating systems.
|
102
|
+
|
94
103
|
=== Generate native gems
|
95
104
|
|
96
105
|
A common usage scenario of rake-compiler is generate native gems that bundles
|
@@ -141,6 +150,23 @@ Plus, you have the functionality to build native versions of the gem:
|
|
141
150
|
|
142
151
|
You get two gems for the price of one.
|
143
152
|
|
153
|
+
And the same for JRuby extensions:
|
154
|
+
|
155
|
+
# rake java gem
|
156
|
+
(... compilation output ...)
|
157
|
+
mkdir -p pkg
|
158
|
+
Successfully built RubyGem
|
159
|
+
Name: my_gem
|
160
|
+
Version: 0.1.0
|
161
|
+
File: my_gem-0.1.0.gem
|
162
|
+
mv my_gem-0.1.0.gem pkg/my_gem-0.1.0.gem
|
163
|
+
Successfully built RubyGem
|
164
|
+
Name: my_gem
|
165
|
+
Version: 0.1.0
|
166
|
+
File: my_gem-0.1.0-java.gem
|
167
|
+
mv my_gem-0.1.0-java.gem pkg/my_gem-0.1.0-java.gem
|
168
|
+
|
169
|
+
|
144
170
|
=== What about breaking the standards? (Customization)
|
145
171
|
|
146
172
|
In case you want to bend the convention established, rake-compiler let you
|
@@ -163,7 +189,7 @@ personalize several settings for <tt>Rake::ExtensionTask</tt>:
|
|
163
189
|
rake-compiler provides now an standardized way to generate, from Linux or OSX
|
164
190
|
both extensions and gem binaries for Windows!
|
165
191
|
|
166
|
-
It takes advantages from GCC host/target to build binaries (for target) on
|
192
|
+
It takes advantages from GCC host/target to build binaries (for target) on
|
167
193
|
different OS (hosts).
|
168
194
|
|
169
195
|
=== How I enjoy this?
|
@@ -171,16 +197,19 @@ different OS (hosts).
|
|
171
197
|
Besides having the development tool chain installed (GCC), you should install
|
172
198
|
also <tt>mingw32</tt> cross compilation package.
|
173
199
|
|
174
|
-
|
175
|
-
<tt>apt-get install mingw32</tt> will be
|
200
|
+
Installation depends will depend on your operating system/distribution. On
|
201
|
+
Ubuntu and Debian machines, a simple <tt>apt-get install mingw32</tt> will be
|
202
|
+
enough.
|
176
203
|
|
177
|
-
|
204
|
+
On OSX, mingw32 is available via MacPorts: <tt>port install i386-mingw32-gcc</tt>
|
205
|
+
(ensure you update your ports tree before hand as <tt>mingw32</tt> has been
|
206
|
+
been broken).
|
178
207
|
|
179
208
|
=== I have my tool-chain, now what?
|
180
209
|
|
181
210
|
You need to build Ruby for Windows.
|
182
211
|
|
183
|
-
Relax, no need to freak out
|
212
|
+
Relax, no need to freak out! Let rake-compiler do it for you:
|
184
213
|
|
185
214
|
rake-compiler cross-ruby
|
186
215
|
|
@@ -201,6 +230,11 @@ Now, you only need to use additional options in your extension definition:
|
|
201
230
|
ext.cross_platform = 'i386-mswin32' # forces the Windows platform instead of the default one
|
202
231
|
# configure options only for cross compile
|
203
232
|
ext.cross_config_options << '--with-something'
|
233
|
+
|
234
|
+
# perform alterations on the gemspec when cross compiling
|
235
|
+
ext.cross_compiling do |gem_spec|
|
236
|
+
gem_spec.post_install_message = "You installed the binary version of this gem!"
|
237
|
+
end
|
204
238
|
end
|
205
239
|
|
206
240
|
By default, cross compilation targets 'i386-mingw32' which is default GCC platform
|
@@ -257,12 +291,6 @@ Blog: http://blog.mmediasys.com
|
|
257
291
|
RubyForge: http://rubyforge.org/projects/rake-compiler
|
258
292
|
GitHub: http://github.com/luislavena/rake-compiler
|
259
293
|
|
260
|
-
=== Some of the desired features
|
261
|
-
|
262
|
-
* <tt>Rake::JavaJarTask</tt> to generate <tt>jar</tt> packages and gems for JRuby.
|
263
|
-
|
264
|
-
$ rake java gem
|
265
|
-
|
266
294
|
== Disclaimer
|
267
295
|
|
268
296
|
If you have any trouble, don't hesitate to contact the author. As always,
|
data/cucumber.yml
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
Feature: JCompile Java extensions
|
2
|
+
|
3
|
+
In order to avoid bitching from Enterprise users
|
4
|
+
As a Ruby developer
|
5
|
+
I want some rake tasks that take away the pain of compilation
|
6
|
+
|
7
|
+
@java
|
8
|
+
Scenario: Compile single Java extension (with default Rake)
|
9
|
+
Given that all my Java source files are in place
|
10
|
+
And I've installed the Java Development Kit
|
11
|
+
When rake task 'java compile' is invoked
|
12
|
+
Then rake task 'java compile' succeeded
|
13
|
+
And binaries for platform 'java' get generated
|
14
|
+
|
15
|
+
@java
|
16
|
+
Scenario: Compile single Java extension (with Rake on JRuby)
|
17
|
+
Given that all my Java source files are in place
|
18
|
+
And I've installed the Java Development Kit
|
19
|
+
When I've installed JRuby
|
20
|
+
When rake task 'java compile' is invoked on JRuby
|
21
|
+
Then rake task 'java compile' succeeded
|
22
|
+
And binaries for platform 'java' get generated
|
@@ -0,0 +1,33 @@
|
|
1
|
+
Feature: No native or cross compilation on JRuby
|
2
|
+
|
3
|
+
In order to present a good user experience to users of rake-compiler
|
4
|
+
As a user of JRuby
|
5
|
+
I want to be warned that my platform does not provide any support for C Extensions
|
6
|
+
I want to be be informed of this without rake-compiler blowing up in my face
|
7
|
+
|
8
|
+
@java
|
9
|
+
Scenario: Attempting to do a cross compilation while on JRuby (without prerequisites)
|
10
|
+
Given that all my source files are in place
|
11
|
+
And I'm running a POSIX operating system
|
12
|
+
When rake task 'cross compile' is invoked on JRuby
|
13
|
+
Then rake task 'cross compile' should fail
|
14
|
+
And output of rake task 'cross compile' warns
|
15
|
+
"""
|
16
|
+
WARNING: You're attempting to (cross-)compile C extensions from a platform
|
17
|
+
(jruby) that does not support native extensions or mkmf.rb.
|
18
|
+
"""
|
19
|
+
And output of rake task 'cross compile' contains /Don't know how to build task 'cross'/
|
20
|
+
|
21
|
+
@java
|
22
|
+
Scenario: Attempting to do a cross compilation while on JRuby (even with prerequisites)
|
23
|
+
Given that all my source files are in place
|
24
|
+
And I'm running a POSIX operating system
|
25
|
+
And I've installed cross compile toolchain
|
26
|
+
When rake task 'cross compile' is invoked on JRuby
|
27
|
+
Then rake task 'cross compile' should fail
|
28
|
+
And output of rake task 'cross compile' warns
|
29
|
+
"""
|
30
|
+
WARNING: You're attempting to (cross-)compile C extensions from a platform
|
31
|
+
(jruby) that does not support native extensions or mkmf.rb.
|
32
|
+
"""
|
33
|
+
And output of rake task 'cross compile' contains /Don't know how to build task 'cross'/
|
@@ -0,0 +1,24 @@
|
|
1
|
+
Feature: Generate JRuby gems from JRuby or MRI
|
2
|
+
|
3
|
+
In order to keep sanity in the Ruby world
|
4
|
+
As a Gem developer who used to do J2EE development
|
5
|
+
I want more rake magic that turns monotony into joy.
|
6
|
+
|
7
|
+
@java
|
8
|
+
Scenario: package a gem for Java (with default Rake)
|
9
|
+
Given that my JRuby gem source is all in place
|
10
|
+
And I've installed the Java Development Kit
|
11
|
+
And I've already successfully executed rake task 'java compile'
|
12
|
+
When rake task 'java gem' is invoked
|
13
|
+
Then rake task 'java gem' succeeded
|
14
|
+
And gem for platform 'java' get generated
|
15
|
+
|
16
|
+
@java
|
17
|
+
Scenario: package a gem for Java (with Rake on JRuby)
|
18
|
+
Given that my JRuby gem source is all in place
|
19
|
+
And I've installed the Java Development Kit
|
20
|
+
And I've installed JRuby
|
21
|
+
And I've already successfully executed rake task 'java compile' on JRuby
|
22
|
+
When rake task 'java gem' is invoked
|
23
|
+
Then rake task 'java gem' succeeded
|
24
|
+
And gem for platform 'java' get generated
|
@@ -8,6 +8,11 @@ Given /^a extension cross-compilable '(.*)'$/ do |extension_name|
|
|
8
8
|
generate_source_code_for extension_name
|
9
9
|
end
|
10
10
|
|
11
|
+
Given /^a extension Java-compilable '(.*)'$/ do |extension_name|
|
12
|
+
generate_java_compile_extension_task_for extension_name
|
13
|
+
generate_java_source_code_for extension_name
|
14
|
+
end
|
15
|
+
|
11
16
|
Given /^a extension '(.*)' multi cross\-compilable$/ do |extension_name|
|
12
17
|
generate_multi_cross_compile_extension_task_for extension_name
|
13
18
|
generate_source_code_for extension_name
|
@@ -23,12 +28,23 @@ Given /^that all my source files are in place$/ do
|
|
23
28
|
Given "a extension cross-compilable 'extension_one'"
|
24
29
|
end
|
25
30
|
|
31
|
+
Given /^that all my Java source files are in place$/ do
|
32
|
+
Given "a safe project directory"
|
33
|
+
Given "a extension Java-compilable 'extension_one'"
|
34
|
+
end
|
35
|
+
|
26
36
|
Given /^that my gem source is all in place$/ do
|
27
37
|
Given "a safe project directory"
|
28
38
|
Given "a gem named 'gem_abc'"
|
29
39
|
Given "a extension cross-compilable 'extension_one'"
|
30
40
|
end
|
31
41
|
|
42
|
+
Given /^that my JRuby gem source is all in place$/ do
|
43
|
+
Given "a safe project directory"
|
44
|
+
Given "a gem named 'gem_abc'"
|
45
|
+
Given "a extension Java-compilable 'extension_one'"
|
46
|
+
end
|
47
|
+
|
32
48
|
Given /^that my gem source is all in place to target two platforms$/ do
|
33
49
|
Given "a safe project directory"
|
34
50
|
Given "a gem named 'gem_abc'"
|
@@ -1,19 +1,12 @@
|
|
1
1
|
# Naive way of looking into platforms, please include others like FreeBSD?
|
2
2
|
Given %r{^I'm running a POSIX operating system$} do
|
3
|
-
unless
|
3
|
+
unless RbConfig::CONFIG['host_os'] =~ /linux|darwin/ then
|
4
4
|
raise Cucumber::Pending.new("You need a POSIX operating system, no cheating ;-)")
|
5
5
|
end
|
6
6
|
end
|
7
7
|
|
8
8
|
Given %r{^I've installed cross compile toolchain$} do
|
9
|
-
|
10
|
-
paths = ENV['PATH'].split(File::PATH_SEPARATOR)
|
11
|
-
compiler = compilers.find do |comp|
|
12
|
-
paths.find do |path|
|
13
|
-
File.exist? File.join(path, comp)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
pending "Cannot locate suitable compiler in the PATH." unless compiler
|
9
|
+
pending 'Cannot locate suitable compiler in the PATH.' unless search_path(%w(i586-mingw32msvc-gcc i386-mingw32-gcc))
|
17
10
|
end
|
18
11
|
|
19
12
|
Then /^binaries for platform '(.*)' get generated$/ do |platform|
|
@@ -1,15 +1,25 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# FIXME: Make the Transform work
|
2
|
+
#
|
3
|
+
# Transform /^| on JRuby$/ do |step_arg|
|
4
|
+
# / on JRuby/.match(step_arg) != nil
|
5
|
+
# end
|
6
|
+
|
7
|
+
Given %r{^I've already successfully executed rake task '(.*)'(| on JRuby)$} do |task_name, on_jruby|
|
8
|
+
rake_cmd = "rake #{task_name}"
|
9
|
+
rake_cmd = 'jruby -S ' << rake_cmd if on_jruby == ' on JRuby'
|
10
|
+
emptyness = `#{rake_cmd} 2>&1`
|
3
11
|
unless $?.success?
|
4
12
|
warn emptyness
|
5
13
|
raise "rake failed with #{$?.exitstatus}"
|
6
14
|
end
|
7
15
|
end
|
8
16
|
|
9
|
-
When /^rake task '(.*)' is invoked$/ do |task_name|
|
17
|
+
When /^rake task '(.*)' is invoked(| on JRuby)$/ do |task_name, on_jruby|
|
10
18
|
@output ||= {}
|
11
19
|
@result ||= {}
|
12
|
-
|
20
|
+
rake_cmd = "rake #{task_name}"
|
21
|
+
rake_cmd = 'jruby -S ' << rake_cmd if on_jruby == ' on JRuby'
|
22
|
+
@output[task_name] = `#{rake_cmd} 2>&1`
|
13
23
|
@result[task_name] = $?.success?
|
14
24
|
end
|
15
25
|
|
@@ -21,6 +31,14 @@ Then /^rake task '(.*)' succeeded$/ do |task_name|
|
|
21
31
|
end
|
22
32
|
end
|
23
33
|
|
34
|
+
Then /^rake task '(.*)' should fail$/ do |task_name|
|
35
|
+
if @result.nil? || !@result.include?(task_name) then
|
36
|
+
raise "The task #{task_name} should be invoked first."
|
37
|
+
else
|
38
|
+
@result[task_name].should be_false
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
24
42
|
Then /^output of rake task '(.*)' (contains|do not contain) \/(.*)\/$/ do |task_name, condition, regex|
|
25
43
|
if condition == 'contains' then
|
26
44
|
@output[task_name].should match(%r(#{regex}))
|
@@ -28,3 +46,7 @@ Then /^output of rake task '(.*)' (contains|do not contain) \/(.*)\/$/ do |task_
|
|
28
46
|
@output[task_name].should_not match(%r(#{regex}))
|
29
47
|
end
|
30
48
|
end
|
49
|
+
|
50
|
+
Then /^output of rake task '(.*)' warns$/ do |task_name, warning|
|
51
|
+
@output[task_name].should include(warning)
|
52
|
+
end
|
@@ -12,6 +12,12 @@ end
|
|
12
12
|
|
13
13
|
Then /^a gem for '(.*)' version '(.*)' platform '(.*)' do exist in '(.*)'$/ do |name, version, platform, folder|
|
14
14
|
File.exist?(gem_file_platform(folder, name, version, platform)).should be_true
|
15
|
+
|
16
|
+
# unpack the Gem and check what's inside!
|
17
|
+
`gem unpack #{gem_file_platform(folder, name, version, platform)} --target tmp`
|
18
|
+
unpacked_gem_dir = unpacked_gem_dir_platform('tmp', name, version, platform)
|
19
|
+
File.exist?(unpacked_gem_dir).should be_true
|
20
|
+
Dir.glob(unpacked_gem_dir << "/lib/*.#{binary_extension(platform)}").should_not be_empty
|
15
21
|
end
|
16
22
|
|
17
23
|
Then /^gem for platform '(.*)' get generated$/ do |platform|
|
@@ -28,3 +34,9 @@ def gem_file_platform(folder, name, version, platform = nil)
|
|
28
34
|
file << ".gem"
|
29
35
|
file
|
30
36
|
end
|
37
|
+
|
38
|
+
def unpacked_gem_dir_platform(folder, name, version, platform = nil)
|
39
|
+
file = "#{folder}/#{name}-#{version}"
|
40
|
+
file << "-" << (platform || Gem::Platform.new(RUBY_PLATFORM).to_s)
|
41
|
+
file
|
42
|
+
end
|