rake-compiler 1.2.2 → 1.2.4

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.
@@ -1,679 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
-
3
- require 'rake/extensiontask'
4
- require 'rbconfig'
5
- require 'yaml'
6
-
7
- describe Rake::ExtensionTask do
8
- context '#new' do
9
- context '(basic)' do
10
- it 'should raise an error if no name is provided' do
11
- lambda {
12
- Rake::ExtensionTask.new
13
- }.should raise_error(RuntimeError, /Extension name must be provided/)
14
- end
15
-
16
- it 'should allow string as extension name assignation' do
17
- ext = Rake::ExtensionTask.new('extension_one')
18
- ext.name.should == 'extension_one'
19
- end
20
-
21
- it 'should allow symbol as extension name assignation' do
22
- ext = Rake::ExtensionTask.new(:extension_one)
23
- ext.name.should == 'extension_one'
24
- end
25
-
26
- it 'should allow string as extension name using block assignation' do
27
- ext = Rake::ExtensionTask.new do |ext|
28
- ext.name = 'extension_two'
29
- end
30
- ext.name.should == 'extension_two'
31
- end
32
-
33
- it 'should return itself for the block' do
34
- from_block = nil
35
- from_lasgn = Rake::ExtensionTask.new('extension_three') do |ext|
36
- from_block = ext
37
- end
38
- from_block.should == from_lasgn
39
- end
40
-
41
- it 'should accept a gem specification as parameter' do
42
- spec = mock_gem_spec
43
- ext = Rake::ExtensionTask.new('extension_three', spec)
44
- ext.gem_spec.should == spec
45
- end
46
-
47
- it 'should allow gem specification be defined using block assignation' do
48
- spec = mock_gem_spec
49
- ext = Rake::ExtensionTask.new('extension_four') do |ext|
50
- ext.gem_spec = spec
51
- end
52
- ext.gem_spec.should == spec
53
- end
54
-
55
- it 'should allow forcing of platform' do
56
- ext = Rake::ExtensionTask.new('weird_extension') do |ext|
57
- ext.platform = 'universal-foo-bar-10.5'
58
- end
59
- ext.platform.should == 'universal-foo-bar-10.5'
60
- end
61
-
62
- it 'should allow extra sources to be added' do
63
- ext = Rake::ExtensionTask.new('extension_one') do |ext|
64
- ext.extra_sources << 'extra.c'
65
- end
66
- ext.extra_sources.should include('extra.c')
67
- # Private API between the base task and the extension task
68
- ext.send(:source_files).should include('extra.c')
69
- end
70
- end
71
- end
72
-
73
- context '(defaults)' do
74
- before :each do
75
- @ext = Rake::ExtensionTask.new('extension_one')
76
- end
77
-
78
- it 'should look for extconf script' do
79
- @ext.config_script.should == 'extconf.rb'
80
- end
81
-
82
- it 'should dump intermediate files to tmp/' do
83
- @ext.tmp_dir.should == 'tmp'
84
- end
85
-
86
- it 'should copy build extension into lib/' do
87
- @ext.lib_dir.should == 'lib'
88
- end
89
-
90
- it 'should look for C/C++ files pattern (.c,.cc,.cpp)' do
91
- @ext.source_pattern.should == "*.{c,cc,cpp}"
92
- end
93
-
94
- it 'should have no configuration options preset to delegate' do
95
- @ext.config_options.should be_empty
96
- end
97
-
98
- it "should have no includes preset to delegate" do
99
- @ext.config_includes.should be_empty
100
- end
101
-
102
- it 'should default to current platform' do
103
- @ext.platform.should == RUBY_PLATFORM
104
- end
105
-
106
- it 'should default to no cross compilation' do
107
- @ext.cross_compile.should == false
108
- end
109
-
110
- it 'should have no configuration options for cross compilation' do
111
- @ext.cross_config_options.should be_empty
112
- end
113
-
114
- it "should have cross platform defined to 'i386-mingw32'" do
115
- @ext.cross_platform.should == 'i386-mingw32'
116
- end
117
- end
118
-
119
- context '(tasks)' do
120
- before :each do
121
- Rake.application.clear
122
- CLEAN.clear
123
- CLOBBER.clear
124
- end
125
-
126
- context '(one extension)' do
127
- before :each do
128
- allow(Rake::FileList).to receive(:[]).and_return(["ext/extension_one/source.c"], [])
129
- @ext = Rake::ExtensionTask.new('extension_one')
130
- @ext_bin = ext_bin('extension_one')
131
- @platform = RUBY_PLATFORM
132
- @ruby_ver = RUBY_VERSION
133
- end
134
-
135
- context 'compile' do
136
- it 'should define as task' do
137
- Rake::Task.task_defined?('compile').should == true
138
- end
139
-
140
- it "should depend on 'compile:{platform}'" do
141
- Rake::Task['compile'].prerequisites.should include("compile:#{@platform}")
142
- end
143
- end
144
-
145
- context 'compile:extension_one' do
146
- it 'should define as task' do
147
- Rake::Task.task_defined?('compile:extension_one').should == true
148
- end
149
-
150
- it "should depend on 'compile:extension_one:{platform}'" do
151
- Rake::Task['compile:extension_one'].prerequisites.should include("compile:extension_one:#{@platform}")
152
- end
153
- end
154
-
155
- context 'lib/extension_one.{so,bundle}' do
156
- it 'should define as task' do
157
- Rake::Task.task_defined?("lib/#{@ext_bin}").should == true
158
- end
159
-
160
- it "should depend on 'copy:extension_one:{platform}:{ruby_ver}'" do
161
- Rake::Task["lib/#{@ext_bin}"].prerequisites.should include("copy:extension_one:#{@platform}:#{@ruby_ver}")
162
- end
163
- end
164
-
165
- context 'tmp/{platform}/extension_one/{ruby_ver}/extension_one.{so,bundle}' do
166
- it 'should define as task' do
167
- Rake::Task.task_defined?("tmp/#{@platform}/extension_one/#{@ruby_ver}/#{@ext_bin}").should == true
168
- end
169
-
170
- it "should depend on 'tmp/{platform}/extension_one/{ruby_ver}/Makefile'" do
171
- Rake::Task["tmp/#{@platform}/extension_one/#{@ruby_ver}/#{@ext_bin}"].prerequisites.should include("tmp/#{@platform}/extension_one/#{@ruby_ver}/Makefile")
172
- end
173
-
174
- it "should depend on 'ext/extension_one/source.c'" do
175
- Rake::Task["tmp/#{@platform}/extension_one/#{@ruby_ver}/#{@ext_bin}"].prerequisites.should include("ext/extension_one/source.c")
176
- end
177
-
178
- it "should not depend on 'ext/extension_one/source.h'" do
179
- Rake::Task["tmp/#{@platform}/extension_one/#{@ruby_ver}/#{@ext_bin}"].prerequisites.should_not include("ext/extension_one/source.h")
180
- end
181
- end
182
-
183
- context 'tmp/{platform}/extension_one/{ruby_ver}/Makefile' do
184
- it 'should define as task' do
185
- Rake::Task.task_defined?("tmp/#{@platform}/extension_one/#{@ruby_ver}/Makefile").should == true
186
- end
187
-
188
- it "should depend on 'tmp/{platform}/extension_one/{ruby_ver}'" do
189
- Rake::Task["tmp/#{@platform}/extension_one/#{@ruby_ver}/Makefile"].prerequisites.should include("tmp/#{@platform}/extension_one/#{@ruby_ver}")
190
- end
191
-
192
- it "should depend on 'ext/extension_one/extconf.rb'" do
193
- Rake::Task["tmp/#{@platform}/extension_one/#{@ruby_ver}/Makefile"].prerequisites.should include("ext/extension_one/extconf.rb")
194
- end
195
- end
196
-
197
- context 'clean' do
198
- it "should include 'tmp/{platform}/extension_one/{ruby_ver}' in the pattern" do
199
- CLEAN.should include("tmp/#{@platform}/extension_one/#{@ruby_ver}")
200
- end
201
- end
202
-
203
- context 'clobber' do
204
- it "should include 'lib/extension_one.{so,bundle}'" do
205
- CLOBBER.should include("lib/#{@ext_bin}")
206
- end
207
-
208
- it "should include 'tmp'" do
209
- CLOBBER.should include('tmp')
210
- end
211
- end
212
-
213
- it "should warn when pre-compiled files exist in extension directory" do
214
- allow(Rake::FileList).to receive(:[]).
215
- and_return(["ext/extension_one/source.c"],
216
- ["ext/extension_one/source.o"])
217
-
218
- _, err = capture_output do
219
- Rake::ExtensionTask.new('extension_one')
220
- end
221
- err.should match(/rake-compiler found compiled files in 'ext\/extension_one' directory. Please remove them./)
222
- end
223
- end
224
-
225
- context '(extension in custom location)' do
226
- before :each do
227
- allow(Rake::FileList).to receive(:[]).and_return(["ext/extension_one/source.c"], [])
228
- @ext = Rake::ExtensionTask.new('extension_one') do |ext|
229
- ext.ext_dir = 'custom/ext/foo'
230
- end
231
- @ext_bin = ext_bin('extension_one')
232
- @platform = RUBY_PLATFORM
233
- @ruby_ver = RUBY_VERSION
234
- end
235
-
236
- context 'tmp/{platform}/extension_one/{ruby_ver}/Makefile' do
237
- it "should depend on 'custom/ext/foo/extconf.rb'" do
238
- Rake::Task["tmp/#{@platform}/extension_one/#{@ruby_ver}/Makefile"].prerequisites.should include("custom/ext/foo/extconf.rb")
239
- end
240
- end
241
- end
242
-
243
- context '(native tasks)' do
244
- before :each do
245
- allow(Rake::FileList).to receive(:[]).and_return(["ext/extension_one/source.c"], [])
246
- @spec = mock_gem_spec
247
- @ext_bin = ext_bin('extension_one')
248
- @platform = RUBY_PLATFORM
249
- @ruby_ver = RUBY_VERSION
250
- end
251
-
252
- context 'native' do
253
- before :each do
254
- allow(@spec).to receive(:platform=).and_return('ruby')
255
- end
256
-
257
- it 'should define a task for building the supplied gem' do
258
- Rake::ExtensionTask.new('extension_one', @spec)
259
- Rake::Task.task_defined?('native:my_gem').should == true
260
- end
261
-
262
- it 'should define as task for pure ruby gems' do
263
- Rake::Task.task_defined?('native').should == false
264
- Rake::ExtensionTask.new('extension_one', @spec)
265
- Rake::Task.task_defined?('native').should == true
266
- end
267
-
268
- it 'should not define a task for already native gems' do
269
- allow(@spec).to receive(:platform).and_return('current')
270
- Rake::ExtensionTask.new('extension_one', @spec)
271
- Rake::Task.task_defined?('native').should == false
272
- end
273
-
274
- it 'should depend on platform specific native tasks' do
275
- Rake::ExtensionTask.new('extension_one', @spec)
276
- Rake::Task["native"].prerequisites.should include("native:#{@platform}")
277
- end
278
-
279
- context 'native:my_gem:{platform}' do
280
- it 'should depend on binary extension' do
281
- Rake::ExtensionTask.new('extension_one', @spec)
282
- Rake::Task["native:my_gem:#{@platform}"].prerequisites.should include("tmp/#{@platform}/stage/lib/#{@ext_bin}")
283
- end
284
- end
285
- end
286
- end
287
-
288
- context '(one extension whose name with directory prefixes)' do
289
- before :each do
290
- allow(Rake::FileList).to receive(:[]).and_return(["ext/prefix1/prefix2/extension_one/source.c"], [])
291
- @ext = Rake::ExtensionTask.new('prefix1/prefix2/extension_one')
292
- @ext_bin = ext_bin('extension_one')
293
- @platform = RUBY_PLATFORM
294
- @ruby_ver = RUBY_VERSION
295
- end
296
-
297
- context 'compile' do
298
- it 'should define as task' do
299
- Rake::Task.task_defined?('compile').should == true
300
- end
301
-
302
- it "should depend on 'compile:{platform}'" do
303
- Rake::Task['compile'].prerequisites.should include("compile:#{@platform}")
304
- end
305
- end
306
-
307
- context 'compile:prefix1/prefix2/extension_one' do
308
- it 'should define as task' do
309
- Rake::Task.task_defined?('compile:prefix1/prefix2/extension_one').should == true
310
- end
311
-
312
- it "should depend on 'compile:prefix1/prefix2/extension_one:{platform}'" do
313
- Rake::Task['compile:prefix1/prefix2/extension_one'].prerequisites.should include("compile:prefix1/prefix2/extension_one:#{@platform}")
314
- end
315
- end
316
-
317
- context 'lib/prefix1/prefix2/extension_one.{so,bundle}' do
318
- it 'should define as task' do
319
- Rake::Task.task_defined?("lib/prefix1/prefix2/#{@ext_bin}").should == true
320
- end
321
-
322
- it "should depend on 'copy:prefix1/prefix2/extension_one:{platform}:{ruby_ver}'" do
323
- Rake::Task["lib/prefix1/prefix2/#{@ext_bin}"].prerequisites.should include("copy:prefix1/prefix2/extension_one:#{@platform}:#{@ruby_ver}")
324
- end
325
- end
326
-
327
- context 'tmp/{platform}/prefix1/prefix2/extension_one/{ruby_ver}/prefix1/prefix2/extension_one.{so,bundle}' do
328
- it 'should define as task' do
329
- Rake::Task.task_defined?("tmp/#{@platform}/prefix1/prefix2/extension_one/#{@ruby_ver}/prefix1/prefix2/#{@ext_bin}").should == true
330
- end
331
-
332
- it "should depend on 'tmp/{platform}/prefix1/prefix2/extension_one/{ruby_ver}/Makefile'" do
333
- Rake::Task["tmp/#{@platform}/prefix1/prefix2/extension_one/#{@ruby_ver}/prefix1/prefix2/#{@ext_bin}"].prerequisites.should include("tmp/#{@platform}/prefix1/prefix2/extension_one/#{@ruby_ver}/Makefile")
334
- end
335
-
336
- it "should depend on 'ext/extension_one/source.c'" do
337
- Rake::Task["tmp/#{@platform}/prefix1/prefix2/extension_one/#{@ruby_ver}/prefix1/prefix2/#{@ext_bin}"].prerequisites.should include("ext/prefix1/prefix2/extension_one/source.c")
338
- end
339
-
340
- it "should not depend on 'ext/extension_one/source.h'" do
341
- Rake::Task["tmp/#{@platform}/prefix1/prefix2/extension_one/#{@ruby_ver}/prefix1/prefix2/#{@ext_bin}"].prerequisites.should_not include("ext/prefix1/prefix2/extension_one/source.h")
342
- end
343
- end
344
- end
345
-
346
- context '(cross platform tasks)' do
347
- before :each do
348
- allow(File).to receive(:exist?).and_return(true)
349
- allow(YAML).to receive(:load_file).and_return(mock_config_yml)
350
- allow(Rake::FileList).to receive(:[]).and_return(["ext/extension_one/source.c"], [])
351
- @spec = mock_gem_spec
352
- @config_file = File.expand_path("~/.rake-compiler/config.yml")
353
- @ruby_ver = RUBY_VERSION
354
- @platform = 'i386-mingw32'
355
- @config_path = mock_config_yml["rbconfig-#{@platform}-#{@ruby_ver}"]
356
-
357
- allow(File).to receive(:open).and_yield(mock_fake_rb)
358
- end
359
-
360
- context 'if no rake-compiler configuration exists' do
361
- before :each do
362
- expect(File).to receive(:exist?).with(@config_file).and_return(false)
363
-
364
- _, @err = capture_output do
365
- Rake::ExtensionTask.new('extension_one') do |ext|
366
- ext.cross_compile = true
367
- end
368
- end
369
- end
370
-
371
- it 'should not generate a warning' do
372
- @err.should eq("")
373
- end
374
-
375
- it 'should create a dummy nested cross-compile target that raises an error' do
376
- Rake::Task.should have_defined("cross")
377
- Rake::Task["cross"].invoke
378
- lambda {
379
- Rake::Task["compile"].invoke
380
- }.should raise_error(RuntimeError,
381
- /rake-compiler must be configured first to enable cross-compilation/)
382
- end
383
- end
384
-
385
- it 'should parse the config file using YAML' do
386
- expect(YAML).to receive(:load_file).with(@config_file).and_return(mock_config_yml)
387
- Rake::ExtensionTask.new('extension_one') do |ext|
388
- ext.cross_compile = true
389
- end
390
- end
391
-
392
- it 'should warn if no section of config file defines running version of ruby' do
393
- allow_any_instance_of(Rake::CompilerConfig).to(
394
- receive(:find).with(@ruby_ver, @platform).and_return(nil)
395
- )
396
-
397
- out, err = capture_output do
398
- Rake::ExtensionTask.new('extension_one') do |ext|
399
- ext.cross_compile = true
400
- end
401
- end
402
- err.should match(/no configuration section for specified version of Ruby/)
403
- end
404
-
405
- it 'should capture an action block to be executed when cross compiling' do
406
- lambda {
407
- Rake::ExtensionTask.new('extension_one') do |ext|
408
- ext.cross_compiling do |gem_spec|
409
- gem_spec.post_install_message = "Cross compiled gem"
410
- end
411
- end
412
- }.should_not raise_error
413
- end
414
-
415
- it 'should generate additional rake tasks if files are added when cross compiling' do
416
- allow_any_instance_of(Rake::CompilerConfig).to(
417
- receive(:find).and_return("/rubies/1.9.1/rbconfig.rb")
418
- )
419
-
420
- # Use a real spec instead of a mock because define_native_tasks dups and
421
- # calls methods on Gem::Specification, which is more than mock can do.
422
- spec = Gem::Specification.new do |s|
423
- s.name = 'my_gem'
424
- s.platform = Gem::Platform::RUBY
425
- end
426
-
427
- # Gem::PackageTask calls Rake::PackageTask which sets Gem.configuration.verbose,
428
- # which initializes Gem::ConfigFile,
429
- # which gets mad if it cannot find `sysconfdir`/gemrc
430
- allow(Gem).to receive_message_chain(:configuration, :verbose=).and_return(true)
431
-
432
- ENV['RUBY_CC_VERSION'] = '1.9.1'
433
- Rake::ExtensionTask.new('extension_one', spec) do |ext|
434
- ext.cross_compile = true
435
- ext.cross_platform = 'universal-unknown'
436
- ext.cross_compiling do |gem_spec|
437
- gem_spec.files << 'somedir/somefile'
438
- end
439
- end
440
- Rake::Task['native:my_gem:universal-unknown'].execute
441
- Rake::Task.should have_defined("tmp/universal-unknown/stage/somedir")
442
- Rake::Task.should have_defined("tmp/universal-unknown/stage/somedir/somefile")
443
- end
444
-
445
- it 'should allow usage of RUBY_CC_VERSION to indicate a different version of ruby' do
446
- allow_any_instance_of(Rake::CompilerConfig).to(
447
- receive(:find)
448
- .with("1.9.1", "i386-mingw32")
449
- .and_return("/rubies/1.9.1/rbconfig.rb")
450
- )
451
-
452
- ENV['RUBY_CC_VERSION'] = '1.9.1'
453
- Rake::ExtensionTask.new('extension_one') do |ext|
454
- ext.cross_compile = true
455
- end
456
- end
457
-
458
- it 'should allow multiple versions be supplied to RUBY_CC_VERSION' do
459
- allow_any_instance_of(Rake::CompilerConfig).to(
460
- receive(:find)
461
- .with("1.8.6", "i386-mingw32")
462
- .and_return("/rubies/1.8.6/rbconfig.rb")
463
- )
464
- allow_any_instance_of(Rake::CompilerConfig).to(
465
- receive(:find)
466
- .with("1.9.1", "i386-mingw32")
467
- .and_return("/rubies/1.9.1/rbconfig.rb")
468
- )
469
-
470
- ENV['RUBY_CC_VERSION'] = '1.8.6:1.9.1'
471
- Rake::ExtensionTask.new('extension_one') do |ext|
472
- ext.cross_compile = true
473
- end
474
- end
475
-
476
- it "should set required_ruby_version from RUBY_CC_VERSION, set platform, clear extensions but keep metadata" do
477
- platforms = ["x86-mingw32", "x64-mingw32"]
478
- ruby_cc_versions = ["1.8.6", "2.1.10", "2.2.6", "2.3.3", "2.10.1", "2.11.0"]
479
- ENV["RUBY_CC_VERSION"] = ruby_cc_versions.join(":")
480
-
481
- ruby_cc_versions.each do |ruby_cc_version|
482
- platforms.each do |platform|
483
- unless platform == "x64-mingw32" && ruby_cc_version == "2.11.0"
484
- rbconf = "/rubies/#{ruby_cc_version}/rbconfig.rb"
485
- end
486
- allow_any_instance_of(Rake::CompilerConfig).to(
487
- receive(:find)
488
- .with(ruby_cc_version, platform)
489
- .and_return(rbconf)
490
- )
491
- end
492
- end
493
-
494
- allow(Gem).to receive_message_chain(:configuration, :verbose=).and_return(true)
495
-
496
- spec = Gem::Specification.new do |s|
497
- s.name = 'my_gem'
498
- s.platform = Gem::Platform::RUBY
499
- s.extensions = ['ext/somegem/extconf.rb']
500
- s.metadata['allowed_push_host'] = 'http://test'
501
- end
502
-
503
- cross_specs = []
504
- Rake::ExtensionTask.new("extension_one", spec) do |ext|
505
- ext.cross_platform = platforms
506
- ext.cross_compile = true
507
- ext.cross_compiling do |cross_spec|
508
- cross_specs << cross_spec
509
- end
510
- end
511
- platforms.each do |platform|
512
- Rake::Task["native:my_gem:#{platform}"].execute
513
- end
514
-
515
- expected_required_ruby_versions = [
516
- Gem::Requirement.new([">= 1.8", "< 2.12.dev"]),
517
- Gem::Requirement.new([">= 1.8", "< 2.11.dev"]),
518
- ]
519
- cross_specs.collect(&:required_ruby_version).should == expected_required_ruby_versions
520
- cross_specs.collect(&:extensions).should == [[], []]
521
- cross_specs.collect(&:platform).collect(&:to_s).should == platforms
522
- cross_specs.collect{|s| s.metadata['allowed_push_host']}.should == ['http://test', 'http://test']
523
-
524
- # original gemspec should keep unchanged
525
- spec.required_ruby_version.should == Gem::Requirement.new([">= 0"])
526
- spec.platform.should == Gem::Platform::RUBY
527
- spec.extensions.should == ['ext/somegem/extconf.rb']
528
- spec.metadata['allowed_push_host'].should == 'http://test'
529
- end
530
-
531
- after :each do
532
- ENV.delete('RUBY_CC_VERSION')
533
- end
534
-
535
- context "(cross compile for multiple versions)" do
536
- before :each do
537
- allow_any_instance_of(Rake::CompilerConfig).to(
538
- receive(:find)
539
- .with("1.8.6", "universal-unknown")
540
- .and_return("/rubies/1.8.6/rbconfig.rb")
541
- )
542
- allow_any_instance_of(Rake::CompilerConfig).to(
543
- receive(:find)
544
- .with("1.9.1", "universal-unknown")
545
- .and_return("/rubies/1.9.1/rbconfig.rb")
546
- )
547
-
548
- ENV['RUBY_CC_VERSION'] = '1.8.6:1.9.1'
549
- @ext = Rake::ExtensionTask.new('extension_one') do |ext|
550
- ext.cross_compile = true
551
- ext.cross_platform = 'universal-unknown'
552
- end
553
- end
554
-
555
- it 'should create specific copy of binaries for each version' do
556
- Rake::Task.should have_defined("copy:extension_one:universal-unknown:1.8.6")
557
- Rake::Task.should have_defined("copy:extension_one:universal-unknown:1.9.1")
558
- end
559
- end
560
-
561
- context "(cross for 'universal-unknown' platform)" do
562
- before :each do
563
- @ext = Rake::ExtensionTask.new('extension_one', @spec) do |ext|
564
- ext.cross_compile = true
565
- ext.cross_platform = 'universal-unknown'
566
- end
567
- end
568
-
569
- context 'fake' do
570
- it 'should chain fake task to Makefile generation' do
571
- Rake::Task["tmp/universal-unknown/extension_one/#{@ruby_ver}/Makefile"].prerequisites.should include("tmp/universal-unknown/extension_one/#{@ruby_ver}/fake.rb")
572
- end
573
-
574
- it 'should chain rbconfig tasks to fake.rb generation' do
575
- Rake::Task["tmp/universal-unknown/extension_one/#{@ruby_ver}/fake.rb"].prerequisites.should include(@config_path)
576
- end
577
- end
578
-
579
- context 'mkmf' do
580
- it 'should chain mkmf tasks to Makefile generation' do
581
- Rake::Task["tmp/universal-unknown/extension_one/#{@ruby_ver}/Makefile"].prerequisites.should include("tmp/universal-unknown/extension_one/#{@ruby_ver}/mkmf.rb")
582
- end
583
-
584
- it 'should take mkmf from rake-compiler configuration' do
585
- mkmf_path = File.expand_path(File.join(File.dirname(@config_path), '..', 'mkmf.rb'))
586
- Rake::Task["tmp/universal-unknown/extension_one/#{@ruby_ver}/mkmf.rb"].prerequisites.should include(mkmf_path)
587
- end
588
- end
589
-
590
- context 'compile:universal-unknown' do
591
- it "should be defined" do
592
- Rake::Task.task_defined?('compile:universal-unknown').should == true
593
- end
594
-
595
- it "should depend on 'compile:extension_one:universal-unknown'" do
596
- Rake::Task['compile:universal-unknown'].prerequisites.should include('compile:extension_one:universal-unknown')
597
- end
598
- end
599
-
600
- context 'native:universal-unknown' do
601
- it "should be defined" do
602
- Rake::Task.task_defined?('native:universal-unknown').should == true
603
- end
604
-
605
- it "should depend on 'native:my_gem:universal-unknown'" do
606
- Rake::Task['native:universal-unknown'].prerequisites.should include('native:my_gem:universal-unknown')
607
- end
608
- end
609
- end
610
-
611
- context '(cross for multiple platforms)' do
612
- before :each do
613
- @ext = Rake::ExtensionTask.new('extension_one', @spec) do |ext|
614
- ext.cross_compile = true
615
- ext.cross_platform = ['universal-known', 'universal-unknown']
616
- ext.cross_config_options << '--with-something'
617
- ext.cross_config_options << {'universal-known' => '--with-known'}
618
- end
619
- end
620
-
621
- it 'should define task for each supplied platform' do
622
- Rake::Task.should have_defined('compile:universal-known')
623
- Rake::Task.should have_defined('compile:universal-unknown')
624
- end
625
-
626
- it 'should filter options for each supplied platform' do
627
- @ext.cross_config_options('universal-unknown').should eq(%w[--with-something])
628
- @ext.cross_config_options('universal-known').should eq(%w[--with-something --with-known])
629
- end
630
- end
631
- end
632
- end
633
-
634
- private
635
- def ext_bin(extension_name)
636
- "#{extension_name}.#{RbConfig::CONFIG['DLEXT']}"
637
- end
638
-
639
- def mock_gem_spec(stubs = {})
640
- double(Gem::Specification,
641
- { :name => 'my_gem', :platform => 'ruby', :files => [] }.merge(stubs)
642
- )
643
- end
644
-
645
- def mock_config_yml
646
- return @mock_config_yml if @mock_config_yml
647
-
648
- versions = {
649
- "1.8.6" => "1.8",
650
- "1.8.7" => "1.8",
651
- "1.9.3" => "1.9.1",
652
- "2.0.0" => "2.0.0",
653
- "2.1.2" => "2.1.0",
654
- RUBY_VERSION => RbConfig::CONFIG["ruby_version"]
655
- }
656
-
657
- platforms = [
658
- "i386-mingw32",
659
- "universal-known",
660
- "universal-unknown",
661
- "x64-mingw32",
662
- RUBY_PLATFORM
663
- ]
664
-
665
- @mock_config_yml = {}
666
-
667
- platforms.collect do |platform|
668
- versions.each do |version, api_version|
669
- @mock_config_yml["rbconfig-#{platform}-#{version}"] = "/rubies/#{api_version}/rbconfig.rb"
670
- end
671
- end
672
-
673
- @mock_config_yml
674
- end
675
-
676
- def mock_fake_rb
677
- double(File, :write => 45)
678
- end
679
- end