Skip to content

Commit c62f5d8

Browse files
committed
Update to rake-compiler-dock-1.0
Version 1.0 switches to per-target docker images. So there is a specific image for x64-mingw32 and one for x86-mingw32. However our current logic mixes the build process of x86 and x64 behind several non-platform specific rake tasks. This fails with rcd-1.0 since each image has only x64 OR x86 tools. The solution in this commit is to separate each task by the platform value and to reference only the needed platform. As an advantage we can now execute docker builds in parallel for x64 and x86 per multitask. Since this conflicts with interactive password prompts, the gem signing key can be entered in advance. rcd-1.0 does stripping of binaries per default, so our manual tasks are needless.
1 parent de57714 commit c62f5d8

File tree

6 files changed

+57
-68
lines changed

6 files changed

+57
-68
lines changed

.gems

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# .gems generated gem export file. Note that any env variable settings will be missing. Append these after using a ';' field separator
2-
rake-compiler -v1.0.6
3-
rake-compiler-dock -v0.7.0
2+
rake-compiler -v1.1.0
3+
rake-compiler-dock -v1.0.0
44
hoe-deveiate -v0.10.0
55
hoe-bundler -v1.3.0
66

Gemfile

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@
55
source "https://rubygems.org/"
66

77

8-
gem "rake-compiler", "~>1.0", :group => [:development, :test]
9-
gem "rake-compiler-dock", "0.7.1", :group => [:development, :test]
8+
gem "hoe-mercurial", "~>1.4", :group => [:development, :test]
109
gem "hoe-deveiate", "~>0.9", :group => [:development, :test]
10+
gem "hoe-highline", "~>0.2", :group => [:development, :test]
11+
gem "rake-compiler", "~>1.0", :group => [:development, :test]
12+
gem "rake-compiler-dock", "~>1.0", :group => [:development, :test]
1113
gem "hoe-bundler", "~>1.0", :group => [:development, :test]
1214
gem "rspec", "~>3.5", :group => [:development, :test]
1315
gem "rdoc", "~>5.1", :group => [:development, :test]
14-
gem "hoe", "~>3.17", :group => [:development, :test]
16+
gem "hoe", "~>3.20", :group => [:development, :test]
1517

1618
# vim: syntax=ruby

Rakefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ $hoespec = Hoe.spec 'pg' do
6161
self.developer 'Lars Kanis', '[email protected]'
6262

6363
self.dependency 'rake-compiler', '~> 1.0', :developer
64-
self.dependency 'rake-compiler-dock', ['~> 0.7.0'], :developer
64+
self.dependency 'rake-compiler-dock', ['~> 1.0'], :developer
6565
self.dependency 'hoe-deveiate', '~> 0.9', :developer
6666
self.dependency 'hoe-bundler', '~> 1.0', :developer
6767
self.dependency 'rspec', '~> 3.5', :developer
@@ -129,7 +129,7 @@ Rake::ExtensionTask.new do |ext|
129129

130130
# Add libpq.dll to windows binary gemspec
131131
ext.cross_compiling do |spec|
132-
spec.files << "lib/libpq.dll"
132+
spec.files << "lib/#{spec.platform}/libpq.dll"
133133
end
134134
end
135135

Rakefile.cross

Lines changed: 27 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -141,9 +141,9 @@ class CrossLibrary < OpenStruct
141141
end
142142

143143
desc "compile static openssl libraries"
144-
task :openssl_libs => [ libssl, libcrypto ]
144+
task "openssl_libs:#{for_platform}" => [ libssl, libcrypto ]
145145

146-
task :compile_static_openssl => openssl_makefile do |t|
146+
task "compile_static_openssl:#{for_platform}" => openssl_makefile do |t|
147147
chdir( static_openssl_builddir ) do
148148
cmd = cmd_prelude.dup
149149
cmd << 'make' << "-j#{NUM_CPUS}" << 'build_libs'
@@ -153,12 +153,12 @@ class CrossLibrary < OpenStruct
153153
end
154154

155155
desc "compile static #{libssl}"
156-
file libssl => :compile_static_openssl do |t|
156+
file libssl => "compile_static_openssl:#{for_platform}" do |t|
157157
rm t.name.gsub(/\.a$/, ".dll.a")
158158
end
159159

160160
desc "compile static #{libcrypto}"
161-
file libcrypto => :compile_static_openssl do |t|
161+
file libcrypto => "compile_static_openssl:#{for_platform}" do |t|
162162
rm t.name.gsub(/\.a$/, ".dll.a")
163163
end
164164

@@ -189,7 +189,7 @@ class CrossLibrary < OpenStruct
189189
end
190190

191191
# generate the makefile in a clean build location
192-
file postgresql_global_makefile => [ static_postgresql_builddir, :openssl_libs ] do |t|
192+
file postgresql_global_makefile => [ static_postgresql_builddir, "openssl_libs:#{for_platform}" ] do |t|
193193
options = [
194194
"--target=#{host_platform}",
195195
"--host=#{host_platform}",
@@ -231,10 +231,10 @@ class CrossLibrary < OpenStruct
231231

232232

233233
#desc 'compile libpg.a'
234-
task :libpq => postgresql_lib
234+
task "native:#{for_platform}" => postgresql_lib
235235

236236
# copy libpq.dll to lib dir
237-
dest_libpq = "lib/#{postgresql_lib.basename}"
237+
dest_libpq = "lib/#{for_platform}/#{postgresql_lib.basename}"
238238
directory File.dirname(dest_libpq)
239239
file dest_libpq => [postgresql_lib, File.dirname(dest_libpq)] do
240240
cp postgresql_lib, dest_libpq
@@ -250,7 +250,7 @@ end
250250

251251
if File.exist?(File.expand_path("~/.rake-compiler/config.yml"))
252252
CrossLibraries = [
253-
['i386-mingw32', 'mingw', 'i686-w64-mingw32'],
253+
['x86-mingw32', 'mingw', 'i686-w64-mingw32'],
254254
['x64-mingw32', 'mingw64', 'x86_64-w64-mingw32'],
255255
].map do |platform, openssl_config, toolchain|
256256
CrossLibrary.new platform, openssl_config, toolchain
@@ -261,7 +261,7 @@ else
261261
end
262262

263263
desc 'cross compile pg for win32'
264-
task :cross => [ :mingw32, :libpq ]
264+
task :cross => [ :mingw32 ]
265265

266266
task :mingw32 do
267267
# Use Rake::ExtensionCompiler helpers to find the proper host
@@ -272,30 +272,25 @@ task :mingw32 do
272272
end
273273
end
274274

275-
# To reduce the gem file size strip mingw32 dlls before packaging
276-
ENV['RUBY_CC_VERSION'].to_s.split(':').each do |ruby_version|
277-
task "tmp/i386-mingw32/stage/lib/#{ruby_version[/^\d+\.\d+/]}/pg_ext.so" do |t|
278-
sh "i686-w64-mingw32-strip -S tmp/i386-mingw32/stage/lib/#{ruby_version[/^\d+\.\d+/]}/pg_ext.so"
279-
end
275+
task 'gem:windows:prepare' do
276+
require 'io/console'
277+
require 'rake_compiler_dock'
280278

281-
task "tmp/x64-mingw32/stage/lib/#{ruby_version[/^\d+\.\d+/]}/pg_ext.so" do |t|
282-
sh "x86_64-w64-mingw32-strip -S tmp/x64-mingw32/stage/lib/#{ruby_version[/^\d+\.\d+/]}/pg_ext.so"
283-
end
279+
# Copy gem signing key and certs to be accessable from the docker container
280+
mkdir_p 'build/gem'
281+
sh "cp ~/.gem/gem-*.pem build/gem/ || true"
282+
sh "bundle package"
283+
ENV["GEM_PRIVATE_KEY_PASSPHRASE"] = STDIN.getpass("Enter passphrase of gem signature key: ")
284284
end
285285

286-
desc "Build the windows binary gems"
287-
task 'gem:windows' => ['ChangeLog'] do
288-
require 'rake_compiler_dock'
289-
290-
# Copy gem signing key and certs to be accessable from the docker container
291-
mkdir_p 'build/gem'
292-
sh "cp ~/.gem/gem-*.pem build/gem/ || true"
293-
sh "bundle package"
294-
295-
RakeCompilerDock.sh <<-EOT
296-
mkdir ~/.gem &&
297-
(cp build/gem/gem-*.pem ~/.gem/ || true) &&
298-
bundle install --local &&
299-
rake cross native gem MAKE="make -j`nproc`"
300-
EOT
286+
%w[ x86-mingw32 x64-mingw32 ].each do |platform|
287+
task "gem:windows:#{platform}" => ['ChangeLog', 'gem:windows:prepare'] do
288+
RakeCompilerDock.sh <<-EOT, platform: platform
289+
(cp build/gem/gem-*.pem ~/.gem/ || true) &&
290+
bundle install --local &&
291+
rake native:#{platform} gem MAKE="make -j`nproc`"
292+
EOT
293+
end
294+
desc "Build the windows binary gems"
295+
multitask 'gem:windows' => "gem:windows:#{platform}"
301296
end

lib/pg.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
end
2323

2424
# Temporary add this directory for DLL search, so that libpq.dll can be found.
25-
add_dll_path.call(__dir__) do
25+
# mingw32-platform strings differ (RUBY_PLATFORM=i386-mingw32 vs. x86-mingw32 for rubygems)
26+
add_dll_path.call(File.join(__dir__, RUBY_PLATFORM.gsub(/^i386-/, "x86-"))) do
2627
require "#{major_minor}/pg_ext"
2728
end
2829
else

pg.gemspec

Lines changed: 19 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
# -*- encoding: utf-8 -*-
2-
# stub: pg 1.2.0.pre20191218152754 ruby lib
2+
# stub: pg 1.3.0.pre20191227185959 ruby lib
33
# stub: ext/extconf.rb
44

55
Gem::Specification.new do |s|
66
s.name = "pg".freeze
7-
s.version = "1.2.0.pre20191218152754"
7+
s.version = "1.3.0.pre20191227185959"
88

99
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1".freeze) if s.respond_to? :required_rubygems_version=
10+
s.metadata = { "homepage_uri" => "https://github.com/ged/ruby-pg" } if s.respond_to? :metadata=
1011
s.require_paths = ["lib".freeze]
1112
s.authors = ["Michael Granger".freeze, "Lars Kanis".freeze]
1213
s.cert_chain = ["certs/ged.pem".freeze]
13-
s.date = "2019-12-18"
14+
s.date = "2019-12-27"
1415
s.description = "Pg is the Ruby interface to the {PostgreSQL RDBMS}[http://www.postgresql.org/].\n\nIt works with {PostgreSQL 9.2 and later}[http://www.postgresql.org/support/versioning/].\n\nA small example usage:\n\n #!/usr/bin/env ruby\n\n require 'pg'\n\n # Output a table of current connections to the DB\n conn = PG.connect( dbname: 'sales' )\n conn.exec( \"SELECT * FROM pg_stat_activity\" ) do |result|\n puts \" PID | User | Query\"\n result.each do |row|\n puts \" %7d | %-16s | %s \" %\n row.values_at('procpid', 'usename', 'current_query')\n end\n end".freeze
1516
s.email = ["[email protected]".freeze, "[email protected]".freeze]
1617
s.extensions = ["ext/extconf.rb".freeze]
@@ -20,42 +21,32 @@ Gem::Specification.new do |s|
2021
s.licenses = ["BSD-2-Clause".freeze]
2122
s.rdoc_options = ["--main".freeze, "README.rdoc".freeze]
2223
s.required_ruby_version = Gem::Requirement.new(">= 2.2".freeze)
23-
s.rubygems_version = "3.0.6".freeze
24+
s.rubygems_version = "3.1.2".freeze
2425
s.summary = "Pg is the Ruby interface to the {PostgreSQL RDBMS}[http://www.postgresql.org/]".freeze
2526

2627
if s.respond_to? :specification_version then
2728
s.specification_version = 4
29+
end
2830

29-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
30-
s.add_development_dependency(%q<hoe-mercurial>.freeze, ["~> 1.4"])
31-
s.add_development_dependency(%q<hoe-deveiate>.freeze, ["~> 0.10"])
32-
s.add_development_dependency(%q<hoe-highline>.freeze, ["~> 0.2"])
33-
s.add_development_dependency(%q<rake-compiler>.freeze, ["~> 1.0"])
34-
s.add_development_dependency(%q<rake-compiler-dock>.freeze, ["~> 0.7.0"])
35-
s.add_development_dependency(%q<hoe-bundler>.freeze, ["~> 1.0"])
36-
s.add_development_dependency(%q<rspec>.freeze, ["~> 3.5"])
37-
s.add_development_dependency(%q<rdoc>.freeze, ["~> 5.1"])
38-
s.add_development_dependency(%q<hoe>.freeze, ["~> 3.18"])
39-
else
40-
s.add_dependency(%q<hoe-mercurial>.freeze, ["~> 1.4"])
41-
s.add_dependency(%q<hoe-deveiate>.freeze, ["~> 0.10"])
42-
s.add_dependency(%q<hoe-highline>.freeze, ["~> 0.2"])
43-
s.add_dependency(%q<rake-compiler>.freeze, ["~> 1.0"])
44-
s.add_dependency(%q<rake-compiler-dock>.freeze, ["~> 0.7.0"])
45-
s.add_dependency(%q<hoe-bundler>.freeze, ["~> 1.0"])
46-
s.add_dependency(%q<rspec>.freeze, ["~> 3.5"])
47-
s.add_dependency(%q<rdoc>.freeze, ["~> 5.1"])
48-
s.add_dependency(%q<hoe>.freeze, ["~> 3.18"])
49-
end
31+
if s.respond_to? :add_runtime_dependency then
32+
s.add_development_dependency(%q<hoe-mercurial>.freeze, ["~> 1.4"])
33+
s.add_development_dependency(%q<hoe-deveiate>.freeze, ["~> 0.9"])
34+
s.add_development_dependency(%q<hoe-highline>.freeze, ["~> 0.2"])
35+
s.add_development_dependency(%q<rake-compiler>.freeze, ["~> 1.0"])
36+
s.add_development_dependency(%q<rake-compiler-dock>.freeze, ["~> 1.0"])
37+
s.add_development_dependency(%q<hoe-bundler>.freeze, ["~> 1.0"])
38+
s.add_development_dependency(%q<rspec>.freeze, ["~> 3.5"])
39+
s.add_development_dependency(%q<rdoc>.freeze, ["~> 5.1"])
40+
s.add_development_dependency(%q<hoe>.freeze, ["~> 3.20"])
5041
else
5142
s.add_dependency(%q<hoe-mercurial>.freeze, ["~> 1.4"])
52-
s.add_dependency(%q<hoe-deveiate>.freeze, ["~> 0.10"])
43+
s.add_dependency(%q<hoe-deveiate>.freeze, ["~> 0.9"])
5344
s.add_dependency(%q<hoe-highline>.freeze, ["~> 0.2"])
5445
s.add_dependency(%q<rake-compiler>.freeze, ["~> 1.0"])
55-
s.add_dependency(%q<rake-compiler-dock>.freeze, ["~> 0.7.0"])
46+
s.add_dependency(%q<rake-compiler-dock>.freeze, ["~> 1.0"])
5647
s.add_dependency(%q<hoe-bundler>.freeze, ["~> 1.0"])
5748
s.add_dependency(%q<rspec>.freeze, ["~> 3.5"])
5849
s.add_dependency(%q<rdoc>.freeze, ["~> 5.1"])
59-
s.add_dependency(%q<hoe>.freeze, ["~> 3.18"])
50+
s.add_dependency(%q<hoe>.freeze, ["~> 3.20"])
6051
end
6152
end

0 commit comments

Comments
 (0)