 |
Forums |
Admin Discussion Forums: help Start New Thread
By: Brian Candler
RE: Patch: fix to work with RHEL4 [ reply ] 2007-11-26 11:19
|
That patch turned out to be incomplete. Since HAVE_PQSETCLIENTENCODING is true even for the 7.4.17 version of postgres, you need to test for the presence of PQserverVersion and PQprotocolVersion explicitly.
Here is an updated patch. I expect it will be mangled by the forum, so below I have included a uuencoded version.
diff -ur ruby-postgres.orig/extconf.rb ruby-postgres/extconf.rb
--- ruby-postgres.orig/extconf.rb 2006-04-06 18:28:10.000000000 +0100
+++ ruby-postgres/extconf.rb 2007-11-26 10:19:33.000000000 +0000
@@ -20,7 +20,7 @@
dir_config('pgsql', config_value('include'), config_value('lib'))
required_libraries = []
-desired_functions = %w(PQsetClientEncoding pg_encoding_to_char PQfreemem)
+desired_functions = %w(PQsetClientEncoding pg_encoding_to_char PQfreemem PQprotocolVersion PQserverVersion)
compat_functions = %w(PQescapeString PQexecParams)
if have_build_env
diff -ur ruby-postgres.orig/postgres.c ruby-postgres/postgres.c
--- ruby-postgres.orig/postgres.c 2006-04-06 18:28:10.000000000 +0100
+++ ruby-postgres/postgres.c 2007-11-26 10:17:19.000000000 +0000
@@ -176,9 +176,11 @@
rb_raise(rb_ePGError, StringValuePtr(message));
}
+#ifdef HAVE_PQSERVERVERSION
if (PQserverVersion(conn) >= 80100) {
rb_define_singleton_method(self, "lastval", pgconn_lastval, 0);
}
+#endif
Data_Set_Struct(self, conn);
return self;
@@ -1114,7 +1116,7 @@
return INT2NUM(PQtransactionStatus(get_pgconn(obj)));
}
-#ifdef HAVE_PQSETCLIENTENCODING
+#ifdef HAVE_PQPROTOCOLVERSION
/*
* call-seq:
@@ -1128,7 +1130,9 @@
{
return INT2NUM(PQprotocolVersion(get_pgconn(obj)));
}
+#endif
+#ifdef HAVE_PQSERVERVERSION
/*
* call-seq:
* conn.server_version -> Integer
@@ -1180,7 +1184,9 @@
rb_raise(rb_ePGError, "unknown lastval");
}
}
+#endif
+#ifdef HAVE_PQSETCLIENTENCODING
/*
* call-seq:
* conn.client_encoding() -> String
@@ -2590,10 +2596,14 @@
rb_define_method(rb_cPGconn, "endcopy", pgconn_endcopy, 0);
rb_define_method(rb_cPGconn, "on_notice", pgconn_on_notice, 0);
rb_define_method(rb_cPGconn, "transaction_status", pgconn_transaction_status, 0);
+#ifdef HAVE_PQPROTOCOLVERSION
rb_define_method(rb_cPGconn, "protocol_version", pgconn_protocol_version, 0);
+#endif
+#ifdef HAVE_PQSERVERVERSION
rb_define_method(rb_cPGconn, "server_version", pgconn_server_version, 0);
/* following line is for rdoc */
/* rb_define_method(rb_cPGconn, "lastval", pgconn_lastval, 0); */
+#endif
#ifdef HAVE_PQSETCLIENTENCODING
rb_define_method(rb_cPGconn, "client_encoding", pgconn_client_encoding, 0);
---- 8< -------------------------------------
begin 644 ruby-postgres.diff.gz
M'XL(`%&K2D<"`ZU586_;-A#]//T*(L5@*;(2R4D3QT6+#*F1&FAMI\[R91@$
M6CHI;&72(2FG1='_WJ,D6[8RR\,PPK#(.^K=X]T[*F9)0KQ<$IG/OWM+H70J
M09T(R=)3^*8CP9,3.=_U;CDLS_/:7_VMY_L7GG_N^1<DZ`]Z_4'@G_CK05P_
M\'W+==V](0S`I1<$7@\!_$%P-3@[VP'`85U?$Z_G=R^)6_Q?7ULD9C(T$"RU
M.\M4/66=+BG7X8IF.=@=QJ,LCZ'C-!T9FW<<QR(6D?"4,PEQB"9))0-%WI*_
M_K:\&%1A3W(>:2:XL?_^;$_O%.B;C`'70QZ)F/&4+-,0JGFH11@]4DFF=XD$
M6,#"L=S_"PIG2RFTB$3V`%(A$C$8<@6R6N.1(K%84OTR%JB(+F&FI0F#RV\0
M3:FD"U6D@27DD:X@G.<LBY'"RHI;=+-918VBUHY]NJEW_$?=[`)LZ^82I?./
MN@DN+[I7Q#6/("BDLQYR'DK*%-@X@>GM4$HANZ1,TH.1RE1+>P%*T10<YTWY />
MXD],F/N*)3$DY,,?#\-P>C<;?GXH?K/19%SNPHS:C>K8*$+ND'=O2=\<SB$_
M=I@@'N,0*HR=@18\7(!^%+&M($NZY"BC2J-\C[HH$@,45H8N\6MF[BO@6#E3
M4C/>4TW#&>@0CY1'NH(J:%2O2-"YY,0XWI3)"H)STV;XO*@:;6O?:'S?&__Y
M"4^F)>6*%AJ;::IS9:<8IZ1FB_D7I\B7R977S-7]S<?1<'P_'-],WH_&M\UD
M3C]/[B<WDX^;=%KD]!A9').(9IFGX&E0,>WU2Z9G/M;7,/VQAVRC;?90K9/7
M7MX7;,R*%&D]*0L>KJK^]-Z1$=>0@JPH]_V2<O^\HMPFQ*.<?^7BF9-U[;<D
MV$JWF>%]E$O.47$';2X>VS&TRR8H[]W75WXWP(["";;0>2V*C6@KJ:(AFMX:
M4"2/["*Q_%X+MC)L";8=`%N`"\TBJ"$VIG\-LJ734!5"K=%>^DK80X(\''4M
MN+40ZIA-SSIB6<O#]TI[W%WYU5%W[5O).STFB<@R\6P^"QG"$J;0@M=^+")R
C?+K9U1ZW]7(R,%L7TT&Q'CYF0[%UV(:C/.@O9EB,%P,)````
`
end
|
By: Brian Candler
Patch: fix to work with RHEL4 [ reply ] 2007-11-01 16:26
|
The following patch is required to work under Red Hat Enterprise Linux 4, which comes with postgresql-{libs,devel}-7.4.17-1.RHEL4.1
This is an older version of the API which doesn't define PQserverVersion, but a couple of #ifdef's had to be moved to properly remove all references to this.
--- ruby-postgres.orig/postgres.c 2006-04-06 18:28:10.000000000 +0100
+++ ruby-postgres/postgres.c 2007-11-01 15:49:44.000000000 +0000
@@ -176,9 +176,11 @@
rb_raise(rb_ePGError, StringValuePtr(message));
}
+#ifdef HAVE_PQSETCLIENTENCODING
if (PQserverVersion(conn) >= 80100) {
rb_define_singleton_method(self, "lastval", pgconn_lastval, 0);
}
+#endif
Data_Set_Struct(self, conn);
return self;
@@ -2590,12 +2592,12 @@
rb_define_method(rb_cPGconn, "endcopy", pgconn_endcopy, 0);
rb_define_method(rb_cPGconn, "on_notice", pgconn_on_notice, 0);
rb_define_method(rb_cPGconn, "transaction_status", pgconn_transaction_status, 0);
+#ifdef HAVE_PQSETCLIENTENCODING
rb_define_method(rb_cPGconn, "protocol_version", pgconn_protocol_version, 0);
rb_define_method(rb_cPGconn, "server_version", pgconn_server_version, 0);
/* following line is for rdoc */
/* rb_define_method(rb_cPGconn, "lastval", pgconn_lastval, 0); */
-#ifdef HAVE_PQSETCLIENTENCODING
rb_define_method(rb_cPGconn, "client_encoding", pgconn_client_encoding, 0); rb_define_method(rb_cPGconn, "set_client_encoding", pgconn_set_client_encoding, 1);
#endif
|
|
 |