pg 1.5.9 → 1.6.0.rc1
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/Gemfile +7 -4
- data/History.md +26 -0
- data/README-Windows.rdoc +1 -1
- data/README.ja.md +3 -3
- data/README.md +4 -4
- data/Rakefile +55 -12
- data/ext/extconf.rb +119 -13
- data/ext/gvl_wrappers.c +13 -2
- data/ext/gvl_wrappers.h +33 -0
- data/ext/pg.c +16 -5
- data/ext/pg.h +8 -9
- data/ext/pg_binary_decoder.c +150 -0
- data/ext/pg_binary_encoder.c +203 -7
- data/ext/pg_cancel_connection.c +360 -0
- data/ext/pg_coder.c +3 -5
- data/ext/pg_connection.c +337 -148
- data/ext/pg_copy_coder.c +2 -2
- data/ext/pg_record_coder.c +1 -1
- data/ext/pg_result.c +9 -11
- data/ext/pg_text_encoder.c +2 -2
- data/ext/pg_tuple.c +2 -2
- data/ext/pg_type_map.c +1 -1
- data/ext/pg_type_map_all_strings.c +1 -1
- data/ext/pg_type_map_by_class.c +1 -1
- data/ext/pg_type_map_by_column.c +1 -1
- data/ext/pg_type_map_by_mri_type.c +1 -1
- data/ext/pg_type_map_by_oid.c +1 -1
- data/ext/pg_type_map_in_ruby.c +1 -1
- data/lib/pg/basic_type_registry.rb +2 -2
- data/lib/pg/cancel_connection.rb +30 -0
- data/lib/pg/connection.rb +182 -126
- data/lib/pg/version.rb +1 -1
- data/lib/pg.rb +13 -8
- data/pg.gemspec +2 -2
- data.tar.gz.sig +0 -0
- metadata +9 -5
- metadata.gz.sig +0 -0
- data/Rakefile.cross +0 -303
data/lib/pg/version.rb
CHANGED
data/lib/pg.rb
CHANGED
@@ -6,11 +6,12 @@
|
|
6
6
|
module PG
|
7
7
|
|
8
8
|
# Is this file part of a fat binary gem with bundled libpq?
|
9
|
-
|
10
|
-
|
9
|
+
# This path must be enabled by add_dll_directory on Windows.
|
10
|
+
gplat = Gem::Platform.local
|
11
|
+
bundled_libpq_path = Dir[File.expand_path("../ports/#{gplat.cpu}-#{gplat.os}*/lib", __dir__)].first
|
12
|
+
if bundled_libpq_path
|
11
13
|
POSTGRESQL_LIB_PATH = bundled_libpq_path
|
12
14
|
else
|
13
|
-
bundled_libpq_path = nil
|
14
15
|
# Try to load libpq path as found by extconf.rb
|
15
16
|
begin
|
16
17
|
require "pg/postgresql_lib_path"
|
@@ -22,7 +23,8 @@ module PG
|
|
22
23
|
end
|
23
24
|
|
24
25
|
add_dll_path = proc do |path, &block|
|
25
|
-
if RUBY_PLATFORM =~/(mswin|mingw)/i && path
|
26
|
+
if RUBY_PLATFORM =~/(mswin|mingw)/i && path
|
27
|
+
BUNDLED_LIBPQ_WITH_UNIXSOCKET = false
|
26
28
|
begin
|
27
29
|
require 'ruby_installer/runtime'
|
28
30
|
RubyInstaller::Runtime.add_dll_directory(path, &block)
|
@@ -33,19 +35,21 @@ module PG
|
|
33
35
|
ENV['PATH'] = old_path
|
34
36
|
end
|
35
37
|
else
|
36
|
-
#
|
38
|
+
# libpq is found by a relative rpath in the cross compiled extension dll
|
39
|
+
# or by the system library loader
|
37
40
|
block.call
|
41
|
+
BUNDLED_LIBPQ_WITH_UNIXSOCKET = RUBY_PLATFORM=~/linux/i && PG::IS_BINARY_GEM
|
38
42
|
end
|
39
43
|
end
|
40
44
|
|
41
45
|
# Add a load path to the one retrieved from pg_config
|
42
46
|
add_dll_path.call(POSTGRESQL_LIB_PATH) do
|
43
|
-
|
44
|
-
#
|
47
|
+
begin
|
48
|
+
# Try the <major>.<minor> subdirectory for fat binary gems
|
45
49
|
major_minor = RUBY_VERSION[ /^(\d+\.\d+)/ ] or
|
46
50
|
raise "Oops, can't extract the major/minor version from #{RUBY_VERSION.dump}"
|
47
51
|
require "#{major_minor}/pg_ext"
|
48
|
-
|
52
|
+
rescue LoadError
|
49
53
|
require 'pg_ext'
|
50
54
|
end
|
51
55
|
end
|
@@ -111,6 +115,7 @@ module PG
|
|
111
115
|
require 'pg/coder'
|
112
116
|
require 'pg/type_map_by_column'
|
113
117
|
require 'pg/connection'
|
118
|
+
require 'pg/cancel_connection'
|
114
119
|
require 'pg/result'
|
115
120
|
require 'pg/tuple'
|
116
121
|
autoload :VERSION, 'pg/version'
|
data/pg.gemspec
CHANGED
@@ -10,10 +10,10 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ["ged@FaerieMUD.org", "lars@greiz-reinsdorf.de"]
|
11
11
|
|
12
12
|
spec.summary = "Pg is the Ruby interface to the PostgreSQL RDBMS"
|
13
|
-
spec.description = "Pg is the Ruby interface to the PostgreSQL RDBMS. It works with PostgreSQL
|
13
|
+
spec.description = "Pg is the Ruby interface to the PostgreSQL RDBMS. It works with PostgreSQL 10 and later."
|
14
14
|
spec.homepage = "https://github.com/ged/ruby-pg"
|
15
15
|
spec.license = "BSD-2-Clause"
|
16
|
-
spec.required_ruby_version = ">= 2.
|
16
|
+
spec.required_ruby_version = ">= 2.7"
|
17
17
|
|
18
18
|
spec.metadata["homepage_uri"] = spec.homepage
|
19
19
|
spec.metadata["source_code_uri"] = "https://github.com/ged/ruby-pg"
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0.rc1
|
5
5
|
platform: ruby
|
6
|
+
original_platform: ''
|
6
7
|
authors:
|
7
8
|
- Michael Granger
|
8
9
|
- Lars Kanis
|
@@ -33,10 +34,10 @@ cert_chain:
|
|
33
34
|
5wFER6XhvvLDFAMh/jMg+s7Wd5SbSHgHNSUaUGVtdWkVPOer6oF0aLdZUR3CETkn
|
34
35
|
5nWXZma/BUd3YgYA/Xumc6QQqIS4p7mr
|
35
36
|
-----END CERTIFICATE-----
|
36
|
-
date: 2024-
|
37
|
+
date: 2024-11-28 00:00:00.000000000 Z
|
37
38
|
dependencies: []
|
38
39
|
description: Pg is the Ruby interface to the PostgreSQL RDBMS. It works with PostgreSQL
|
39
|
-
|
40
|
+
10 and later.
|
40
41
|
email:
|
41
42
|
- ged@FaerieMUD.org
|
42
43
|
- lars@greiz-reinsdorf.de
|
@@ -56,6 +57,7 @@ extra_rdoc_files:
|
|
56
57
|
- ext/pg.h
|
57
58
|
- ext/pg_binary_decoder.c
|
58
59
|
- ext/pg_binary_encoder.c
|
60
|
+
- ext/pg_cancel_connection.c
|
59
61
|
- ext/pg_coder.c
|
60
62
|
- ext/pg_connection.c
|
61
63
|
- ext/pg_copy_coder.c
|
@@ -82,6 +84,7 @@ extra_rdoc_files:
|
|
82
84
|
- lib/pg/binary_decoder/date.rb
|
83
85
|
- lib/pg/binary_decoder/timestamp.rb
|
84
86
|
- lib/pg/binary_encoder/timestamp.rb
|
87
|
+
- lib/pg/cancel_connection.rb
|
85
88
|
- lib/pg/coder.rb
|
86
89
|
- lib/pg/connection.rb
|
87
90
|
- lib/pg/exceptions.rb
|
@@ -112,7 +115,6 @@ files:
|
|
112
115
|
- README.ja.md
|
113
116
|
- README.md
|
114
117
|
- Rakefile
|
115
|
-
- Rakefile.cross
|
116
118
|
- certs/ged.pem
|
117
119
|
- certs/kanis@comcard.de.pem
|
118
120
|
- certs/larskanis-2022.pem
|
@@ -128,6 +130,7 @@ files:
|
|
128
130
|
- ext/pg.h
|
129
131
|
- ext/pg_binary_decoder.c
|
130
132
|
- ext/pg_binary_encoder.c
|
133
|
+
- ext/pg_cancel_connection.c
|
131
134
|
- ext/pg_coder.c
|
132
135
|
- ext/pg_connection.c
|
133
136
|
- ext/pg_copy_coder.c
|
@@ -157,6 +160,7 @@ files:
|
|
157
160
|
- lib/pg/binary_decoder/date.rb
|
158
161
|
- lib/pg/binary_decoder/timestamp.rb
|
159
162
|
- lib/pg/binary_encoder/timestamp.rb
|
163
|
+
- lib/pg/cancel_connection.rb
|
160
164
|
- lib/pg/coder.rb
|
161
165
|
- lib/pg/connection.rb
|
162
166
|
- lib/pg/exceptions.rb
|
@@ -225,7 +229,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
225
229
|
requirements:
|
226
230
|
- - ">="
|
227
231
|
- !ruby/object:Gem::Version
|
228
|
-
version: '2.
|
232
|
+
version: '2.7'
|
229
233
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
230
234
|
requirements:
|
231
235
|
- - ">="
|
metadata.gz.sig
CHANGED
Binary file
|
data/Rakefile.cross
DELETED
@@ -1,303 +0,0 @@
|
|
1
|
-
# -*- rake -*-
|
2
|
-
|
3
|
-
require 'uri'
|
4
|
-
require 'tempfile'
|
5
|
-
require 'rbconfig'
|
6
|
-
require 'rake/clean'
|
7
|
-
require 'rake/extensiontask'
|
8
|
-
require 'rake/extensioncompiler'
|
9
|
-
require 'ostruct'
|
10
|
-
require_relative 'rakelib/task_extension'
|
11
|
-
|
12
|
-
MISCDIR = BASEDIR + 'misc'
|
13
|
-
|
14
|
-
NUM_CPUS = if File.exist?('/proc/cpuinfo')
|
15
|
-
File.read('/proc/cpuinfo').scan('processor').length
|
16
|
-
elsif RUBY_PLATFORM.include?( 'darwin' )
|
17
|
-
`system_profiler SPHardwareDataType | grep 'Cores' | awk '{print $5}'`.chomp
|
18
|
-
else
|
19
|
-
1
|
20
|
-
end
|
21
|
-
|
22
|
-
class CrossLibrary < OpenStruct
|
23
|
-
include Rake::DSL
|
24
|
-
prepend TaskExtension
|
25
|
-
|
26
|
-
def initialize(for_platform, openssl_config, toolchain)
|
27
|
-
super()
|
28
|
-
|
29
|
-
self.for_platform = for_platform
|
30
|
-
self.openssl_config = openssl_config
|
31
|
-
self.host_platform = toolchain
|
32
|
-
|
33
|
-
# Cross-compilation constants
|
34
|
-
self.openssl_version = ENV['OPENSSL_VERSION'] || '3.4.0'
|
35
|
-
self.postgresql_version = ENV['POSTGRESQL_VERSION'] || '17.0'
|
36
|
-
|
37
|
-
# Check if symlinks work in the current working directory.
|
38
|
-
# This fails, if rake-compiler-dock is running on a Windows box.
|
39
|
-
begin
|
40
|
-
FileUtils.rm_f '.test_symlink'
|
41
|
-
FileUtils.ln_s '/', '.test_symlink'
|
42
|
-
rescue NotImplementedError, SystemCallError
|
43
|
-
# Symlinks don't work -> use home directory instead
|
44
|
-
self.compile_home = Pathname( "~/.ruby-pg-build" ).expand_path
|
45
|
-
else
|
46
|
-
self.compile_home = Pathname( "./build" ).expand_path
|
47
|
-
end
|
48
|
-
self.static_sourcesdir = compile_home + 'sources'
|
49
|
-
self.static_builddir = compile_home + 'builds' + for_platform
|
50
|
-
CLOBBER.include( static_sourcesdir )
|
51
|
-
CLEAN.include( static_builddir )
|
52
|
-
|
53
|
-
# Static OpenSSL build vars
|
54
|
-
self.static_openssl_builddir = static_builddir + "openssl-#{openssl_version}"
|
55
|
-
self.openssl_source_uri =
|
56
|
-
URI( "https://github.com/openssl/openssl/releases/download/openssl-#{openssl_version}/openssl-#{openssl_version}.tar.gz" )
|
57
|
-
self.openssl_tarball = static_sourcesdir + File.basename( openssl_source_uri.path )
|
58
|
-
self.openssl_makefile = static_openssl_builddir + 'Makefile'
|
59
|
-
|
60
|
-
self.libssl = static_openssl_builddir + 'libssl.a'
|
61
|
-
self.libcrypto = static_openssl_builddir + 'libcrypto.a'
|
62
|
-
|
63
|
-
self.openssl_patches = Rake::FileList[ (MISCDIR + "openssl-#{openssl_version}.*.patch").to_s ]
|
64
|
-
|
65
|
-
# Static PostgreSQL build vars
|
66
|
-
self.static_postgresql_builddir = static_builddir + "postgresql-#{postgresql_version}"
|
67
|
-
self.postgresql_source_uri = begin
|
68
|
-
uristring = "http://ftp.postgresql.org/pub/source/v%s/postgresql-%s.tar.bz2" %
|
69
|
-
[ postgresql_version, postgresql_version ]
|
70
|
-
URI( uristring )
|
71
|
-
end
|
72
|
-
self.postgresql_tarball = static_sourcesdir + File.basename( postgresql_source_uri.path )
|
73
|
-
|
74
|
-
self.static_postgresql_srcdir = static_postgresql_builddir + 'src'
|
75
|
-
self.static_postgresql_libdir = static_postgresql_srcdir + 'interfaces/libpq'
|
76
|
-
self.static_postgresql_incdir = static_postgresql_srcdir + 'include'
|
77
|
-
|
78
|
-
self.postgresql_global_makefile = static_postgresql_srcdir + 'Makefile.global'
|
79
|
-
self.postgresql_shlib_makefile = static_postgresql_srcdir + 'Makefile.shlib'
|
80
|
-
self.postgresql_shlib_mf_orig = static_postgresql_srcdir + 'Makefile.shlib.orig'
|
81
|
-
self.postgresql_lib = static_postgresql_libdir + 'libpq.dll'
|
82
|
-
self.postgresql_patches = Rake::FileList[ (MISCDIR + "postgresql-#{postgresql_version}.*.patch").to_s ]
|
83
|
-
|
84
|
-
# clean intermediate files and folders
|
85
|
-
CLEAN.include( static_builddir.to_s )
|
86
|
-
|
87
|
-
#####################################################################
|
88
|
-
### C R O S S - C O M P I L A T I O N - T A S K S
|
89
|
-
#####################################################################
|
90
|
-
|
91
|
-
|
92
|
-
directory static_sourcesdir.to_s
|
93
|
-
|
94
|
-
#
|
95
|
-
# Static OpenSSL build tasks
|
96
|
-
#
|
97
|
-
directory static_openssl_builddir.to_s
|
98
|
-
|
99
|
-
# openssl source file should be stored there
|
100
|
-
file openssl_tarball => static_sourcesdir do |t|
|
101
|
-
download( openssl_source_uri, t.name )
|
102
|
-
end
|
103
|
-
|
104
|
-
# Extract the openssl builds
|
105
|
-
file static_openssl_builddir => openssl_tarball do |t|
|
106
|
-
puts "extracting %s to %s" % [ openssl_tarball, static_openssl_builddir.parent ]
|
107
|
-
static_openssl_builddir.mkpath
|
108
|
-
run 'tar', '-xzf', openssl_tarball.to_s, '-C', static_openssl_builddir.parent.to_s
|
109
|
-
openssl_makefile.unlink if openssl_makefile.exist?
|
110
|
-
|
111
|
-
openssl_patches.each do |patchfile|
|
112
|
-
puts " applying patch #{patchfile}..."
|
113
|
-
run 'patch', '-Np1', '-d', static_openssl_builddir.to_s,
|
114
|
-
'-i', File.expand_path( patchfile, BASEDIR )
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
self.cmd_prelude = [
|
119
|
-
"env",
|
120
|
-
"CROSS_COMPILE=#{host_platform}-",
|
121
|
-
"CFLAGS=-DDSO_WIN32 -DOPENSSL_THREADS",
|
122
|
-
]
|
123
|
-
|
124
|
-
|
125
|
-
# generate the makefile in a clean build location
|
126
|
-
file openssl_makefile => static_openssl_builddir do |t|
|
127
|
-
chdir( static_openssl_builddir ) do
|
128
|
-
cmd = cmd_prelude.dup
|
129
|
-
cmd << "./Configure" << "threads" << "-static" << openssl_config
|
130
|
-
|
131
|
-
run( *cmd )
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
desc "compile static openssl libraries"
|
136
|
-
task "openssl_libs:#{for_platform}" => [ libssl, libcrypto ]
|
137
|
-
|
138
|
-
task "compile_static_openssl:#{for_platform}" => openssl_makefile do |t|
|
139
|
-
chdir( static_openssl_builddir ) do
|
140
|
-
cmd = cmd_prelude.dup
|
141
|
-
cmd << 'make' << "-j#{NUM_CPUS}" << 'build_libs'
|
142
|
-
|
143
|
-
run( *cmd )
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
desc "compile static #{libssl}"
|
148
|
-
file libssl => "compile_static_openssl:#{for_platform}"
|
149
|
-
|
150
|
-
desc "compile static #{libcrypto}"
|
151
|
-
file libcrypto => "compile_static_openssl:#{for_platform}"
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
#
|
156
|
-
# Static PostgreSQL build tasks
|
157
|
-
#
|
158
|
-
directory static_postgresql_builddir.to_s
|
159
|
-
|
160
|
-
|
161
|
-
# postgresql source file should be stored there
|
162
|
-
file postgresql_tarball => static_sourcesdir do |t|
|
163
|
-
download( postgresql_source_uri, t.name )
|
164
|
-
end
|
165
|
-
|
166
|
-
# Extract the postgresql sources
|
167
|
-
file static_postgresql_builddir => postgresql_tarball do |t|
|
168
|
-
puts "extracting %s to %s" % [ postgresql_tarball, static_postgresql_builddir.parent ]
|
169
|
-
static_postgresql_builddir.mkpath
|
170
|
-
run 'tar', '-xjf', postgresql_tarball.to_s, '-C', static_postgresql_builddir.parent.to_s
|
171
|
-
|
172
|
-
postgresql_patches.each do |patchfile|
|
173
|
-
puts " applying patch #{patchfile}..."
|
174
|
-
run 'patch', '-Np1', '-d', static_postgresql_builddir.to_s,
|
175
|
-
'-i', File.expand_path( patchfile, BASEDIR )
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
|
-
# generate the makefile in a clean build location
|
180
|
-
file postgresql_global_makefile => [ static_postgresql_builddir, "openssl_libs:#{for_platform}" ] do |t|
|
181
|
-
options = [
|
182
|
-
"--target=#{host_platform}",
|
183
|
-
"--host=#{host_platform}",
|
184
|
-
'--with-openssl',
|
185
|
-
'--without-zlib',
|
186
|
-
'--without-icu',
|
187
|
-
]
|
188
|
-
|
189
|
-
chdir( static_postgresql_builddir ) do
|
190
|
-
configure_path = static_postgresql_builddir + 'configure'
|
191
|
-
cmd = [ configure_path.to_s, *options ]
|
192
|
-
cmd << "CFLAGS=-L#{static_openssl_builddir}"
|
193
|
-
cmd << "LDFLAGS=-L#{static_openssl_builddir}"
|
194
|
-
cmd << "LDFLAGS_SL=-L#{static_openssl_builddir}"
|
195
|
-
cmd << "LIBS=-lssl -lwsock32 -lgdi32 -lws2_32 -lcrypt32"
|
196
|
-
cmd << "CPPFLAGS=-I#{static_openssl_builddir}/include"
|
197
|
-
|
198
|
-
run( *cmd )
|
199
|
-
end
|
200
|
-
end
|
201
|
-
|
202
|
-
|
203
|
-
# make libpq.dll
|
204
|
-
task postgresql_lib => [ postgresql_global_makefile ] do |t|
|
205
|
-
# Work around missing dependency to libcommon in PostgreSQL-9.4.0
|
206
|
-
chdir( static_postgresql_srcdir + "common" ) do
|
207
|
-
sh 'make', "-j#{NUM_CPUS}"
|
208
|
-
end
|
209
|
-
# Work around missing dependency to errorcodes.h in PostgreSQL-17.0
|
210
|
-
chdir( static_postgresql_srcdir + "backend" + "utils" ) do
|
211
|
-
sh 'make', "-j#{NUM_CPUS}"
|
212
|
-
end
|
213
|
-
chdir( static_postgresql_srcdir + "port" ) do
|
214
|
-
sh 'make', "-j#{NUM_CPUS}"
|
215
|
-
end
|
216
|
-
|
217
|
-
chdir( postgresql_lib.dirname ) do
|
218
|
-
sh 'make',
|
219
|
-
"-j#{NUM_CPUS}",
|
220
|
-
postgresql_lib.basename.to_s,
|
221
|
-
'SHLIB_LINK=-lssl -lcrypto -lcrypt32 -lgdi32 -lsecur32 -lwsock32 -lws2_32'
|
222
|
-
end
|
223
|
-
end
|
224
|
-
|
225
|
-
|
226
|
-
#desc 'compile libpg.a'
|
227
|
-
task "native:#{for_platform}" => postgresql_lib
|
228
|
-
|
229
|
-
# copy libpq.dll to lib dir
|
230
|
-
dest_libpq = "lib/#{for_platform}/#{postgresql_lib.basename}"
|
231
|
-
directory File.dirname(dest_libpq)
|
232
|
-
file dest_libpq => [postgresql_lib, File.dirname(dest_libpq)] do
|
233
|
-
cp postgresql_lib, dest_libpq
|
234
|
-
end
|
235
|
-
|
236
|
-
stage_libpq = "tmp/#{for_platform}/stage/#{dest_libpq}"
|
237
|
-
directory File.dirname(stage_libpq)
|
238
|
-
file stage_libpq => [postgresql_lib, File.dirname(stage_libpq)] do |t|
|
239
|
-
cp postgresql_lib, stage_libpq
|
240
|
-
end
|
241
|
-
end
|
242
|
-
|
243
|
-
def download(url, save_to)
|
244
|
-
part = save_to+".part"
|
245
|
-
sh "wget #{url.to_s.inspect} -O #{part.inspect} || curl #{url.to_s.inspect} -o #{part.inspect}"
|
246
|
-
FileUtils.mv part, save_to
|
247
|
-
end
|
248
|
-
|
249
|
-
def run(*args)
|
250
|
-
sh(*args)
|
251
|
-
end
|
252
|
-
end
|
253
|
-
|
254
|
-
CrossLibraries = [
|
255
|
-
['x64-mingw-ucrt', 'mingw64', 'x86_64-w64-mingw32'],
|
256
|
-
['x86-mingw32', 'mingw', 'i686-w64-mingw32'],
|
257
|
-
['x64-mingw32', 'mingw64', 'x86_64-w64-mingw32'],
|
258
|
-
].map do |platform, openssl_config, toolchain|
|
259
|
-
CrossLibrary.new platform, openssl_config, toolchain
|
260
|
-
end
|
261
|
-
|
262
|
-
desc 'cross compile pg for win32'
|
263
|
-
task :cross => [ :mingw32 ]
|
264
|
-
|
265
|
-
task :mingw32 do
|
266
|
-
# Use Rake::ExtensionCompiler helpers to find the proper host
|
267
|
-
unless Rake::ExtensionCompiler.mingw_host then
|
268
|
-
warn "You need to install mingw32 cross compile functionality to be able to continue."
|
269
|
-
warn "Please refer to your distribution/package manager documentation about installation."
|
270
|
-
fail
|
271
|
-
end
|
272
|
-
end
|
273
|
-
|
274
|
-
task 'gem:windows:prepare' do
|
275
|
-
require 'io/console'
|
276
|
-
require 'rake_compiler_dock'
|
277
|
-
|
278
|
-
# Copy gem signing key and certs to be accessible from the docker container
|
279
|
-
mkdir_p 'build/gem'
|
280
|
-
sh "cp ~/.gem/gem-*.pem build/gem/ || true"
|
281
|
-
sh "bundle package"
|
282
|
-
begin
|
283
|
-
OpenSSL::PKey.read(File.read(File.expand_path("~/.gem/gem-private_key.pem")), ENV["GEM_PRIVATE_KEY_PASSPHRASE"] || "")
|
284
|
-
rescue OpenSSL::PKey::PKeyError
|
285
|
-
ENV["GEM_PRIVATE_KEY_PASSPHRASE"] = STDIN.getpass("Enter passphrase of gem signature key: ")
|
286
|
-
retry
|
287
|
-
end
|
288
|
-
end
|
289
|
-
|
290
|
-
CrossLibraries.each do |xlib|
|
291
|
-
platform = xlib.for_platform
|
292
|
-
desc "Build fat binary gem for platform #{platform}"
|
293
|
-
task "gem:windows:#{platform}" => ['gem:windows:prepare', xlib.openssl_tarball, xlib.postgresql_tarball] do
|
294
|
-
RakeCompilerDock.sh <<-EOT, platform: platform
|
295
|
-
(cp build/gem/gem-*.pem ~/.gem/ || true) &&
|
296
|
-
sudo apt-get update && sudo apt-get install -y bison flex &&
|
297
|
-
bundle install --local &&
|
298
|
-
rake native:#{platform} pkg/#{$gem_spec.full_name}-#{platform}.gem MAKEOPTS=-j`nproc` RUBY_CC_VERSION=3.3.0:3.2.0:3.1.0:3.0.0:2.7.0:2.6.0:2.5.0
|
299
|
-
EOT
|
300
|
-
end
|
301
|
-
desc "Build the windows binary gems"
|
302
|
-
multitask 'gem:windows' => "gem:windows:#{platform}"
|
303
|
-
end
|