pg 0.15.0.pre.432 → 0.15.0.pre.454

Sign up to get free protection for your applications and to get access to all the features.
data.tar.gz.sig CHANGED
Binary file
data/ChangeLog CHANGED
@@ -1,3 +1,141 @@
1
+ 2013-03-16 Lars Kanis <kanis@comcard.de>
2
+
3
+ * ext/extconf.rb, ext/pg_connection.c, lib/pg/connection.rb,
4
+ spec/lib/helpers.rb, spec/pg/connection_spec.rb:
5
+ Add working Connection#socket_io for Windows and remove this method
6
+ for platforms that don't support it.
7
+
8
+ This also requires to move the code from Ruby to C.
9
+
10
+ Use different excudes for :unix and :socket_io.
11
+ [79d6ab5cf45a] [tip]
12
+
13
+ 2013-03-14 Lars Kanis <kanis@comcard.de>
14
+
15
+ * ext/pg_connection.c:
16
+ Use #async_exec as alias to #exec on platforms with native threads.
17
+
18
+ Since we release the GVL for all blocking function calls, now, #exec
19
+ has the same behaviour as #async_exec.
20
+
21
+ Discussed on: https://groups.google.com/d/msg/ruby-
22
+ pg/OVVO7XjH7Aw/7UIwi6g10PsJ
23
+ [ca09386c2aac]
24
+
25
+ * ext/pg_connection.c:
26
+ Test case 'can wait for NOTIFY events' failed before this fix.
27
+ [266d915dfb86]
28
+
29
+ 2013-03-13 Lars Kanis <kanis@comcard.de>
30
+
31
+ * spec/pg/connection_spec.rb:
32
+ Mark tests to #socket_io as UNIX-only - they fail on Windows.
33
+ [1f23c39fb8c8]
34
+
35
+ * Rakefile.cross:
36
+ Print proper message in case that cross compilation is not usable.
37
+ [307438918863]
38
+
39
+ * Rakefile, Rakefile.cross:
40
+ Merge with https://bitbucket.org/ged/ruby-pg
41
+ [3230e6c245e0]
42
+
43
+ * Rakefile, Rakefile.cross:
44
+ Add support for cross build for multiple platforms (i386-mingw32 and
45
+ x64-mingw32).
46
+
47
+ Update OpenSSL for cross build to 1.0.1e Update PostgreSQL for cross
48
+ build to 9.2.3
49
+
50
+ Remove -lws2_32 for PostgreSQL build. It fails to compile for
51
+ x64-mingw32 elsewise.
52
+ [6a2a1a53dedc]
53
+
54
+ 2013-03-12 Michael Granger <ged@FaerieMUD.org>
55
+
56
+ * Rakefile.cross:
57
+ Bump PostgreSQL/OpenSSL versions for the binary gem
58
+ [b6f885cd57f7]
59
+
60
+ * spec/pg/connection_spec.rb:
61
+ Re-enable application_name setting with corrected guard
62
+ [5b2e5992bb78]
63
+
64
+ * .rvm.gems, Rakefile, Rakefile.cross:
65
+ Bump versions of dev dependencies
66
+ [cba92fb4b89e]
67
+
68
+ 2013-03-06 Michael Granger <ged@FaerieMUD.org>
69
+
70
+ * README.rdoc:
71
+ Add a hint about installing with Bundler to the README.
72
+
73
+ Thanks to StackExchange user 'darnumbrella' for this hint.
74
+ http://stackoverflow.com/questions/15234810/cannot-install-pg-gem
75
+ [93bacacab796]
76
+
77
+ * History.rdoc:
78
+ Update History
79
+ [0ab4e5cf47e9]
80
+
81
+ 2013-03-03 Michael Granger <ged@FaerieMUD.org>
82
+
83
+ * spec/pg/connection_spec.rb:
84
+ Remove application_name setting for PG < 8.3
85
+ [130d50d246fb]
86
+
87
+ * spec/pg/connection_spec.rb:
88
+ Fix tests under Postgres 8.3.
89
+
90
+ Ugh. I need an 8.3 testing box.
91
+ [bda5c1c794f1]
92
+
93
+ * spec/pg/connection_spec.rb:
94
+ Don't set the application_name for versions of PG less than 9.0
95
+ [9daa5a0012d8]
96
+
97
+ * spec/lib/helpers.rb:
98
+ Remove reference comment
99
+ [edc642a94aa6]
100
+
101
+ * ext/pg_connection.c, spec/lib/helpers.rb,
102
+ spec/pg/connection_spec.rb:
103
+ Clean up the #socket_io if it exists on #finish and #reset.
104
+ [fc290848221b]
105
+
106
+ 2013-02-27 Michael Granger <ged@FaerieMUD.org>
107
+
108
+ * README.ja.rdoc, README.rdoc:
109
+ Update READMEs
110
+
111
+ * Update relevant versions
112
+ * Move the badge to a status section
113
+ * Add link list to the header
114
+ * Add a (hopefully) more-lucid description to README.ja.rdoc.
115
+ [ac1c999e8514]
116
+
117
+ 2013-02-26 Michael Granger <ged@FaerieMUD.org>
118
+
119
+ * .travis.yml:
120
+ Add Ruby 2 to the Travis matrix
121
+ [d8c0be8a00fa]
122
+
123
+ 2013-02-25 Michael Granger <ged@FaerieMUD.org>
124
+
125
+ * .rvmrc:
126
+ Test under Ruby 2.0.0 by default
127
+ [c7919322ac00]
128
+
129
+ * Merge with rpath_ldflag
130
+ [a249c3b79f82]
131
+
132
+ 2013-02-04 Lars Kanis <kanis@comcard.de>
133
+
134
+ * ext/pg_connection.c:
135
+ Avoid warning about DWORD to int mapping in rb_raise() format
136
+ string.
137
+ [b1d3a145bef5]
138
+
1
139
  2013-02-03 Michael Granger <ged@FaerieMUD.org>
2
140
 
3
141
  * ext/pg_connection.c, spec/pg/connection_spec.rb:
@@ -8,13 +146,13 @@
8
146
  PQexecParams() itself.
9
147
 
10
148
  Thanks to Aaron Patterson for the idea.
11
- [7c313c2355b7] [github/exec_params, tip]
149
+ [7c313c2355b7]
12
150
 
13
151
  2013-01-31 Michael Granger <ged@FaerieMUD.org>
14
152
 
15
153
  * ext/extconf.rb:
16
154
  Add experimental -rpath to the LDFLAGS
17
- [8496c624dffd] [github/rpath_ldflag]
155
+ [8496c624dffd]
18
156
 
19
157
  2013-01-30 Michael Granger <ged@FaerieMUD.org>
20
158
 
@@ -27,7 +165,7 @@
27
165
  This keeps the IO in scope until the Connection is garbage-
28
166
  collected, preventing Ruby from auto-closing the connection to
29
167
  PostgreSQL.
30
- [c1e35a055da6] [github/master]
168
+ [c1e35a055da6]
31
169
 
32
170
  2013-01-30 Michael Granger <ged@faeriemud.org>
33
171
 
@@ -178,6 +316,61 @@
178
316
  Make source settings override TM2 defaults
179
317
  [c5706b3f73af]
180
318
 
319
+ 2012-12-26 Lars Kanis <kanis@comcard.de>
320
+
321
+ * ext/extconf.rb, ext/pg_connection.c, spec/pg/connection_spec.rb:
322
+ merge in default branch
323
+ [ca39e311d1eb] <use_gvl_for_blocking_functions>
324
+
325
+ * ext/gvl_wrappers.h:
326
+ Add some documentation to gvl_wrappers
327
+ [ffeb6a0afd1f] <use_gvl_for_blocking_functions>
328
+
329
+ * spec/pg/connection_spec.rb:
330
+ Add test case for threading with Connection#exec in ruby 1.9
331
+ [73b9aa38e8c0] <use_gvl_for_blocking_functions>
332
+
333
+ * ext/extconf.rb, ext/gvl_wrappers.c, ext/gvl_wrappers.h, ext/pg.h,
334
+ ext/pg_connection.c:
335
+ Add wrappers to blocking functions and callbacks in order to release
336
+ the GVL of ruby 1.9 as long as not in ruby code
337
+ [2f2c681424ed] <use_gvl_for_blocking_functions>
338
+
339
+ 2012-07-02 Lars Kanis <kanis@comcard.de>
340
+
341
+ * ext/pg_connection.c, spec/pg/connection_spec.rb:
342
+ Fix encoding of values delivered to the row processor and add specs
343
+ for binary and text data.
344
+ [bb9c6625fbc9] <row_processor>
345
+
346
+ * ext/pg_connection.c:
347
+ Polish the documentation a little bit
348
+ [b7633be3c941] <row_processor>
349
+
350
+ 2012-07-01 Lars Kanis <kanis@comcard.de>
351
+
352
+ * ext/pg_connection.c:
353
+ Get rid of gcc warning about (non-)const PGresult to
354
+ pg_new_result_for_callback()
355
+ [1a25786ed8f3] <row_processor>
356
+
357
+ * ext/pg_connection.c, spec/pg/connection_spec.rb:
358
+ Fix wrong encoding for Result object passed to a notice-receiver
359
+ block. Add proper specs for #set_notice_receiver.
360
+ [4280826bb9b9] <row_processor>
361
+
362
+ * ext/extconf.rb, ext/pg.h, ext/pg_connection.c, ext/pg_result.c,
363
+ spec/lib/helpers.rb, spec/pg/connection_spec.rb:
364
+ Implement PostgreSQL-9.2 functions PG::Connection#set_row_processor,
365
+ get_row_processor, skip_result
366
+ [b7ce4843f4d1] <row_processor>
367
+
368
+ 2012-06-28 Lars Kanis <kanis@comcard.de>
369
+
370
+ * ext/pg_result.c:
371
+ Add PGRES_COPY_BOTH to documentation of PG::Result#result_status
372
+ [63998b47da6e] <copy_both_docu>
373
+
181
374
  2013-01-29 Aaron Patterson <aaron.patterson@gmail.com>
182
375
 
183
376
  * ext/pg_result.c, lib/pg/result.rb, spec/pg/result_spec.rb:
@@ -208,14 +401,6 @@
208
401
 
209
402
  2012-12-26 Lars Kanis <kanis@comcard.de>
210
403
 
211
- * ext/extconf.rb, ext/pg_connection.c, spec/pg/connection_spec.rb:
212
- merge in default branch
213
- [ca39e311d1eb] <use_gvl_for_blocking_functions>
214
-
215
- * ext/gvl_wrappers.h:
216
- Add some documentation to gvl_wrappers
217
- [ffeb6a0afd1f] <use_gvl_for_blocking_functions>
218
-
219
404
  * ext/pg.c:
220
405
  Use proper const check instead of implicit relation
221
406
  [d0c5d5f7f1e8]
@@ -235,18 +420,6 @@
235
420
  single row mode of PostgreSQL 9.2)
236
421
  [49e3fe1dafdf]
237
422
 
238
- 2012-12-26 Lars Kanis <kanis@comcard.de>
239
-
240
- * spec/pg/connection_spec.rb:
241
- Add test case for threading with Connection#exec in ruby 1.9
242
- [73b9aa38e8c0] <use_gvl_for_blocking_functions>
243
-
244
- * ext/extconf.rb, ext/gvl_wrappers.c, ext/gvl_wrappers.h, ext/pg.h,
245
- ext/pg_connection.c:
246
- Add wrappers to blocking functions and callbacks in order to release
247
- the GVL of ruby 1.9 as long as not in ruby code
248
- [2f2c681424ed] <use_gvl_for_blocking_functions>
249
-
250
423
  2012-12-19 Lars Kanis <kanis@comcard.de>
251
424
 
252
425
  * ext/extconf.rb, ext/pg.c, ext/pg_connection.c,
@@ -254,41 +427,6 @@
254
427
  Add single row mode of PostgreSQL 9.2
255
428
  [5cf348b75c1c] <single_row_mode>
256
429
 
257
- 2012-07-02 Lars Kanis <kanis@comcard.de>
258
-
259
- * ext/pg_connection.c, spec/pg/connection_spec.rb:
260
- Fix encoding of values delivered to the row processor and add specs
261
- for binary and text data.
262
- [bb9c6625fbc9] <row_processor>
263
-
264
- * ext/pg_connection.c:
265
- Polish the documentation a little bit
266
- [b7633be3c941] <row_processor>
267
-
268
- 2012-07-01 Lars Kanis <kanis@comcard.de>
269
-
270
- * ext/pg_connection.c:
271
- Get rid of gcc warning about (non-)const PGresult to
272
- pg_new_result_for_callback()
273
- [1a25786ed8f3] <row_processor>
274
-
275
- * ext/pg_connection.c, spec/pg/connection_spec.rb:
276
- Fix wrong encoding for Result object passed to a notice-receiver
277
- block. Add proper specs for #set_notice_receiver.
278
- [4280826bb9b9] <row_processor>
279
-
280
- * ext/extconf.rb, ext/pg.h, ext/pg_connection.c, ext/pg_result.c,
281
- spec/lib/helpers.rb, spec/pg/connection_spec.rb:
282
- Implement PostgreSQL-9.2 functions PG::Connection#set_row_processor,
283
- get_row_processor, skip_result
284
- [b7ce4843f4d1] <row_processor>
285
-
286
- 2012-06-28 Lars Kanis <kanis@comcard.de>
287
-
288
- * ext/pg_result.c:
289
- Add PGRES_COPY_BOTH to documentation of PG::Result#result_status
290
- [63998b47da6e] <copy_both_docu>
291
-
292
430
  2012-12-19 Michael Granger <ged@FaerieMUD.org>
293
431
 
294
432
  * lib/pg/connection.rb:
@@ -596,7 +734,7 @@
596
734
 
597
735
  * ext/pg_result.c:
598
736
  Merged in larskanis/ruby-pg (pull request #7)
599
- [4050c3412bd7] [github/master@default]
737
+ [4050c3412bd7]
600
738
 
601
739
  2012-03-10 Lars Kanis <kanis@comcard.de>
602
740
 
@@ -1,4 +1,4 @@
1
- == v0.15.0 [YYYY-MM-DD] Michael Granger <ged@FaerieMUD.org>
1
+ == v0.15.0 [2013-03-03] Michael Granger <ged@FaerieMUD.org>
2
2
 
3
3
  Bugfixes:
4
4
 
@@ -14,6 +14,7 @@ Documentation fixes:
14
14
 
15
15
  Enhancements:
16
16
 
17
+ - Tested under Ruby 2.0.0p0.
17
18
  - Add single row mode of PostgreSQL 9.2.
18
19
  - Set fallback_application_name to programm name $0. Thanks to Will Leinweber
19
20
  for the patch.
@@ -24,8 +25,10 @@ Enhancements:
24
25
  rb_thread_select().
25
26
  - Add an example of how to insert array data using a prepared statement (#145).
26
27
  - Add continous integration tests on travis-ci.org.
27
- - Add PG::Result#each_value for looping over result sets by row. Thanks to
28
+ - Add PG::Result#each_row for iterative over result sets by row. Thanks to
28
29
  Aaron Patterson for the patch.
30
+ - Add a PG::Connection#socket_io method for fetching a (non-autoclosing) IO
31
+ object for the connection's socket.
29
32
 
30
33
  Specs:
31
34
 
@@ -1,7 +1,14 @@
1
1
  = pg
2
2
 
3
- * https://bitbucket.org/ged/ruby-pg
3
+ home :: https://bitbucket.org/ged/ruby-pg
4
+ mirror :: https://github.com/ged/ruby-pg
5
+ docs :: http://deveiate.org/code/pg
4
6
 
5
- This file needs translation. Anyone who is willing to volunteer, please
6
- mail <ged@FaerieMUD.org>.
7
+
8
+ == Description
9
+
10
+ This file needs a translation of the English README. Pull requests, patches, or
11
+ volunteers gladly accepted.
12
+
13
+ Until such time, please accept my sincere apologies for not knowing Japanese.
7
14
 
@@ -1,8 +1,9 @@
1
- {<img src="https://travis-ci.org/ged/ruby-pg.png?branch=master" alt="Build Status" />}[https://travis-ci.org/ged/ruby-pg]
2
-
3
1
  = pg
4
2
 
5
- * https://bitbucket.org/ged/ruby-pg
3
+ home :: https://bitbucket.org/ged/ruby-pg
4
+ mirror :: https://github.com/ged/ruby-pg
5
+ docs :: http://deveiate.org/code/pg
6
+
6
7
 
7
8
  == Description
8
9
 
@@ -26,10 +27,14 @@ A small example usage:
26
27
  end
27
28
  end
28
29
 
30
+ == Build Status
31
+
32
+ {<img src="https://travis-ci.org/ged/ruby-pg.png?branch=master" alt="Build Status" />}[https://travis-ci.org/ged/ruby-pg]
33
+
29
34
 
30
35
  == Requirements
31
36
 
32
- * Ruby 1.8.7-p249 or 1.9.3-p0.
37
+ * Ruby 1.8.7-p371, 1.9.3-p392, or 2.0.0-p0.
33
38
  * PostgreSQL 8.3.x (with headers, -dev packages, etc).
34
39
 
35
40
  It may work with earlier versions of Ruby as well, but those are not regularly tested.
@@ -46,6 +51,10 @@ Postgres:
46
51
 
47
52
  gem install pg -- --with-pg-config=<path to pg_config>
48
53
 
54
+ If you're installing via Bundler, you can provide compile hints like so:
55
+
56
+ bundle config build.pg --with-pg-config=<path to pg_config>
57
+
49
58
  See README-OS_X.rdoc for more information about installing under MacOS X, and
50
59
  README-Windows.rdoc for Windows build/installation instructions.
51
60
 
data/Rakefile CHANGED
@@ -55,8 +55,8 @@ $hoespec = Hoe.spec 'pg' do
55
55
 
56
56
  self.developer 'Michael Granger', 'ged@FaerieMUD.org'
57
57
 
58
- self.dependency 'rake-compiler', '~> 0.7', :developer
59
- self.dependency 'hoe-deveiate', '~> 0.1', :developer
58
+ self.dependency 'rake-compiler', '~> 0.8', :developer
59
+ self.dependency 'hoe-deveiate', '~> 0.2', :developer
60
60
 
61
61
  self.spec_extras[:licenses] = ['BSD', 'Ruby', 'GPL']
62
62
  self.spec_extras[:extensions] = [ 'ext/extconf.rb' ]
@@ -102,7 +102,7 @@ task :maint do
102
102
  ENV['MAINTAINER_MODE'] = 'yes'
103
103
  end
104
104
 
105
- ENV['RUBY_CC_VERSION'] ||= '1.8.7:1.9.2'
105
+ ENV['RUBY_CC_VERSION'] ||= '1.8.7:1.9.2:2.0.0'
106
106
 
107
107
  # Rake-compiler task
108
108
  Rake::ExtensionTask.new do |ext|
@@ -112,15 +112,18 @@ Rake::ExtensionTask.new do |ext|
112
112
  ext.lib_dir = 'lib'
113
113
  ext.source_pattern = "*.{c,h}"
114
114
  ext.cross_compile = true
115
- ext.cross_platform = %w[i386-mingw32]
116
-
117
- # configure options only for cross compile
118
- ext.cross_config_options += [
119
- "--with-pg-include=#{STATIC_POSTGRESQL_LIBDIR}",
120
- "--with-opt-include=#{STATIC_POSTGRESQL_INCDIR}",
121
- "--with-pg-lib=#{STATIC_POSTGRESQL_LIBDIR}",
122
- "--with-opt-lib=#{STATIC_OPENSSL_BUILDDIR}",
123
- ]
115
+ ext.cross_platform = CrossLibraries.map(&:for_platform)[1,1]
116
+
117
+ ext.cross_config_options += CrossLibraries.map do |lib|
118
+ {
119
+ lib.for_platform => [
120
+ "--with-pg-include=#{lib.static_postgresql_libdir}",
121
+ "--with-opt-include=#{lib.static_postgresql_incdir}",
122
+ "--with-pg-lib=#{lib.static_postgresql_libdir}",
123
+ "--with-opt-lib=#{lib.static_openssl_builddir}",
124
+ ]
125
+ }
126
+ end
124
127
  end
125
128
 
126
129
 
@@ -6,6 +6,7 @@ require 'rbconfig'
6
6
  require 'rake/clean'
7
7
  require 'rake/extensiontask'
8
8
  require 'rake/extensioncompiler'
9
+ require 'ostruct'
9
10
 
10
11
  MISCDIR = BASEDIR + 'misc'
11
12
 
@@ -17,218 +18,242 @@ else
17
18
  1
18
19
  end
19
20
 
20
- # Cross-compilation constants
21
- OPENSSL_VERSION = ENV['OPENSSL_VERSION'] || '1.0.1c'
22
- POSTGRESQL_VERSION = ENV['POSTGRESQL_VERSION'] || '9.2.2'
21
+ class CrossLibrary < OpenStruct
22
+ include Rake::DSL
23
23
 
24
- COMPILE_HOME = Pathname( "./build" ).expand_path
25
- STATIC_SOURCESDIR = COMPILE_HOME + 'sources'
26
- STATIC_BUILDDIR = COMPILE_HOME + 'builds'
24
+ def initialize(for_platform, openssl_config)
25
+ super()
27
26
 
28
- # Static OpenSSL build vars
29
- STATIC_OPENSSL_BUILDDIR = STATIC_BUILDDIR + "openssl-#{OPENSSL_VERSION}"
27
+ self.for_platform = for_platform
28
+ self.openssl_config = openssl_config
30
29
 
31
- OPENSSL_SOURCE_URI =
32
- URI( "http://www.openssl.org/source/openssl-#{OPENSSL_VERSION}.tar.gz" )
33
- OPENSSL_TARBALL = STATIC_SOURCESDIR + File.basename( OPENSSL_SOURCE_URI.path )
34
- OPENSSL_MAKEFILE = STATIC_OPENSSL_BUILDDIR + 'Makefile'
30
+ # Cross-compilation constants
31
+ self.openssl_version = ENV['OPENSSL_VERSION'] || '1.0.1e'
32
+ self.postgresql_version = ENV['POSTGRESQL_VERSION'] || '9.2.3'
35
33
 
36
- LIBSSLEAY32 = STATIC_OPENSSL_BUILDDIR + 'libssleay32.a'
37
- LIBEAY32 = STATIC_OPENSSL_BUILDDIR + 'libeay32.a'
34
+ self.compile_home = Pathname( "./build" ).expand_path
35
+ self.static_sourcesdir = compile_home + 'sources'
36
+ self.static_builddir = compile_home + 'builds' + for_platform
38
37
 
39
- OPENSSL_PATCHES = Rake::FileList[ (MISCDIR + "openssl-#{OPENSSL_VERSION}.*.patch").to_s ]
38
+ # Static OpenSSL build vars
39
+ self.static_openssl_builddir = static_builddir + "openssl-#{openssl_version}"
40
40
 
41
- # Static PostgreSQL build vars
42
- STATIC_POSTGRESQL_BUILDDIR = STATIC_BUILDDIR + "postgresql-#{POSTGRESQL_VERSION}"
43
- POSTGRESQL_SOURCE_URI = begin
44
- uristring = "http://ftp.postgresql.org/pub/source/v%s/postgresql-%s.tar.bz2" %
45
- [ POSTGRESQL_VERSION, POSTGRESQL_VERSION ]
46
- URI( uristring )
47
- end
48
- POSTGRESQL_TARBALL = STATIC_SOURCESDIR + File.basename( POSTGRESQL_SOURCE_URI.path )
49
-
50
- STATIC_POSTGRESQL_SRCDIR = STATIC_POSTGRESQL_BUILDDIR + 'src'
51
- STATIC_POSTGRESQL_LIBDIR = STATIC_POSTGRESQL_SRCDIR + 'interfaces/libpq'
52
- STATIC_POSTGRESQL_INCDIR = STATIC_POSTGRESQL_SRCDIR + 'include'
53
-
54
- POSTGRESQL_GLOBAL_MAKEFILE = STATIC_POSTGRESQL_SRCDIR + 'Makefile.global'
55
- POSTGRESQL_SHLIB_MAKEFILE = STATIC_POSTGRESQL_SRCDIR + 'Makefile.shlib'
56
- POSTGRESQL_SHLIB_MF_ORIG = STATIC_POSTGRESQL_SRCDIR + 'Makefile.shlib.orig'
57
- POSTGRESQL_LIB = STATIC_POSTGRESQL_LIBDIR + 'libpq.a'
58
- POSTGRESQL_PATCHES = Rake::FileList[ (MISCDIR + "postgresql-#{POSTGRESQL_VERSION}.*.patch").to_s ]
59
-
60
- CROSS_PREFIX = begin
61
- Rake::ExtensionCompiler.mingw_host
62
- rescue => err
63
- $stderr.puts "Cross-compilation disabled -- %s" % [ err.message ]
64
- 'unknown'
65
- end
41
+ self.openssl_source_uri =
42
+ URI( "http://www.openssl.org/source/openssl-#{openssl_version}.tar.gz" )
43
+ self.openssl_tarball = static_sourcesdir + File.basename( openssl_source_uri.path )
44
+ self.openssl_makefile = static_openssl_builddir + 'Makefile'
66
45
 
46
+ self.libssleay32 = static_openssl_builddir + 'libssleay32.a'
47
+ self.libeay32 = static_openssl_builddir + 'libeay32.a'
67
48
 
68
- # clean intermediate files and folders
69
- CLEAN.include( STATIC_BUILDDIR.to_s )
49
+ self.openssl_patches = Rake::FileList[ (MISCDIR + "openssl-#{openssl_version}.*.patch").to_s ]
70
50
 
51
+ # Static PostgreSQL build vars
52
+ self.static_postgresql_builddir = static_builddir + "postgresql-#{postgresql_version}"
53
+ self.postgresql_source_uri = begin
54
+ uristring = "http://ftp.postgresql.org/pub/source/v%s/postgresql-%s.tar.bz2" %
55
+ [ postgresql_version, postgresql_version ]
56
+ URI( uristring )
57
+ end
58
+ self.postgresql_tarball = static_sourcesdir + File.basename( postgresql_source_uri.path )
59
+
60
+ self.static_postgresql_srcdir = static_postgresql_builddir + 'src'
61
+ self.static_postgresql_libdir = static_postgresql_srcdir + 'interfaces/libpq'
62
+ self.static_postgresql_incdir = static_postgresql_srcdir + 'include'
63
+
64
+ self.postgresql_global_makefile = static_postgresql_srcdir + 'Makefile.global'
65
+ self.postgresql_shlib_makefile = static_postgresql_srcdir + 'Makefile.shlib'
66
+ self.postgresql_shlib_mf_orig = static_postgresql_srcdir + 'Makefile.shlib.orig'
67
+ self.postgresql_lib = static_postgresql_libdir + 'libpq.a'
68
+ self.postgresql_patches = Rake::FileList[ (MISCDIR + "postgresql-#{postgresql_version}.*.patch").to_s ]
69
+
70
+ # Use rake-compilers config.yml to determine the toolchain that was used
71
+ # to build Ruby for this platform.
72
+ self.host_platform = begin
73
+ config_file = YAML.load_file(File.expand_path("~/.rake-compiler/config.yml"))
74
+ _, rbfile = config_file.find{|key, fname| key.start_with?("rbconfig-#{for_platform}-") }
75
+ IO.read(rbfile).match(/CONFIG\["host"\] = "(.*)"/)[1]
76
+ end
71
77
 
72
- ENV['RUBY_CC_VERSION'] ||= '1.8.7:1.9.3'
73
78
 
74
- def download(url, save_to)
75
- part = save_to+".part"
76
- sh "wget #{url.to_s.inspect} -O #{part.inspect} || curl #{url.to_s.inspect} -o #{part.inspect}"
77
- FileUtils.mv part, save_to
78
- end
79
+ # clean intermediate files and folders
80
+ CLEAN.include( static_builddir.to_s )
79
81
 
80
- def run(*args)
81
- sh *args
82
- end
83
82
 
84
- #####################################################################
85
- ### C R O S S - C O M P I L A T I O N - T A S K S
86
- #####################################################################
83
+ ENV['RUBY_CC_VERSION'] ||= '1.8.7:1.9.3:2.0.0'
87
84
 
85
+ def download(url, save_to)
86
+ part = save_to+".part"
87
+ sh "wget #{url.to_s.inspect} -O #{part.inspect} || curl #{url.to_s.inspect} -o #{part.inspect}"
88
+ FileUtils.mv part, save_to
89
+ end
88
90
 
89
- directory STATIC_SOURCESDIR.to_s
91
+ def run(*args)
92
+ sh *args
93
+ end
90
94
 
91
- #
92
- # Static OpenSSL build tasks
93
- #
94
- directory STATIC_OPENSSL_BUILDDIR.to_s
95
+ #####################################################################
96
+ ### C R O S S - C O M P I L A T I O N - T A S K S
97
+ #####################################################################
95
98
 
96
- # openssl source file should be stored there
97
- file OPENSSL_TARBALL => STATIC_SOURCESDIR do |t|
98
- download( OPENSSL_SOURCE_URI, t.name )
99
- end
100
99
 
101
- # Extract the openssl builds
102
- file STATIC_OPENSSL_BUILDDIR => OPENSSL_TARBALL do |t|
103
- puts "extracting %s to %s" % [ OPENSSL_TARBALL, STATIC_OPENSSL_BUILDDIR.parent ]
104
- STATIC_OPENSSL_BUILDDIR.mkpath
105
- run 'tar', '-xzf', OPENSSL_TARBALL.to_s, '-C', STATIC_OPENSSL_BUILDDIR.parent.to_s
106
- OPENSSL_MAKEFILE.unlink if OPENSSL_MAKEFILE.exist?
107
-
108
- OPENSSL_PATCHES.each do |patchfile|
109
- puts " applying patch #{patchfile}..."
110
- run 'patch', '-Np1', '-d', STATIC_OPENSSL_BUILDDIR.to_s,
111
- '-i', File.expand_path( patchfile, BASEDIR )
112
- end
113
- end
100
+ directory static_sourcesdir.to_s
114
101
 
115
- CMD_PRELUDE = [
116
- 'env',
117
- "CC=#{CROSS_PREFIX}-gcc",
118
- "CFLAGS=-DDSO_WIN32",
119
- "AR=#{CROSS_PREFIX}-ar",
120
- "RANLIB=#{CROSS_PREFIX}-ranlib"
121
- ]
102
+ #
103
+ # Static OpenSSL build tasks
104
+ #
105
+ directory static_openssl_builddir.to_s
122
106
 
107
+ # openssl source file should be stored there
108
+ file openssl_tarball => static_sourcesdir do |t|
109
+ download( openssl_source_uri, t.name )
110
+ end
123
111
 
124
- # generate the makefile in a clean build location
125
- file OPENSSL_MAKEFILE => STATIC_OPENSSL_BUILDDIR do |t|
126
- Dir.chdir( STATIC_OPENSSL_BUILDDIR ) do
127
- cmd = CMD_PRELUDE.dup
128
- cmd << "./Configure" << 'mingw'
112
+ # Extract the openssl builds
113
+ file static_openssl_builddir => openssl_tarball do |t|
114
+ puts "extracting %s to %s" % [ openssl_tarball, static_openssl_builddir.parent ]
115
+ static_openssl_builddir.mkpath
116
+ run 'tar', '-xzf', openssl_tarball.to_s, '-C', static_openssl_builddir.parent.to_s
117
+ openssl_makefile.unlink if openssl_makefile.exist?
118
+
119
+ openssl_patches.each do |patchfile|
120
+ puts " applying patch #{patchfile}..."
121
+ run 'patch', '-Np1', '-d', static_openssl_builddir.to_s,
122
+ '-i', File.expand_path( patchfile, BASEDIR )
123
+ end
124
+ end
129
125
 
130
- run( *cmd )
131
- end
132
- end
126
+ self.cmd_prelude = [
127
+ 'env',
128
+ "CC=#{host_platform}-gcc",
129
+ "CFLAGS=-DDSO_WIN32",
130
+ "AR=#{host_platform}-ar",
131
+ "RANLIB=#{host_platform}-ranlib"
132
+ ]
133
133
 
134
- desc "compile static openssl libraries"
135
- task :openssl_libs => [ LIBSSLEAY32, LIBEAY32 ]
136
134
 
137
- task :compile_static_openssl => OPENSSL_MAKEFILE do |t|
138
- Dir.chdir( STATIC_OPENSSL_BUILDDIR ) do
139
- cmd = CMD_PRELUDE.dup
140
- cmd << 'make' << "-j#{NUM_CPUS}" << 'build_libs'
135
+ # generate the makefile in a clean build location
136
+ file openssl_makefile => static_openssl_builddir do |t|
137
+ Dir.chdir( static_openssl_builddir ) do
138
+ cmd = cmd_prelude.dup
139
+ cmd << "./Configure" << openssl_config
141
140
 
142
- run( *cmd )
143
- end
144
- end
141
+ run( *cmd )
142
+ end
143
+ end
145
144
 
146
- desc "compile static #{LIBEAY32}"
147
- file LIBEAY32 => :compile_static_openssl do |t|
148
- FileUtils.cp( STATIC_OPENSSL_BUILDDIR + 'libcrypto.a', LIBEAY32.to_s )
149
- end
145
+ desc "compile static openssl libraries"
146
+ task :openssl_libs => [ libssleay32, libeay32 ]
150
147
 
151
- desc "compile static #{LIBSSLEAY32}"
152
- file LIBSSLEAY32 => :compile_static_openssl do |t|
153
- FileUtils.cp( STATIC_OPENSSL_BUILDDIR + 'libssl.a', LIBSSLEAY32.to_s )
154
- end
148
+ task :compile_static_openssl => openssl_makefile do |t|
149
+ Dir.chdir( static_openssl_builddir ) do
150
+ cmd = cmd_prelude.dup
151
+ cmd << 'make' << "-j#{NUM_CPUS}" << 'build_libs'
155
152
 
153
+ run( *cmd )
154
+ end
155
+ end
156
156
 
157
+ desc "compile static #{libeay32}"
158
+ file libeay32 => :compile_static_openssl do |t|
159
+ FileUtils.cp( static_openssl_builddir + 'libcrypto.a', libeay32.to_s )
160
+ end
157
161
 
158
- #
159
- # Static PostgreSQL build tasks
160
- #
161
- directory STATIC_POSTGRESQL_BUILDDIR.to_s
162
+ desc "compile static #{libssleay32}"
163
+ file libssleay32 => :compile_static_openssl do |t|
164
+ FileUtils.cp( static_openssl_builddir + 'libssl.a', libssleay32.to_s )
165
+ end
162
166
 
163
167
 
164
- # postgresql source file should be stored there
165
- file POSTGRESQL_TARBALL => STATIC_SOURCESDIR do |t|
166
- download( POSTGRESQL_SOURCE_URI, t.name )
167
- end
168
168
 
169
- # Extract the postgresql sources
170
- file STATIC_POSTGRESQL_BUILDDIR => POSTGRESQL_TARBALL do |t|
171
- puts "extracting %s to %s" % [ POSTGRESQL_TARBALL, STATIC_POSTGRESQL_BUILDDIR.parent ]
172
- STATIC_POSTGRESQL_BUILDDIR.mkpath
173
- run 'tar', '-xjf', POSTGRESQL_TARBALL.to_s, '-C', STATIC_POSTGRESQL_BUILDDIR.parent.to_s
174
- mv POSTGRESQL_SHLIB_MAKEFILE, POSTGRESQL_SHLIB_MF_ORIG
175
-
176
- POSTGRESQL_PATCHES.each do |patchfile|
177
- puts " applying patch #{patchfile}..."
178
- run 'patch', '-Np1', '-d', STATIC_POSTGRESQL_BUILDDIR.to_s,
179
- '-i', File.expand_path( patchfile, BASEDIR )
180
- end
181
- end
169
+ #
170
+ # Static PostgreSQL build tasks
171
+ #
172
+ directory static_postgresql_builddir.to_s
182
173
 
183
- # generate the makefile in a clean build location
184
- file POSTGRESQL_GLOBAL_MAKEFILE => [ STATIC_POSTGRESQL_BUILDDIR, :openssl_libs ] do |t|
185
- options = [
186
- '--target=i386-mingw32',
187
- "--host=#{Rake::ExtensionCompiler.mingw_host}",
188
- '--with-openssl',
189
- '--without-zlib',
190
- '--disable-shared',
191
- ]
192
-
193
- Dir.chdir( STATIC_POSTGRESQL_BUILDDIR ) do
194
- configure_path = STATIC_POSTGRESQL_BUILDDIR + 'configure'
195
- cmd = [ configure_path.to_s, *options ]
196
- cmd << "CFLAGS=-L#{STATIC_OPENSSL_BUILDDIR}"
197
- cmd << "LDFLAGS=-L#{STATIC_OPENSSL_BUILDDIR}"
198
- cmd << "LDFLAGS_SL=-L#{STATIC_OPENSSL_BUILDDIR}"
199
- cmd << "LIBS=-lwsock32 -lws2_32 -lgdi32"
200
- cmd << "CPPFLAGS=-I#{STATIC_OPENSSL_BUILDDIR}/include"
201
-
202
- run( *cmd )
203
- end
204
- end
205
174
 
175
+ # postgresql source file should be stored there
176
+ file postgresql_tarball => static_sourcesdir do |t|
177
+ download( postgresql_source_uri, t.name )
178
+ end
206
179
 
207
- # patch the Makefile.shlib -- depend on the build dir so it's only
208
- # rewritten if the tarball is re-extracted.
209
- file POSTGRESQL_SHLIB_MAKEFILE => POSTGRESQL_SHLIB_MF_ORIG do |t|
210
- tf = Tempfile.new( POSTGRESQL_SHLIB_MAKEFILE.basename.to_s )
211
- POSTGRESQL_SHLIB_MF_ORIG.open( File::RDONLY ) do |ifh|
212
- ifh.each_line do |line|
213
- tf.print( line.sub(/^(\s*haslibarule\s*=\s*yes)/, "# \\1 ") )
180
+ # Extract the postgresql sources
181
+ file static_postgresql_builddir => postgresql_tarball do |t|
182
+ puts "extracting %s to %s" % [ postgresql_tarball, static_postgresql_builddir.parent ]
183
+ static_postgresql_builddir.mkpath
184
+ run 'tar', '-xjf', postgresql_tarball.to_s, '-C', static_postgresql_builddir.parent.to_s
185
+ mv postgresql_shlib_makefile, postgresql_shlib_mf_orig
186
+
187
+ postgresql_patches.each do |patchfile|
188
+ puts " applying patch #{patchfile}..."
189
+ run 'patch', '-Np1', '-d', static_postgresql_builddir.to_s,
190
+ '-i', File.expand_path( patchfile, BASEDIR )
191
+ end
192
+ end
193
+
194
+ # generate the makefile in a clean build location
195
+ file postgresql_global_makefile => [ static_postgresql_builddir, :openssl_libs ] do |t|
196
+ options = [
197
+ "--target=#{host_platform}",
198
+ "--host=#{host_platform}",
199
+ '--with-openssl',
200
+ '--without-zlib',
201
+ '--disable-shared',
202
+ ]
203
+
204
+ Dir.chdir( static_postgresql_builddir ) do
205
+ configure_path = static_postgresql_builddir + 'configure'
206
+ cmd = [ configure_path.to_s, *options ]
207
+ cmd << "CFLAGS=-L#{static_openssl_builddir}"
208
+ cmd << "LDFLAGS=-L#{static_openssl_builddir}"
209
+ cmd << "LDFLAGS_SL=-L#{static_openssl_builddir}"
210
+ cmd << "LIBS=-lwsock32 -lgdi32"
211
+ cmd << "CPPFLAGS=-I#{static_openssl_builddir}/include"
212
+
213
+ run( *cmd )
214
+ end
214
215
  end
215
- end
216
- tf.close
217
216
 
218
- FileUtils.mv( tf.path, t.name, :verbose => $puts )
219
- end
220
217
 
218
+ # patch the Makefile.shlib -- depend on the build dir so it's only
219
+ # rewritten if the tarball is re-extracted.
220
+ file postgresql_shlib_makefile => postgresql_shlib_mf_orig do |t|
221
+ tf = Tempfile.new( postgresql_shlib_makefile.basename.to_s )
222
+ postgresql_shlib_mf_orig.open( File::RDONLY ) do |ifh|
223
+ ifh.each_line do |line|
224
+ tf.print( line.sub(/^(\s*haslibarule\s*=\s*yes)/, "# \\1 ") )
225
+ end
226
+ end
227
+ tf.close
221
228
 
222
- # make libpq.a
223
- task POSTGRESQL_LIB => [ POSTGRESQL_GLOBAL_MAKEFILE, POSTGRESQL_SHLIB_MAKEFILE ] do |t|
224
- Dir.chdir( POSTGRESQL_LIB.dirname ) do
225
- sh 'make', "-j#{NUM_CPUS}", POSTGRESQL_LIB.basename.to_s, 'PORTNAME=win32'
229
+ FileUtils.mv( tf.path, t.name, :verbose => $puts )
230
+ end
231
+
232
+
233
+ # make libpq.a
234
+ task postgresql_lib => [ postgresql_global_makefile, postgresql_shlib_makefile ] do |t|
235
+ Dir.chdir( postgresql_lib.dirname ) do
236
+ sh 'make', "-j#{NUM_CPUS}", postgresql_lib.basename.to_s, 'PORTNAME=win32'
237
+ end
238
+ end
239
+
240
+
241
+ #desc 'compile static libpg.a'
242
+ task :static_libpq => postgresql_lib
226
243
  end
227
244
  end
228
245
 
229
-
230
- #desc 'compile static libpg.a'
231
- task :static_libpq => POSTGRESQL_LIB
246
+ if File.exist?(File.expand_path("~/.rake-compiler/config.yml"))
247
+ CrossLibraries = [
248
+ ['i386-mingw32', 'mingw'],
249
+ ['x64-mingw32', 'mingw64'],
250
+ ].map do |platform, openssl_config|
251
+ CrossLibrary.new platform, openssl_config
252
+ end
253
+ else
254
+ $stderr.puts "Cross-compilation disabled -- rake-compiler not properly installed"
255
+ CrossLibraries = []
256
+ end
232
257
 
233
258
  desc 'cross compile pg for win32'
234
259
  task :cross do