pg 1.5.9-x64-mingw-ucrt → 1.6.0.rc1-x64-mingw-ucrt

Sign up to get free protection for your applications and to get access to all the features.
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