rake-compiler 0.7.1 → 0.7.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,24 @@
1
+ === 0.7.5 / 2010-11-25
2
+
3
+ * Enhancements:
4
+ * Promoted stable version for cross-compilation to 1.8.6-p398. Closes GH-19
5
+
6
+ * Bugfixes:
7
+ * Generate a fake.rb compatible with Ruby 1.9.2. Closes GH-25
8
+ * fake.rb will not try to mimic Ruby's own fake to the letter. Closes GH-28
9
+ * Expand symlinks for tmp_dir. Closes GH-24
10
+ * Silence make output during rake-compiler invocation.
11
+ * Usage of Gem.ruby instead of RbConfig ruby_install_name
12
+ This solve issues with ruby vs. ruby.exe and jruby.exe
13
+
14
+ * Experimental:
15
+ * Allow setting of HOST during cross-compilation. This enable usage
16
+ of mingw-w64 compiler and not the first one found in the PATH.
17
+
18
+ rake-compiler cross-ruby VERSION=1.9.2-p0 HOST=i686-w64-mingw32
19
+ rake-compiler cross-ruby HOST=i386-mingw32 (OSX mingw32 port)
20
+ rake-compiler cross-ruby HOST=i586-pc-mingw32 (Debian/Ubuntu mingw32)
21
+
1
22
  === 0.7.1 / 2010-08-07
2
23
 
3
24
  * Bugfixes:
data/Isolate ADDED
@@ -0,0 +1,9 @@
1
+ options :path => 'isolated'
2
+
3
+ gem 'rake'
4
+ gem 'rspec', '~> 1.3.1'
5
+ gem 'cucumber', '~> 0.9.4'
6
+
7
+ unless RUBY_PLATFORM =~ /java/
8
+ gem 'rcov', '~> 0.9.9'
9
+ end
@@ -1,301 +1,320 @@
1
- = rake-compiler
2
-
3
- rake-compiler aims to help Gem developers deal with Ruby extensions, simplifying
4
- code and reducing duplication.
5
-
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
-
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
-
13
- == An Overview
14
-
15
- Let's summarize what rake-compiler provides:
16
-
17
- * No custom rake tasks required. Less code duplication and errors.
18
-
19
- * Painlessly build extensions on different platforms (Linux, OSX and Windows).
20
-
21
- * Painlessly build extensions for different Ruby implementations (JRuby,
22
- Rubinius and MRI).
23
-
24
- * Allow multiple extensions be compiled inside the same gem.
25
-
26
- * Mimics RubyGems installation process, so helps as a test environment.
27
-
28
- * Simplify cross platform compilation of extensions (target Windows from Linux).
29
-
30
- == I'm sold! show me how to use it! (Installation)
31
-
32
- Usage of rake-compiler is pretty much straight forward.
33
-
34
- First, you need to install the gem:
35
-
36
- $ gem install rake-compiler
37
-
38
- == Now what? (Usage)
39
-
40
- Now that you have the gem installed, let's give your project some structure.
41
-
42
- === Structure
43
-
44
- Let's say we want to compile an extension called 'hello_world', so we should
45
- organize the code and folders that will help rake-compiler do its job:
46
-
47
- |-- ext
48
- | `-- hello_world
49
- | |-- extconf.rb
50
- | |-- HelloWorldService.java
51
- | `-- hello_world.c
52
- |-- lib
53
- `-- Rakefile
54
-
55
- TIP: Having a consistent folder structure will help developers and newcomers
56
- to find code and also contribute back to your project more easily.
57
-
58
- === Adding the code
59
-
60
- So now it's time to introduce the code to compile our extension:
61
-
62
- # File: Rakefile
63
-
64
- require 'rake/extensiontask'
65
-
66
- Rake::ExtensionTask.new('hello_world')
67
-
68
- Ok, that's it. No other line of code.
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
-
78
- === Compile process
79
-
80
- Those *two* lines of code automatically added the needed rake tasks to build
81
- the hello_world extension. Running Rake on 1.8.x/1.9 (MRI):
82
-
83
- $ rake -T
84
- (in /home/user/my_extension)
85
- rake compile # Compile the extension(s)
86
- rake compile:hello_world # Compile just the hello_world extension
87
-
88
- Simply calling <tt>compile</tt>:
89
-
90
- $ rake compile
91
-
92
- Will do all the compile process for us, putting the result extension inside
93
- <tt>lib</tt> directory.
94
-
95
- NOTE: Please be aware that building C extensions requires the proper
96
- development environment for your Platform, which includes libraries, headers
97
- and build tools. Check your distro / vendor documentation on how to install it.
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
-
103
- === Generate native gems
104
-
105
- A common usage scenario of rake-compiler is generate native gems that bundles
106
- your extensions.
107
-
108
- This got over-simplified with <tt>Rake::ExtensionTask</tt>:
109
-
110
- # somewhere in your Rakefile, define your gem spec
111
- spec = Gem::Specification.new do |s|
112
- s.name = "my_gem"
113
- s.platform = Gem::Platform::RUBY
114
- s.extensions = FileList["ext/**/extconf.rb"]
115
- end
116
-
117
- # add your default gem packing task
118
- Rake::GemPackageTask.new(spec) do |pkg|
119
- end
120
-
121
- # feed your ExtensionTask with your spec
122
- Rake::ExtensionTask.new('hello_world', spec)
123
-
124
- Now, as usual, you can build your pure-ruby gem (standard output):
125
-
126
- $ rake gem
127
- (in /projects/oss/my_gem.git)
128
- mkdir -p pkg
129
- Successfully built RubyGem
130
- Name: my_gem
131
- Version: 0.1.0
132
- File: my_gem-0.1.0.gem
133
- mv my_gem-0.1.0.gem pkg/my_gem-0.1.0.gem
134
-
135
- Plus, you have the functionality to build native versions of the gem:
136
-
137
- # rake native gem
138
- (... compilation output ...)
139
- mkdir -p pkg
140
- Successfully built RubyGem
141
- Name: my_gem
142
- Version: 0.1.0
143
- File: my_gem-0.1.0.gem
144
- mv my_gem-0.1.0.gem pkg/my_gem-0.1.0.gem
145
- Successfully built RubyGem
146
- Name: my_gem
147
- Version: 0.1.0
148
- File: my_gem-0.1.0-x86-mingw32.gem
149
- mv my_gem-0.1.0-x86-mingw32.gem pkg/my_gem-0.1.0-x86-mingw32.gem
150
-
151
- You get two gems for the price of one.
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
-
170
- === What about breaking the standards? (Customization)
171
-
172
- In case you want to bend the convention established, rake-compiler let you
173
- personalize several settings for <tt>Rake::ExtensionTask</tt>:
174
-
175
- Rake::ExtensionTask.new do |ext|
176
- ext.name = 'hello_world' # indicate the name of the extension.
177
- ext.ext_dir = 'ext/weird_world' # search for 'hello_world' inside it.
178
- ext.lib_dir = 'lib/my_lib' # put binaries into this folder.
179
- ext.config_script = 'custom_extconf.rb' # use instead of 'extconf.rb' default
180
- ext.tmp_dir = 'tmp' # temporary folder used during compilation.
181
- ext.source_pattern = "*.{c,cpp}" # monitor file changes to allow simple rebuild.
182
- ext.config_options << '--with-foo' # supply additional configure options to config script.
183
- ext.gem_spec = spec # optional indicate which gem specification
184
- # will be used to based on.
185
- end
186
-
187
- == Future is now: Cross compilation
188
-
189
- rake-compiler provides now an standardized way to generate, from Linux or OSX
190
- both extensions and gem binaries for Windows!
191
-
192
- It takes advantages from GCC host/target to build binaries (for target) on
193
- different OS (hosts).
194
-
195
- === How I enjoy this?
196
-
197
- Besides having the development tool chain installed (GCC), you should install
198
- also <tt>mingw32</tt> cross compilation package.
199
-
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.
203
-
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).
207
-
208
- === I have my tool-chain, now what?
209
-
210
- You need to build Ruby for Windows.
211
-
212
- Relax, no need to freak out! Let rake-compiler do it for you:
213
-
214
- rake-compiler cross-ruby
215
-
216
- And you're done. It will automatically download, configure and compile latest
217
- stable version of Ruby for Windows, and place it into <tt>~/.rake-compiler</tt>
218
-
219
- If, instead, you want to build another version than the default one, please
220
- supply a <tt>VERSION</tt>:
221
-
222
- rake-compiler cross-ruby VERSION=1.8.6-p114
223
-
224
- === Let's build some gems!
225
-
226
- Now, you only need to use additional options in your extension definition:
227
-
228
- Rake::ExtensionTask.new('my_extension', gem_spec) do |ext|
229
- ext.cross_compile = true # enable cross compilation (requires cross compile toolchain)
230
- ext.cross_platform = 'i386-mswin32' # forces the Windows platform instead of the default one
231
- # configure options only for cross compile
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
238
- end
239
-
240
- By default, cross compilation targets 'i386-mingw32' which is default GCC platform
241
- for Ruby.
242
-
243
- To target gems for current Ruby official distribution, please force the platform
244
- to the one shown before.
245
-
246
- === Magician doing some tricks, don't blink!
247
-
248
- Compiles keeps being simple:
249
-
250
- rake cross compile
251
-
252
- And now, build your gems for Windows is just 5 more letters:
253
-
254
- rake cross native gem
255
-
256
- And you're done, yeah.
257
-
258
- === Take it even further
259
-
260
- You can specify against with version of Ruby you want to build the extension:
261
-
262
- rake cross compile RUBY_CC_VERSION=1.8.6
263
-
264
- If you installed <tt>1.9.1</tt>, you can do:
265
-
266
- rake cross compile RUBY_CC_VERSION=1.9.1
267
-
268
- Even more, you can target multiple versions (ie. 1.8.6 and 1.9.1):
269
-
270
- rake cross compile RUBY_CC_VERSION=1.8.6:1.9.1
271
-
272
- And more exiting, bundle both binaries in one "fat" Gem:
273
-
274
- rake cross native gem RUBY_CC_VERSION=1.8.6:1.9.1
275
-
276
- That will place binaries for 1.8 and 1.9 versions of ruby inside <tt>lib_dir</tt>
277
-
278
- lib/1.8/my_extension.so
279
- lib/1.9/my_extension.so
280
-
281
- Now is up to you to make your gem load the proper one ;-)
282
-
283
- == Future
284
-
285
- rake-compiler is a work in progress and we will appreciate feedback during the
286
- development of it! (and contributions too!)
287
-
288
- You can find more information about rake-compiler:
289
-
290
- Blog: http://blog.mmediasys.com
291
- RubyForge: http://rubyforge.org/projects/rake-compiler
292
- GitHub: http://github.com/luislavena/rake-compiler
293
-
294
- == Disclaimer
295
-
296
- If you have any trouble, don't hesitate to contact the author. As always,
297
- I'm not going to say "Use at your own risk" because I don't want this library
298
- to be risky.
299
-
300
- If you trip on something, I'll share the liability by repairing things
301
- as quickly as I can. Your responsibility is to report the inadequacies.
1
+ = rake-compiler
2
+
3
+ rake-compiler aims to help Gem developers deal with Ruby extensions, simplifying
4
+ code and reducing duplication.
5
+
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
+
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
+
13
+ == An Overview
14
+
15
+ Let's summarize what rake-compiler provides:
16
+
17
+ * No custom rake tasks required. Less code duplication and errors.
18
+
19
+ * Painlessly build extensions on different platforms (Linux, OSX and Windows).
20
+
21
+ * Painlessly build extensions for different Ruby implementations (JRuby,
22
+ Rubinius and MRI).
23
+
24
+ * Allow multiple extensions be compiled inside the same gem.
25
+
26
+ * Mimics RubyGems installation process, so helps as a test environment.
27
+
28
+ * Simplify cross platform compilation of extensions (target Windows from Linux).
29
+
30
+ == I'm sold! show me how to use it! (Installation)
31
+
32
+ Usage of rake-compiler is pretty much straight forward.
33
+
34
+ First, you need to install the gem:
35
+
36
+ $ gem install rake-compiler
37
+
38
+ == Now what? (Usage)
39
+
40
+ Now that you have the gem installed, let's give your project some structure.
41
+
42
+ === Structure
43
+
44
+ Let's say we want to compile an extension called 'hello_world', so we should
45
+ organize the code and folders that will help rake-compiler do its job:
46
+
47
+ |-- ext
48
+ | `-- hello_world
49
+ | |-- extconf.rb
50
+ | |-- HelloWorldService.java
51
+ | `-- hello_world.c
52
+ |-- lib
53
+ `-- Rakefile
54
+
55
+ TIP: Having a consistent folder structure will help developers and newcomers
56
+ to find code and also contribute back to your project more easily.
57
+
58
+ === Adding the code
59
+
60
+ So now it's time to introduce the code to compile our extension:
61
+
62
+ # File: Rakefile
63
+
64
+ require 'rake/extensiontask'
65
+
66
+ Rake::ExtensionTask.new('hello_world')
67
+
68
+ Ok, that's it. No other line of code.
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
+
78
+ === Compile process
79
+
80
+ Those *two* lines of code automatically added the needed rake tasks to build
81
+ the hello_world extension. Running Rake on 1.8.x/1.9 (MRI):
82
+
83
+ $ rake -T
84
+ (in /home/user/my_extension)
85
+ rake compile # Compile the extension(s)
86
+ rake compile:hello_world # Compile just the hello_world extension
87
+
88
+ Simply calling <tt>compile</tt>:
89
+
90
+ $ rake compile
91
+
92
+ Will do all the compile process for us, putting the result extension inside
93
+ <tt>lib</tt> directory.
94
+
95
+ NOTE: Please be aware that building C extensions requires the proper
96
+ development environment for your Platform, which includes libraries, headers
97
+ and build tools. Check your distro / vendor documentation on how to install it.
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
+
103
+ === Generate native gems
104
+
105
+ A common usage scenario of rake-compiler is generate native gems that bundles
106
+ your extensions.
107
+
108
+ This got over-simplified with <tt>Rake::ExtensionTask</tt>:
109
+
110
+ # somewhere in your Rakefile, define your gem spec
111
+ spec = Gem::Specification.new do |s|
112
+ s.name = "my_gem"
113
+ s.platform = Gem::Platform::RUBY
114
+ s.extensions = FileList["ext/**/extconf.rb"]
115
+ end
116
+
117
+ # add your default gem packing task
118
+ Rake::GemPackageTask.new(spec) do |pkg|
119
+ end
120
+
121
+ # feed your ExtensionTask with your spec
122
+ Rake::ExtensionTask.new('hello_world', spec)
123
+
124
+ Now, as usual, you can build your pure-ruby gem (standard output):
125
+
126
+ $ rake gem
127
+ (in /projects/oss/my_gem.git)
128
+ mkdir -p pkg
129
+ Successfully built RubyGem
130
+ Name: my_gem
131
+ Version: 0.1.0
132
+ File: my_gem-0.1.0.gem
133
+ mv my_gem-0.1.0.gem pkg/my_gem-0.1.0.gem
134
+
135
+ Plus, you have the functionality to build native versions of the gem:
136
+
137
+ # rake native gem
138
+ (... compilation output ...)
139
+ mkdir -p pkg
140
+ Successfully built RubyGem
141
+ Name: my_gem
142
+ Version: 0.1.0
143
+ File: my_gem-0.1.0.gem
144
+ mv my_gem-0.1.0.gem pkg/my_gem-0.1.0.gem
145
+ Successfully built RubyGem
146
+ Name: my_gem
147
+ Version: 0.1.0
148
+ File: my_gem-0.1.0-x86-mingw32.gem
149
+ mv my_gem-0.1.0-x86-mingw32.gem pkg/my_gem-0.1.0-x86-mingw32.gem
150
+
151
+ You get two gems for the price of one.
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
+
170
+ === What about breaking the standards? (Customization)
171
+
172
+ In case you want to bend the convention established, rake-compiler let you
173
+ personalize several settings for <tt>Rake::ExtensionTask</tt>:
174
+
175
+ Rake::ExtensionTask.new do |ext|
176
+ ext.name = 'hello_world' # indicate the name of the extension.
177
+ ext.ext_dir = 'ext/weird_world' # search for 'hello_world' inside it.
178
+ ext.lib_dir = 'lib/my_lib' # put binaries into this folder.
179
+ ext.config_script = 'custom_extconf.rb' # use instead of 'extconf.rb' default
180
+ ext.tmp_dir = 'tmp' # temporary folder used during compilation.
181
+ ext.source_pattern = "*.{c,cpp}" # monitor file changes to allow simple rebuild.
182
+ ext.config_options << '--with-foo' # supply additional configure options to config script.
183
+ ext.gem_spec = spec # optional indicate which gem specification
184
+ # will be used to based on.
185
+ end
186
+
187
+ == Future is now: Cross compilation
188
+
189
+ rake-compiler provides now an standardized way to generate, from Linux or OSX
190
+ both extensions and gem binaries for Windows!
191
+
192
+ It takes advantages from GCC host/target to build binaries (for target) on
193
+ different OS (hosts).
194
+
195
+ === How I enjoy this?
196
+
197
+ Besides having the development tool chain installed (GCC), you should install
198
+ also <tt>mingw32</tt> cross compilation package.
199
+
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.
203
+
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).
207
+
208
+ === I have my tool-chain, now what?
209
+
210
+ You need to build Ruby for Windows.
211
+
212
+ Relax, no need to freak out! Let rake-compiler do it for you:
213
+
214
+ rake-compiler cross-ruby
215
+
216
+ And you're done. It will automatically download, configure and compile latest
217
+ stable version of Ruby for Windows, and place it into <tt>~/.rake-compiler</tt>
218
+
219
+ If, instead, you want to build another version than the default one, please
220
+ supply a <tt>VERSION</tt>:
221
+
222
+ rake-compiler cross-ruby VERSION=1.8.6-p114
223
+
224
+ If you, like me, have multiple versions of MinGW packages, you can specify the
225
+ HOST that will be used to cross compile ruby:
226
+
227
+ rake-compiler cross-ruby HOST=i386-mingw32 # (OSX mingw32 port)
228
+
229
+ The host will vary depending on provider (mingw32 versus mingw-w64 projects).
230
+ Consult the documentation and website of the MinGW package provider before
231
+ reporting any issue.
232
+
233
+ === Let's build some gems!
234
+
235
+ Now, you only need to use additional options in your extension definition:
236
+
237
+ Rake::ExtensionTask.new('my_extension', gem_spec) do |ext|
238
+ ext.cross_compile = true # enable cross compilation (requires cross compile toolchain)
239
+ ext.cross_platform = 'i386-mswin32' # forces the Windows platform instead of the default one
240
+ # configure options only for cross compile
241
+ ext.cross_config_options << '--with-something'
242
+
243
+ # perform alterations on the gemspec when cross compiling
244
+ ext.cross_compiling do |gem_spec|
245
+ gem_spec.post_install_message = "You installed the binary version of this gem!"
246
+ end
247
+ end
248
+
249
+ By default, cross compilation targets 'i386-mingw32' which is default GCC platform
250
+ for Ruby.
251
+
252
+ To target gems for current Ruby official distribution, please force the platform
253
+ to the one shown before.
254
+
255
+ === Magician doing some tricks, don't blink!
256
+
257
+ Compiles keeps being simple:
258
+
259
+ rake cross compile
260
+
261
+ And now, build your gems for Windows is just 5 more letters:
262
+
263
+ rake cross native gem
264
+
265
+ And you're done, yeah.
266
+
267
+ === Take it even further
268
+
269
+ You can specify against with version of Ruby you want to build the extension:
270
+
271
+ rake cross compile RUBY_CC_VERSION=1.8.6
272
+
273
+ If you installed <tt>1.9.1</tt>, you can do:
274
+
275
+ rake cross compile RUBY_CC_VERSION=1.9.1
276
+
277
+ Even more, you can target multiple versions (ie. 1.8.6 and 1.9.1):
278
+
279
+ rake cross compile RUBY_CC_VERSION=1.8.6:1.9.1
280
+
281
+ And more exiting, bundle both binaries in one "fat" Gem:
282
+
283
+ rake cross native gem RUBY_CC_VERSION=1.8.6:1.9.1
284
+
285
+ That will place binaries for 1.8 and 1.9 versions of ruby inside <tt>lib_dir</tt>
286
+
287
+ lib/1.8/my_extension.so
288
+ lib/1.9/my_extension.so
289
+
290
+ Now is up to you to make your gem load the proper one ;-)
291
+
292
+ === What are you talking about? (Give me examples)
293
+
294
+ I know all the above sounds like a complete foreign language (it does even for me!). So, what if I show you some examples?
295
+
296
+ Check our wiki with links to the proper rake files used by many developers and projects and how they use rake-compiler.
297
+
298
+ http://github.com/luislavena/rake-compiler/wiki/projects-using-rake-compiler
299
+
300
+ == Future
301
+
302
+ rake-compiler is a work in progress and we will appreciate feedback during the
303
+ development of it! (and contributions too!)
304
+
305
+ You can find more information about rake-compiler:
306
+
307
+ * GitHub: https://github.com/luislavena/rake-compiler
308
+ * Issues: https://github.com/luislavena/rake-compiler/issues
309
+ * Blog: http://blog.mmediasys.com
310
+ * Docs: http://rubydoc.info/gems/rake-compiler
311
+ * Wiki: https://github.com/luislavena/rake-compiler/wiki
312
+
313
+ == Disclaimer
314
+
315
+ If you have any trouble, don't hesitate to contact the author. As always,
316
+ I'm not going to say "Use at your own risk" because I don't want this library
317
+ to be risky.
318
+
319
+ If you trip on something, I'll share the liability by repairing things
320
+ as quickly as I can. Your responsibility is to report the inadequacies.
data/Rakefile CHANGED
@@ -12,11 +12,9 @@
12
12
  #
13
13
 
14
14
  begin
15
- require 'rake'
16
- rescue LoadError
17
- require 'rubygems'
18
- gem 'rake', '~> 0.8.3.1'
19
- require 'rake'
15
+ require 'isolate/now'
16
+ rescue LoadError => e
17
+ fail "This project uses Isolate to manage development dependencies. Please `gem install isolate` first and try again."
20
18
  end
21
19
 
22
20
  # load rakefile extensions (tasks)
@@ -17,7 +17,11 @@ Then /^a gem for '(.*)' version '(.*)' platform '(.*)' do exist in '(.*)'$/ do |
17
17
  `gem unpack #{gem_file_platform(folder, name, version, platform)} --target tmp`
18
18
  unpacked_gem_dir = unpacked_gem_dir_platform('tmp', name, version, platform)
19
19
  File.exist?(unpacked_gem_dir).should be_true
20
- Dir.glob(unpacked_gem_dir << "/lib/*.#{binary_extension(platform)}").should_not be_empty
20
+
21
+ files = Dir.glob("#{unpacked_gem_dir}/lib/*.#{binary_extension(platform)}")
22
+ files << Dir.glob("#{unpacked_gem_dir}/lib/*/*.#{binary_extension(platform)}")
23
+
24
+ files.flatten.uniq.should_not be_empty
21
25
  end
22
26
 
23
27
  Then /^gem for platform '(.*)' get generated$/ do |platform|
@@ -70,7 +70,7 @@ EOF
70
70
  require 'rake/extensiontask'
71
71
  Rake::ExtensionTask.new("#{extension_name}", SPEC) do |ext|
72
72
  ext.cross_compile = true
73
- ext.cross_platform = ['i386-mswin32', 'i386-mingw32']
73
+ ext.cross_platform = ['x86-mswin32', 'x86-mingw32']
74
74
  end
75
75
  EOF
76
76
  end
@@ -109,7 +109,7 @@ Rerun `rake` under MRI Ruby 1.8.x/1.9.x to cross/native compile.
109
109
  options = @config_options.dup
110
110
 
111
111
  # include current directory
112
- cmd = ['-I.']
112
+ cmd = [Gem.ruby, '-I.']
113
113
 
114
114
  # if fake.rb is present, add to the command line
115
115
  if t.prerequisites.include?("#{tmp_path}/fake.rb") then
@@ -117,8 +117,8 @@ Rerun `rake` under MRI Ruby 1.8.x/1.9.x to cross/native compile.
117
117
  end
118
118
 
119
119
  # build a relative path to extconf script
120
- abs_tmp_path = Pathname.new(Dir.pwd) + tmp_path
121
- abs_extconf = Pathname.new(Dir.pwd) + extconf
120
+ abs_tmp_path = (Pathname.new(Dir.pwd) + tmp_path).realpath
121
+ abs_extconf = (Pathname.new(Dir.pwd) + extconf).realpath
122
122
 
123
123
  # now add the extconf script
124
124
  cmd << abs_extconf.relative_path_from(abs_tmp_path)
@@ -135,7 +135,7 @@ Rerun `rake` under MRI Ruby 1.8.x/1.9.x to cross/native compile.
135
135
  # FIXME: Rake is broken for multiple arguments system() calls.
136
136
  # Add current directory to the search path of Ruby
137
137
  # Also, include additional parameters supplied.
138
- ruby cmd.join(' ')
138
+ sh cmd.join(' ')
139
139
  end
140
140
  end
141
141
 
@@ -378,11 +378,24 @@ Rerun `rake` under MRI Ruby 1.8.x/1.9.x to cross/native compile.
378
378
  class Object
379
379
  remove_const :RUBY_PLATFORM
380
380
  remove_const :RUBY_VERSION
381
+ remove_const :RUBY_DESCRIPTION if defined?(RUBY_DESCRIPTION)
381
382
  RUBY_PLATFORM = "i386-mingw32"
382
383
  RUBY_VERSION = "#{version}"
384
+ RUBY_DESCRIPTION = "ruby \#{RUBY_VERSION} (\#{RUBY_RELEASE_DATE}) [\#{RUBY_PLATFORM}]"
383
385
  end
386
+ if RUBY_PLATFORM =~ /mswin|bccwin|mingw/
387
+ class File
388
+ remove_const :ALT_SEPARATOR
389
+ ALT_SEPARATOR = "\\\\"
390
+ end
391
+ end
392
+
393
+ posthook = proc do
394
+ $ruby = "#{Gem.ruby}"
395
+ untrace_var(:$ruby, posthook)
396
+ end
397
+ trace_var(:$ruby, posthook)
384
398
  FAKE_RB
385
399
  end
386
-
387
400
  end
388
401
  end
@@ -441,6 +441,8 @@ describe Rake::ExtensionTask do
441
441
  'rbconfig-1.8.6' => '/some/path/version/1.8/to/rbconfig.rb',
442
442
  'rbconfig-1.8.7' => '/some/path/version/1.8/to/rbconfig.rb',
443
443
  'rbconfig-1.9.1' => '/some/path/version/1.9.1/to/rbconfig.rb',
444
+ 'rbconfig-1.9.2' => '/some/path/version/1.9.1/to/rbconfig.rb',
445
+ 'rbconfig-1.9.3' => '/some/path/version/1.9.1/to/rbconfig.rb',
444
446
  'rbconfig-3.0.0' => '/some/fake/version/3.0.0/to/rbconfig.rb'
445
447
  }
446
448
  end
@@ -33,16 +33,17 @@ end
33
33
 
34
34
  require 'rake/extensioncompiler'
35
35
 
36
- MAKE = ENV['MAKE'] || %w[gmake make].find { |c| system(c, '-v') }
36
+ MAKE = ENV['MAKE'] || %w[gmake make].find { |c| system("#{c} -v > /dev/null 2>&1") }
37
37
  USER_HOME = File.expand_path("~/.rake-compiler")
38
- RUBY_CC_VERSION = "ruby-#{ENV['VERSION'] || '1.8.6-p287'}"
38
+ RUBY_CC_VERSION = "ruby-#{ENV['VERSION'] || '1.8.6-p398'}"
39
39
  RUBY_SOURCE = ENV['SOURCE']
40
40
 
41
41
  # grab the major "1.8" or "1.9" part of the version number
42
42
  MAJOR = RUBY_CC_VERSION.match(/.*-(\d.\d).\d/)[1]
43
43
 
44
44
  # Use Rake::ExtensionCompiler helpers to find the proper host
45
- MINGW_HOST = Rake::ExtensionCompiler.mingw_host
45
+ MINGW_HOST = ENV['HOST'] || Rake::ExtensionCompiler.mingw_host
46
+ MINGW_TARGET = MINGW_HOST.gsub('msvc', '')
46
47
 
47
48
  # define a location where sources will be stored
48
49
  directory "#{USER_HOME}/sources/#{RUBY_CC_VERSION}"
@@ -59,7 +60,7 @@ CLOBBER.include("#{USER_HOME}/ruby/#{RUBY_CC_VERSION}")
59
60
  CLOBBER.include("#{USER_HOME}/config.yml")
60
61
 
61
62
  # ruby source file should be stored there
62
- file "#{USER_HOME}/sources/#{RUBY_CC_VERSION}.tar.gz" => ["#{USER_HOME}/sources"] do |t|
63
+ file "#{USER_HOME}/sources/#{RUBY_CC_VERSION}.tar.bz2" => ["#{USER_HOME}/sources"] do |t|
63
64
  # download the source file using wget or curl
64
65
  chdir File.dirname(t.name) do
65
66
  if RUBY_SOURCE
@@ -72,10 +73,10 @@ file "#{USER_HOME}/sources/#{RUBY_CC_VERSION}.tar.gz" => ["#{USER_HOME}/sources"
72
73
  end
73
74
 
74
75
  # Extract the sources
75
- source_file = RUBY_SOURCE ? RUBY_SOURCE.split('/').last : "#{RUBY_CC_VERSION}.tar.gz"
76
+ source_file = RUBY_SOURCE ? RUBY_SOURCE.split('/').last : "#{RUBY_CC_VERSION}.tar.bz2"
76
77
  file "#{USER_HOME}/sources/#{RUBY_CC_VERSION}" => ["#{USER_HOME}/sources/#{source_file}"] do |t|
77
78
  chdir File.dirname(t.name) do
78
- t.prerequisites.each { |f| sh "tar xfz #{File.basename(f)}" }
79
+ t.prerequisites.each { |f| sh "tar xf #{File.basename(f)}" }
79
80
  end
80
81
  end
81
82
 
@@ -111,22 +112,13 @@ task :mingw32 do
111
112
  end
112
113
  end
113
114
 
114
- task :environment do
115
- ENV['ac_cv_func_getpgrp_void'] = 'no'
116
- ENV['ac_cv_func_setpgrp_void'] = 'yes'
117
- ENV['rb_cv_negative_time_t'] = 'no'
118
- ENV['ac_cv_func_memcmp_working'] = 'yes'
119
- ENV['rb_cv_binary_elf' ] = 'no'
120
- end
121
-
122
115
  # generate the makefile in a clean build location
123
116
  file "#{USER_HOME}/builds/#{RUBY_CC_VERSION}/Makefile" => ["#{USER_HOME}/builds/#{RUBY_CC_VERSION}",
124
117
  "#{USER_HOME}/sources/#{RUBY_CC_VERSION}/Makefile.in"] do |t|
125
118
 
126
119
  options = [
127
- '--target=i386-mingw32',
128
120
  "--host=#{MINGW_HOST}",
129
- '--build=i686-linux',
121
+ "--target=#{MINGW_TARGET}",
130
122
  '--enable-shared',
131
123
  '--disable-install-doc',
132
124
  '--without-tk',
@@ -188,4 +180,5 @@ task :default do
188
180
  end
189
181
 
190
182
  desc "Build #{RUBY_CC_VERSION} suitable for cross-platform development."
191
- task 'cross-ruby' => [:mingw32, :environment, :install, 'update-config']
183
+ task 'cross-ruby' => [:mingw32, :install, 'update-config']
184
+
@@ -0,0 +1,11 @@
1
+ desc 'Ensure all the cross compiled versions are installed'
2
+ task :bootstrap do
3
+ fail "Sorry, this only works on OSX and Linux" if RUBY_PLATFORM =~ /mswin|mingw/
4
+
5
+ versions = %w(1.8.6-p398 1.9.1-p243 1.9.2-p0)
6
+
7
+ versions.each do |version|
8
+ puts "[INFO] Attempt to cross-compile Ruby #{version}"
9
+ ruby "-Ilib bin/rake-compiler cross-ruby VERSION=#{version}"
10
+ end
11
+ end
@@ -8,6 +8,3 @@ task :default => [:spec, :features]
8
8
 
9
9
  # make packing depend on success of running specs and features
10
10
  task :package => [:spec, :features]
11
-
12
- # publish documentation when doing a release
13
- task :release => [:publish]
@@ -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.7.1"
6
+ s.version = "0.7.5"
7
7
  s.platform = Gem::Platform::RUBY
8
8
 
9
9
  # description and details
@@ -15,7 +15,7 @@ GEM_SPEC = Gem::Specification.new do |s|
15
15
  s.required_rubygems_version = ">= 1.3.5"
16
16
 
17
17
  # dependencies
18
- s.add_dependency 'rake', '>= 0.8.3', '< 0.9'
18
+ s.add_dependency 'rake'
19
19
 
20
20
  # development dependencies
21
21
  s.add_development_dependency 'rspec', '~> 1.2.9'
@@ -25,7 +25,8 @@ GEM_SPEC = Gem::Specification.new do |s|
25
25
  # components, files and paths
26
26
  s.files = FileList["features/**/*.{feature,rb}", "bin/rake-compiler",
27
27
  "lib/**/*.rb", "spec/spec.opts", "spec/**/*.rb",
28
- "tasks/**/*.rake", "Rakefile", "*.{rdoc,txt,yml}"]
28
+ "tasks/**/*.rake", "Rakefile", "Isolate",
29
+ "*.{rdoc,txt,yml}"]
29
30
 
30
31
  s.bindir = 'bin'
31
32
  s.executables = ['rake-compiler']
@@ -1,79 +1,39 @@
1
- begin
2
- require 'rubyforge'
3
- rescue LoadError
4
- warn "rubyforge gem is required to generate announces, please install it (gem install rubyforge)."
5
- end
6
-
7
- CLEAN.include('email.txt')
8
-
9
- if defined?(RubyForge) then
10
- if defined?(GEM_SPEC) then
11
- desc 'Create news email file and post to RubyForge.'
12
- task :announce do |t|
13
- ver = ENV['VERSION'] or fail "Must supply VERSION (rake announce VERSION=x.y.z)."
14
-
15
- # compare versions to avoid mistakes
16
- unless ver == GEM_SPEC.version.to_s then
17
- fail "Version mismatch (supplied and specification versions differ)."
18
- end
19
-
20
- # no homepage? why announce it then?!
21
- if GEM_SPEC.homepage == 'TODO' or GEM_SPEC.homepage.nil? then
22
- fail "Must define homepage in your gem specification."
23
- end
24
-
25
- # no rubyforge project? no release for you!
26
- if GEM_SPEC.rubyforge_project == 'TODO' or GEM_SPEC.rubyforge_project.nil? then
27
- fail "Must define rubyforge_project in your gem specification."
28
- end
29
-
30
- # instantiate a RubyForge object
31
- rf = RubyForge.new.configure
32
-
33
- # read project info and overview
34
- notes = begin
35
- r = File.read("README.rdoc")
36
- r.split(/^(=+ .*)/)[1..4].join.strip
37
- rescue
38
- warn "Missing README.rdoc"
39
- ''
40
- end
41
-
42
- # read changes
43
- changes = begin
44
- h = File.read("History.txt")
45
- h.split(/^(===+ .*)/)[1..2].join.strip
46
- rescue
47
- warn "Missing History.txt"
48
- ''
49
- end
50
-
51
- # standard fields
52
- subject = "#{GEM_SPEC.name} #{GEM_SPEC.version} Released"
53
- title = "#{GEM_SPEC.name} version #{GEM_SPEC.version} has been released!"
54
- body = "#{notes}\n\nChanges:\n\n#{changes}"
55
- urls = [GEM_SPEC.homepage, "http://rubyforge.org/projects/#{GEM_SPEC.rubyforge_project}"].map { |u| "* <#{u.strip}>" }.join("\n")
56
-
57
- puts "Logging in RubyForge..."
58
- rf.login
59
-
60
- puts "Generating email.txt..."
61
- File.open("email.txt", "w") do |mail|
62
- mail.puts "Subject: [ANN] #{subject}"
63
- mail.puts
64
- mail.puts title
65
- mail.puts
66
- mail.puts urls
67
- mail.puts
68
- mail.puts body
69
- end
70
- puts "Created email.txt"
71
-
72
- puts "Posting news for #{GEM_SPEC.name} version #{GEM_SPEC.version}..."
73
- rf.post_news GEM_SPEC.rubyforge_project, subject, "#{title}\n\n#{body}"
74
- puts "Done."
75
- end
76
- else
77
- warn "no GEM_SPEC is found or defined. 'announce' task cannot work without it."
78
- end
1
+ desc 'Generate email template to standard output'
2
+ task :announce do
3
+ fail "no GEM_SPEC is found or defined. 'announce' task cannot work without it." unless defined?(GEM_SPEC)
4
+
5
+ # read project info and overview
6
+ notes = begin
7
+ r = File.read("README.rdoc")
8
+ r.split(/^(=+ .*)/)[1..4].join.strip
9
+ rescue
10
+ warn "Missing README.rdoc"
11
+ ''
12
+ end
13
+
14
+ # read changes
15
+ changes = begin
16
+ h = File.read("History.txt")
17
+ h.split(/^(===+ .*)/)[1..2].join.strip
18
+ rescue
19
+ warn "Missing History.txt"
20
+ ''
21
+ end
22
+
23
+ # standard fields
24
+ subject = "#{GEM_SPEC.name} #{GEM_SPEC.version} Released"
25
+ title = "#{GEM_SPEC.name} version #{GEM_SPEC.version} has been released!"
26
+ body = "#{notes}\n\nChanges:\n\n#{changes}"
27
+ urls = [GEM_SPEC.homepage].map { |u| "* <#{u.strip}>" }.join("\n")
28
+
29
+ puts "=" * 80, ""
30
+ puts "Subject: [ANN] #{subject}"
31
+ puts
32
+ puts title
33
+ puts
34
+ puts urls
35
+ puts
36
+ puts body
37
+ puts
38
+ puts "=" * 80, ""
79
39
  end
@@ -1,71 +1,26 @@
1
- begin
2
- require 'rubyforge'
3
- rescue LoadError
4
- warn "rubyforge gem is required to generate releases, please install it (gem install rubyforge)."
5
- end
6
-
7
- if defined?(RubyForge) then
8
- if defined?(GEM_SPEC) then
9
- desc 'Package and upload to RubyForge'
10
- task :release => [:clobber, :package] do |t|
11
- ver = ENV['VERSION'] or fail "Must supply VERSION (rake release VERSION=x.y.z)."
12
-
13
- # compare versions to avoid mistakes
14
- unless ver == GEM_SPEC.version.to_s then
15
- fail "Version mismatch (supplied and specification versions differ)."
16
- end
17
-
18
- # no rubyforge project? no release for you!
19
- if GEM_SPEC.rubyforge_project == 'TODO' or GEM_SPEC.rubyforge_project.nil? then
20
- fail "Must define rubyforge_project in your gem specification."
21
- end
22
-
23
- # instantiate a RubyForge object
24
- rf = RubyForge.new
1
+ desc 'Package gems and upload to RubyGems'
2
+ task :release, :version, :needs => [:package] do |t, args|
3
+ args.with_defaults(:version => "")
4
+ ver = args.version
25
5
 
26
- # read project info and overview
27
- notes = begin
28
- r = File.read("README.rdoc")
29
- r.split(/^(=+ .*)/)[1..4].join.strip
30
- rescue
31
- warn "Missing README.rdoc"
32
- ''
33
- end
6
+ fail "no GEM_SPEC is found or defined. 'release' task cannot work without it." unless defined?(GEM_SPEC)
34
7
 
35
- # read changes
36
- changes = begin
37
- h = File.read("History.txt")
38
- h.split(/^(===+ .*)/)[1..2].join.strip
39
- rescue
40
- warn "Missing History.txt"
41
- ''
42
- end
43
-
44
- # build the configuration for the release
45
- config = Hash.new
46
- config["release_notes"] = notes
47
- config["release_changes"] = changes
48
- config["preformatted"] = true
49
-
50
- # prepare configuration
51
- rf.configure config
52
-
53
- files = FileList["pkg/#{GEM_SPEC.name}-#{GEM_SPEC.version}*.*"].to_a
54
- fail "No files found for the release." if files.empty?
8
+ # compare versions to avoid mistakes
9
+ unless ver == GEM_SPEC.version.to_s then
10
+ fail "Version mismatch (supplied and specification versions differ)."
11
+ end
55
12
 
56
- puts "Logging in RubyForge..."
57
- rf.login
13
+ files = FileList["pkg/#{GEM_SPEC.name}-#{GEM_SPEC.version}*.*"].to_a
14
+ fail "No files found for the release." if files.empty?
58
15
 
59
- puts "Files to upload:"
60
- files.each do |f|
61
- puts " * #{f}"
62
- end
16
+ puts "Files to release:"
17
+ files.each do |f|
18
+ puts " * #{f}"
19
+ end
63
20
 
64
- puts "Releasing #{GEM_SPEC.name} version #{GEM_SPEC.version}..."
65
- rf.add_release GEM_SPEC.rubyforge_project, GEM_SPEC.name, GEM_SPEC.version, *files
66
- puts "Done."
67
- end
68
- else
69
- warn "no GEM_SPEC is found or defined. 'release' task cannot work without it."
21
+ puts "Releasing #{GEM_SPEC.name} version #{GEM_SPEC.version}..."
22
+ files.each do |f|
23
+ system "gem push #{f}"
70
24
  end
25
+ puts "Done."
71
26
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rake-compiler
3
3
  version: !ruby/object:Gem::Version
4
- hash: 1
4
+ hash: 9
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 7
9
- - 1
10
- version: 0.7.1
9
+ - 5
10
+ version: 0.7.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Luis Lavena
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-08-07 00:00:00 -03:00
18
+ date: 2010-11-25 00:00:00 -03:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -26,19 +26,10 @@ dependencies:
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- hash: 57
29
+ hash: 3
30
30
  segments:
31
31
  - 0
32
- - 8
33
- - 3
34
- version: 0.8.3
35
- - - <
36
- - !ruby/object:Gem::Version
37
- hash: 25
38
- segments:
39
- - 0
40
- - 9
41
- version: "0.9"
32
+ version: "0"
42
33
  type: :runtime
43
34
  version_requirements: *id001
44
35
  - !ruby/object:Gem::Dependency
@@ -115,15 +106,15 @@ files:
115
106
  - spec/spec_helper.rb
116
107
  - spec/support/capture_output_helper.rb
117
108
  - tasks/bin/cross-ruby.rake
109
+ - tasks/bootstrap.rake
118
110
  - tasks/common.rake
119
111
  - tasks/cucumber.rake
120
112
  - tasks/gem.rake
121
113
  - tasks/news.rake
122
- - tasks/rdoc.rake
123
- - tasks/rdoc_publish.rake
124
114
  - tasks/release.rake
125
115
  - tasks/rspec.rake
126
116
  - Rakefile
117
+ - Isolate
127
118
  - README.rdoc
128
119
  - History.txt
129
120
  - LICENSE.txt
@@ -1,15 +0,0 @@
1
- begin
2
- require 'rdoc/task'
3
- rescue LoadError
4
- warn "RDoc 2.4.3+ gem is required, please install it (gem install rdoc)."
5
- end
6
-
7
- if defined?(RDoc) then
8
- DOC = RDoc::Task.new(:rdoc) do |rd|
9
- rd.title = 'rake-compiler -- Documentation'
10
- rd.main = 'README.rdoc'
11
- rd.rdoc_dir = 'doc/api'
12
- rd.options << '--line-numbers' << '--main' << 'README.rdoc' << '--title' << 'rake-compiler -- Documentation'
13
- rd.rdoc_files.include %w(README.rdoc LICENSE.txt History.txt lib/**/*.rb)
14
- end
15
- end
@@ -1,41 +0,0 @@
1
- begin
2
- require 'rubyforge'
3
- rescue LoadError
4
- warn "rubyforge gem is required to generate releases, please install it (gem install rubyforge)."
5
- end
6
-
7
- if defined?(RubyForge) then
8
- if defined?(DOC) && defined?(GEM_SPEC) then
9
- desc "Publish RDoc to RubyForge"
10
- task :publish => [:clobber_rdoc, :rdoc] do
11
- config_file = File.expand_path('~/.rubyforge/user-config.yml')
12
- fail "You need rubyforge properly configured." unless File.exist?(config_file)
13
-
14
- # no rubyforge project? no release for you!
15
- if GEM_SPEC.rubyforge_project == 'TODO' or GEM_SPEC.rubyforge_project.nil? then
16
- fail "Must define rubyforge_project in your gem specification."
17
- end
18
-
19
- # use YAML to load configuration file
20
- config = YAML.load_file(config_file)
21
-
22
- host = "#{config['username']}@rubyforge.org"
23
- remote_dir = "/var/www/gforge-projects/#{GEM_SPEC.rubyforge_project}/"
24
- local_dir = DOC.rdoc_dir
25
-
26
- # use PuTTY pscp or scp on other platforms
27
- ssh_exe = RUBY_PLATFORM =~ /mswin|mingw/ ? 'pscp' : 'scp'
28
-
29
- # construct the command
30
- cmd = [ssh_exe]
31
- cmd << '-r' << '-q' # recursive and quiet options
32
- cmd << "#{local_dir}/*"
33
- cmd << "#{host}:#{remote_dir}"
34
-
35
- puts "Publishing RDocs to RubyForge..."
36
- sh cmd.join(' ')
37
- end
38
- else
39
- warn "You need a GEM_SPEC and DOC rdoc definitions present. task publish not defined."
40
- end
41
- end