From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us> |
Cc: | Stephan Szabo <sszabo(at)megazone(dot)bigpanda(dot)com>, "[ADMIN]" <pgsql-admin(at)postgresql(dot)org> |
Subject: | Re: Fw: Case Insensitive Test |
Date: | 2003-09-26 17:58:01 |
Message-ID: | 24982.1064599081@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-admin |
Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us> writes:
> That _GNU_SOURCE has always bothered me. What does it control, exactly?
> It seems to control a lot.
Well, without it I get (on RHL 8.0)
gcc -O2 -g -fpic -I. -I/usr/lib/perl5/5.8.0/i386-linux-thread-multi/CORE -I../../../src/include -c -o plperl.o plperl.c
In file included from /usr/lib/perl5/5.8.0/i386-linux-thread-multi/CORE/op.h:480,
from /usr/lib/perl5/5.8.0/i386-linux-thread-multi/CORE/perl.h:2209,
from plperl.c:60:
/usr/lib/perl5/5.8.0/i386-linux-thread-multi/CORE/reentr.h:602: field `_crypt_struct' has incomplete type
/usr/lib/perl5/5.8.0/i386-linux-thread-multi/CORE/reentr.h:747: confused by earlier errors, bailing out
make: *** [plperl.o] Error 1
The relevant chunk of that Perl header is
#ifdef HAS_CRYPT_R
#if CRYPT_R_PROTO == REENTRANT_PROTO_B_CCD
CRYPTD* _crypt_data;
#else
struct crypt_data _crypt_struct;
#endif
#endif /* HAS_CRYPT_R */
and the problem is that HAS_CRYPT_R has gotten defined but "struct
crypt_data" has not. It's been awhile since I looked at this, but I
think that Perl configures HAS_CRYPT_R on the basis of a link-only test
for crypt_r(), which will succeed regardless of -D symbols. And (in
this Linux version, anyway) /usr/include/crypt.h only defines struct
crypt_data if __USE_GNU is defined (which comes from _GNU_SOURCE).
So we're more or less stuck --- perl.h simply does not compile without
_GNU_SOURCE on this platform.
This is arguably a configuration bug in Perl; we have hit comparable
difficulties in PG, and had to solve them by the expedient of testing
for both compile-time and link-time presence of library features.
They're not being careful enough.
Experimenting, I notice that ecpg also currently fails to compile
without _GNU_SOURCE on that box. It looks to me like the system headers
have a rather arbitrary set of ideas on what to remove when _GNU_SOURCE
isn't defined...
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Bruce Momjian | 2003-09-26 18:03:02 | Re: Fw: Case Insensitive Test |
Previous Message | Bruce Momjian | 2003-09-26 17:42:01 | Re: Fw: Case Insensitive Test |