Обсуждение: 7.4.2 Build broken on (Sparc) Solaris 7 and 8

Поиск
Список
Период
Сортировка

7.4.2 Build broken on (Sparc) Solaris 7 and 8

От
Bruce Momjian
Дата:
> 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,
Pennsylvania19073
 


Re: 7.4.2 Build broken on (Sparc) Solaris 7 and 8

От
jseymour@LinxNet.com (Jim Seymour)
Дата:
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

Re: 7.4.2 Build broken on (Sparc) Solaris 7 and 8

От
Bruce Momjian
Дата:
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