rake-compiler 1.2.0 → 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/History.md +34 -0
- data/README.md +2 -2
- data/lib/rake/baseextensiontask.rb +5 -1
- data/lib/rake/compiler_config.rb +38 -0
- data/lib/rake/extensiontask.rb +7 -11
- data/lib/rake/javaextensiontask.rb +7 -1
- data/spec/lib/rake/compiler_config_spec.rb +54 -0
- data/spec/lib/rake/extensiontask_spec.rb +47 -21
- metadata +8 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1307a1f8d635b6fa407ce62a9e301a9d2ccfb358fb77e3ed85c3d22492fd6a1e
|
4
|
+
data.tar.gz: d562c91bfee82d65d39b67b118c9b9395e33be402b2c41058d4251ae2e88a37f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1d1c34c803284711dff655cd8b4d7a34766d1ade90556ffeed111349777c67e143a55705bda5bce95f6629c2bc45a7e528da666f20595cb45c7e2986ee3c9269
|
7
|
+
data.tar.gz: dfabaa0805a27ee2150a406a2e7e26c6345ea279866e271c1936ab95b8090a0bb6fa0919a42509ae4d6652e8d249a694c4b70b7ace351335afb7cbace8fa7cf8
|
data/History.md
CHANGED
@@ -1,3 +1,37 @@
|
|
1
|
+
### 1.2.2 / 2023-05-25
|
2
|
+
|
3
|
+
* Enhancements:
|
4
|
+
* GH-211: Added `extra_sources` that is for dynamic sources.
|
5
|
+
[Patch by James Tucker]
|
6
|
+
* GH-213: Stopped using `--release` on Java 8.
|
7
|
+
[Patch by James Pavel Rosický]
|
8
|
+
* GH-215: Added support for extra options with space.
|
9
|
+
[Reported by Jun Aruga]
|
10
|
+
|
11
|
+
* Fixes:
|
12
|
+
* GH-211: Fixed a typo in documentation.
|
13
|
+
[Patch by Jan-Benedikt Jagusch]
|
14
|
+
|
15
|
+
* Thanks:
|
16
|
+
* James Tucker
|
17
|
+
* Jan-Benedikt Jagusch
|
18
|
+
* Pavel Rosický
|
19
|
+
* Jun Aruga
|
20
|
+
|
21
|
+
### 1.2.1 / 2022-12-16
|
22
|
+
|
23
|
+
* Enhancements:
|
24
|
+
* GH-209: Added support for RubyGems 3.3.21 or later.
|
25
|
+
[Patch by Mike Dalessio]
|
26
|
+
|
27
|
+
* Fixes:
|
28
|
+
* GH-208: Fixed a typo in documentation.
|
29
|
+
[Patch by Garen Torikian]
|
30
|
+
|
31
|
+
* Thanks:
|
32
|
+
* Garen Torikian
|
33
|
+
* Mike Dalessio
|
34
|
+
|
1
35
|
### 1.2.0 / 2022-04-15
|
2
36
|
|
3
37
|
* Enhancements:
|
data/README.md
CHANGED
@@ -241,7 +241,7 @@ several settings for `Rake::ExtensionTask`:
|
|
241
241
|
| no_native | ExtensionTask (CRuby) | [Optional] Set to true to prevent non-CRuby platforms from defining native tasks. Default: `false`. |
|
242
242
|
| config_includes | ExtensionTask (CRuby) | [Optional] Specify an Array of paths to include as `-I...:...` includes during compilation. Default: `['.']`. |
|
243
243
|
| classpath | JavaExtensionTask | [Optional] Specify additional classpath paths as an Array. Default: _Uses the current CLASSPATH._ |
|
244
|
-
| debug | JavaExtensionTask | [Optional] Whether to set the debug flag during
|
244
|
+
| debug | JavaExtensionTask | [Optional] Whether to set the debug flag during compilation. Default: `false`. |
|
245
245
|
| source_version | JavaExtensionTask | [Optional] The JRE version that your source code requires to compile. Default: `1.6`. |
|
246
246
|
| target_version | JavaExtensionTask | [Optional] The oldest JRE version you want to support. Default: `1.6`. |
|
247
247
|
| encoding | JavaExtensionTask | [Optional] Specify an -encoding option to provide to the compiler. Default: `nil`. |
|
@@ -349,7 +349,7 @@ Now, you only need specify a few additional options in your extension definition
|
|
349
349
|
# platform build, with platform-specific options in a hash.
|
350
350
|
ext.cross_config_options << '--with-common-option'
|
351
351
|
ext.cross_config_options << {
|
352
|
-
'x86-mswin32-60 => '--with-some-option',
|
352
|
+
'x86-mswin32-60' => '--with-some-option',
|
353
353
|
'x64-mingw32' => '--enable-64bits',
|
354
354
|
}
|
355
355
|
ext.cross_config_options << '--with-final-option'
|
@@ -5,6 +5,8 @@ require 'rbconfig'
|
|
5
5
|
|
6
6
|
require 'pathname'
|
7
7
|
|
8
|
+
require_relative "compiler_config"
|
9
|
+
|
8
10
|
module Rake
|
9
11
|
class BaseExtensionTask < TaskLib
|
10
12
|
|
@@ -16,6 +18,7 @@ module Rake
|
|
16
18
|
attr_accessor :config_options
|
17
19
|
attr_accessor :source_pattern
|
18
20
|
attr_accessor :extra_options
|
21
|
+
attr_accessor :extra_sources
|
19
22
|
attr_writer :platform
|
20
23
|
|
21
24
|
def platform
|
@@ -39,6 +42,7 @@ module Rake
|
|
39
42
|
end
|
40
43
|
@config_options = []
|
41
44
|
@extra_options = ARGV.select { |i| i =~ /\A--?/ }
|
45
|
+
@extra_sources = FileList[]
|
42
46
|
end
|
43
47
|
|
44
48
|
def define
|
@@ -69,7 +73,7 @@ module Rake
|
|
69
73
|
end
|
70
74
|
|
71
75
|
def source_files
|
72
|
-
FileList["#{@ext_dir}/#{@source_pattern}"]
|
76
|
+
FileList["#{@ext_dir}/#{@source_pattern}"] + @extra_sources
|
73
77
|
end
|
74
78
|
|
75
79
|
def warn_once(message)
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Rake
|
2
|
+
class CompilerConfig
|
3
|
+
def initialize(config_path)
|
4
|
+
require "yaml"
|
5
|
+
@config = YAML.load_file(config_path)
|
6
|
+
end
|
7
|
+
|
8
|
+
def find(ruby_version, gem_platform)
|
9
|
+
gem_platform = Gem::Platform.new(gem_platform)
|
10
|
+
|
11
|
+
@config.each do |config_name, config_location|
|
12
|
+
# There are two variations we might find in the rake-compiler config.yml
|
13
|
+
#
|
14
|
+
# 1. config_name: rbconfig-x86_64-linux-3.0.0
|
15
|
+
# runtime_platform_name: x86_64-linux
|
16
|
+
# runtime_version: 3.0.0
|
17
|
+
#
|
18
|
+
# 2. config_name: rbconfig-x86_64-linux-gnu-3.0.0
|
19
|
+
# runtime_platform_name: x86_64-linux-gnu
|
20
|
+
# runtime_version: 3.0.0
|
21
|
+
#
|
22
|
+
# With rubygems < 3.3.21, both variations will be present (two entries pointing at the same
|
23
|
+
# installation).
|
24
|
+
#
|
25
|
+
# With rubygems >= 3.3.21, only the second variation will be present.
|
26
|
+
runtime_platform_name = config_name.split("-")[1..-2].join("-")
|
27
|
+
runtime_version = config_name.split("-").last
|
28
|
+
runtime_platform = Gem::Platform.new(runtime_platform_name)
|
29
|
+
|
30
|
+
if (ruby_version == runtime_version) && (gem_platform =~ runtime_platform)
|
31
|
+
return config_location
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
nil
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/rake/extensiontask.rb
CHANGED
@@ -199,7 +199,7 @@ Java extension should be preferred.
|
|
199
199
|
abs_extconf = (Pathname.new(Dir.pwd) + extconf).realpath
|
200
200
|
|
201
201
|
# now add the extconf script
|
202
|
-
cmd << abs_extconf.relative_path_from(abs_tmp_path)
|
202
|
+
cmd << abs_extconf.relative_path_from(abs_tmp_path).to_s
|
203
203
|
|
204
204
|
# fake.rb will be present if we are cross compiling
|
205
205
|
if t.prerequisites.include?("#{tmp_path}/fake.rb") then
|
@@ -215,9 +215,7 @@ Java extension should be preferred.
|
|
215
215
|
end
|
216
216
|
|
217
217
|
chdir tmp_path do
|
218
|
-
|
219
|
-
# Add current directory to the search path of Ruby
|
220
|
-
sh cmd.join(' ')
|
218
|
+
sh *cmd
|
221
219
|
end
|
222
220
|
end
|
223
221
|
|
@@ -393,8 +391,11 @@ Java extension should be preferred.
|
|
393
391
|
return
|
394
392
|
end
|
395
393
|
|
396
|
-
|
397
|
-
|
394
|
+
rbconfig_file = Rake::CompilerConfig.new(config_path).find(ruby_ver, for_platform)
|
395
|
+
unless rbconfig_file
|
396
|
+
warn "no configuration section for specified version of Ruby (rbconfig-#{for_platform}-#{ruby_ver})"
|
397
|
+
return
|
398
|
+
end
|
398
399
|
|
399
400
|
# tmp_path
|
400
401
|
tmp_path = "#{@tmp_dir}/#{for_platform}/#{@name}/#{ruby_ver}"
|
@@ -405,11 +406,6 @@ Java extension should be preferred.
|
|
405
406
|
# lib_binary_path
|
406
407
|
lib_binary_path = "#{lib_path}/#{File.basename(binary(for_platform))}"
|
407
408
|
|
408
|
-
unless rbconfig_file = config_file["rbconfig-#{for_platform}-#{ruby_ver}"] then
|
409
|
-
warn "no configuration section for specified version of Ruby (rbconfig-#{for_platform}-#{ruby_ver})"
|
410
|
-
return
|
411
|
-
end
|
412
|
-
|
413
409
|
# mkmf
|
414
410
|
mkmf_file = File.expand_path(File.join(File.dirname(rbconfig_file), '..', 'mkmf.rb'))
|
415
411
|
|
@@ -212,7 +212,7 @@ execute the Rake compilation task using the JRuby interpreter.
|
|
212
212
|
end
|
213
213
|
|
214
214
|
def java_target_args
|
215
|
-
if @release
|
215
|
+
if @release && release_flag_supported?
|
216
216
|
["--release=#{@release}"]
|
217
217
|
else
|
218
218
|
["-target", @target_version, "-source", @source_version]
|
@@ -303,5 +303,11 @@ execute the Rake compilation task using the JRuby interpreter.
|
|
303
303
|
|
304
304
|
"-Xlint:#{@lint_option}"
|
305
305
|
end
|
306
|
+
|
307
|
+
def release_flag_supported?
|
308
|
+
return true unless RUBY_PLATFORM =~ /java/
|
309
|
+
|
310
|
+
Gem::Version.new(Java::java.lang.System.getProperty('java.version')) >= Gem::Version.new("9")
|
311
|
+
end
|
306
312
|
end
|
307
313
|
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
require 'rake/extensiontask'
|
4
|
+
require 'rbconfig'
|
5
|
+
require 'tempfile'
|
6
|
+
|
7
|
+
describe Rake::CompilerConfig do
|
8
|
+
def config_file(contents)
|
9
|
+
Tempfile.new.tap do |tf|
|
10
|
+
tf.write(contents)
|
11
|
+
tf.close
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
it "returns the matching config for exact platform match" do
|
16
|
+
cc = Rake::CompilerConfig.new(config_file(<<~CONFIG))
|
17
|
+
---
|
18
|
+
rbconfig-x86_64-linux-3.0.0: "/path/to/aaa/rbconfig.rb"
|
19
|
+
rbconfig-x86_64-darwin-3.1.0: "/path/to/bbb/rbconfig.rb"
|
20
|
+
rbconfig-x86_64-linux-3.1.0: "/path/to/ccc/rbconfig.rb"
|
21
|
+
CONFIG
|
22
|
+
|
23
|
+
expect(cc.find("3.0.0", "x86_64-linux")).to eq("/path/to/aaa/rbconfig.rb")
|
24
|
+
expect(cc.find("3.1.0", "x86_64-darwin")).to eq("/path/to/bbb/rbconfig.rb")
|
25
|
+
expect(cc.find("3.1.0", "x86_64-linux")).to eq("/path/to/ccc/rbconfig.rb")
|
26
|
+
|
27
|
+
expect(cc.find("2.7.0", "x86_64-linux")).to be_nil
|
28
|
+
expect(cc.find("3.1.0", "arm64-linux")).to be_nil
|
29
|
+
end
|
30
|
+
|
31
|
+
it "returns the matching config for inexact platform match" do
|
32
|
+
cc = Rake::CompilerConfig.new(config_file(<<~CONFIG))
|
33
|
+
---
|
34
|
+
rbconfig-x86_64-linux-gnu-3.0.0: "/path/to/aaa/rbconfig.rb"
|
35
|
+
rbconfig-x86_64-linux-musl-3.1.0: "/path/to/bbb/rbconfig.rb"
|
36
|
+
CONFIG
|
37
|
+
|
38
|
+
expect(cc.find("3.0.0", "x86_64-linux")).to eq("/path/to/aaa/rbconfig.rb")
|
39
|
+
expect(cc.find("3.1.0", "x86_64-linux")).to eq("/path/to/bbb/rbconfig.rb")
|
40
|
+
end
|
41
|
+
|
42
|
+
it "does not match the other way around" do
|
43
|
+
if Gem::Version.new(Gem::VERSION) < Gem::Version.new("3.3.21")
|
44
|
+
skip "rubygems 3.3.21+ only"
|
45
|
+
end
|
46
|
+
|
47
|
+
cc = Rake::CompilerConfig.new(config_file(<<~CONFIG))
|
48
|
+
---
|
49
|
+
rbconfig-x86_64-linux-3.1.0: "/path/to/bbb/rbconfig.rb"
|
50
|
+
CONFIG
|
51
|
+
|
52
|
+
expect(cc.find("3.1.0", "x86_64-linux-musl")).to be_nil
|
53
|
+
end
|
54
|
+
end
|
@@ -58,6 +58,15 @@ describe Rake::ExtensionTask do
|
|
58
58
|
end
|
59
59
|
ext.platform.should == 'universal-foo-bar-10.5'
|
60
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
|
61
70
|
end
|
62
71
|
end
|
63
72
|
|
@@ -381,9 +390,10 @@ describe Rake::ExtensionTask do
|
|
381
390
|
end
|
382
391
|
|
383
392
|
it 'should warn if no section of config file defines running version of ruby' do
|
384
|
-
|
385
|
-
|
386
|
-
|
393
|
+
allow_any_instance_of(Rake::CompilerConfig).to(
|
394
|
+
receive(:find).with(@ruby_ver, @platform).and_return(nil)
|
395
|
+
)
|
396
|
+
|
387
397
|
out, err = capture_output do
|
388
398
|
Rake::ExtensionTask.new('extension_one') do |ext|
|
389
399
|
ext.cross_compile = true
|
@@ -403,9 +413,9 @@ describe Rake::ExtensionTask do
|
|
403
413
|
end
|
404
414
|
|
405
415
|
it 'should generate additional rake tasks if files are added when cross compiling' do
|
406
|
-
|
407
|
-
|
408
|
-
|
416
|
+
allow_any_instance_of(Rake::CompilerConfig).to(
|
417
|
+
receive(:find).and_return("/rubies/1.9.1/rbconfig.rb")
|
418
|
+
)
|
409
419
|
|
410
420
|
# Use a real spec instead of a mock because define_native_tasks dups and
|
411
421
|
# calls methods on Gem::Specification, which is more than mock can do.
|
@@ -433,9 +443,11 @@ describe Rake::ExtensionTask do
|
|
433
443
|
end
|
434
444
|
|
435
445
|
it 'should allow usage of RUBY_CC_VERSION to indicate a different version of ruby' do
|
436
|
-
|
437
|
-
|
438
|
-
|
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
|
+
)
|
439
451
|
|
440
452
|
ENV['RUBY_CC_VERSION'] = '1.9.1'
|
441
453
|
Rake::ExtensionTask.new('extension_one') do |ext|
|
@@ -444,10 +456,16 @@ describe Rake::ExtensionTask do
|
|
444
456
|
end
|
445
457
|
|
446
458
|
it 'should allow multiple versions be supplied to RUBY_CC_VERSION' do
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
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
|
+
)
|
451
469
|
|
452
470
|
ENV['RUBY_CC_VERSION'] = '1.8.6:1.9.1'
|
453
471
|
Rake::ExtensionTask.new('extension_one') do |ext|
|
@@ -459,18 +477,19 @@ describe Rake::ExtensionTask do
|
|
459
477
|
platforms = ["x86-mingw32", "x64-mingw32"]
|
460
478
|
ruby_cc_versions = ["1.8.6", "2.1.10", "2.2.6", "2.3.3", "2.10.1", "2.11.0"]
|
461
479
|
ENV["RUBY_CC_VERSION"] = ruby_cc_versions.join(":")
|
462
|
-
|
480
|
+
|
463
481
|
ruby_cc_versions.each do |ruby_cc_version|
|
464
482
|
platforms.each do |platform|
|
465
483
|
unless platform == "x64-mingw32" && ruby_cc_version == "2.11.0"
|
466
484
|
rbconf = "/rubies/#{ruby_cc_version}/rbconfig.rb"
|
467
485
|
end
|
468
|
-
|
469
|
-
|
470
|
-
|
486
|
+
allow_any_instance_of(Rake::CompilerConfig).to(
|
487
|
+
receive(:find)
|
488
|
+
.with(ruby_cc_version, platform)
|
489
|
+
.and_return(rbconf)
|
490
|
+
)
|
471
491
|
end
|
472
492
|
end
|
473
|
-
allow(YAML).to receive(:load_file).and_return(config)
|
474
493
|
|
475
494
|
allow(Gem).to receive_message_chain(:configuration, :verbose=).and_return(true)
|
476
495
|
|
@@ -515,9 +534,16 @@ describe Rake::ExtensionTask do
|
|
515
534
|
|
516
535
|
context "(cross compile for multiple versions)" do
|
517
536
|
before :each do
|
518
|
-
|
519
|
-
|
520
|
-
|
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
|
+
)
|
521
547
|
|
522
548
|
ENV['RUBY_CC_VERSION'] = '1.8.6:1.9.1'
|
523
549
|
@ext = Rake::ExtensionTask.new('extension_one') do |ext|
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rake-compiler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kouhei Sutou
|
8
8
|
- Luis Lavena
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2023-05-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -108,9 +108,11 @@ files:
|
|
108
108
|
- features/support/generator_helpers.rb
|
109
109
|
- features/support/platform_extension_helpers.rb
|
110
110
|
- lib/rake/baseextensiontask.rb
|
111
|
+
- lib/rake/compiler_config.rb
|
111
112
|
- lib/rake/extensioncompiler.rb
|
112
113
|
- lib/rake/extensiontask.rb
|
113
114
|
- lib/rake/javaextensiontask.rb
|
115
|
+
- spec/lib/rake/compiler_config_spec.rb
|
114
116
|
- spec/lib/rake/extensiontask_spec.rb
|
115
117
|
- spec/lib/rake/javaextensiontask_spec.rb
|
116
118
|
- spec/spec.opts
|
@@ -126,7 +128,7 @@ homepage: https://github.com/rake-compiler/rake-compiler
|
|
126
128
|
licenses:
|
127
129
|
- MIT
|
128
130
|
metadata: {}
|
129
|
-
post_install_message:
|
131
|
+
post_install_message:
|
130
132
|
rdoc_options:
|
131
133
|
- "--main"
|
132
134
|
- README.md
|
@@ -145,8 +147,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
147
|
- !ruby/object:Gem::Version
|
146
148
|
version: 1.8.23
|
147
149
|
requirements: []
|
148
|
-
rubygems_version: 3.
|
149
|
-
signing_key:
|
150
|
+
rubygems_version: 3.5.0.dev
|
151
|
+
signing_key:
|
150
152
|
specification_version: 4
|
151
153
|
summary: Rake-based Ruby Extension (C, Java) task generator.
|
152
154
|
test_files: []
|