7.4.2 Build broken on (Sparc) Solaris 7 and 8

Started by Bruce Momjianabout 22 years ago4 messageshackers
Jump to latest
#1Bruce Momjian
bruce@momjian.us

Environment:

SunOS 5.8 Generic_108528-27 sun4u sparc SUNW,Ultra-250
gcc version 3.3.1
PostgreSQL-7.4.2
./configure --with-java --enable-thread-safety

"make" results in:

gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes
-Wmissing-declarations -fPIC -I. -I../../../src/include
-DFRONTEND -DSYSCONFDIR='"/usr/local/pgsql/etc"' -c -o thread.o
thread.c
thread.c: In function `pqGetpwuid':
thread.c:116: error: too many arguments to function `*getpwuid_r*'

Environment:

SunOS 5.7 Generic_106541-29 sun4u sparc SUNW,UltraSPARC-IIi-Engine
gcc version 3.3.1
PostgreSQL-7.4.2
./configure --with-java --enable-thread-safety

"make' results in:

gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes
-Wmissing-declarations -fPIC -I. -I../../../src/include
-DFRONTEND -DSYSCONFDIR='"/usr/local/pgsql/etc"' -c -o thread.o
thread.c
thread.c: In function `pqGetpwuid':
thread.c:116: error: too many arguments to function `*getpwuid_r*'
thread.c: In function `pqGethostbyname':
thread.c:189: error: `resbuf' undeclared (first use in this function)
thread.c:189: error: (Each undeclared identifier is reported only once
thread.c:189: error: for each function it appears in.)

Diff'ing thread.c between 7.4.1 and 7.4.2, it *looks* like, at first
blush, nothing changed that should affect the relevant code.

Anybody got any idea what's broken?

Unfortunately, I know exactly what is broken. First, pre7.4.2 didn't
use thread.c properly. Now that it does, you are breaking on this
issue:

/*
* Early POSIX draft of getpwuid_r() returns 'struct passwd *'.
* getpwuid_r(uid, resultbuf, buffer, buflen)
* Do we need to support it? bjm 2003-08-14
*/
/* POSIX version */
getpwuid_r(uid, resultbuf, buffer, buflen, result);

Notice the comment. Do we have to support getpwuid_r that returns
passwd *, and doesn't take a fourth argument? Yea, for Solaris 7 & 8,
we now we now do. I think you can get yours working by just changing
the call to:

result = getpwuid_r(uid, resultbuf, buffer, buflen);

I will have to add configure tests for this and it will work properly
for you in 7.4.3.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
#2Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#1)
Re: [HACKERS] 7.4.2 Build broken on (Sparc) Solaris 7 and 8

Bruce Momjian wrote:

"make' results in:

gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes
-Wmissing-declarations -fPIC -I. -I../../../src/include
-DFRONTEND -DSYSCONFDIR='"/usr/local/pgsql/etc"' -c -o thread.o
thread.c
thread.c: In function `pqGetpwuid':
thread.c:116: error: too many arguments to function `*getpwuid_r*'
thread.c: In function `pqGethostbyname':
thread.c:189: error: `resbuf' undeclared (first use in this function)
thread.c:189: error: (Each undeclared identifier is reported only once
thread.c:189: error: for each function it appears in.)

Diff'ing thread.c between 7.4.1 and 7.4.2, it *looks* like, at first
blush, nothing changed that should affect the relevant code.

Anybody got any idea what's broken?

Unfortunately, I know exactly what is broken. First, pre7.4.2 didn't
use thread.c properly. Now that it does, you are breaking on this
issue:

/*
* Early POSIX draft of getpwuid_r() returns 'struct passwd *'.
* getpwuid_r(uid, resultbuf, buffer, buflen)
* Do we need to support it? bjm 2003-08-14
*/
/* POSIX version */
getpwuid_r(uid, resultbuf, buffer, buflen, result);

Notice the comment. Do we have to support getpwuid_r that returns
passwd *, and doesn't take a fourth argument? Yea, for Solaris 7 & 8,
we now we now do. I think you can get yours working by just changing
the call to:

result = getpwuid_r(uid, resultbuf, buffer, buflen);

I will have to add configure tests for this and it will work properly
for you in 7.4.3.

OK, patch attached and applied. It adds configure tests for the 5-arg
version of getpwuid_r() and properly falls back to the Posix draft
version you have on Solaris. Seems Solaris 9 also still has the draft
version.

This is backpatched to 7.4.X so it will be in the next release. I have
attached the CVS head and 7.4.X versions of the patch for your testing.
You will need to re-run configure once you apply the patch.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

Attachments:

/bjm/diff.HEADtext/plainDownload+95-5
/bjm/diff.7.4text/plainDownload+96-6
#3Jim Seymour
jseymour@LinxNet.com
In reply to: Bruce Momjian (#2)
Re: [HACKERS] 7.4.2 Build broken on (Sparc) Solaris 7 and 8

Bruce Momjian <pgman@candle.pha.pa.us> wrote:

[snip]

OK, patch attached and applied. It adds configure tests for the 5-arg
version of getpwuid_r() and properly falls back to the Posix draft
version you have on Solaris. Seems Solaris 9 also still has the draft
version.

[snip]

Well, yes and no. If you define _POSIX_PTHREAD_SEMANTICS, you get the
5-arg version. It looks like this has been the case at least back to
Solaris 2.5.1.

I didn't really expect anything prior to 2.5.1 to be an issue, so I
didn't bother looking into fixes for anything beyond that.

Regards,
Jim

#4Bruce Momjian
bruce@momjian.us
In reply to: Jim Seymour (#3)
Re: [HACKERS] 7.4.2 Build broken on (Sparc) Solaris 7 and 8

Jim Seymour wrote:

Bruce Momjian <pgman@candle.pha.pa.us> wrote:

[snip]

OK, patch attached and applied. It adds configure tests for the 5-arg
version of getpwuid_r() and properly falls back to the Posix draft
version you have on Solaris. Seems Solaris 9 also still has the draft
version.

[snip]

Well, yes and no. If you define _POSIX_PTHREAD_SEMANTICS, you get the
5-arg version. It looks like this has been the case at least back to
Solaris 2.5.1.

I didn't really expect anything prior to 2.5.1 to be an issue, so I
didn't bother looking into fixes for anything beyond that.

Oh, very interesting. CVS HEAD has in template/solaris:

# tools/thread/thread_test must be run
if test "$GCC" = yes
then THREAD_CPPFLAGS="-D_POSIX_PTHREAD_SEMANTICS"
THREAD_LIBS="-pthread"
else THREAD_CPPFLAGS="-mt -D_POSIX_PTHREAD_SEMANTICS"
THREAD_LIBS="-lpthread"
fi

I added the "-D_POSIX_PTHREAD_SEMANTICS" flags into post-7.4.2, so it
seems this platform would work even without checking for the 4-arg
getpwuid_r version. However, I noticed that 'man getpwuid_r' only
mentions the 4-arg version.

I will leave the 4-arg check in. The original author thought it might be
needed, and the Solaris manual mentions it, so odds are some other
platforms will hit it too, and perhaps not have the 5-arg version.

Thanks for the research. I will add a mention in the solaris template
file.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073