rake-compiler-dock 0.7.2 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +4 -0
- data/.github/workflows/ci.yml +168 -0
- data/.gitignore +14 -0
- data/Dockerfile.jruby +12 -7
- data/Dockerfile.mri.erb +271 -0
- data/History.md +63 -0
- data/README.md +138 -27
- data/Rakefile +71 -4
- data/{lib/rake_compiler_dock → build}/gem_helper.rb +0 -15
- data/build/parallel_docker_build.rb +106 -0
- data/build/patches/{ruby-2.5.3 → ruby-2.5.9}/no_sendfile.patch +1 -1
- data/build/patches/ruby-3.1.0/no_sendfile.patch +24 -0
- data/build/patches2/rake-compiler-1.1.6/0004-Enable-build-of-static-libruby.patch +28 -0
- data/build/rcd-env.sh +6 -0
- data/build/runas +1 -6
- data/build/sudoers +1 -1
- data/lib/rake_compiler_dock/docker_check.rb +12 -6
- data/lib/rake_compiler_dock/starter.rb +69 -53
- data/lib/rake_compiler_dock/version.rb +2 -2
- data/lib/rake_compiler_dock.rb +10 -0
- data/mingw64-ucrt/Dockerfile +62 -0
- data/mingw64-ucrt/binutils-mingw-w64-ignore-check-errors.patch +13 -0
- data/mingw64-ucrt/gcc-mingw-w64-only-c-c++.patch +13 -0
- data/mingw64-ucrt/mingw-w64-enable-ucrt.patch +22 -0
- data/rake-compiler-dock.gemspec +2 -2
- data/test/env/Dockerfile.alpine +17 -0
- data/test/env/Dockerfile.centos +17 -0
- data/test/env/Dockerfile.debian +24 -0
- data/test/rcd_test/Gemfile +11 -0
- data/test/rcd_test/Rakefile +74 -0
- data/test/rcd_test/ext/java/RcdTestExtService.java +19 -0
- data/test/rcd_test/ext/java/RubyRcdTest.java +16 -0
- data/test/rcd_test/ext/mri/extconf.rb +20 -0
- data/test/rcd_test/ext/mri/rcd_test_ext.c +35 -0
- data/test/rcd_test/ext/mri/rcd_test_ext.h +6 -0
- data/test/rcd_test/lib/rcd_test.rb +6 -0
- data/test/rcd_test/rcd_test.gemspec +27 -0
- data/test/rcd_test/test/test_basic.rb +22 -0
- data/test/test_environment_variables.rb +56 -31
- data/test/test_parallel_docker_build.rb +70 -0
- data.tar.gz.sig +1 -0
- metadata +83 -14
- metadata.gz.sig +0 -0
- data/Dockerfile.mri +0 -122
- data/build/patches/rake-compiler-1.0.7/enable-static.diff +0 -13
@@ -6,49 +6,74 @@ begin
|
|
6
6
|
rescue LoadError
|
7
7
|
end
|
8
8
|
|
9
|
-
class TestEnvironmentVariables
|
10
|
-
|
9
|
+
class TestEnvironmentVariables
|
10
|
+
module Common
|
11
|
+
IMAGE_NAME = "larskanis/rake-compiler-dock-mri-x86-mingw32:#{RakeCompilerDock::IMAGE_VERSION}"
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
cmd = "#{RbConfig::CONFIG['RUBY_INSTALL_NAME']} -I#{idir.inspect} bin/rake-compiler-dock #{args}"
|
17
|
-
output = `#{cmd}`
|
13
|
+
def rcd_env
|
14
|
+
self.class.instance_variable_get("@rcd_env") || begin
|
15
|
+
command = "env"
|
16
|
+
output = %x(#{invocation(command)})
|
18
17
|
|
19
|
-
|
20
|
-
|
21
|
-
hash[$1] = $2.chomp
|
18
|
+
env = output.split("\n").each_with_object({}) do |line, hash|
|
19
|
+
hash[Regexp.last_match(1)] = Regexp.last_match(2).chomp if line =~ /\A(\w+)=(.*)\z/
|
22
20
|
end
|
23
|
-
|
21
|
+
|
22
|
+
self.class.instance_variable_set("@rcd_env", env)
|
24
23
|
end
|
25
24
|
end
|
26
|
-
end
|
27
25
|
|
28
|
-
|
29
|
-
|
30
|
-
|
26
|
+
def test_RUBY_CC_VERSION
|
27
|
+
df = File.read(File.expand_path("../../Dockerfile.mri.erb", __FILE__))
|
28
|
+
df =~ /^ENV RUBY_CC_VERSION\s+(.*)\s+$/
|
29
|
+
assert_equal $1, rcd_env['RUBY_CC_VERSION']
|
30
|
+
end
|
31
31
|
|
32
|
-
|
33
|
-
|
34
|
-
|
32
|
+
def test_RAKE_EXTENSION_TASK_NO_NATIVE
|
33
|
+
assert_equal "true", rcd_env['RAKE_EXTENSION_TASK_NO_NATIVE']
|
34
|
+
end
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
end
|
36
|
+
def test_symlink_rake_compiler
|
37
|
+
cmd = invocation("if test -h $HOME/.rake-compiler ; then echo yes ; else echo no ; fi")
|
38
|
+
assert_equal("yes", %x(#{cmd}).strip)
|
39
|
+
end
|
41
40
|
|
42
|
-
|
43
|
-
|
41
|
+
def test_gem_directory
|
42
|
+
cmd = invocation("if test -d $HOME/.gem ; then echo yes ; else echo no ; fi")
|
43
|
+
assert_equal("yes", %x(#{cmd}).strip)
|
44
|
+
end
|
44
45
|
end
|
45
46
|
|
46
|
-
|
47
|
-
|
48
|
-
|
47
|
+
class UsingWrapper < Test::Unit::TestCase
|
48
|
+
include Common
|
49
|
+
|
50
|
+
def invocation(command)
|
51
|
+
idir = File.join(File.dirname(__FILE__), '../lib')
|
52
|
+
"#{RbConfig::CONFIG['RUBY_INSTALL_NAME']} -I#{idir.inspect} bin/rake-compiler-dock bash -c '#{command}'"
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_HOST_RUBY_PLATFORM
|
56
|
+
assert_equal RUBY_PLATFORM, rcd_env['RCD_HOST_RUBY_PLATFORM']
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_HOST_RUBY_VERSION
|
60
|
+
assert_equal RUBY_VERSION, rcd_env['RCD_HOST_RUBY_VERSION']
|
61
|
+
end
|
49
62
|
|
50
|
-
|
51
|
-
|
63
|
+
def test_IMAGE
|
64
|
+
assert_equal IMAGE_NAME, rcd_env['RCD_IMAGE']
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_PWD
|
68
|
+
assert_equal Dir.pwd, rcd_env['PWD']
|
69
|
+
end
|
52
70
|
end
|
53
71
|
|
72
|
+
class AsIfContinuousIntegration < Test::Unit::TestCase
|
73
|
+
include Common
|
74
|
+
|
75
|
+
def invocation(command)
|
76
|
+
"docker run -it #{IMAGE_NAME} bash -c '#{command}'"
|
77
|
+
end
|
78
|
+
end
|
54
79
|
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require_relative "../build/parallel_docker_build"
|
3
|
+
require "tmpdir"
|
4
|
+
|
5
|
+
class TestParallelDockerBuild < Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
@tmpdir ||= Dir.mktmpdir
|
8
|
+
|
9
|
+
Dir.chdir(@tmpdir) do
|
10
|
+
File.write "File0", <<-EOT
|
11
|
+
FROM a
|
12
|
+
RUN a
|
13
|
+
RUN d
|
14
|
+
EOT
|
15
|
+
File.write "File1", <<-EOT
|
16
|
+
FROM a
|
17
|
+
RUN a
|
18
|
+
RUN d
|
19
|
+
RUN f \\
|
20
|
+
g
|
21
|
+
EOT
|
22
|
+
File.write "File2", <<-EOT
|
23
|
+
FROM a
|
24
|
+
RUN b
|
25
|
+
RUN c
|
26
|
+
RUN d
|
27
|
+
EOT
|
28
|
+
File.write "File3", <<-EOT
|
29
|
+
FROM a
|
30
|
+
RUN b
|
31
|
+
RUN c
|
32
|
+
RUN d
|
33
|
+
EOT
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def teardown
|
38
|
+
FileUtils.rm_rf @tmpdir
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_tasks
|
42
|
+
Dir.chdir(@tmpdir) do
|
43
|
+
RakeCompilerDock::ParallelDockerBuild.new(%w[ File0 File1 File2 File3 ], task_prefix: "y")
|
44
|
+
end
|
45
|
+
|
46
|
+
assert_operator Rake::Task["File0"].prerequisites, :include?, "yFile0File1"
|
47
|
+
assert_operator Rake::Task["File1"].prerequisites, :include?, "yFile1"
|
48
|
+
assert_operator Rake::Task["yFile1"].prerequisites, :include?, "yFile0File1"
|
49
|
+
assert_operator Rake::Task["yFile0File1"].prerequisites, :include?, "yFile0File1File2File3"
|
50
|
+
|
51
|
+
assert_operator Rake::Task["File2"].prerequisites, :include?, "yFile2File3"
|
52
|
+
assert_operator Rake::Task["File3"].prerequisites, :include?, "yFile2File3"
|
53
|
+
assert_operator Rake::Task["yFile2File3"].prerequisites, :include?, "yFile0File1File2File3"
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_common_files
|
57
|
+
Dir.chdir(@tmpdir) do
|
58
|
+
RakeCompilerDock::ParallelDockerBuild.new(%w[ File0 File1 File2 File3 ], task_prefix: "y")
|
59
|
+
end
|
60
|
+
|
61
|
+
assert_equal "FROM a\nRUN a\nRUN d\nRUN f \\\ng\n", read_df("yFile1")
|
62
|
+
assert_equal "FROM a\nRUN a\nRUN d\n", read_df("yFile0File1")
|
63
|
+
assert_equal "FROM a\nRUN b\nRUN c\nRUN d\n", read_df("yFile2File3")
|
64
|
+
assert_equal "FROM a\n", read_df("yFile0File1File2File3")
|
65
|
+
end
|
66
|
+
|
67
|
+
def read_df(fn)
|
68
|
+
File.read("tmp/docker/#{fn}").each_line.map(&:lstrip).join
|
69
|
+
end
|
70
|
+
end
|
data.tar.gz.sig
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
s���)Րd!���k�wHKm�Dn �n���J�o�:�0�CW���l�wX�@��ݾ��+>�J���'_��dR量�/�&���~�c�ꪽI&>�ym>&H�g��8�vM,��]t����b�u�8����m#9��),TsO$'b�Ėm�p��P h�-2D�ݧ�!�E\�� y)��1��fX����bD�"J�4X��D�?W9C�醐^��3��n*��)�1���H5��@�Ť��W ��������lHt��Ky���M�� �1���5p�
|
metadata
CHANGED
@@ -1,43 +1,76 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rake-compiler-dock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lars Kanis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
|
-
cert_chain:
|
11
|
-
|
10
|
+
cert_chain:
|
11
|
+
- |
|
12
|
+
-----BEGIN CERTIFICATE-----
|
13
|
+
MIIETTCCArWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAoMSYwJAYDVQQDDB1sYXJz
|
14
|
+
L0RDPWdyZWl6LXJlaW5zZG9yZi9EQz1kZTAeFw0yMTAzMTAyMDIxNDBaFw0yMjAz
|
15
|
+
MTAyMDIxNDBaMCgxJjAkBgNVBAMMHWxhcnMvREM9Z3JlaXotcmVpbnNkb3JmL0RD
|
16
|
+
PWRlMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAoJSMECFMhBiOcic1
|
17
|
+
y1cPjgrfxw/R7wK81sQbiilecqw7zcTRZKzhy7sFQzEF0Wbiy2WmStbktq8cXmet
|
18
|
+
44ZEQI5LtyDhkGl7AFMSows5eMu1ChBdOr45OJsHaidrZfVU2vkkohu2+ZJmcqCB
|
19
|
+
TmjBIxTrKpSjMbL1TFd/C491L/SyKhJq90QMs3OfA12SUBD5wlgdfkQ5ZDi1LNTY
|
20
|
+
rKCOqGaa/zkr7/5BWpsgYcC6ziaA956ktyuQFVUgZgyJTzYStRuYjbDmaZv2sldW
|
21
|
+
zwx3Z2YTEItsdGAoZGbiLNuULmzzwyu8yGaWycpK8l8Al+vMpPaa/dgKUFUkAPjy
|
22
|
+
neRjP+N6qWW0hxt0acdw3nXN5ITxo618dQmMzWdLw94wxsWzSUMGldLfNfu9hFnV
|
23
|
+
zLrh1bFBYdXk6Mg1OnejZFBc2YlzF1u8Us+NNydHR8dMfRcAhp7sPeHOEKH8V6z2
|
24
|
+
VgCHlzf1xq+P+FR8svIqGEBVPHuidr1GguIEqJe7enbjrF2ZAgMBAAGjgYEwfzAJ
|
25
|
+
BgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUZT8nEztzNp6aQDDOuZHX
|
26
|
+
K9PjoW0wIgYDVR0RBBswGYEXbGFyc0BncmVpei1yZWluc2RvcmYuZGUwIgYDVR0S
|
27
|
+
BBswGYEXbGFyc0BncmVpei1yZWluc2RvcmYuZGUwDQYJKoZIhvcNAQELBQADggGB
|
28
|
+
AHZW9LEmp+sptD9VhxGbMSacFwlf03IdkEfmd+7MGzS4nQCQJvs/B5JGTm6q20ML
|
29
|
+
IJXpCnjBPjwnAflyV9rSr9DL2ShuAIJVNWuWs0uhUtz5HEOuV/fVSAFgLHpXP1yV
|
30
|
+
weeoJfLmVeXhRUNo/mH0sjpuRm+C1EVb8QuKFItVa5VBf111Zgn7cFXuOjAtflQ2
|
31
|
+
n3EGZATdVzduNvUENzg6l1Ba+q/nRKKHq5CnG6+1YzOhdzYKFOwlYMi6jLQK33aV
|
32
|
+
aLvq6jWUIpNbL/95ZdOR8Cd6KsCmK5Zvxd5FMMjrQCsZD6OgReshsok5r6tSiNXc
|
33
|
+
YgnBIIAFeoeGz8q+dsm6hPtkii/zr25MPRPmKnbRV7bV/zlbmwpIPxhso95lq3R5
|
34
|
+
H5q2yo7qMajDFkxRffqQO8ONvDLGecxbuv1QEyzNBdehVt4I7UedIfxyOvKd9cg2
|
35
|
+
d5T9wAD7jW/0seVujw+76/YOJWO3Dft+FQmMBbdd8s3J47HbN9R2mDt6fl6he+X/
|
36
|
+
gw==
|
37
|
+
-----END CERTIFICATE-----
|
38
|
+
date: 2022-01-04 00:00:00.000000000 Z
|
12
39
|
dependencies:
|
13
40
|
- !ruby/object:Gem::Dependency
|
14
41
|
name: bundler
|
15
42
|
requirement: !ruby/object:Gem::Requirement
|
16
43
|
requirements:
|
17
|
-
- - "
|
44
|
+
- - ">="
|
18
45
|
- !ruby/object:Gem::Version
|
19
46
|
version: '1.7'
|
47
|
+
- - "<"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '3.0'
|
20
50
|
type: :development
|
21
51
|
prerelease: false
|
22
52
|
version_requirements: !ruby/object:Gem::Requirement
|
23
53
|
requirements:
|
24
|
-
- - "
|
54
|
+
- - ">="
|
25
55
|
- !ruby/object:Gem::Version
|
26
56
|
version: '1.7'
|
57
|
+
- - "<"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '3.0'
|
27
60
|
- !ruby/object:Gem::Dependency
|
28
61
|
name: rake
|
29
62
|
requirement: !ruby/object:Gem::Requirement
|
30
63
|
requirements:
|
31
|
-
- - "
|
64
|
+
- - ">="
|
32
65
|
- !ruby/object:Gem::Version
|
33
|
-
version: '12
|
66
|
+
version: '12'
|
34
67
|
type: :development
|
35
68
|
prerelease: false
|
36
69
|
version_requirements: !ruby/object:Gem::Requirement
|
37
70
|
requirements:
|
38
|
-
- - "
|
71
|
+
- - ">="
|
39
72
|
- !ruby/object:Gem::Version
|
40
|
-
version: '12
|
73
|
+
version: '12'
|
41
74
|
- !ruby/object:Gem::Dependency
|
42
75
|
name: test-unit
|
43
76
|
requirement: !ruby/object:Gem::Requirement
|
@@ -62,18 +95,23 @@ executables:
|
|
62
95
|
extensions: []
|
63
96
|
extra_rdoc_files: []
|
64
97
|
files:
|
98
|
+
- ".github/workflows/ci.yml"
|
65
99
|
- ".gitignore"
|
66
100
|
- Dockerfile.jruby
|
67
|
-
- Dockerfile.mri
|
101
|
+
- Dockerfile.mri.erb
|
68
102
|
- Gemfile
|
69
103
|
- History.md
|
70
104
|
- LICENSE.txt
|
71
105
|
- README.md
|
72
106
|
- Rakefile
|
73
107
|
- bin/rake-compiler-dock
|
108
|
+
- build/gem_helper.rb
|
74
109
|
- build/mk_i686.rb
|
75
|
-
- build/
|
76
|
-
- build/patches/ruby-2.5.
|
110
|
+
- build/parallel_docker_build.rb
|
111
|
+
- build/patches/ruby-2.5.9/no_sendfile.patch
|
112
|
+
- build/patches/ruby-3.1.0/no_sendfile.patch
|
113
|
+
- build/patches2/rake-compiler-1.1.6/0004-Enable-build-of-static-libruby.patch
|
114
|
+
- build/rcd-env.sh
|
77
115
|
- build/runas
|
78
116
|
- build/sigfw.c
|
79
117
|
- build/strip_wrapper
|
@@ -81,12 +119,29 @@ files:
|
|
81
119
|
- lib/rake_compiler_dock.rb
|
82
120
|
- lib/rake_compiler_dock/colors.rb
|
83
121
|
- lib/rake_compiler_dock/docker_check.rb
|
84
|
-
- lib/rake_compiler_dock/gem_helper.rb
|
85
122
|
- lib/rake_compiler_dock/predefined_user_group.rb
|
86
123
|
- lib/rake_compiler_dock/starter.rb
|
87
124
|
- lib/rake_compiler_dock/version.rb
|
125
|
+
- mingw64-ucrt/Dockerfile
|
126
|
+
- mingw64-ucrt/binutils-mingw-w64-ignore-check-errors.patch
|
127
|
+
- mingw64-ucrt/gcc-mingw-w64-only-c-c++.patch
|
128
|
+
- mingw64-ucrt/mingw-w64-enable-ucrt.patch
|
88
129
|
- rake-compiler-dock.gemspec
|
130
|
+
- test/env/Dockerfile.alpine
|
131
|
+
- test/env/Dockerfile.centos
|
132
|
+
- test/env/Dockerfile.debian
|
133
|
+
- test/rcd_test/Gemfile
|
134
|
+
- test/rcd_test/Rakefile
|
135
|
+
- test/rcd_test/ext/java/RcdTestExtService.java
|
136
|
+
- test/rcd_test/ext/java/RubyRcdTest.java
|
137
|
+
- test/rcd_test/ext/mri/extconf.rb
|
138
|
+
- test/rcd_test/ext/mri/rcd_test_ext.c
|
139
|
+
- test/rcd_test/ext/mri/rcd_test_ext.h
|
140
|
+
- test/rcd_test/lib/rcd_test.rb
|
141
|
+
- test/rcd_test/rcd_test.gemspec
|
142
|
+
- test/rcd_test/test/test_basic.rb
|
89
143
|
- test/test_environment_variables.rb
|
144
|
+
- test/test_parallel_docker_build.rb
|
90
145
|
- test/test_starter.rb
|
91
146
|
homepage: https://github.com/rake-compiler/rake-compiler-dock
|
92
147
|
licenses:
|
@@ -107,11 +162,25 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
107
162
|
- !ruby/object:Gem::Version
|
108
163
|
version: '0'
|
109
164
|
requirements: []
|
110
|
-
rubygems_version: 3.
|
165
|
+
rubygems_version: 3.2.22
|
111
166
|
signing_key:
|
112
167
|
specification_version: 4
|
113
168
|
summary: Easy to use and reliable cross compiler environment for building Windows
|
114
169
|
and Linux binary gems.
|
115
170
|
test_files:
|
171
|
+
- test/env/Dockerfile.alpine
|
172
|
+
- test/env/Dockerfile.centos
|
173
|
+
- test/env/Dockerfile.debian
|
174
|
+
- test/rcd_test/Gemfile
|
175
|
+
- test/rcd_test/Rakefile
|
176
|
+
- test/rcd_test/ext/java/RcdTestExtService.java
|
177
|
+
- test/rcd_test/ext/java/RubyRcdTest.java
|
178
|
+
- test/rcd_test/ext/mri/extconf.rb
|
179
|
+
- test/rcd_test/ext/mri/rcd_test_ext.c
|
180
|
+
- test/rcd_test/ext/mri/rcd_test_ext.h
|
181
|
+
- test/rcd_test/lib/rcd_test.rb
|
182
|
+
- test/rcd_test/rcd_test.gemspec
|
183
|
+
- test/rcd_test/test/test_basic.rb
|
116
184
|
- test/test_environment_variables.rb
|
185
|
+
- test/test_parallel_docker_build.rb
|
117
186
|
- test/test_starter.rb
|
metadata.gz.sig
ADDED
Binary file
|
data/Dockerfile.mri
DELETED
@@ -1,122 +0,0 @@
|
|
1
|
-
FROM ubuntu:16.04
|
2
|
-
|
3
|
-
RUN apt-get -y update && \
|
4
|
-
apt-get install -y curl git-core xz-utils build-essential wget unzip sudo gnupg2 dirmngr
|
5
|
-
|
6
|
-
# Add "rvm" as system group, to avoid conflicts with host GIDs typically starting with 1000
|
7
|
-
RUN groupadd -r rvm && useradd -r -g rvm -G sudo -p "" --create-home rvm && \
|
8
|
-
echo "source /etc/profile.d/rvm.sh" >> /etc/rubybashrc
|
9
|
-
USER rvm
|
10
|
-
|
11
|
-
# install rvm, RVM 1.26.0+ has signed releases, source rvm for usage outside of package scripts
|
12
|
-
RUN gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB && \
|
13
|
-
(curl -L http://get.rvm.io | sudo bash -s stable) && \
|
14
|
-
bash -c " \
|
15
|
-
source /etc/rubybashrc && \
|
16
|
-
rvmsudo rvm cleanup all "
|
17
|
-
|
18
|
-
# Import patch files for ruby and gems
|
19
|
-
COPY build/patches /home/rvm/patches/
|
20
|
-
ENV BASH_ENV /etc/rubybashrc
|
21
|
-
|
22
|
-
# install rubies and fix permissions on
|
23
|
-
RUN bash -c " \
|
24
|
-
export CFLAGS='-s -O3 -fno-fast-math -fPIC' && \
|
25
|
-
for v in 2.5.3 ; do \
|
26
|
-
rvm install \$v --patch \$(echo ~/patches/ruby-\$v/* | tr ' ' ','); \
|
27
|
-
done && \
|
28
|
-
rvm cleanup all && \
|
29
|
-
find /usr/local/rvm -type d -print0 | sudo xargs -0 chmod g+sw "
|
30
|
-
|
31
|
-
# Install rake-compiler and typical gems in all Rubies
|
32
|
-
# do not generate documentation for gems
|
33
|
-
RUN echo "gem: --no-ri --no-rdoc" >> ~/.gemrc && \
|
34
|
-
bash -c " \
|
35
|
-
rvm all do gem install --no-document bundler 'bundler:~>1.16' rake-compiler hoe mini_portile rubygems-tasks mini_portile2 && \
|
36
|
-
find /usr/local/rvm -type d -print0 | sudo xargs -0 chmod g+sw "
|
37
|
-
|
38
|
-
# Install rake-compiler's cross rubies in global dir instead of /root
|
39
|
-
RUN sudo mkdir -p /usr/local/rake-compiler && \
|
40
|
-
sudo chown rvm.rvm /usr/local/rake-compiler && \
|
41
|
-
ln -s /usr/local/rake-compiler ~/.rake-compiler
|
42
|
-
|
43
|
-
# Add cross compilers for Windows and Linux
|
44
|
-
USER root
|
45
|
-
RUN apt-get -y update && \
|
46
|
-
apt-get install -y gcc-mingw-w64-x86-64 gcc-mingw-w64-i686 g++-mingw-w64-x86-64 g++-mingw-w64-i686 \
|
47
|
-
gcc-multilib moreutils
|
48
|
-
|
49
|
-
# Create dev tools i686-linux-gnu-*
|
50
|
-
COPY build/mk_i686.rb /root/
|
51
|
-
RUN bash -c " \
|
52
|
-
rvm alias create default 2.5.3 && \
|
53
|
-
rvm use default && \
|
54
|
-
ruby /root/mk_i686.rb "
|
55
|
-
|
56
|
-
USER rvm
|
57
|
-
|
58
|
-
# Patch rake-compiler to build and install static libraries for Linux rubies
|
59
|
-
RUN cd /usr/local/rvm/gems/ruby-2.5.3/gems/rake-compiler-1.0.7 && \
|
60
|
-
( git apply /home/rvm/patches/rake-compiler-1.0.7/*.diff || true )
|
61
|
-
|
62
|
-
ENV XRUBIES 2.6.0 2.5.0 2.4.0 2.3.0 2.2.2
|
63
|
-
|
64
|
-
# First do downloads sequentially since they can not run in parallel
|
65
|
-
# Then build all xruby versions in parallel
|
66
|
-
# Then cleanup all build artifacts
|
67
|
-
RUN for rv in $XRUBIES; do \
|
68
|
-
bash -c "rake-compiler /home/rvm/.rake-compiler/sources/ruby-$rv/Makefile.in VERSION=$rv HOST=x86_64-linux-gnu"; \
|
69
|
-
done; \
|
70
|
-
for rv in $XRUBIES; do \
|
71
|
-
for host in i686-linux-gnu x86_64-linux-gnu i686-w64-mingw32 x86_64-w64-mingw32; do \
|
72
|
-
echo -n "'rake-compiler cross-ruby VERSION=$rv HOST=$host' " >> ~/xbuild_rubies; \
|
73
|
-
done; \
|
74
|
-
done && \
|
75
|
-
cat ~/xbuild_rubies; \
|
76
|
-
bash -c " \
|
77
|
-
export CFLAGS='-s -O1 -fno-omit-frame-pointer -fno-fast-math' && \
|
78
|
-
parallel -- $( cat ~/xbuild_rubies ) && \
|
79
|
-
rm -rf ~/.rake-compiler/builds ~/.rake-compiler/sources && \
|
80
|
-
find /usr/local/rvm -type d -print0 | sudo xargs -0 chmod g+sw "
|
81
|
-
|
82
|
-
# Avoid linking against libruby shared object.
|
83
|
-
# See also https://github.com/rake-compiler/rake-compiler-dock/issues/13
|
84
|
-
RUN find /usr/local/rake-compiler/ruby/*linux*/ -name libruby.so | xargs rm
|
85
|
-
RUN find /usr/local/rake-compiler/ruby/*linux*/ -name libruby-static.a | while read f ; do cp $f `echo $f | sed s/-static//` ; done
|
86
|
-
RUN find /usr/local/rake-compiler/ruby/*linux*/ -name libruby.a | while read f ; do ar t $f | xargs ar d $f ; done
|
87
|
-
RUN find /usr/local/rake-compiler/ruby/*linux*/ -name mkmf.rb | while read f ; do sed -i ':a;N;$!ba;s/TRY_LINK = [^\n]*\n[^\n]*\n[^\n]*LOCAL_LIBS)/& -lruby-static/' $f ; done
|
88
|
-
|
89
|
-
# RubyInstaller doesn't install libgcc -> link it static.
|
90
|
-
RUN find /usr/local/rake-compiler/ruby/*mingw*/ -name rbconfig.rb | while read f ; do sed -i 's/."LDFLAGS". = "/&-static-libgcc /' $f ; done
|
91
|
-
|
92
|
-
USER root
|
93
|
-
|
94
|
-
# Add more libraries and tools to support cross build
|
95
|
-
RUN dpkg --add-architecture i386 && \
|
96
|
-
apt-get -y update && \
|
97
|
-
apt-get install -y libc6-dev:i386 libudev-dev libudev-dev:i386 cmake
|
98
|
-
|
99
|
-
# Fix paths in rake-compiler/config.yml and add rvm and mingw-tools to the global bashrc
|
100
|
-
RUN sed -i -- "s:/root/.rake-compiler:/usr/local/rake-compiler:g" /usr/local/rake-compiler/config.yml && \
|
101
|
-
echo "source /etc/profile.d/rvm.sh" >> /etc/bash.bashrc
|
102
|
-
|
103
|
-
# # Install wrappers for strip commands as a workaround for "Protocol error" in boot2docker.
|
104
|
-
COPY build/strip_wrapper /root/
|
105
|
-
RUN mv /usr/bin/i686-w64-mingw32-strip /usr/bin/i686-w64-mingw32-strip.bin && \
|
106
|
-
mv /usr/bin/x86_64-w64-mingw32-strip /usr/bin/x86_64-w64-mingw32-strip.bin && \
|
107
|
-
ln /root/strip_wrapper /usr/bin/i686-w64-mingw32-strip && \
|
108
|
-
ln /root/strip_wrapper /usr/bin/x86_64-w64-mingw32-strip
|
109
|
-
|
110
|
-
# Install SIGINT forwarder
|
111
|
-
COPY build/sigfw.c /root/
|
112
|
-
RUN gcc $HOME/sigfw.c -o /usr/local/bin/sigfw
|
113
|
-
|
114
|
-
# Install user mapper
|
115
|
-
COPY build/runas /usr/local/bin/
|
116
|
-
|
117
|
-
# Install sudoers configuration
|
118
|
-
COPY build/sudoers /etc/sudoers.d/rake-compiler-dock
|
119
|
-
|
120
|
-
ENV RUBY_CC_VERSION 2.6.0:2.5.0:2.4.0:2.3.0:2.2.2
|
121
|
-
|
122
|
-
CMD bash
|
@@ -1,13 +0,0 @@
|
|
1
|
-
diff --git a/tasks/bin/cross-ruby.rake b/tasks/bin/cross-ruby.rake
|
2
|
-
index 6230799..3a69f13 100644
|
3
|
-
--- a/tasks/bin/cross-ruby.rake
|
4
|
-
+++ b/tasks/bin/cross-ruby.rake
|
5
|
-
@@ -134,6 +134,8 @@ file "#{USER_HOME}/builds/#{MINGW_HOST}/#{RUBY_CC_VERSION}/Makefile" => ["#{USER
|
6
|
-
"--target=#{MINGW_TARGET}",
|
7
|
-
"--build=#{RUBY_BUILD}",
|
8
|
-
'--enable-shared',
|
9
|
-
+ '--enable-static',
|
10
|
-
+ '--enable-install-static-library',
|
11
|
-
'--disable-install-doc',
|
12
|
-
'--with-ext='
|
13
|
-
]
|