pkgsrc-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

pkg/47489: perl does not build on NetBSD-current



>Number:         47489
>Category:       pkg
>Synopsis:       perl does not build on NetBSD-current
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    pkg-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Jan 22 18:00:00 +0000 2013
>Originator:     Alan Barrett
>Release:        NetBSD 6.99.16
>Organization:
Not much
>Environment:
System: NetBSD 6.99.16 i386
>Description:
        The lang/perl5 package does not build under NetBSD-current.

        The errors are related to getproto*_r and getserv*_r functions.

        NetBSD does not declare the getserv*_r or getproto*_r functions
        in any header files, but it does provide private implementations
        in libc.  perl's Configure script seems to find the private
        implementations but be confused about the types of the
        arguments.

>How-To-Repeat:
$ cd pkgsrc/lang/perl5
$ grep '^DISTNAME' Makefile.common
DISTNAME=       perl-5.16.2

$ make
[...]
pp_sys.c: In function 'Perl_pp_gprotoent':
pp_sys.c:4897:2: warning: implicit declaration of function 'getprotobyname_r'
pp_sys.c:4905:2: warning: implicit declaration of function 'getprotobynumber_r'
pp_sys.c:4912:2: warning: implicit declaration of function 'getprotoent_r'
pp_sys.c: In function 'Perl_pp_gservent':
pp_sys.c:4958:2: warning: implicit declaration of function 'getservbyname_r'
pp_sys.c:4970:2: warning: implicit declaration of function 'getservbyport_r'
pp_sys.c:4977:2: warning: implicit declaration of function 'getservent_r'
pp_sys.c: In function 'Perl_pp_shostent':
pp_sys.c:5037:2: warning: implicit declaration of function 'setprotoent_r'
pp_sys.c:5037:2: error: 'REENTR' has no member named '_protoent_data'
pp_sys.c:5044:2: warning: implicit declaration of function 'setservent_r'
pp_sys.c:5044:2: error: 'REENTR' has no member named '_servent_data'
pp_sys.c: In function 'Perl_pp_ehostent':
pp_sys.c:5073:2: warning: implicit declaration of function 'endprotoent_r'
pp_sys.c:5073:2: error: 'REENTR' has no member named '_protoent_data'
pp_sys.c:5080:2: warning: implicit declaration of function 'endservent_r'
pp_sys.c:5080:2: error: 'REENTR' has no member named '_servent_data'
*** Error code 1

$ egrep '^#.*(GET|SET|END)(SERV|PROTO)(ENT|BYNAME|BYPORT)_R' 
work/perl-5.16.2/config.h
#define HAS_ENDPROTOENT_R          /**/
#define ENDPROTOENT_R_PROTO REENTRANT_PROTO_I_D    /**/
#define HAS_ENDSERVENT_R           /**/
#define ENDSERVENT_R_PROTO REENTRANT_PROTO_I_D     /**/
#define HAS_GETPROTOBYNAME_R       /**/
#define GETPROTOBYNAME_R_PROTO REENTRANT_PROTO_I_CSBWR     /**/
#define HAS_GETPROTOENT_R          /**/
#define GETPROTOENT_R_PROTO REENTRANT_PROTO_I_SBWR         /**/
#define HAS_GETSERVBYNAME_R        /**/
#define GETSERVBYNAME_R_PROTO REENTRANT_PROTO_I_CCSBWR     /**/
#define HAS_GETSERVBYPORT_R        /**/
#define GETSERVBYPORT_R_PROTO REENTRANT_PROTO_I_ICSBWR     /**/
#define HAS_GETSERVENT_R           /**/
#define GETSERVENT_R_PROTO REENTRANT_PROTO_I_SBWR          /**/
#define HAS_SETPROTOENT_R          /**/
#define SETPROTOENT_R_PROTO REENTRANT_PROTO_I_ID           /**/
#define HAS_SETSERVENT_R           /**/
#define SETSERVENT_R_PROTO REENTRANT_PROTO_I_ID    /**/

$ uname -srm
NetBSD 6.99.16 i386

$ egrep -R '(get|set|end)(serv|proto)(ent|byname|byport)_r' /usr/include
[no output]

$ nm /usr/lib/libc.a | egrep '[WT] 
_*(get|set|end)(serv|proto)(ent|byname|byport)_r'
00000000 T _getprotobyname_r
00000000 W getprotobyname_r
00000046 T _endprotoent_r
000000a4 T _getprotoent_r
00000000 T _setprotoent_r
00000046 W endprotoent_r
000000a4 W getprotoent_r
00000000 W setprotoent_r
0000021f T _getservbyport_r
0000021f W getservbyport_r
00000316 T _getservbyname_r
00000316 W getservbyname_r
000001af T _endservent_r
000005d4 T _getservent_r
0000018b T _setservent_r
000001af W endservent_r
000005d4 W getservent_r
0000018b W setservent_r

>Fix:
Fix the Configure script either to avoid using the private functions,
or to use the correct prototypes.  This might also require changes in
reentr.h, where there seems to be confusion about whether to use
fields like

        struct protoent_data _protoent_data;

or
        char*   _protoent_buffer;
        size_t  _protoent_size;



Home | Main Index | Thread Index | Old Index