pg 1.5.9-x64-mingw32 → 1.6.0.rc1-x64-mingw32

Sign up to get free protection for your applications and to get access to all the features.
data/lib/pg/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module PG
2
2
  # Library version
3
- VERSION = '1.5.9'
3
+ VERSION = '1.6.0.rc1'
4
4
  end
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
- bundled_libpq_path = File.join(__dir__, RUBY_PLATFORM.gsub(/^i386-/, "x86-"))
10
- if File.exist?(bundled_libpq_path)
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 && File.exist?(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
- # No need to set a load path manually - it's set as library rpath.
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
- if bundled_libpq_path
44
- # It's a Windows binary gem, try the <major>.<minor> subdirectory
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
- else
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 9.3 and later."
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.5"
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,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.9
4
+ version: 1.6.0.rc1
5
5
  platform: x64-mingw32
6
6
  authors:
7
7
  - Michael Granger
@@ -34,10 +34,10 @@ cert_chain:
34
34
  5wFER6XhvvLDFAMh/jMg+s7Wd5SbSHgHNSUaUGVtdWkVPOer6oF0aLdZUR3CETkn
35
35
  5nWXZma/BUd3YgYA/Xumc6QQqIS4p7mr
36
36
  -----END CERTIFICATE-----
37
- date: 2024-10-24 00:00:00.000000000 Z
37
+ date: 2024-11-28 00:00:00.000000000 Z
38
38
  dependencies: []
39
39
  description: Pg is the Ruby interface to the PostgreSQL RDBMS. It works with PostgreSQL
40
- 9.3 and later.
40
+ 10 and later.
41
41
  email:
42
42
  - ged@FaerieMUD.org
43
43
  - lars@greiz-reinsdorf.de
@@ -56,6 +56,7 @@ extra_rdoc_files:
56
56
  - ext/pg.h
57
57
  - ext/pg_binary_decoder.c
58
58
  - ext/pg_binary_encoder.c
59
+ - ext/pg_cancel_connection.c
59
60
  - ext/pg_coder.c
60
61
  - ext/pg_connection.c
61
62
  - ext/pg_copy_coder.c
@@ -82,6 +83,7 @@ extra_rdoc_files:
82
83
  - lib/pg/binary_decoder/date.rb
83
84
  - lib/pg/binary_decoder/timestamp.rb
84
85
  - lib/pg/binary_encoder/timestamp.rb
86
+ - lib/pg/cancel_connection.rb
85
87
  - lib/pg/coder.rb
86
88
  - lib/pg/connection.rb
87
89
  - lib/pg/exceptions.rb
@@ -112,7 +114,6 @@ files:
112
114
  - README.ja.md
113
115
  - README.md
114
116
  - Rakefile
115
- - Rakefile.cross
116
117
  - certs/ged.pem
117
118
  - certs/kanis@comcard.de.pem
118
119
  - certs/larskanis-2022.pem
@@ -128,6 +129,7 @@ files:
128
129
  - ext/pg.h
129
130
  - ext/pg_binary_decoder.c
130
131
  - ext/pg_binary_encoder.c
132
+ - ext/pg_cancel_connection.c
131
133
  - ext/pg_coder.c
132
134
  - ext/pg_connection.c
133
135
  - ext/pg_copy_coder.c
@@ -149,8 +151,6 @@ files:
149
151
  - ext/vc/pg.sln
150
152
  - ext/vc/pg_18/pg.vcproj
151
153
  - ext/vc/pg_19/pg_19.vcproj
152
- - lib/2.5/pg_ext.so
153
- - lib/2.6/pg_ext.so
154
154
  - lib/2.7/pg_ext.so
155
155
  - lib/3.0/pg_ext.so
156
156
  - lib/pg.rb
@@ -161,6 +161,7 @@ files:
161
161
  - lib/pg/binary_decoder/date.rb
162
162
  - lib/pg/binary_decoder/timestamp.rb
163
163
  - lib/pg/binary_encoder/timestamp.rb
164
+ - lib/pg/cancel_connection.rb
164
165
  - lib/pg/coder.rb
165
166
  - lib/pg/connection.rb
166
167
  - lib/pg/exceptions.rb
@@ -178,7 +179,6 @@ files:
178
179
  - lib/pg/tuple.rb
179
180
  - lib/pg/type_map_by_column.rb
180
181
  - lib/pg/version.rb
181
- - lib/x64-mingw32/libpq.dll
182
182
  - misc/openssl-pg-segfault.rb
183
183
  - misc/postgres/History.txt
184
184
  - misc/postgres/Manifest.txt
@@ -191,6 +191,7 @@ files:
191
191
  - misc/ruby-pg/Rakefile
192
192
  - misc/ruby-pg/lib/ruby/pg.rb
193
193
  - pg.gemspec
194
+ - ports/x64-mingw32/lib/libpq.dll
194
195
  - rakelib/task_extension.rb
195
196
  - sample/array_insert.rb
196
197
  - sample/async_api.rb
@@ -231,15 +232,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
231
232
  requirements:
232
233
  - - ">="
233
234
  - !ruby/object:Gem::Version
234
- version: '2.5'
235
+ version: '2.7'
235
236
  - - "<"
236
237
  - !ruby/object:Gem::Version
237
238
  version: 3.1.dev
238
239
  required_rubygems_version: !ruby/object:Gem::Requirement
239
240
  requirements:
240
- - - ">="
241
+ - - ">"
241
242
  - !ruby/object:Gem::Version
242
- version: '0'
243
+ version: 1.3.1
243
244
  requirements: []
244
245
  rubygems_version: 3.3.26
245
246
  signing_key:
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
data/lib/2.5/pg_ext.so DELETED
Binary file
data/lib/2.6/pg_ext.so DELETED
Binary file