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

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.
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