rake-compiler-dock 0.5.3 → 0.6.0
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/Dockerfile +61 -52
- data/History.md +13 -0
- data/README.md +27 -7
- data/Rakefile +1 -0
- data/build/mk_i686.rb +16 -0
- data/build/patches/{rake-compiler-0.9.5/without-exts.diff → rake-compiler-1.0.3/enable-static.diff} +6 -7
- data/build/patches/{ruby-2.3.0 → ruby-2.4.0}/no_sendfile.patch +0 -0
- data/build/runas +2 -2
- data/build/sigfw.c +2 -0
- data/lib/rake_compiler_dock/docker_check.rb +2 -1
- data/lib/rake_compiler_dock/gem_helper.rb +69 -0
- data/lib/rake_compiler_dock/predefined_user_group.rb +2 -2
- data/lib/rake_compiler_dock/starter.rb +11 -6
- data/lib/rake_compiler_dock/version.rb +2 -2
- data/test/test_environment_variables.rb +4 -0
- metadata +6 -9
- metadata.gz.sig +0 -0
- data/build/patches/rake-compiler-0.9.5/compat-with-bundler.diff +0 -105
- data/build/patches/ruby-1.8.7-p374/nop.patch +0 -2
- data/build/patches/ruby-1.9.3/no_sendfile.patch +0 -13
- data/build/patches/ruby-1.9.3/nop.patch +0 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2e0d52f58f0768b99cd33787878fc5c1e5e9ca7a
|
4
|
+
data.tar.gz: f4d6c657190b2c278c3426e42ce240ae199a98f6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 281afedf0ce93786df7f0a5c7727d5cc4ca2cdb467449c246efe671f7389019e5f7205acc13bfdcf4352eca35332c20a2722d9fd8b5101ad408be17da45f00c1
|
7
|
+
data.tar.gz: 40836a3193f4fd98126204b9022ed8e247591ba7044189ca1ff13a03cf328f704a2418f5c1e0450adcb42f0dbd33f4978e49442425502a4fddb4ca4f90d2729b
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/Dockerfile
CHANGED
@@ -1,17 +1,7 @@
|
|
1
|
-
FROM ubuntu:
|
1
|
+
FROM ubuntu:16.10
|
2
2
|
|
3
3
|
RUN apt-get -y update && \
|
4
|
-
apt-get install -y curl git-core
|
5
|
-
|
6
|
-
RUN mkdir -p /opt/mingw && \
|
7
|
-
curl -SL http://downloads.sourceforge.net/mingw-w64/i686-w64-mingw32-gcc-4.7.2-release-linux64_rubenvb.tar.xz | \
|
8
|
-
tar -xJC /opt/mingw && \
|
9
|
-
echo "export PATH=\$PATH:/opt/mingw/mingw32/bin" >> /etc/rubybashrc
|
10
|
-
|
11
|
-
RUN mkdir -p /opt/mingw && \
|
12
|
-
curl -SL http://downloads.sourceforge.net/mingw-w64/x86_64-w64-mingw32-gcc-4.7.2-release-linux64_rubenvb.tar.xz | \
|
13
|
-
tar -xJC /opt/mingw && \
|
14
|
-
echo "export PATH=\$PATH:/opt/mingw/mingw64/bin" >> /etc/rubybashrc
|
4
|
+
apt-get install -y curl git-core xz-utils build-essential wget unzip sudo gpg dirmngr
|
15
5
|
|
16
6
|
# Add "rvm" as system group, to avoid conflicts with host GIDs typically starting with 1000
|
17
7
|
RUN groupadd -r rvm && useradd -r -g rvm -G sudo -p "" --create-home rvm && \
|
@@ -32,7 +22,7 @@ ENV BASH_ENV /etc/rubybashrc
|
|
32
22
|
# install rubies and fix permissions on
|
33
23
|
RUN bash -c " \
|
34
24
|
export CFLAGS='-s -O3 -fno-fast-math -fPIC' && \
|
35
|
-
for v in 2.
|
25
|
+
for v in 2.4.0 ; do \
|
36
26
|
rvm install \$v --patch \$(echo ~/patches/ruby-\$v/* | tr ' ' ','); \
|
37
27
|
done && \
|
38
28
|
rvm cleanup all && \
|
@@ -42,8 +32,7 @@ RUN bash -c " \
|
|
42
32
|
# do not generate documentation for gems
|
43
33
|
RUN echo "gem: --no-ri --no-rdoc" >> ~/.gemrc && \
|
44
34
|
bash -c " \
|
45
|
-
rvm all do gem install --no-document bundler rake-compiler hoe mini_portile rubygems-tasks && \
|
46
|
-
rvm 1.9.3,2.3.0 do gem install --no-document mini_portile2 && \
|
35
|
+
rvm all do gem install --no-document bundler rake-compiler hoe mini_portile rubygems-tasks mini_portile2 && \
|
47
36
|
find /usr/local/rvm -type d -print0 | sudo xargs -0 chmod g+sw "
|
48
37
|
|
49
38
|
# Install rake-compiler's cross rubies in global dir instead of /root
|
@@ -51,58 +40,78 @@ RUN sudo mkdir -p /usr/local/rake-compiler && \
|
|
51
40
|
sudo chown rvm.rvm /usr/local/rake-compiler && \
|
52
41
|
ln -s /usr/local/rake-compiler ~/.rake-compiler
|
53
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
|
+
USER rvm
|
49
|
+
|
50
|
+
# Create dev tools i686-linux-gnu-*
|
51
|
+
COPY build/mk_i686.rb /root/
|
52
|
+
RUN bash -c "rvm use 2.4.0 --default && rvmsudo ruby /root/mk_i686.rb"
|
53
|
+
|
54
54
|
# Patch rake-compiler to avoid build of ruby extensions
|
55
|
-
RUN cd /usr/local/rvm/gems/ruby-
|
56
|
-
cd /usr/local/rvm/gems/ruby-1.9.3-p551/gems/rake-compiler-0.9.5 && git apply /home/rvm/patches/rake-compiler-0.9.5/*.diff ; \
|
57
|
-
cd /usr/local/rvm/gems/ruby-2.3.0/gems/rake-compiler-0.9.5 && git apply /home/rvm/patches/rake-compiler-0.9.5/*.diff ; \
|
55
|
+
RUN cd /usr/local/rvm/gems/ruby-2.4.0/gems/rake-compiler-1.0.3 && git apply /home/rvm/patches/rake-compiler-1.0.3/*.diff ;\
|
58
56
|
true
|
59
57
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
58
|
+
# Build cross ruby versions
|
59
|
+
RUN bash -c " \
|
60
|
+
export CFLAGS='-s -O1 -fno-omit-frame-pointer -fno-fast-math' && \
|
61
|
+
parallel -- \
|
62
|
+
'rake-compiler cross-ruby VERSION=2.4.0 HOST=i686-linux-gnu' \
|
63
|
+
'rake-compiler cross-ruby VERSION=2.3.0 HOST=i686-linux-gnu' \
|
64
|
+
'rake-compiler cross-ruby VERSION=2.2.2 HOST=i686-linux-gnu' \
|
65
|
+
'rake-compiler cross-ruby VERSION=2.1.6 HOST=i686-linux-gnu' \
|
66
|
+
'rake-compiler cross-ruby VERSION=2.0.0-p645 HOST=i686-linux-gnu' \
|
67
|
+
'rake-compiler cross-ruby VERSION=2.4.0 HOST=x86_64-linux-gnu' \
|
68
|
+
'rake-compiler cross-ruby VERSION=2.3.0 HOST=x86_64-linux-gnu' \
|
69
|
+
'rake-compiler cross-ruby VERSION=2.2.2 HOST=x86_64-linux-gnu' \
|
70
|
+
'rake-compiler cross-ruby VERSION=2.1.6 HOST=x86_64-linux-gnu' \
|
71
|
+
'rake-compiler cross-ruby VERSION=2.0.0-p645 HOST=x86_64-linux-gnu' \
|
72
|
+
'rake-compiler cross-ruby VERSION=2.4.0 HOST=i686-w64-mingw32' \
|
73
|
+
'rake-compiler cross-ruby VERSION=2.3.0 HOST=i686-w64-mingw32' \
|
74
|
+
'rake-compiler cross-ruby VERSION=2.2.2 HOST=i686-w64-mingw32' \
|
75
|
+
'rake-compiler cross-ruby VERSION=2.1.6 HOST=i686-w64-mingw32' \
|
76
|
+
'rake-compiler cross-ruby VERSION=2.0.0-p645 HOST=i686-w64-mingw32' \
|
77
|
+
'rake-compiler cross-ruby VERSION=2.4.0 HOST=x86_64-w64-mingw32' \
|
78
|
+
'rake-compiler cross-ruby VERSION=2.3.0 HOST=x86_64-w64-mingw32' \
|
79
|
+
'rake-compiler cross-ruby VERSION=2.2.2 HOST=x86_64-w64-mingw32' \
|
80
|
+
'rake-compiler cross-ruby VERSION=2.1.6 HOST=x86_64-w64-mingw32' \
|
81
|
+
'rake-compiler cross-ruby VERSION=2.0.0-p645 HOST=x86_64-w64-mingw32' ; \
|
70
82
|
rm -rf ~/.rake-compiler/builds ~/.rake-compiler/sources && \
|
71
83
|
find /usr/local/rvm -type d -print0 | sudo xargs -0 chmod g+sw "
|
72
84
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
85
|
+
# Avoid linking against libruby shared object.
|
86
|
+
# See also https://github.com/rake-compiler/rake-compiler-dock/issues/13
|
87
|
+
RUN find /usr/local/rake-compiler/ruby/*linux*/ -name libruby.so | xargs rm
|
88
|
+
RUN find /usr/local/rake-compiler/ruby/*linux*/ -name libruby-static.a | while read f ; do cp $f `echo $f | sed s/-static//` ; done
|
89
|
+
RUN find /usr/local/rake-compiler/ruby/*linux*/ -name libruby.a | while read f ; do ar t $f | xargs ar d $f ; done
|
90
|
+
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
|
77
91
|
|
78
|
-
#
|
79
|
-
|
80
|
-
RUN bash -c "rvm use 1.8.7-p374 && \
|
81
|
-
export CFLAGS='-s -O1 -fno-omit-frame-pointer -fno-fast-math' && \
|
82
|
-
rake-compiler cross-ruby VERSION=1.8.7-p374 HOST=i586-mingw32msvc && \
|
83
|
-
rm -rf ~/.rake-compiler/builds ~/.rake-compiler/sources"
|
92
|
+
# RubyInstaller doesn't install libgcc -> link it static.
|
93
|
+
RUN find /usr/local/rake-compiler/ruby/*mingw*/ -name rbconfig.rb | while read f ; do sed -i 's/."LDFLAGS". = "/&-static-libgcc /' $f ; done
|
84
94
|
|
85
95
|
RUN bash -c " \
|
86
|
-
rvm alias create 2.
|
87
|
-
rvm alias create 1.9 1.9.3 && \
|
88
|
-
rvm alias create 1.8 1.8.7-p374 "
|
96
|
+
rvm alias create 2.4 2.4.0 "
|
89
97
|
|
90
98
|
USER root
|
91
99
|
|
100
|
+
# Add more libraries and tools to support cross build
|
101
|
+
RUN dpkg --add-architecture i386 && \
|
102
|
+
apt-get -y update && \
|
103
|
+
apt-get install -y libc6-dev:i386 libudev-dev libudev-dev:i386 cmake
|
104
|
+
|
92
105
|
# Fix paths in rake-compiler/config.yml and add rvm and mingw-tools to the global bashrc
|
93
106
|
RUN sed -i -- "s:/root/.rake-compiler:/usr/local/rake-compiler:g" /usr/local/rake-compiler/config.yml && \
|
94
|
-
echo "source /etc/profile.d/rvm.sh" >> /etc/bash.bashrc
|
95
|
-
echo "export PATH=\$PATH:/opt/mingw/mingw32/bin" >> /etc/bash.bashrc && \
|
96
|
-
echo "export PATH=\$PATH:/opt/mingw/mingw64/bin" >> /etc/bash.bashrc
|
107
|
+
echo "source /etc/profile.d/rvm.sh" >> /etc/bash.bashrc
|
97
108
|
|
98
|
-
# Install wrappers for strip commands as a workaround for "Protocol error" in boot2docker.
|
109
|
+
# # Install wrappers for strip commands as a workaround for "Protocol error" in boot2docker.
|
99
110
|
COPY build/strip_wrapper /root/
|
100
|
-
RUN mv /
|
101
|
-
mv /
|
102
|
-
|
103
|
-
ln /root/strip_wrapper /
|
104
|
-
ln /root/strip_wrapper /opt/mingw/mingw64/bin/x86_64-w64-mingw32-strip && \
|
105
|
-
ln /root/strip_wrapper /usr/bin/i586-mingw32msvc-strip
|
111
|
+
RUN mv /usr/bin/i686-w64-mingw32-strip /usr/bin/i686-w64-mingw32-strip.bin && \
|
112
|
+
mv /usr/bin/x86_64-w64-mingw32-strip /usr/bin/x86_64-w64-mingw32-strip.bin && \
|
113
|
+
ln /root/strip_wrapper /usr/bin/i686-w64-mingw32-strip && \
|
114
|
+
ln /root/strip_wrapper /usr/bin/x86_64-w64-mingw32-strip
|
106
115
|
|
107
116
|
# Install SIGINT forwarder
|
108
117
|
COPY build/sigfw.c /root/
|
@@ -114,6 +123,6 @@ COPY build/runas /usr/local/bin/
|
|
114
123
|
# Install sudoers configuration
|
115
124
|
COPY build/sudoers /etc/sudoers.d/rake-compiler-dock
|
116
125
|
|
117
|
-
ENV RUBY_CC_VERSION 2.3.0:2.2.2:2.1.6:2.0.0
|
126
|
+
ENV RUBY_CC_VERSION 2.4.0:2.3.0:2.2.2:2.1.6:2.0.0
|
118
127
|
|
119
128
|
CMD bash
|
data/History.md
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
0.6.0 / YYYY-MM-DD
|
2
|
+
------------------
|
3
|
+
* Remove Windows cross build environments for Ruby < 2.0.
|
4
|
+
* Add Windows cross build environment for Ruby-2.4.
|
5
|
+
* Add Linux cross build environment for Ruby-2.0 to 2.4.
|
6
|
+
* Update Windows gcc to 6.2.
|
7
|
+
* Update docker base image to Ubuntu-16.10.
|
8
|
+
* Update native rvm based ruby to 2.4.0.
|
9
|
+
* Respect MACHINE_DRIVER environment variable for docker-machine. #15
|
10
|
+
* Add RCD_WORKDIR and RCD_MOUNTDIR environment variables. #11
|
11
|
+
* Ignore non-unique UID or GID. #10
|
12
|
+
|
13
|
+
|
1
14
|
0.5.3 / 2016-09-02
|
2
15
|
------------------
|
3
16
|
* Fix 'docker-machine env' when running in Windows cmd shell
|
data/README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# rake-compiler-dock
|
2
2
|
|
3
|
-
**Easy to use and reliable cross compiler environment for building Windows binary gems.**
|
3
|
+
**Easy to use and reliable cross compiler environment for building Windows and Linux binary gems.**
|
4
4
|
|
5
|
-
It provides cross compilers and Ruby environments for
|
5
|
+
It provides cross compilers and Ruby environments for 2.0 and newer versions of the [RubyInstaller](http://rubyinstaller.org/) and Linux runtime environments.
|
6
6
|
They are prepared for use with [rake-compiler](https://github.com/rake-compiler/rake-compiler).
|
7
7
|
It is used by [many gems with C-extentions](https://github.com/rake-compiler/rake-compiler-dock/wiki/Projects-using-rake-compiler-dock).
|
8
8
|
|
@@ -30,18 +30,32 @@ Install rake-compiler-dock as a gem. The docker image is downloaded later on dem
|
|
30
30
|
|
31
31
|
## Usage
|
32
32
|
|
33
|
+
Rake-compiler-dock provides the necessary tools to build Ruby extensions for Windows and Linux written in C and C++.
|
34
|
+
It is intended to be used in conjunction with [rake-compiler's](https://github.com/rake-compiler/rake-compiler) cross build capability.
|
35
|
+
Your Rakefile should enable cross compilation like so:
|
36
|
+
|
37
|
+
Rake::ExtensionTask.new('my_extension', my_gem_spec) do |ext|
|
38
|
+
ext.cross_compile = true
|
39
|
+
ext.cross_platform = %w[x86-mingw32 x64-mingw32 x86-linux x86_64-linux]
|
40
|
+
end
|
41
|
+
|
42
|
+
It may also be used to build ffi based binary gems like [libusb](https://github.com/larskanis/libusb), but currently doesn't provide any additional build helpers for this use case, beyond docker invocation and cross compilers.
|
43
|
+
|
44
|
+
### Interactive Usage
|
45
|
+
|
33
46
|
Rake-compiler-dock offers the shell command `rake-compiler-dock` and a [ruby API](http://www.rubydoc.info/gems/rake-compiler-dock/RakeCompilerDock) for issuing commands within the docker image, described below.
|
34
47
|
|
35
48
|
`rake-compiler-dock` without arguments starts an interactive shell session.
|
36
49
|
This is best suited to try out and debug a build.
|
37
50
|
It mounts the current working directory into the docker environment.
|
38
51
|
All changes below the current working directory are shared with the host.
|
39
|
-
But note, that all other changes to the file system of the container are dropped at the end of the session - the docker image is static for a given version.
|
52
|
+
But note, that all other changes to the file system of the container are dropped at the end of the session - the docker image is static for a given version.
|
53
|
+
`rake-compiler-dock` can also take the build command(s) from STDIN or as command arguments.
|
40
54
|
|
41
55
|
All commands are executed with the same user and group of the host.
|
42
56
|
This is done by copying user account data into the container and sudo to it.
|
43
57
|
|
44
|
-
To build x86
|
58
|
+
To build x86 and x64 Windows and Linux binary gems interactively, it can be called like this:
|
45
59
|
|
46
60
|
user@host:$ cd your-gem-dir/
|
47
61
|
user@host:$ rake-compiler-dock # this enters a container with an interactive shell
|
@@ -50,6 +64,7 @@ To build x86- and x64 Windows (RubyInstaller) binary gems interactively, it can
|
|
50
64
|
user@5b53794ada92:$ exit
|
51
65
|
user@host:$ ls pkg/*.gem
|
52
66
|
your-gem-1.0.0.gem your-gem-1.0.0-x64-mingw32.gem your-gem-1.0.0-x86-mingw32.gem
|
67
|
+
your-gem-1.0.0-x86_64-linux.gem your-gem-1.0.0-x86-linux.gem
|
53
68
|
|
54
69
|
Or non-interactive:
|
55
70
|
|
@@ -71,14 +86,15 @@ The current default is 2.3.
|
|
71
86
|
To make the build process reproduceable for other parties, it is recommended to add rake-compiler-dock to your Rakefile.
|
72
87
|
This can be done like this:
|
73
88
|
|
74
|
-
task 'gem:
|
89
|
+
task 'gem:native' do
|
75
90
|
require 'rake_compiler_dock'
|
76
|
-
|
91
|
+
sh "bundle package" # Avoid repeated downloads of gems by using gem files from the host.
|
92
|
+
RakeCompilerDock.sh "bundle --local && rake cross native gem"
|
77
93
|
end
|
78
94
|
|
79
95
|
Rake-compiler-dock uses [semantic versioning](http://semver.org/), so you should add it into your Gemfile, to make sure, that future changes will not break your build.
|
80
96
|
|
81
|
-
gem 'rake-compiler-dock', '~> 0.
|
97
|
+
gem 'rake-compiler-dock', '~> 0.6.0'
|
82
98
|
|
83
99
|
See [the wiki](https://github.com/rake-compiler/rake-compiler-dock/wiki/Projects-using-rake-compiler-dock) for projects which make use of rake-compiler-dock.
|
84
100
|
|
@@ -103,6 +119,10 @@ The following variables are provided to the running docker container:
|
|
103
119
|
* `RCD_HOST_RUBY_VERSION` - The `RUBY_VERSION` of the host ruby.
|
104
120
|
* `RUBY_CC_VERSION` - The target ruby versions for rake-compiler.
|
105
121
|
The default is defined in the [Dockerfile](https://github.com/rake-compiler/rake-compiler-dock/blob/master/Dockerfile), but can be changed as a parameter to rake.
|
122
|
+
* `RCD_MOUNTDIR` - The directory which is mounted into the docker container.
|
123
|
+
Defaults to pwd.
|
124
|
+
* `RCD_WORKDIR` - The working directory within the docker container.
|
125
|
+
Defaults to pwd.
|
106
126
|
|
107
127
|
Other environment variables can be set or passed through to the container like this:
|
108
128
|
|
data/Rakefile
CHANGED
data/build/mk_i686.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require "fileutils"
|
2
|
+
|
3
|
+
Dir["/usr/bin/x86_64-linux-gnu-*"].each do |file|
|
4
|
+
case File.basename(file)
|
5
|
+
when /^x86_64-linux-gnu-(gcc|g\+\+|ld)$/
|
6
|
+
e = $1
|
7
|
+
puts "create /usr/bin/i686-linux-gnu-#{e}"
|
8
|
+
File.write("/usr/bin/i686-linux-gnu-#{e}", <<-EOT)
|
9
|
+
#!/bin/sh
|
10
|
+
x86_64-linux-gnu-#{e} -m32 "$@"
|
11
|
+
EOT
|
12
|
+
File.chmod(0755, "/usr/bin/i686-linux-gnu-#{e}")
|
13
|
+
when /^x86_64-linux-gnu-([a-z+\.]+)$/
|
14
|
+
FileUtils.ln_s(file, "/usr/bin/i686-linux-gnu-#{$1}", verbose: true)
|
15
|
+
end
|
16
|
+
end
|
data/build/patches/{rake-compiler-0.9.5/without-exts.diff → rake-compiler-1.0.3/enable-static.diff}
RENAMED
@@ -1,14 +1,13 @@
|
|
1
1
|
diff --git a/tasks/bin/cross-ruby.rake b/tasks/bin/cross-ruby.rake
|
2
|
-
index
|
2
|
+
index 6230799..3a69f13 100644
|
3
3
|
--- a/tasks/bin/cross-ruby.rake
|
4
4
|
+++ b/tasks/bin/cross-ruby.rake
|
5
|
-
@@ -
|
5
|
+
@@ -134,6 +134,8 @@ file "#{USER_HOME}/builds/#{MINGW_HOST}/#{RUBY_CC_VERSION}/Makefile" => ["#{USER
|
6
|
+
"--target=#{MINGW_TARGET}",
|
6
7
|
"--build=#{RUBY_BUILD}",
|
7
8
|
'--enable-shared',
|
9
|
+
+ '--enable-static',
|
10
|
+
+ '--enable-install-static-library',
|
8
11
|
'--disable-install-doc',
|
9
|
-
|
10
|
-
- '--without-tcl'
|
11
|
-
+ '--with-ext='
|
12
|
+
'--with-ext='
|
12
13
|
]
|
13
|
-
|
14
|
-
# Force Winsock2 for Ruby 1.8, 1.9 defaults to it
|
File without changes
|
data/build/runas
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
#!/bin/bash
|
2
2
|
|
3
|
-
groupadd -g "$GID" "$GROUP"
|
3
|
+
groupadd -o -g "$GID" "$GROUP"
|
4
4
|
mkdir -p /tmp/home
|
5
|
-
useradd -g "$GID" -u "$UID" -G rvm,sudo -p "" -b /tmp/home -m "$USER"
|
5
|
+
useradd -o -g "$GID" -u "$UID" -G rvm,sudo -p "" -b /tmp/home -m "$USER"
|
6
6
|
|
7
7
|
HOME=$(bash <<< "echo ~$USER")
|
8
8
|
ln -s /usr/local/rake-compiler "$HOME"/.rake-compiler
|
data/build/sigfw.c
CHANGED
@@ -83,7 +83,8 @@ module RakeCompilerDock
|
|
83
83
|
|
84
84
|
def doma_create
|
85
85
|
options = add_env_options([], %w[ftp_proxy http_proxy https_proxy])
|
86
|
-
|
86
|
+
driver = ENV['MACHINE_DRIVER'] || 'virtualbox'
|
87
|
+
@doma_create_text, @doma_create_status = run("docker-machine create --driver #{driver.inspect} #{options.join(" ")} #{machine_name}", cmd: :visible, output: :visible)
|
87
88
|
end
|
88
89
|
|
89
90
|
def doma_create_ok?
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# This file is part of Libusb for Ruby.
|
2
|
+
#
|
3
|
+
# Libusb for Ruby is free software: you can redistribute it and/or modify
|
4
|
+
# it under the terms of the GNU Lesser General Public License as published by
|
5
|
+
# the Free Software Foundation, either version 3 of the License, or
|
6
|
+
# (at your option) any later version.
|
7
|
+
#
|
8
|
+
# Libusb for Ruby is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
11
|
+
# GNU Lesser General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU Lesser General Public License
|
14
|
+
# along with Libusb for Ruby. If not, see <http://www.gnu.org/licenses/>.
|
15
|
+
|
16
|
+
require "bundler/gem_helper"
|
17
|
+
|
18
|
+
module RakeCompilerDock
|
19
|
+
class GemHelper < Bundler::GemHelper
|
20
|
+
def install
|
21
|
+
super
|
22
|
+
|
23
|
+
task "release:guard_clean" => ["release:update_history"]
|
24
|
+
|
25
|
+
task "release:update_history" do
|
26
|
+
update_history
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def hfile
|
31
|
+
"History.md"
|
32
|
+
end
|
33
|
+
|
34
|
+
def headline
|
35
|
+
'([^\w]*)(\d+\.\d+\.\d+)([^\w]+)([2Y][0Y][0-9Y][0-9Y]-[0-1M][0-9M]-[0-3D][0-9D])([^\w]*|$)'
|
36
|
+
end
|
37
|
+
|
38
|
+
def reldate
|
39
|
+
Time.now.strftime("%Y-%m-%d")
|
40
|
+
end
|
41
|
+
|
42
|
+
def update_history
|
43
|
+
hin = File.read(hfile)
|
44
|
+
hout = hin.sub(/#{headline}/) do
|
45
|
+
raise "#{hfile} isn't up-to-date for version #{version}" unless $2==version.to_s
|
46
|
+
$1 + $2 + $3 + reldate + $5
|
47
|
+
end
|
48
|
+
if hout != hin
|
49
|
+
Bundler.ui.confirm "Updating #{hfile} for release."
|
50
|
+
File.write(hfile, hout)
|
51
|
+
Rake::FileUtilsExt.sh "git", "commit", hfile, "-m", "Update release date in #{hfile}"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def tag_version
|
56
|
+
Bundler.ui.confirm "Tag release with annotation:"
|
57
|
+
m = File.read(hfile).match(/(?<annotation>#{headline}.*?)#{headline}/m) || raise("Unable to find release notes in #{hfile}")
|
58
|
+
Bundler.ui.info(m[:annotation].gsub(/^/, " "))
|
59
|
+
IO.popen(["git", "tag", "--file=-", version_tag], "w") do |fd|
|
60
|
+
fd.write m[:annotation]
|
61
|
+
end
|
62
|
+
yield if block_given?
|
63
|
+
rescue
|
64
|
+
Bundler.ui.error "Untagging #{version_tag} due to error."
|
65
|
+
sh_with_code "git tag -d #{version_tag}"
|
66
|
+
raise
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# DO NOT EDIT - This file is generated per 'rake update_lists'
|
2
2
|
module RakeCompilerDock
|
3
|
-
PredefinedUsers = ["root", "daemon", "bin", "sys", "sync", "games", "man", "lp", "mail", "news", "uucp", "proxy", "www-data", "backup", "list", "irc", "gnats", "nobody", "
|
4
|
-
PredefinedGroups = ["root", "daemon", "bin", "sys", "adm", "tty", "disk", "lp", "mail", "news", "uucp", "man", "proxy", "kmem", "dialout", "fax", "voice", "cdrom", "floppy", "tape", "sudo", "audio", "dip", "www-data", "backup", "operator", "list", "irc", "src", "gnats", "shadow", "utmp", "video", "sasl", "plugdev", "staff", "games", "users", "nogroup", "
|
3
|
+
PredefinedUsers = ["root", "daemon", "bin", "sys", "sync", "games", "man", "lp", "mail", "news", "uucp", "proxy", "www-data", "backup", "list", "irc", "gnats", "nobody", "_apt", "rvm"]
|
4
|
+
PredefinedGroups = ["root", "daemon", "bin", "sys", "adm", "tty", "disk", "lp", "mail", "news", "uucp", "man", "proxy", "kmem", "dialout", "fax", "voice", "cdrom", "floppy", "tape", "sudo", "audio", "dip", "www-data", "backup", "operator", "list", "irc", "src", "gnats", "shadow", "utmp", "video", "sasl", "plugdev", "staff", "games", "users", "nogroup", "netdev", "ssh", "rvm"]
|
5
5
|
end
|
@@ -23,11 +23,12 @@ module RakeCompilerDock
|
|
23
23
|
options = (Hash === args.last) ? args.pop : {}
|
24
24
|
runargs = args.dup
|
25
25
|
|
26
|
-
|
26
|
+
mountdir = options.fetch(:mountdir){ ENV['RCD_MOUNTDIR'] || Dir.pwd }
|
27
|
+
workdir = options.fetch(:workdir){ ENV['RCD_WORKDIR'] || Dir.pwd }
|
27
28
|
case RUBY_PLATFORM
|
28
29
|
when /mingw|mswin/
|
29
|
-
|
30
|
-
|
30
|
+
mountdir = sanitize_windows_path(mountdir)
|
31
|
+
workdir = sanitize_windows_path(workdir)
|
31
32
|
# Virtualbox shared folders don't care about file permissions, so we use generic ids.
|
32
33
|
uid = 1000
|
33
34
|
gid = 1000
|
@@ -43,7 +44,7 @@ module RakeCompilerDock
|
|
43
44
|
user = options.fetch(:username){ current_user }
|
44
45
|
group = options.fetch(:groupname){ current_group }
|
45
46
|
|
46
|
-
check_docker(
|
47
|
+
check_docker(mountdir) if options.fetch(:check_docker){ true }
|
47
48
|
runargs.unshift("sigfw") if options.fetch(:sigfw){ true }
|
48
49
|
runargs.unshift("runas") if options.fetch(:runas){ true }
|
49
50
|
docker_opts = options.fetch(:options) do
|
@@ -53,7 +54,7 @@ module RakeCompilerDock
|
|
53
54
|
end
|
54
55
|
|
55
56
|
cmd = ["docker", "run",
|
56
|
-
"-v", "#{
|
57
|
+
"-v", "#{mountdir}:#{make_valid_path(mountdir)}",
|
57
58
|
"-e", "UID=#{uid}",
|
58
59
|
"-e", "GID=#{gid}",
|
59
60
|
"-e", "USER=#{user}",
|
@@ -64,7 +65,7 @@ module RakeCompilerDock
|
|
64
65
|
"-e", "RCD_HOST_RUBY_PLATFORM=#{RUBY_PLATFORM}",
|
65
66
|
"-e", "RCD_HOST_RUBY_VERSION=#{RUBY_VERSION}",
|
66
67
|
"-e", "RCD_IMAGE=#{image_name}",
|
67
|
-
"-w", make_valid_path(
|
68
|
+
"-w", make_valid_path(workdir),
|
68
69
|
*docker_opts,
|
69
70
|
image_name,
|
70
71
|
*runargs]
|
@@ -143,6 +144,10 @@ module RakeCompilerDock
|
|
143
144
|
@@docker_checked[pwd] = check
|
144
145
|
end
|
145
146
|
|
147
|
+
# Change Path from "C:\Path" to "/c/Path" as used by boot2docker
|
148
|
+
def sanitize_windows_path(path)
|
149
|
+
path.gsub(/^([a-z]):/i){ "/#{$1.downcase}" }
|
150
|
+
end
|
146
151
|
end
|
147
152
|
end
|
148
153
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rake-compiler-dock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lars Kanis
|
@@ -29,7 +29,7 @@ cert_chain:
|
|
29
29
|
PizTJCem24R2bzZN5VGvA5tpqgwytgcFq1PZofgFxK2uKPCS+tmsA8wIjjGzFsnR
|
30
30
|
WfgqWGyHn5K4wejsMic/uA==
|
31
31
|
-----END CERTIFICATE-----
|
32
|
-
date: 2016-
|
32
|
+
date: 2016-12-26 00:00:00.000000000 Z
|
33
33
|
dependencies:
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: bundler
|
@@ -91,12 +91,9 @@ files:
|
|
91
91
|
- README.md
|
92
92
|
- Rakefile
|
93
93
|
- bin/rake-compiler-dock
|
94
|
-
- build/
|
95
|
-
- build/patches/rake-compiler-0.
|
96
|
-
- build/patches/ruby-
|
97
|
-
- build/patches/ruby-1.9.3/no_sendfile.patch
|
98
|
-
- build/patches/ruby-1.9.3/nop.patch
|
99
|
-
- build/patches/ruby-2.3.0/no_sendfile.patch
|
94
|
+
- build/mk_i686.rb
|
95
|
+
- build/patches/rake-compiler-1.0.3/enable-static.diff
|
96
|
+
- build/patches/ruby-2.4.0/no_sendfile.patch
|
100
97
|
- build/runas
|
101
98
|
- build/sigfw.c
|
102
99
|
- build/strip_wrapper
|
@@ -104,6 +101,7 @@ files:
|
|
104
101
|
- lib/rake_compiler_dock.rb
|
105
102
|
- lib/rake_compiler_dock/colors.rb
|
106
103
|
- lib/rake_compiler_dock/docker_check.rb
|
104
|
+
- lib/rake_compiler_dock/gem_helper.rb
|
107
105
|
- lib/rake_compiler_dock/predefined_user_group.rb
|
108
106
|
- lib/rake_compiler_dock/starter.rb
|
109
107
|
- lib/rake_compiler_dock/version.rb
|
@@ -138,4 +136,3 @@ summary: Easy to use and reliable cross compiler environment for building Window
|
|
138
136
|
test_files:
|
139
137
|
- test/test_environment_variables.rb
|
140
138
|
- test/test_starter.rb
|
141
|
-
has_rdoc:
|
metadata.gz.sig
CHANGED
Binary file
|
@@ -1,105 +0,0 @@
|
|
1
|
-
From 41f834449fc4323b2f995e8715aa5842d9fd9334 Mon Sep 17 00:00:00 2001
|
2
|
-
From: Lars Kanis <lars@greiz-reinsdorf.de>
|
3
|
-
Date: Sat, 30 Jan 2016 08:08:07 +0100
|
4
|
-
Subject: [PATCH] Change the fake mechanism to be compatible with bundler.
|
5
|
-
|
6
|
-
The previous fake mechanism worked by hooking onto the
|
7
|
-
"require 'rbconfig'" call.
|
8
|
-
This is problematic because bundler internally requires rbconfig, but doesn't
|
9
|
-
work corretly in a faked environment.
|
10
|
-
It then fails to load gems that are also part of the standard library, like
|
11
|
-
json and rdoc.
|
12
|
-
This results in issues like https://github.com/rake-compiler/rake-compiler-dock/issues/8
|
13
|
-
|
14
|
-
The fake mechanism is now changed to hook onto the "require 'mkrb'" call,
|
15
|
-
which is typically part of the extconf file, and it is where the faked platform
|
16
|
-
values are actually needed.
|
17
|
-
That way it is loaded after bundler/setup, so that the library paths are
|
18
|
-
set according to the Gemfile.lock, to the native Linux libraries, before
|
19
|
-
the fake environment is active.
|
20
|
-
|
21
|
-
Please note, that the build directory of a given gem needs to be cleared,
|
22
|
-
in order to get updated fake files. So do a "rm tmp pkg -rf".
|
23
|
-
---
|
24
|
-
lib/rake/extensiontask.rb | 35 ++++++++++++++---------------------
|
25
|
-
1 file changed, 14 insertions(+), 21 deletions(-)
|
26
|
-
|
27
|
-
diff --git a/lib/rake/extensiontask.rb b/lib/rake/extensiontask.rb
|
28
|
-
index 030af96..f914919 100644
|
29
|
-
--- a/lib/rake/extensiontask.rb
|
30
|
-
+++ b/lib/rake/extensiontask.rb
|
31
|
-
@@ -169,8 +169,8 @@ Java extension should be preferred.
|
32
|
-
# now add the extconf script
|
33
|
-
cmd << abs_extconf.relative_path_from(abs_tmp_path)
|
34
|
-
|
35
|
-
- # rbconfig.rb will be present if we are cross compiling
|
36
|
-
- if t.prerequisites.include?("#{tmp_path}/rbconfig.rb") then
|
37
|
-
+ # fake.rb will be present if we are cross compiling
|
38
|
-
+ if t.prerequisites.include?("#{tmp_path}/fake.rb") then
|
39
|
-
options.push(*cross_config_options(platf))
|
40
|
-
end
|
41
|
-
|
42
|
-
@@ -365,39 +365,30 @@ Java extension should be preferred.
|
43
|
-
# define compilation tasks for cross platform!
|
44
|
-
define_compile_tasks(for_platform, ruby_ver)
|
45
|
-
|
46
|
-
- # chain fake.rb, rbconfig.rb and mkmf.rb to Makefile generation
|
47
|
-
+ # chain fake.rb and mkmf.rb to Makefile generation
|
48
|
-
file "#{tmp_path}/Makefile" => ["#{tmp_path}/fake.rb",
|
49
|
-
- "#{tmp_path}/rbconfig.rb",
|
50
|
-
"#{tmp_path}/mkmf.rb"]
|
51
|
-
|
52
|
-
- # copy the file from the cross-ruby location
|
53
|
-
- file "#{tmp_path}/rbconfig.rb" => [rbconfig_file] do |t|
|
54
|
-
+ # copy the rbconfig from the cross-ruby location and
|
55
|
-
+ # genearte fake.rb for different ruby versions
|
56
|
-
+ file "#{tmp_path}/fake.rb" => [rbconfig_file] do |t|
|
57
|
-
File.open(t.name, 'w') do |f|
|
58
|
-
- f.write "require 'fake.rb'\n\n"
|
59
|
-
+ f.write fake_rb(for_platform, ruby_ver)
|
60
|
-
f.write File.read(t.prerequisites.first)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
# copy mkmf from cross-ruby location
|
65
|
-
file "#{tmp_path}/mkmf.rb" => [mkmf_file] do |t|
|
66
|
-
- cp t.prerequisites.first, t.name
|
67
|
-
- if ruby_ver < "1.9" && "1.9" <= RUBY_VERSION
|
68
|
-
- File.open(t.name, 'r+t') do |f|
|
69
|
-
- content = f.read
|
70
|
-
+ File.open(t.name, 'w') do |f|
|
71
|
-
+ content = File.read(t.prerequisites.first)
|
72
|
-
+ content.sub!(/^(require ')rbconfig(')$/, '\\1fake\\2')
|
73
|
-
+ if ruby_ver < "1.9" && "1.9" <= RUBY_VERSION
|
74
|
-
content.sub!(/^( break )\*(defaults)$/, '\\1\\2.first')
|
75
|
-
content.sub!(/^( return )\*(defaults)$/, '\\1\\2.first')
|
76
|
-
content.sub!(/^( mfile\.)print( configuration\(srcprefix\))$/, '\\1puts\\2')
|
77
|
-
- f.rewind
|
78
|
-
- f.write content
|
79
|
-
- f.truncate(f.tell)
|
80
|
-
end
|
81
|
-
- end
|
82
|
-
- end
|
83
|
-
-
|
84
|
-
- # genearte fake.rb for different ruby versions
|
85
|
-
- file "#{tmp_path}/fake.rb" do |t|
|
86
|
-
- File.open(t.name, 'w') do |f|
|
87
|
-
- f.write fake_rb(for_platform, ruby_ver)
|
88
|
-
+ f.write content
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
@@ -495,8 +486,10 @@ Java extension should be preferred.
|
93
|
-
# "cannot load such file -- win32/resolv" when it is required later on.
|
94
|
-
# See also: https://github.com/tjschuck/rake-compiler-dev-box/issues/5
|
95
|
-
require 'resolv'
|
96
|
-
+ require 'rbconfig'
|
97
|
-
|
98
|
-
class Object
|
99
|
-
+ remove_const :RbConfig
|
100
|
-
remove_const :RUBY_PLATFORM
|
101
|
-
remove_const :RUBY_VERSION
|
102
|
-
remove_const :RUBY_DESCRIPTION if defined?(RUBY_DESCRIPTION)
|
103
|
-
--
|
104
|
-
2.5.0.windows.1
|
105
|
-
|
@@ -1,13 +0,0 @@
|
|
1
|
-
diff --git a/configure b/configure
|
2
|
-
index 898730c..cfe6253 100755
|
3
|
-
--- a/configure
|
4
|
-
+++ b/configure
|
5
|
-
@@ -14695,7 +14695,7 @@ for ac_func in fmod killpg wait4 waitpid fork spawnv syscall __syscall chroot ge
|
6
|
-
setsid telldir seekdir fchmod cosh sinh tanh log2 round\
|
7
|
-
setuid setgid daemon select_large_fdset setenv unsetenv\
|
8
|
-
mktime timegm gmtime_r clock_gettime gettimeofday poll ppoll\
|
9
|
-
- pread sendfile shutdown sigaltstack dl_iterate_phdr
|
10
|
-
+ pread shutdown sigaltstack dl_iterate_phdr
|
11
|
-
do :
|
12
|
-
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
13
|
-
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
|