PG 9.0 Solaris compile error on Sparc

Started by Dave Pageover 15 years ago12 messagesbugs
Jump to latest
#1Dave Page
dpage@pgadmin.org

I'm working on setting up a new buildfarm member as we don't seem to
have any active Solaris ones :-(

cc -Xa -m64 -mt -mt -D_REENTRANT -D_THREAD_SAFE
-D_POSIX_PTHREAD_SEMANTICS -KPIC -DFRONTEND -DUNSAFE_STAT_OK -I.
-I../../../src/include -I../../../src/port -I../../../src/port
-DSO_MAJOR_VERSION=5 -c -o fe-connect.o fe-connect.c
"fe-connect.c", line 1789: undefined symbol: ucred_t
"fe-connect.c", line 1789: undefined symbol: ucred
"fe-connect.c", line 1792: warning: implicit function declaration: getpeerucred
"fe-connect.c", line 1792: undefined symbol: sock
"fe-connect.c", line 1800: warning: implicit function declaration: ucred_geteuid
"fe-connect.c", line 1805: warning: implicit function declaration: ucred_free
cc: acomp failed for fe-connect.c

That is with Sun Studio 12. This is with gcc:

gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith
-Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing
-fwrapv -pthreads -pthreads -D_REENTRANT -D_THREAD_SAFE
-D_POSIX_PTHREAD_SEMANTICS -fPIC -DFRONTEND -DUNSAFE_STAT_OK -I.
-I../../../src/include -I../../../src/port -I../../../src/port
-DSO_MAJOR_VERSION=5 -c -o fe-connect.o fe-connect.c
fe-connect.c: In function `PQconnectPoll':
fe-connect.c:1789: error: `ucred_t' undeclared (first use in this function)
fe-connect.c:1789: error: (Each undeclared identifier is reported only once
fe-connect.c:1789: error: for each function it appears in.)
fe-connect.c:1789: error: `ucred' undeclared (first use in this function)
fe-connect.c:1792: warning: implicit declaration of function `getpeerucred'
fe-connect.c:1792: error: `sock' undeclared (first use in this function)
fe-connect.c:1800: warning: implicit declaration of function `ucred_geteuid'
fe-connect.c:1805: warning: implicit declaration of function `ucred_free'
gmake[3]: *** [fe-connect.o] Error 1

Platform:

-bash-3.00$ uname -a
SunOS suzuka 5.10 Generic_118833-33 sun4u sparc SUNW,Sun-Blade-1000

Configured with:

./configure --with-perl --with-python --without-readline

--
Dave Page
EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise Postgres Company

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Dave Page (#1)
Re: PG 9.0 Solaris compile error on Sparc

Dave Page <dpage@pgadmin.org> writes:

I'm working on setting up a new buildfarm member as we don't seem to
have any active Solaris ones :-(

cc -Xa -m64 -mt -mt -D_REENTRANT -D_THREAD_SAFE
-D_POSIX_PTHREAD_SEMANTICS -KPIC -DFRONTEND -DUNSAFE_STAT_OK -I.
-I../../../src/include -I../../../src/port -I../../../src/port
-DSO_MAJOR_VERSION=5 -c -o fe-connect.o fe-connect.c
"fe-connect.c", line 1789: undefined symbol: ucred_t
"fe-connect.c", line 1789: undefined symbol: ucred
"fe-connect.c", line 1792: warning: implicit function declaration: getpeerucred
"fe-connect.c", line 1792: undefined symbol: sock
"fe-connect.c", line 1800: warning: implicit function declaration: ucred_geteuid
"fe-connect.c", line 1805: warning: implicit function declaration: ucred_free
cc: acomp failed for fe-connect.c

That code wouldn't be getting compiled if configure hadn't found
getpeerucred present, so I'll bet the problem is just lack of the
#include file that declares the above symbols. A bit of grepping
of /usr/include should give you the answer.

regards, tom lane

#3Zdenek Kotala
Zdenek.Kotala@Sun.COM
In reply to: Dave Page (#1)
Re: PG 9.0 Solaris compile error on Sparc

Dave Page píše v po 19. 07. 2010 v 13:32 +0100:

I'm working on setting up a new buildfarm member as we don't seem to
have any active Solaris ones :-(

Unfortunately, I had to stop them :(. Sorry.

I cannot remember this bug. However for Solaris 10 is better to use
SunStudio 11. I see lot of bugs in SunStudio 12 and also postgresql with
dtrace is not possible compile with sunstudio 12 due some optimization.
It is bug in solaris 10 which is not fixed(backported) yet.

Anyway it is strange. I used following switches without any problem:

./configure --without-readline --enable-cassert --enable-debug
--enable-nls --enable-integer-datetimes --with-perl --with-python \
--with-tcl --with-krb5 --with-gssapi --with-openssl --with-pam \
--enable-thread-safety --with-includes=/usr/include/kerberosv5:/usr/sfw/include --with-libs=/usr/sfw/lib --enable-dtrace --with-libxml --with-libxslt

I see also that you use S10U3 which is not optimal for PostgreSQL. You
need to have S10U4 (at least for kerberos and dtrace).

Anyway it looks like that #include <ucred.h> is missing somewhere.

Zdenek

Show quoted text

cc -Xa -m64 -mt -mt -D_REENTRANT -D_THREAD_SAFE
-D_POSIX_PTHREAD_SEMANTICS -KPIC -DFRONTEND -DUNSAFE_STAT_OK -I.
-I../../../src/include -I../../../src/port -I../../../src/port
-DSO_MAJOR_VERSION=5 -c -o fe-connect.o fe-connect.c
"fe-connect.c", line 1789: undefined symbol: ucred_t
"fe-connect.c", line 1789: undefined symbol: ucred
"fe-connect.c", line 1792: warning: implicit function declaration: getpeerucred
"fe-connect.c", line 1792: undefined symbol: sock
"fe-connect.c", line 1800: warning: implicit function declaration: ucred_geteuid
"fe-connect.c", line 1805: warning: implicit function declaration: ucred_free
cc: acomp failed for fe-connect.c

That is with Sun Studio 12. This is with gcc:

gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith
-Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing
-fwrapv -pthreads -pthreads -D_REENTRANT -D_THREAD_SAFE
-D_POSIX_PTHREAD_SEMANTICS -fPIC -DFRONTEND -DUNSAFE_STAT_OK -I.
-I../../../src/include -I../../../src/port -I../../../src/port
-DSO_MAJOR_VERSION=5 -c -o fe-connect.o fe-connect.c
fe-connect.c: In function `PQconnectPoll':
fe-connect.c:1789: error: `ucred_t' undeclared (first use in this function)
fe-connect.c:1789: error: (Each undeclared identifier is reported only once
fe-connect.c:1789: error: for each function it appears in.)
fe-connect.c:1789: error: `ucred' undeclared (first use in this function)
fe-connect.c:1792: warning: implicit declaration of function `getpeerucred'
fe-connect.c:1792: error: `sock' undeclared (first use in this function)
fe-connect.c:1800: warning: implicit declaration of function `ucred_geteuid'
fe-connect.c:1805: warning: implicit declaration of function `ucred_free'
gmake[3]: *** [fe-connect.o] Error 1

Platform:

-bash-3.00$ uname -a
SunOS suzuka 5.10 Generic_118833-33 sun4u sparc SUNW,Sun-Blade-1000

Configured with:

./configure --with-perl --with-python --without-readline

--
Dave Page
EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise Postgres Company

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tom Lane (#2)
Re: PG 9.0 Solaris compile error on Sparc

I wrote:

That code wouldn't be getting compiled if configure hadn't found
getpeerucred present, so I'll bet the problem is just lack of the
#include file that declares the above symbols. A bit of grepping
of /usr/include should give you the answer.

... but looking in src/backend/libpq/auth.c suggests that fe-connect
is lacking

#if defined(HAVE_STRUCT_CMSGCRED) || defined(HAVE_STRUCT_FCRED) || defined(HAVE_STRUCT_SOCKCRED)
#include <sys/uio.h>
#include <sys/ucred.h>
#endif
#ifdef HAVE_UCRED_H
#include <ucred.h>
#endif

regards, tom lane

#5Dave Page
dpage@pgadmin.org
In reply to: Tom Lane (#4)
Re: PG 9.0 Solaris compile error on Sparc

On Mon, Jul 19, 2010 at 2:03 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

I wrote:

That code wouldn't be getting compiled if configure hadn't found
getpeerucred present, so I'll bet the problem is just lack of the
#include file that declares the above symbols.  A bit of grepping
of /usr/include should give you the answer.

... but looking in src/backend/libpq/auth.c suggests that fe-connect
is lacking

#if defined(HAVE_STRUCT_CMSGCRED) || defined(HAVE_STRUCT_FCRED) || defined(HAVE_STRUCT_SOCKCRED)
#include <sys/uio.h>
#include <sys/ucred.h>
#endif
#ifdef HAVE_UCRED_H
#include <ucred.h>
#endif

Adding that fixes it, though I also needed to change sock to
conn->sock on line 1801, somewhat like:
http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/interfaces/libpq/fe-connect.c?r1=1.400&amp;r2=1.401

--
Dave Page
EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise Postgres Company

#6Dave Page
dpage@pgadmin.org
In reply to: Zdenek Kotala (#3)
Re: PG 9.0 Solaris compile error on Sparc

On Mon, Jul 19, 2010 at 1:56 PM, Zdenek Kotala <Zdenek.Kotala@sun.com> wrote:

Dave Page píše v po 19. 07. 2010 v 13:32 +0100:

I'm working on setting up a new buildfarm member as we don't seem to
have any active Solaris ones :-(

Unfortunately, I had to stop them :(. Sorry.

I cannot remember this bug. However for Solaris 10 is better to use
SunStudio 11. I see lot of bugs in SunStudio 12 and also postgresql with
dtrace is not possible compile with sunstudio 12 due some optimization.
It is bug in solaris 10 which is not fixed(backported) yet.

<grumble>

Anyway it is strange. I used following switches without any problem:

./configure --without-readline --enable-cassert --enable-debug
--enable-nls --enable-integer-datetimes --with-perl --with-python \
--with-tcl --with-krb5 --with-gssapi --with-openssl --with-pam \
--enable-thread-safety --with-includes=/usr/include/kerberosv5:/usr/sfw/include --with-libs=/usr/sfw/lib --enable-dtrace --with-libxml --with-libxslt

Hmm. Perl fails here, as it seems to be 32 bit. OpenSSL fails, due to
lack of libcryto, and TCL seems to fail due to lack of headers (though
I didn't look very hard). I'm assuming these issues are largely due to
my inexperience with Solaris, or are there some development packages
or similar I should be downloading?

I see also that you use S10U3 which is not optimal for PostgreSQL. You
need to have S10U4 (at least for kerberos and dtrace).

Hmm, I'll have to see about upgrading it without annoying other users.

Thanks!

--
Dave Page
EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise Postgres Company

#7Zdenek Kotala
Zdenek.Kotala@Sun.COM
In reply to: Dave Page (#6)
Re: PG 9.0 Solaris compile error on Sparc

Dave Page píše v po 19. 07. 2010 v 14:24 +0100:

On Mon, Jul 19, 2010 at 1:56 PM, Zdenek Kotala <Zdenek.Kotala@sun.com> wrote:

Dave Page píše v po 19. 07. 2010 v 13:32 +0100:

I'm working on setting up a new buildfarm member as we don't seem to
have any active Solaris ones :-(

Unfortunately, I had to stop them :(. Sorry.

I cannot remember this bug. However for Solaris 10 is better to use
SunStudio 11. I see lot of bugs in SunStudio 12 and also postgresql with
dtrace is not possible compile with sunstudio 12 due some optimization.
It is bug in solaris 10 which is not fixed(backported) yet.

<grumble>

Anyway it is strange. I used following switches without any problem:

./configure --without-readline --enable-cassert --enable-debug
--enable-nls --enable-integer-datetimes --with-perl --with-python \
--with-tcl --with-krb5 --with-gssapi --with-openssl --with-pam \
--enable-thread-safety --with-includes=/usr/include/kerberosv5:/usr/sfw/include --with-libs=/usr/sfw/lib --enable-dtrace --with-libxml --with-libxslt

Hmm. Perl fails here, as it seems to be 32 bit.

I see, you compile it 64bits. 64bits perl does not exist - no PL/PgPerl

OpenSSL fails, due to
lack of libcryto, and TCL seems to fail due to lack of headers (though
I didn't look very hard).

You need to set RPATH. Openssl is in /usr/sfw/lib (/usr/sfw/lib/64)

You need this for 32bit
'LDFLAGS' => '-R/usr/sfw/lib',
'LDFLAGS_SL' => '-R/usr/sfw/lib',
'TCLSH' => '/usr/sfw/bin/tclsh8.3'

and 'LDFLAGS' => '-R/usr/sfw/lib/64', for 64bit.

I'm assuming these issues are largely due to
my inexperience with Solaris, or are there some development packages
or similar I should be downloading?

No you need only compiler and full Solaris 10 installation.

Show quoted text

I see also that you use S10U3 which is not optimal for PostgreSQL. You
need to have S10U4 (at least for kerberos and dtrace).

Hmm, I'll have to see about upgrading it without annoying other users.

Thanks!

#8Dave Page
dpage@pgadmin.org
In reply to: Zdenek Kotala (#7)
Re: PG 9.0 Solaris compile error on Sparc

On Mon, Jul 19, 2010 at 2:36 PM, Zdenek Kotala <Zdenek.Kotala@sun.com> wrote:

 OpenSSL fails, due to
lack of libcryto, and TCL seems to fail due to lack of headers (though
I didn't look very hard).

You need to set RPATH. Openssl is in /usr/sfw/lib (/usr/sfw/lib/64)

You need this for 32bit
'LDFLAGS' => '-R/usr/sfw/lib',
'LDFLAGS_SL' => '-R/usr/sfw/lib',
'TCLSH' => '/usr/sfw/bin/tclsh8.3'

and 'LDFLAGS' => '-R/usr/sfw/lib/64', for 64bit.

Ah, OK - thanks.

 I'm assuming these issues are largely due to
my inexperience with Solaris, or are there some development packages
or similar I should be downloading?

No you need only compiler and full Solaris 10 installation.

And knowledge of the odd places these things end up in on Solaris :-p

--
Dave Page
EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise Postgres Company

#9Peter Eisentraut
peter_e@gmx.net
In reply to: Dave Page (#1)
Re: PG 9.0 Solaris compile error on Sparc

On mån, 2010-07-19 at 13:32 +0100, Dave Page wrote:

I'm working on setting up a new buildfarm member as we don't seem to
have any active Solaris ones :-(

cc -Xa -m64 -mt -mt -D_REENTRANT -D_THREAD_SAFE
-D_POSIX_PTHREAD_SEMANTICS -KPIC -DFRONTEND -DUNSAFE_STAT_OK -I.
-I../../../src/include -I../../../src/port -I../../../src/port
-DSO_MAJOR_VERSION=5 -c -o fe-connect.o fe-connect.c
"fe-connect.c", line 1789: undefined symbol: ucred_t
"fe-connect.c", line 1789: undefined symbol: ucred
"fe-connect.c", line 1792: warning: implicit function declaration:
getpeerucred
"fe-connect.c", line 1792: undefined symbol: sock
"fe-connect.c", line 1800: warning: implicit function declaration:
ucred_geteuid
"fe-connect.c", line 1805: warning: implicit function declaration:
ucred_free
cc: acomp failed for fe-connect.c

I think you're compiling 9.1. :-)

#10Dave Page
dpage@pgadmin.org
In reply to: Peter Eisentraut (#9)
Re: PG 9.0 Solaris compile error on Sparc

On Mon, Jul 19, 2010 at 4:00 PM, Peter Eisentraut <peter_e@gmx.net> wrote:

On mån, 2010-07-19 at 13:32 +0100, Dave Page wrote:

I'm working on setting up a new buildfarm member as we don't seem to
have any active Solaris ones :-(

cc -Xa -m64 -mt   -mt -D_REENTRANT -D_THREAD_SAFE
-D_POSIX_PTHREAD_SEMANTICS -KPIC -DFRONTEND -DUNSAFE_STAT_OK -I.
-I../../../src/include  -I../../../src/port -I../../../src/port
-DSO_MAJOR_VERSION=5  -c -o fe-connect.o fe-connect.c
"fe-connect.c", line 1789: undefined symbol: ucred_t
"fe-connect.c", line 1789: undefined symbol: ucred
"fe-connect.c", line 1792: warning: implicit function declaration:
getpeerucred
"fe-connect.c", line 1792: undefined symbol: sock
"fe-connect.c", line 1800: warning: implicit function declaration:
ucred_geteuid
"fe-connect.c", line 1805: warning: implicit function declaration:
ucred_free
cc: acomp failed for fe-connect.c

I think you're compiling 9.1. :-)

Yeah, sorry - forgot we forked already :-p

--
Dave Page
EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise Postgres Company

#11Peter Eisentraut
peter_e@gmx.net
In reply to: Dave Page (#1)
Re: PG 9.0 Solaris compile error on Sparc

On mån, 2010-07-19 at 13:32 +0100, Dave Page wrote:

I'm working on setting up a new buildfarm member as we don't seem to
have any active Solaris ones :-(

cc -Xa -m64 -mt -mt -D_REENTRANT -D_THREAD_SAFE
-D_POSIX_PTHREAD_SEMANTICS -KPIC -DFRONTEND -DUNSAFE_STAT_OK -I.
-I../../../src/include -I../../../src/port -I../../../src/port
-DSO_MAJOR_VERSION=5 -c -o fe-connect.o fe-connect.c
"fe-connect.c", line 1789: undefined symbol: ucred_t
"fe-connect.c", line 1789: undefined symbol: ucred
"fe-connect.c", line 1792: warning: implicit function declaration: getpeerucred
"fe-connect.c", line 1792: undefined symbol: sock
"fe-connect.c", line 1800: warning: implicit function declaration: ucred_geteuid
"fe-connect.c", line 1805: warning: implicit function declaration: ucred_free
cc: acomp failed for fe-connect.c

Should be fixed now.

#12Dave Page
dpage@pgadmin.org
In reply to: Peter Eisentraut (#11)
Re: PG 9.0 Solaris compile error on Sparc

On Mon, Jul 19, 2010 at 7:53 PM, Peter Eisentraut <peter_e@gmx.net> wrote:

On mån, 2010-07-19 at 13:32 +0100, Dave Page wrote:

I'm working on setting up a new buildfarm member as we don't seem to
have any active Solaris ones :-(

cc -Xa -m64 -mt   -mt -D_REENTRANT -D_THREAD_SAFE
-D_POSIX_PTHREAD_SEMANTICS -KPIC -DFRONTEND -DUNSAFE_STAT_OK -I.
-I../../../src/include  -I../../../src/port -I../../../src/port
-DSO_MAJOR_VERSION=5  -c -o fe-connect.o fe-connect.c
"fe-connect.c", line 1789: undefined symbol: ucred_t
"fe-connect.c", line 1789: undefined symbol: ucred
"fe-connect.c", line 1792: warning: implicit function declaration: getpeerucred
"fe-connect.c", line 1792: undefined symbol: sock
"fe-connect.c", line 1800: warning: implicit function declaration: ucred_geteuid
"fe-connect.c", line 1805: warning: implicit function declaration: ucred_free
cc: acomp failed for fe-connect.c

Should be fixed now.

Thanks - looks good.

--
Dave Page
EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise Postgres Company