Thread: Compile problem on old Debian Linux with glibc 2.0.7

Compile problem on old Debian Linux with glibc 2.0.7

From
Holger Marzen
Date:
Hi all,

I want to upgrade Postgres 7.1.3 on an old Debian Slink machine (with
glibc 2.0.7 and Kernel 2.2.17). That machine runs fine and I can not
simply upgrade the OS because it's a busy 24/7 machine.

When I try to compile PostgreSQL 7.2.4 or 7.4.1 then I get

|gcc -O2  -Wall -Wmissing-prototypes -Wmissing-declarations
|-I../../../src/include -D_GNU_SOURCE   -c hba.c -o hba.o
|hba.c: In function `parse_hba':
|hba.c:675: warning: implicit declaration of function `gai_strerror'
|hba.c:675: warning: format argument is not a pointer (arg 3)
|hba.c: In function `ident_unix':
|hba.c:1411: storage size of `peercred' isn't known
|hba.c:1411: warning: unused variable `peercred'
|make[3]: *** [hba.o] Error 1
|make[3]: Leaving directory
|`/usr/src/postgres/postgresql-7.4.1/src/backend/libpq'

But what's strange:
On my very old Linux libc5 machine (but with kernel 2.4) I can compile
7.2 and 7.4 versions without a problem. So it probably has to do with
glibc-2.0.7.

I cannot find "struct ucred" or "gai_strerror" definitions in my
machine's headerfiles.

How can I compile a recent version of PostgreSQL on that machine? I
don't need the "sameuser" local authentification.

Regards
Holger


--
PGP/GPG Key-ID:
http://blackhole.pca.dfn.de:11371/pks/lookup?op=get&search=0xB5A1AFE1

Re: Compile problem on old Debian Linux with glibc 2.0.7

From
Tom Lane
Date:
Holger Marzen <holger@marzen.de> writes:
> When I try to compile PostgreSQL 7.2.4 or 7.4.1 then I get

> |gcc -O2  -Wall -Wmissing-prototypes -Wmissing-declarations
> |-I../../../src/include -D_GNU_SOURCE   -c hba.c -o hba.o
> |hba.c: In function `parse_hba':
> |hba.c:675: warning: implicit declaration of function `gai_strerror'
> |hba.c:675: warning: format argument is not a pointer (arg 3)
> |hba.c: In function `ident_unix':
> |hba.c:1411: storage size of `peercred' isn't known
> |hba.c:1411: warning: unused variable `peercred'
> |make[3]: *** [hba.o] Error 1

The configure process assumes that any platform that supplies
getaddrinfo() will also supply gai_strerror().  Is that not true
in your version of glibc?  If not, one possible workaround is to
force use of our own getaddrinfo replacement (#undef HAVE_GETADDRINFO
and add getaddrinfo.o to LIBOBJS).

Probably the easiest way around the peercred problem is just to disable
that chunk of code ("#elif defined(SO_PEERCRED)" to "#elif 0" at line
1409 of hba.c will probably do it).  You may need to dike out the
corresponding code in client-side libpq as well.

            regards, tom lane

Re: Compile problem on old Debian Linux with glibc 2.0.7

From
Holger Marzen
Date:
On Thu, 8 Jan 2004, Tom Lane wrote:

> Holger Marzen <holger@marzen.de> writes:
> > When I try to compile PostgreSQL 7.2.4 or 7.4.1 then I get
>
> > |gcc -O2  -Wall -Wmissing-prototypes -Wmissing-declarations
> > |-I../../../src/include -D_GNU_SOURCE   -c hba.c -o hba.o
> > |hba.c: In function `parse_hba':
> > |hba.c:675: warning: implicit declaration of function `gai_strerror'
> > |hba.c:675: warning: format argument is not a pointer (arg 3)
> > |hba.c: In function `ident_unix':
> > |hba.c:1411: storage size of `peercred' isn't known
> > |hba.c:1411: warning: unused variable `peercred'
> > |make[3]: *** [hba.o] Error 1
>
> The configure process assumes that any platform that supplies
> getaddrinfo() will also supply gai_strerror().  Is that not true
> in your version of glibc?  If not, one possible workaround is to
> force use of our own getaddrinfo replacement (#undef HAVE_GETADDRINFO
> and add getaddrinfo.o to LIBOBJS).

I changed the LIBOBJS in src/Makefile.global and put the #undef after
the #define in src/include/pg_config.h.

But unfortunately that's only half of the world domaination. I still
got:

hba.c: In function `ident_unix':
hba.c:1411: storage size of `peercred' isn't known
hba.c:1411: warning: unused variable `peercred'
make[3]: *** [hba.o] Error 1

> Probably the easiest way around the peercred problem is just to disable
> that chunk of code ("#elif defined(SO_PEERCRED)" to "#elif 0" at line

Yep. That's the other half!

> 1409 of hba.c will probably do it).  You may need to dike out the
> corresponding code in client-side libpq as well.

Not neccessary. It compiled and linked.

Thanks, Tom.


--
PGP/GPG Key-ID:
http://blackhole.pca.dfn.de:11371/pks/lookup?op=get&search=0xB5A1AFE1