pg 0.18.4 → 1.5.3
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 +5 -5
- checksums.yaml.gz.sig +0 -0
- data/.appveyor.yml +42 -0
- data/.gems +6 -0
- data/.github/workflows/binary-gems.yml +117 -0
- data/.github/workflows/source-gem.yml +137 -0
- data/.gitignore +22 -0
- data/.hgsigs +34 -0
- data/.hgtags +41 -0
- data/.irbrc +23 -0
- data/.pryrc +23 -0
- data/.tm_properties +21 -0
- data/.travis.yml +49 -0
- data/BSDL +2 -2
- data/Gemfile +14 -0
- data/History.md +876 -0
- data/Manifest.txt +8 -21
- data/README-Windows.rdoc +4 -4
- data/README.ja.md +276 -0
- data/README.md +286 -0
- data/Rakefile +38 -141
- data/Rakefile.cross +69 -72
- data/certs/ged.pem +24 -0
- data/certs/larskanis-2022.pem +26 -0
- data/certs/larskanis-2023.pem +24 -0
- data/ext/errorcodes.def +113 -0
- data/ext/errorcodes.rb +1 -1
- data/ext/errorcodes.txt +36 -2
- data/ext/extconf.rb +119 -54
- data/ext/gvl_wrappers.c +8 -0
- data/ext/gvl_wrappers.h +44 -33
- data/ext/pg.c +226 -200
- data/ext/pg.h +99 -99
- data/ext/pg_binary_decoder.c +162 -16
- data/ext/pg_binary_encoder.c +245 -20
- data/ext/pg_coder.c +189 -44
- data/ext/pg_connection.c +1865 -1172
- data/ext/pg_copy_coder.c +398 -42
- data/ext/pg_errors.c +1 -1
- data/ext/pg_record_coder.c +522 -0
- data/ext/pg_result.c +727 -232
- data/ext/pg_text_decoder.c +627 -43
- data/ext/pg_text_encoder.c +266 -102
- data/ext/pg_tuple.c +572 -0
- data/ext/pg_type_map.c +58 -17
- data/ext/pg_type_map_all_strings.c +21 -7
- data/ext/pg_type_map_by_class.c +59 -27
- data/ext/pg_type_map_by_column.c +80 -37
- data/ext/pg_type_map_by_mri_type.c +49 -20
- data/ext/pg_type_map_by_oid.c +62 -29
- data/ext/pg_type_map_in_ruby.c +56 -22
- data/ext/{util.c → pg_util.c} +12 -12
- data/ext/{util.h → pg_util.h} +2 -2
- data/lib/pg/basic_type_map_based_on_result.rb +67 -0
- data/lib/pg/basic_type_map_for_queries.rb +198 -0
- data/lib/pg/basic_type_map_for_results.rb +104 -0
- data/lib/pg/basic_type_registry.rb +299 -0
- data/lib/pg/binary_decoder/date.rb +9 -0
- data/lib/pg/binary_decoder/timestamp.rb +26 -0
- data/lib/pg/binary_encoder/timestamp.rb +20 -0
- data/lib/pg/coder.rb +36 -13
- data/lib/pg/connection.rb +797 -77
- data/lib/pg/exceptions.rb +16 -2
- data/lib/pg/result.rb +24 -7
- data/lib/pg/text_decoder/date.rb +18 -0
- data/lib/pg/text_decoder/inet.rb +9 -0
- data/lib/pg/text_decoder/json.rb +14 -0
- data/lib/pg/text_decoder/numeric.rb +9 -0
- data/lib/pg/text_decoder/timestamp.rb +30 -0
- data/lib/pg/text_encoder/date.rb +12 -0
- data/lib/pg/text_encoder/inet.rb +28 -0
- data/lib/pg/text_encoder/json.rb +14 -0
- data/lib/pg/text_encoder/numeric.rb +9 -0
- data/lib/pg/text_encoder/timestamp.rb +24 -0
- data/lib/pg/tuple.rb +30 -0
- data/lib/pg/type_map_by_column.rb +3 -2
- data/lib/pg/version.rb +4 -0
- data/lib/pg.rb +106 -41
- data/misc/openssl-pg-segfault.rb +31 -0
- data/misc/postgres/History.txt +9 -0
- data/misc/postgres/Manifest.txt +5 -0
- data/misc/postgres/README.txt +21 -0
- data/misc/postgres/Rakefile +21 -0
- data/misc/postgres/lib/postgres.rb +16 -0
- data/misc/ruby-pg/History.txt +9 -0
- data/misc/ruby-pg/Manifest.txt +5 -0
- data/misc/ruby-pg/README.txt +21 -0
- data/misc/ruby-pg/Rakefile +21 -0
- data/misc/ruby-pg/lib/ruby/pg.rb +16 -0
- data/pg.gemspec +34 -0
- data/rakelib/task_extension.rb +46 -0
- data/sample/array_insert.rb +1 -1
- data/sample/async_api.rb +4 -8
- data/sample/async_copyto.rb +1 -1
- data/sample/async_mixed.rb +1 -1
- data/sample/check_conn.rb +1 -1
- data/sample/copydata.rb +71 -0
- data/sample/copyfrom.rb +1 -1
- data/sample/copyto.rb +1 -1
- data/sample/cursor.rb +1 -1
- data/sample/disk_usage_report.rb +6 -15
- data/sample/issue-119.rb +2 -2
- data/sample/losample.rb +1 -1
- data/sample/minimal-testcase.rb +2 -2
- data/sample/notify_wait.rb +1 -1
- data/sample/pg_statistics.rb +6 -15
- data/sample/replication_monitor.rb +9 -18
- data/sample/test_binary_values.rb +1 -1
- data/sample/wal_shipper.rb +2 -2
- data/sample/warehouse_partitions.rb +8 -17
- data/translation/.po4a-version +7 -0
- data/translation/po/all.pot +910 -0
- data/translation/po/ja.po +1047 -0
- data/translation/po4a.cfg +12 -0
- data.tar.gz.sig +0 -0
- metadata +136 -213
- metadata.gz.sig +0 -0
- data/ChangeLog +0 -5911
- data/History.rdoc +0 -338
- data/README.ja.rdoc +0 -14
- data/README.rdoc +0 -164
- data/lib/pg/basic_type_mapping.rb +0 -399
- data/lib/pg/constants.rb +0 -11
- data/lib/pg/text_decoder.rb +0 -44
- data/lib/pg/text_encoder.rb +0 -27
- data/spec/data/expected_trace.out +0 -26
- data/spec/data/random_binary_data +0 -0
- data/spec/helpers.rb +0 -355
- data/spec/pg/basic_type_mapping_spec.rb +0 -251
- data/spec/pg/connection_spec.rb +0 -1544
- data/spec/pg/result_spec.rb +0 -449
- data/spec/pg/type_map_by_class_spec.rb +0 -138
- data/spec/pg/type_map_by_column_spec.rb +0 -222
- data/spec/pg/type_map_by_mri_type_spec.rb +0 -136
- data/spec/pg/type_map_by_oid_spec.rb +0 -149
- data/spec/pg/type_map_in_ruby_spec.rb +0 -164
- data/spec/pg/type_map_spec.rb +0 -22
- data/spec/pg/type_spec.rb +0 -697
- data/spec/pg_spec.rb +0 -50
data/Rakefile
CHANGED
|
@@ -1,22 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
# -*- rake -*-
|
|
2
2
|
|
|
3
3
|
require 'rbconfig'
|
|
4
4
|
require 'pathname'
|
|
5
5
|
require 'tmpdir'
|
|
6
|
-
|
|
7
|
-
begin
|
|
8
|
-
require 'rake/extensiontask'
|
|
9
|
-
rescue LoadError
|
|
10
|
-
abort "This Rakefile requires rake-compiler (gem install rake-compiler)"
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
begin
|
|
14
|
-
require 'hoe'
|
|
15
|
-
rescue LoadError
|
|
16
|
-
abort "This Rakefile requires hoe (gem install hoe)"
|
|
17
|
-
end
|
|
18
|
-
|
|
6
|
+
require 'rake/extensiontask'
|
|
19
7
|
require 'rake/clean'
|
|
8
|
+
require 'rspec/core/rake_task'
|
|
9
|
+
require 'bundler'
|
|
10
|
+
require 'bundler/gem_helper'
|
|
20
11
|
|
|
21
12
|
# Build directory constants
|
|
22
13
|
BASEDIR = Pathname( __FILE__ ).dirname
|
|
@@ -25,98 +16,38 @@ LIBDIR = BASEDIR + 'lib'
|
|
|
25
16
|
EXTDIR = BASEDIR + 'ext'
|
|
26
17
|
PKGDIR = BASEDIR + 'pkg'
|
|
27
18
|
TMPDIR = BASEDIR + 'tmp'
|
|
19
|
+
TESTDIR = BASEDIR + "tmp_test_*"
|
|
28
20
|
|
|
29
21
|
DLEXT = RbConfig::CONFIG['DLEXT']
|
|
30
22
|
EXT = LIBDIR + "pg_ext.#{DLEXT}"
|
|
31
23
|
|
|
32
24
|
GEMSPEC = 'pg.gemspec'
|
|
33
25
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
CLOBBER.include( TEST_DIRECTORY.to_s )
|
|
26
|
+
CLEAN.include( TESTDIR.to_s )
|
|
37
27
|
CLEAN.include( PKGDIR.to_s, TMPDIR.to_s )
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
Hoe.plugin :signing
|
|
42
|
-
Hoe.plugin :deveiate
|
|
43
|
-
Hoe.plugin :bundler
|
|
44
|
-
|
|
45
|
-
Hoe.plugins.delete :rubyforge
|
|
46
|
-
Hoe.plugins.delete :compiler
|
|
28
|
+
CLEAN.include "lib/*/libpq.dll"
|
|
29
|
+
CLEAN.include "lib/pg_ext.*"
|
|
30
|
+
CLEAN.include "lib/pg/postgresql_lib_path.rb"
|
|
47
31
|
|
|
48
32
|
load 'Rakefile.cross'
|
|
49
33
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
$hoespec = Hoe.spec 'pg' do
|
|
53
|
-
self.readme_file = 'README.rdoc'
|
|
54
|
-
self.history_file = 'History.rdoc'
|
|
55
|
-
self.extra_rdoc_files = Rake::FileList[ '*.rdoc' ]
|
|
56
|
-
self.extra_rdoc_files.include( 'POSTGRES', 'LICENSE' )
|
|
57
|
-
self.extra_rdoc_files.include( 'ext/*.c' )
|
|
58
|
-
self.license :BSD
|
|
59
|
-
|
|
60
|
-
self.developer 'Michael Granger', 'ged@FaerieMUD.org'
|
|
61
|
-
self.developer 'Lars Kanis', 'lars@greiz-reinsdorf.de'
|
|
62
|
-
|
|
63
|
-
self.dependency 'rake-compiler', '~> 0.9', :developer
|
|
64
|
-
self.dependency 'rake-compiler-dock', '~> 0.3', :developer
|
|
65
|
-
self.dependency 'hoe', '~> 3.12', :developer
|
|
66
|
-
self.dependency 'hoe-deveiate', '~> 0.6', :developer
|
|
67
|
-
self.dependency 'hoe-bundler', '~> 1.0', :developer
|
|
68
|
-
self.dependency 'rspec', '~> 3.0', :developer
|
|
69
|
-
|
|
70
|
-
self.spec_extras[:licenses] = ['BSD', 'Ruby', 'GPL']
|
|
71
|
-
self.spec_extras[:extensions] = [ 'ext/extconf.rb' ]
|
|
72
|
-
|
|
73
|
-
self.require_ruby_version( '>= 1.9.3' )
|
|
74
|
-
|
|
75
|
-
self.hg_sign_tags = true if self.respond_to?( :hg_sign_tags= )
|
|
76
|
-
self.check_history_on_release = true if self.respond_to?( :check_history_on_release= )
|
|
77
|
-
|
|
78
|
-
self.rdoc_locations << "deveiate:/usr/local/www/public/code/#{remote_rdoc_dir}"
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
ENV['VERSION'] ||= $hoespec.spec.version.to_s
|
|
82
|
-
|
|
83
|
-
# Tests should pass before checking in
|
|
84
|
-
task 'hg:precheckin' => [ :check_history, :check_manifest, :spec ]
|
|
85
|
-
|
|
86
|
-
# Support for 'rvm specs'
|
|
87
|
-
task :specs => :spec
|
|
88
|
-
|
|
89
|
-
# Compile before testing
|
|
90
|
-
task :spec => :compile
|
|
91
|
-
|
|
92
|
-
# gem-testers support
|
|
93
|
-
task :test do
|
|
94
|
-
# rake-compiler always wants to copy the compiled extension into lib/, but
|
|
95
|
-
# we don't want testers to have to re-compile, especially since that
|
|
96
|
-
# often fails because they can't (and shouldn't have to) write to tmp/ in
|
|
97
|
-
# the installed gem dir. So we clear the task rake-compiler set up
|
|
98
|
-
# to break the dependency between :spec and :compile when running under
|
|
99
|
-
# rubygems-test, and then run :spec.
|
|
100
|
-
Rake::Task[ EXT.to_s ].clear
|
|
101
|
-
Rake::Task[ :spec ].execute
|
|
102
|
-
end
|
|
34
|
+
Bundler::GemHelper.install_tasks
|
|
35
|
+
$gem_spec = Bundler.load_gemspec(GEMSPEC)
|
|
103
36
|
|
|
104
37
|
desc "Turn on warnings and debugging in the build."
|
|
105
38
|
task :maint do
|
|
106
39
|
ENV['MAINTAINER_MODE'] = 'yes'
|
|
107
40
|
end
|
|
108
41
|
|
|
109
|
-
ENV['RUBY_CC_VERSION'] ||= '1.8.7:1.9.2:2.0.0'
|
|
110
|
-
|
|
111
42
|
# Rake-compiler task
|
|
112
43
|
Rake::ExtensionTask.new do |ext|
|
|
113
44
|
ext.name = 'pg_ext'
|
|
114
|
-
ext.gem_spec = $
|
|
45
|
+
ext.gem_spec = $gem_spec
|
|
115
46
|
ext.ext_dir = 'ext'
|
|
116
47
|
ext.lib_dir = 'lib'
|
|
117
48
|
ext.source_pattern = "*.{c,h}"
|
|
118
49
|
ext.cross_compile = true
|
|
119
|
-
ext.cross_platform = CrossLibraries.map
|
|
50
|
+
ext.cross_platform = CrossLibraries.map(&:for_platform)
|
|
120
51
|
|
|
121
52
|
ext.cross_config_options += CrossLibraries.map do |lib|
|
|
122
53
|
{
|
|
@@ -132,68 +63,39 @@ Rake::ExtensionTask.new do |ext|
|
|
|
132
63
|
|
|
133
64
|
# Add libpq.dll to windows binary gemspec
|
|
134
65
|
ext.cross_compiling do |spec|
|
|
135
|
-
|
|
136
|
-
spec.files << "lib/#{spec.platform.to_s.gsub(/^x86-/, "i386-")}/libpq.dll"
|
|
66
|
+
spec.files << "lib/#{spec.platform}/libpq.dll"
|
|
137
67
|
end
|
|
138
68
|
end
|
|
139
69
|
|
|
70
|
+
RSpec::Core::RakeTask.new(:spec).rspec_opts = "--profile -cfdoc"
|
|
71
|
+
task :test => :spec
|
|
140
72
|
|
|
141
73
|
# Use the fivefish formatter for docs generated from development checkout
|
|
142
|
-
|
|
143
|
-
require 'rdoc/task'
|
|
144
|
-
|
|
145
|
-
Rake::Task[ 'docs' ].clear
|
|
146
|
-
RDoc::Task.new( 'docs' ) do |rdoc|
|
|
147
|
-
rdoc.main = "README.rdoc"
|
|
148
|
-
rdoc.rdoc_files.include( "*.rdoc", "ChangeLog", "lib/**/*.rb", 'ext/**/*.{c,h}' )
|
|
149
|
-
rdoc.generator = :fivefish
|
|
150
|
-
rdoc.title = "PG: The Ruby PostgreSQL Driver"
|
|
151
|
-
rdoc.rdoc_dir = 'doc'
|
|
152
|
-
end
|
|
153
|
-
end
|
|
154
|
-
|
|
74
|
+
require 'rdoc/task'
|
|
155
75
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
if File.exist?('.hg/branch')
|
|
162
|
-
$stderr.puts "Updating the changelog..."
|
|
163
|
-
begin
|
|
164
|
-
include Hoe::MercurialHelpers
|
|
165
|
-
content = make_changelog()
|
|
166
|
-
rescue NameError
|
|
167
|
-
abort "Packaging tasks require the hoe-mercurial plugin (gem install hoe-mercurial)"
|
|
168
|
-
end
|
|
169
|
-
File.open( task.name, 'w', 0644 ) do |fh|
|
|
170
|
-
fh.print( content )
|
|
171
|
-
end
|
|
172
|
-
else
|
|
173
|
-
touch 'ChangeLog'
|
|
174
|
-
end
|
|
76
|
+
RDoc::Task.new( 'docs' ) do |rdoc|
|
|
77
|
+
rdoc.options = $gem_spec.rdoc_options
|
|
78
|
+
rdoc.rdoc_files = $gem_spec.extra_rdoc_files
|
|
79
|
+
rdoc.generator = :fivefish
|
|
80
|
+
rdoc.rdoc_dir = 'doc'
|
|
175
81
|
end
|
|
176
82
|
|
|
177
|
-
|
|
178
|
-
task :
|
|
83
|
+
desc "Build the source gem #{$gem_spec.full_name}.gem into the pkg directory"
|
|
84
|
+
task :gem => :build
|
|
179
85
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
PgTestingHelpers.stop_existing_postmasters()
|
|
185
|
-
Rake::Task[:clean].invoke
|
|
86
|
+
task :clobber do
|
|
87
|
+
puts "Stop any Postmaster instances that remain after testing."
|
|
88
|
+
require_relative 'spec/helpers'
|
|
89
|
+
PG::TestingHelpers.stop_existing_postmasters()
|
|
186
90
|
end
|
|
187
91
|
|
|
188
92
|
desc "Update list of server error codes"
|
|
189
93
|
task :update_error_codes do
|
|
190
|
-
URL_ERRORCODES_TXT = "http://git.postgresql.org/gitweb/?p=postgresql.git;a=blob_plain;f=src/backend/utils/errcodes.txt;hb=
|
|
94
|
+
URL_ERRORCODES_TXT = "http://git.postgresql.org/gitweb/?p=postgresql.git;a=blob_plain;f=src/backend/utils/errcodes.txt;hb=refs/tags/REL_15_0"
|
|
191
95
|
|
|
192
96
|
ERRORCODES_TXT = "ext/errorcodes.txt"
|
|
193
97
|
sh "wget #{URL_ERRORCODES_TXT.inspect} -O #{ERRORCODES_TXT.inspect} || curl #{URL_ERRORCODES_TXT.inspect} -o #{ERRORCODES_TXT.inspect}"
|
|
194
|
-
end
|
|
195
98
|
|
|
196
|
-
file 'ext/errorcodes.def' => ['ext/errorcodes.rb', 'ext/errorcodes.txt'] do
|
|
197
99
|
ruby 'ext/errorcodes.rb', 'ext/errorcodes.txt', 'ext/errorcodes.def'
|
|
198
100
|
end
|
|
199
101
|
|
|
@@ -202,17 +104,12 @@ file 'ext/pg_errors.c' => ['ext/errorcodes.def'] do
|
|
|
202
104
|
touch 'ext/pg_errors.c'
|
|
203
105
|
end
|
|
204
106
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
spec.version = "#{spec.version}.pre#{Time.now.strftime("%Y%m%d%H%M%S")}"
|
|
211
|
-
File.open( task.name, 'w' ) do |fh|
|
|
212
|
-
fh.write( spec.to_ruby )
|
|
213
|
-
end
|
|
214
|
-
end
|
|
215
|
-
|
|
216
|
-
CLOBBER.include( GEMSPEC.to_s )
|
|
217
|
-
task :default => :gemspec
|
|
107
|
+
desc "Translate readme"
|
|
108
|
+
task :translate do
|
|
109
|
+
cd "translation" do
|
|
110
|
+
# po4a's lexer might change, so record its version for reference
|
|
111
|
+
sh "LANG=C po4a --version > .po4a-version"
|
|
218
112
|
|
|
113
|
+
sh "po4a po4a.cfg"
|
|
114
|
+
end
|
|
115
|
+
end
|
data/Rakefile.cross
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
# -*- rake -*-
|
|
2
2
|
|
|
3
3
|
require 'uri'
|
|
4
4
|
require 'tempfile'
|
|
@@ -7,6 +7,7 @@ require 'rake/clean'
|
|
|
7
7
|
require 'rake/extensiontask'
|
|
8
8
|
require 'rake/extensioncompiler'
|
|
9
9
|
require 'ostruct'
|
|
10
|
+
require_relative 'rakelib/task_extension'
|
|
10
11
|
|
|
11
12
|
MISCDIR = BASEDIR + 'misc'
|
|
12
13
|
|
|
@@ -20,6 +21,7 @@ end
|
|
|
20
21
|
|
|
21
22
|
class CrossLibrary < OpenStruct
|
|
22
23
|
include Rake::DSL
|
|
24
|
+
prepend TaskExtension
|
|
23
25
|
|
|
24
26
|
def initialize(for_platform, openssl_config, toolchain)
|
|
25
27
|
super()
|
|
@@ -29,15 +31,15 @@ class CrossLibrary < OpenStruct
|
|
|
29
31
|
self.host_platform = toolchain
|
|
30
32
|
|
|
31
33
|
# Cross-compilation constants
|
|
32
|
-
self.openssl_version = ENV['OPENSSL_VERSION'] || '1.0
|
|
33
|
-
self.postgresql_version = ENV['POSTGRESQL_VERSION'] || '
|
|
34
|
+
self.openssl_version = ENV['OPENSSL_VERSION'] || '3.1.0'
|
|
35
|
+
self.postgresql_version = ENV['POSTGRESQL_VERSION'] || '15.2'
|
|
34
36
|
|
|
35
37
|
# Check if symlinks work in the current working directory.
|
|
36
38
|
# This fails, if rake-compiler-dock is running on a Windows box.
|
|
37
39
|
begin
|
|
38
40
|
FileUtils.rm_f '.test_symlink'
|
|
39
41
|
FileUtils.ln_s '/', '.test_symlink'
|
|
40
|
-
rescue SystemCallError
|
|
42
|
+
rescue NotImplementedError, SystemCallError
|
|
41
43
|
# Symlinks don't work -> use home directory instead
|
|
42
44
|
self.compile_home = Pathname( "~/.ruby-pg-build" ).expand_path
|
|
43
45
|
else
|
|
@@ -45,6 +47,8 @@ class CrossLibrary < OpenStruct
|
|
|
45
47
|
end
|
|
46
48
|
self.static_sourcesdir = compile_home + 'sources'
|
|
47
49
|
self.static_builddir = compile_home + 'builds' + for_platform
|
|
50
|
+
CLOBBER.include( static_sourcesdir )
|
|
51
|
+
CLEAN.include( static_builddir )
|
|
48
52
|
|
|
49
53
|
# Static OpenSSL build vars
|
|
50
54
|
self.static_openssl_builddir = static_builddir + "openssl-#{openssl_version}"
|
|
@@ -54,8 +58,8 @@ class CrossLibrary < OpenStruct
|
|
|
54
58
|
self.openssl_tarball = static_sourcesdir + File.basename( openssl_source_uri.path )
|
|
55
59
|
self.openssl_makefile = static_openssl_builddir + 'Makefile'
|
|
56
60
|
|
|
57
|
-
self.
|
|
58
|
-
self.
|
|
61
|
+
self.libssl = static_openssl_builddir + 'libssl.a'
|
|
62
|
+
self.libcrypto = static_openssl_builddir + 'libcrypto.a'
|
|
59
63
|
|
|
60
64
|
self.openssl_patches = Rake::FileList[ (MISCDIR + "openssl-#{openssl_version}.*.patch").to_s ]
|
|
61
65
|
|
|
@@ -81,19 +85,6 @@ class CrossLibrary < OpenStruct
|
|
|
81
85
|
# clean intermediate files and folders
|
|
82
86
|
CLEAN.include( static_builddir.to_s )
|
|
83
87
|
|
|
84
|
-
|
|
85
|
-
ENV['RUBY_CC_VERSION'] ||= '1.9.3:2.0.0'
|
|
86
|
-
|
|
87
|
-
def download(url, save_to)
|
|
88
|
-
part = save_to+".part"
|
|
89
|
-
sh "wget #{url.to_s.inspect} -O #{part.inspect} || curl #{url.to_s.inspect} -o #{part.inspect}"
|
|
90
|
-
FileUtils.mv part, save_to
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
def run(*args)
|
|
94
|
-
sh *args
|
|
95
|
-
end
|
|
96
|
-
|
|
97
88
|
#####################################################################
|
|
98
89
|
### C R O S S - C O M P I L A T I O N - T A S K S
|
|
99
90
|
#####################################################################
|
|
@@ -126,11 +117,9 @@ class CrossLibrary < OpenStruct
|
|
|
126
117
|
end
|
|
127
118
|
|
|
128
119
|
self.cmd_prelude = [
|
|
129
|
-
|
|
130
|
-
"
|
|
120
|
+
"env",
|
|
121
|
+
"CROSS_COMPILE=#{host_platform}-",
|
|
131
122
|
"CFLAGS=-DDSO_WIN32",
|
|
132
|
-
"AR=#{host_platform}-ar",
|
|
133
|
-
"RANLIB=#{host_platform}-ranlib"
|
|
134
123
|
]
|
|
135
124
|
|
|
136
125
|
|
|
@@ -138,16 +127,16 @@ class CrossLibrary < OpenStruct
|
|
|
138
127
|
file openssl_makefile => static_openssl_builddir do |t|
|
|
139
128
|
chdir( static_openssl_builddir ) do
|
|
140
129
|
cmd = cmd_prelude.dup
|
|
141
|
-
cmd << "./Configure" << openssl_config
|
|
130
|
+
cmd << "./Configure" << "-static" << openssl_config
|
|
142
131
|
|
|
143
132
|
run( *cmd )
|
|
144
133
|
end
|
|
145
134
|
end
|
|
146
135
|
|
|
147
136
|
desc "compile static openssl libraries"
|
|
148
|
-
task
|
|
137
|
+
task "openssl_libs:#{for_platform}" => [ libssl, libcrypto ]
|
|
149
138
|
|
|
150
|
-
task
|
|
139
|
+
task "compile_static_openssl:#{for_platform}" => openssl_makefile do |t|
|
|
151
140
|
chdir( static_openssl_builddir ) do
|
|
152
141
|
cmd = cmd_prelude.dup
|
|
153
142
|
cmd << 'make' << "-j#{NUM_CPUS}" << 'build_libs'
|
|
@@ -156,15 +145,11 @@ class CrossLibrary < OpenStruct
|
|
|
156
145
|
end
|
|
157
146
|
end
|
|
158
147
|
|
|
159
|
-
desc "compile static #{
|
|
160
|
-
file
|
|
161
|
-
FileUtils.cp( static_openssl_builddir + 'libcrypto.a', libeay32.to_s )
|
|
162
|
-
end
|
|
148
|
+
desc "compile static #{libssl}"
|
|
149
|
+
file libssl => "compile_static_openssl:#{for_platform}"
|
|
163
150
|
|
|
164
|
-
desc "compile static #{
|
|
165
|
-
file
|
|
166
|
-
FileUtils.cp( static_openssl_builddir + 'libssl.a', libssleay32.to_s )
|
|
167
|
-
end
|
|
151
|
+
desc "compile static #{libcrypto}"
|
|
152
|
+
file libcrypto => "compile_static_openssl:#{for_platform}"
|
|
168
153
|
|
|
169
154
|
|
|
170
155
|
|
|
@@ -193,7 +178,7 @@ class CrossLibrary < OpenStruct
|
|
|
193
178
|
end
|
|
194
179
|
|
|
195
180
|
# generate the makefile in a clean build location
|
|
196
|
-
file postgresql_global_makefile => [ static_postgresql_builddir,
|
|
181
|
+
file postgresql_global_makefile => [ static_postgresql_builddir, "openssl_libs:#{for_platform}" ] do |t|
|
|
197
182
|
options = [
|
|
198
183
|
"--target=#{host_platform}",
|
|
199
184
|
"--host=#{host_platform}",
|
|
@@ -207,7 +192,7 @@ class CrossLibrary < OpenStruct
|
|
|
207
192
|
cmd << "CFLAGS=-L#{static_openssl_builddir}"
|
|
208
193
|
cmd << "LDFLAGS=-L#{static_openssl_builddir}"
|
|
209
194
|
cmd << "LDFLAGS_SL=-L#{static_openssl_builddir}"
|
|
210
|
-
cmd << "LIBS=-lwsock32 -lgdi32"
|
|
195
|
+
cmd << "LIBS=-lwsock32 -lgdi32 -lws2_32 -lcrypt32"
|
|
211
196
|
cmd << "CPPFLAGS=-I#{static_openssl_builddir}/include"
|
|
212
197
|
|
|
213
198
|
run( *cmd )
|
|
@@ -221,18 +206,21 @@ class CrossLibrary < OpenStruct
|
|
|
221
206
|
chdir( static_postgresql_srcdir + "common" ) do
|
|
222
207
|
sh 'make', "-j#{NUM_CPUS}"
|
|
223
208
|
end
|
|
209
|
+
chdir( static_postgresql_srcdir + "port" ) do
|
|
210
|
+
sh 'make', "-j#{NUM_CPUS}"
|
|
211
|
+
end
|
|
224
212
|
|
|
225
213
|
chdir( postgresql_lib.dirname ) do
|
|
226
214
|
sh 'make',
|
|
227
215
|
"-j#{NUM_CPUS}",
|
|
228
216
|
postgresql_lib.basename.to_s,
|
|
229
|
-
'SHLIB_LINK=-
|
|
217
|
+
'SHLIB_LINK=-lssl -lcrypto -lcrypt32 -lgdi32 -lsecur32 -lwsock32 -lws2_32'
|
|
230
218
|
end
|
|
231
219
|
end
|
|
232
220
|
|
|
233
221
|
|
|
234
222
|
#desc 'compile libpg.a'
|
|
235
|
-
task
|
|
223
|
+
task "native:#{for_platform}" => postgresql_lib
|
|
236
224
|
|
|
237
225
|
# copy libpq.dll to lib dir
|
|
238
226
|
dest_libpq = "lib/#{for_platform}/#{postgresql_lib.basename}"
|
|
@@ -247,22 +235,28 @@ class CrossLibrary < OpenStruct
|
|
|
247
235
|
cp postgresql_lib, stage_libpq
|
|
248
236
|
end
|
|
249
237
|
end
|
|
250
|
-
end
|
|
251
238
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
].map do |platform, openssl_config, toolchain|
|
|
257
|
-
CrossLibrary.new platform, openssl_config, toolchain
|
|
239
|
+
def download(url, save_to)
|
|
240
|
+
part = save_to+".part"
|
|
241
|
+
sh "wget #{url.to_s.inspect} -O #{part.inspect} || curl #{url.to_s.inspect} -o #{part.inspect}"
|
|
242
|
+
FileUtils.mv part, save_to
|
|
258
243
|
end
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
244
|
+
|
|
245
|
+
def run(*args)
|
|
246
|
+
sh(*args)
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
CrossLibraries = [
|
|
251
|
+
['x64-mingw-ucrt', 'mingw64', 'x86_64-w64-mingw32'],
|
|
252
|
+
['x86-mingw32', 'mingw', 'i686-w64-mingw32'],
|
|
253
|
+
['x64-mingw32', 'mingw64', 'x86_64-w64-mingw32'],
|
|
254
|
+
].map do |platform, openssl_config, toolchain|
|
|
255
|
+
CrossLibrary.new platform, openssl_config, toolchain
|
|
262
256
|
end
|
|
263
257
|
|
|
264
258
|
desc 'cross compile pg for win32'
|
|
265
|
-
task :cross => [ :mingw32
|
|
259
|
+
task :cross => [ :mingw32 ]
|
|
266
260
|
|
|
267
261
|
task :mingw32 do
|
|
268
262
|
# Use Rake::ExtensionCompiler helpers to find the proper host
|
|
@@ -273,29 +267,32 @@ task :mingw32 do
|
|
|
273
267
|
end
|
|
274
268
|
end
|
|
275
269
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
270
|
+
task 'gem:windows:prepare' do
|
|
271
|
+
require 'io/console'
|
|
272
|
+
require 'rake_compiler_dock'
|
|
273
|
+
|
|
274
|
+
# Copy gem signing key and certs to be accessible from the docker container
|
|
275
|
+
mkdir_p 'build/gem'
|
|
276
|
+
sh "cp ~/.gem/gem-*.pem build/gem/ || true"
|
|
277
|
+
sh "bundle package"
|
|
278
|
+
begin
|
|
279
|
+
OpenSSL::PKey.read(File.read(File.expand_path("~/.gem/gem-private_key.pem")), ENV["GEM_PRIVATE_KEY_PASSPHRASE"] || "")
|
|
280
|
+
rescue OpenSSL::PKey::PKeyError
|
|
281
|
+
ENV["GEM_PRIVATE_KEY_PASSPHRASE"] = STDIN.getpass("Enter passphrase of gem signature key: ")
|
|
282
|
+
retry
|
|
283
|
+
end
|
|
285
284
|
end
|
|
286
285
|
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
rake cross native gem RUBYOPT=--disable-rubygems RUBY_CC_VERSION=1.9.3:2.0.0:2.1.6:2.2.2
|
|
300
|
-
EOT
|
|
286
|
+
CrossLibraries.each do |xlib|
|
|
287
|
+
platform = xlib.for_platform
|
|
288
|
+
desc "Build fat binary gem for platform #{platform}"
|
|
289
|
+
task "gem:windows:#{platform}" => ['gem:windows:prepare', xlib.openssl_tarball, xlib.postgresql_tarball] do
|
|
290
|
+
RakeCompilerDock.sh <<-EOT, platform: platform
|
|
291
|
+
(cp build/gem/gem-*.pem ~/.gem/ || true) &&
|
|
292
|
+
bundle install --local &&
|
|
293
|
+
rake native:#{platform} pkg/#{$gem_spec.full_name}-#{platform}.gem MAKE="make -j`nproc`" RUBY_CC_VERSION=3.2.0:3.1.0:3.0.0:2.7.0:2.6.0:2.5.0
|
|
294
|
+
EOT
|
|
295
|
+
end
|
|
296
|
+
desc "Build the windows binary gems"
|
|
297
|
+
multitask 'gem:windows' => "gem:windows:#{platform}"
|
|
301
298
|
end
|
data/certs/ged.pem
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIID+DCCAmCgAwIBAgIBBDANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdnZWQv
|
|
3
|
+
REM9RmFlcmllTVVEL0RDPW9yZzAeFw0yMjAxMDcyMzU4MTRaFw0yMzAxMDcyMzU4
|
|
4
|
+
MTRaMCIxIDAeBgNVBAMMF2dlZC9EQz1GYWVyaWVNVUQvREM9b3JnMIIBojANBgkq
|
|
5
|
+
hkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAvyVhkRzvlEs0fe7145BYLfN6njX9ih5H
|
|
6
|
+
L60U0p0euIurpv84op9CNKF9tx+1WKwyQvQP7qFGuZxkSUuWcP/sFhDXL1lWUuIl
|
|
7
|
+
M4uHbGCRmOshDrF4dgnBeOvkHr1fIhPlJm5FO+Vew8tSQmlDsosxLUx+VB7DrVFO
|
|
8
|
+
5PU2AEbf04GGSrmqADGWXeaslaoRdb1fu/0M5qfPTRn5V39sWD9umuDAF9qqil/x
|
|
9
|
+
Sl6phTvgBrG8GExHbNZpLARd3xrBYLEFsX7RvBn2UPfgsrtvpdXjsHGfpT3IPN+B
|
|
10
|
+
vQ66lts4alKC69TE5cuKasWBm+16A4aEe3XdZBRNmtOu/g81gvwA7fkJHKllJuaI
|
|
11
|
+
dXzdHqq+zbGZVSQ7pRYHYomD0IiDe1DbIouFnPWmagaBnGHwXkDT2bKKP+s2v21m
|
|
12
|
+
ozilJg4aar2okb/RA6VS87o+d7g6LpDDMMQjH4G9OPnJENLdhu8KnPw/ivSVvQw7
|
|
13
|
+
N2I4L/ZOIe2DIVuYH7aLHfjZDQv/mNgpAgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYD
|
|
14
|
+
VR0PBAQDAgSwMB0GA1UdDgQWBBRyjf55EbrHagiRLqt5YAd3yb8k4DANBgkqhkiG
|
|
15
|
+
9w0BAQsFAAOCAYEASrm1AbEoxACZ9WXJH3R5axV3U0CA4xaETlL2YT+2nOfVBMQ9
|
|
16
|
+
0ZlkPx6j4ghKJgAIi1TMfDM2JyPJsppQh8tiNccDjWc62UZRY/dq26cMqf/lcI+a
|
|
17
|
+
6YBuEYvzZfearwVs8tHnXtwYV3WSCoCOQaB+nq2lA1O+nkKNl41WOsVbNama5jx3
|
|
18
|
+
8cQtVSEEmZy6jIDJ8c5TmBJ7BQUDEUEWA/A3V42Xyctoj7DvUXWE0lP+X6ypAVSr
|
|
19
|
+
lFh3TS64D7NTvxkmg7natUoCvobl6kGl4yMaqE4YRTlfuzhpf91TSOntClqrAOsS
|
|
20
|
+
K1s56WndQj3IoBocdY9mQhDZLtLHofSkymoP8btBlj5SsN24TiF0VMSZlctSCYZg
|
|
21
|
+
GKyHim/MMlIfGOWsgfioq5jzwmql7W4CDubbb8Lkg70v+hN2E/MnNVAcNE3gyaGc
|
|
22
|
+
P5YP5BAbNW+gvd3QHRiWTTuhgHrdDnGdXg93N2M5KHn1ug8BtPLQwlcFwEpKnlLn
|
|
23
|
+
btEP+7EplFuoiMfd
|
|
24
|
+
-----END CERTIFICATE-----
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIETTCCArWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAoMSYwJAYDVQQDDB1sYXJz
|
|
3
|
+
L0RDPWdyZWl6LXJlaW5zZG9yZi9EQz1kZTAeFw0yMjAyMTQxMzMwNTZaFw0yMzAy
|
|
4
|
+
MTQxMzMwNTZaMCgxJjAkBgNVBAMMHWxhcnMvREM9Z3JlaXotcmVpbnNkb3JmL0RD
|
|
5
|
+
PWRlMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAwum6Y1KznfpzXOT/
|
|
6
|
+
mZgJTBbxZuuZF49Fq3K0WA67YBzNlDv95qzSp7V/7Ek3NCcnT7G+2kSuhNo1FhdN
|
|
7
|
+
eSDO/moYebZNAcu3iqLsuzuULXPLuoU0GsMnVMqV9DZPh7cQHE5EBZ7hlzDBK7k/
|
|
8
|
+
8nBMvR0mHo77kIkapHc26UzVq/G0nKLfDsIHXVylto3PjzOumjG6GhmFN4r3cP6e
|
|
9
|
+
SDfl1FSeRYVpt4kmQULz/zdSaOH3AjAq7PM2Z91iGwQvoUXMANH2v89OWjQO/NHe
|
|
10
|
+
JMNDFsmHK/6Ji4Kk48Z3TyscHQnipAID5GhS1oD21/WePdj7GhmbF5gBzkV5uepd
|
|
11
|
+
eJQPgWGwrQW/Z2oPjRuJrRofzWfrMWqbOahj9uth6WSxhNexUtbjk6P8emmXOJi5
|
|
12
|
+
chQPnWX+N3Gj+jjYxqTFdwT7Mj3pv1VHa+aNUbqSPpvJeDyxRIuo9hvzDaBHb/Cg
|
|
13
|
+
9qRVcm8a96n4t7y2lrX1oookY6bkBaxWOMtWlqIprq8JZXM9AgMBAAGjgYEwfzAJ
|
|
14
|
+
BgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUOIdbSMr3VFrTCO9/cTM0
|
|
15
|
+
0exHzBcwIgYDVR0RBBswGYEXbGFyc0BncmVpei1yZWluc2RvcmYuZGUwIgYDVR0S
|
|
16
|
+
BBswGYEXbGFyc0BncmVpei1yZWluc2RvcmYuZGUwDQYJKoZIhvcNAQELBQADggGB
|
|
17
|
+
AFWP7F/y3Oq3NgrqUOnjKOeDaBa7AqNhHS+PZg+C90lnJzMgOs4KKgZYxqSQVSab
|
|
18
|
+
SCEmzIO/StkXY4NpJ4fYLrHemf/fJy1wPyu+fNdp5SEEUwEo+2toRFlzTe4u4LdS
|
|
19
|
+
QC636nPPTMt8H3xz2wf/lUIUeo2Qc95Qt2BQM465ibbG9kmA3c7Sopx6yOabYOAl
|
|
20
|
+
KPRbOSEPiWYcF9Suuz8Gdf8jxEtPlnZiwRvnYJ+IHMq3XQCJWPpMzdDMbtlgHbXE
|
|
21
|
+
vq1zOTLMSYAS0UB3uionR4yo1hLz60odwkCm7qf0o2Ci/5OjtB0a89VuyqRU2vUJ
|
|
22
|
+
QH95WBjDJ6lCCW7J0mrMPnJQSUFTmufsU6jOChvPaCeAzW1YwrsP/YKnvwueG7ip
|
|
23
|
+
VOdW6RitjtFxhS7evRL0201+KUvLz12zZWWjOcujlQs64QprxOtiv/MiisKb1Ng+
|
|
24
|
+
oL1mUdzB8KrZL4/WbG5YNX6UTtJbIOu9qEFbBAy4/jtIkJX+dlNoFwd4GXQW1YNO
|
|
25
|
+
nA==
|
|
26
|
+
-----END CERTIFICATE-----
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIEBDCCAmygAwIBAgIBAjANBgkqhkiG9w0BAQsFADAoMSYwJAYDVQQDDB1sYXJz
|
|
3
|
+
L0RDPWdyZWl6LXJlaW5zZG9yZi9EQz1kZTAeFw0yMzAyMTUxNzQxMTVaFw0yNDAy
|
|
4
|
+
MTUxNzQxMTVaMCgxJjAkBgNVBAMMHWxhcnMvREM9Z3JlaXotcmVpbnNkb3JmL0RD
|
|
5
|
+
PWRlMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAwum6Y1KznfpzXOT/
|
|
6
|
+
mZgJTBbxZuuZF49Fq3K0WA67YBzNlDv95qzSp7V/7Ek3NCcnT7G+2kSuhNo1FhdN
|
|
7
|
+
eSDO/moYebZNAcu3iqLsuzuULXPLuoU0GsMnVMqV9DZPh7cQHE5EBZ7hlzDBK7k/
|
|
8
|
+
8nBMvR0mHo77kIkapHc26UzVq/G0nKLfDsIHXVylto3PjzOumjG6GhmFN4r3cP6e
|
|
9
|
+
SDfl1FSeRYVpt4kmQULz/zdSaOH3AjAq7PM2Z91iGwQvoUXMANH2v89OWjQO/NHe
|
|
10
|
+
JMNDFsmHK/6Ji4Kk48Z3TyscHQnipAID5GhS1oD21/WePdj7GhmbF5gBzkV5uepd
|
|
11
|
+
eJQPgWGwrQW/Z2oPjRuJrRofzWfrMWqbOahj9uth6WSxhNexUtbjk6P8emmXOJi5
|
|
12
|
+
chQPnWX+N3Gj+jjYxqTFdwT7Mj3pv1VHa+aNUbqSPpvJeDyxRIuo9hvzDaBHb/Cg
|
|
13
|
+
9qRVcm8a96n4t7y2lrX1oookY6bkBaxWOMtWlqIprq8JZXM9AgMBAAGjOTA3MAkG
|
|
14
|
+
A1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBQ4h1tIyvdUWtMI739xMzTR
|
|
15
|
+
7EfMFzANBgkqhkiG9w0BAQsFAAOCAYEAQAcuTARfiiVUVx5KURICfdTM2Kd7LhOn
|
|
16
|
+
qt3Vs4ANGvT226LEp3RnQ+kWGQYMRb3cw3LY2TNQRPlnZxE994mgjBscN4fbjXqO
|
|
17
|
+
T0JbVpeszRZa5k1goggbnWT7CO7yU7WcHh13DaSubY7HUpAJn2xz9w2stxQfN/EE
|
|
18
|
+
VMlnDJ1P7mUHAvpK8X9j9h7Xlc1niViT18MYwux8mboVTryrLr+clATUkkM3yBF0
|
|
19
|
+
RV+c34ReW5eXO9Tr6aKTxh/pFC9ggDT6jOxuJgSvG8HWJzVf4NDvMavIas4KYjiI
|
|
20
|
+
BU6CpWaG5NxicqL3BERi52U43HV08br+LNVpb7Rekgve/PJuSFnAR015bhSRXe5U
|
|
21
|
+
vBioD1qW2ZW9tXg8Ww2IfDaO5a1So5Xby51rhNlyo6ATj2NkuLWZUKPKHhAz0TKm
|
|
22
|
+
Dzx/gFSOrRoCt2mXNgrmcAfr386AfaMvCh7cXqdxZwmVo7ILZCYXck0pajvubsDd
|
|
23
|
+
NUIIFkVXvd1odFyK9LF1RFAtxn/iAmpx
|
|
24
|
+
-----END CERTIFICATE-----
|