Subject: pkg/34838: news/nn does not compile (NetBSD 3.0)
To: None <firstname.lastname@example.org, email@example.com,>
From: None <kre@munnari.OZ.AU>
Date: 10/17/2006 09:55:01
>Synopsis: news/nn does not compile (NetBSD 3.0)
>Arrival-Date: Tue Oct 17 09:55:00 +0000 2006
>Originator: Robert Elz
>Release: NetBSD 3.99.15 (pkgsrc current within last hour or two)
Prince of Songkla University
System: NetBSD jade.coe.psu.ac.th 3.99.15 NetBSD 3.99.15 (GENERIC-1.696-20060125) #8: Wed Jan 25 04:59:39 ICT 2006 firstname.lastname@example.org:/usr/obj/current/kernels/JADE_ASUS i386
I have no idea what systems news/nn actually compiles
successfully on (except probably irix, where it looks to
be handled), but as it is it uses sockaddr_in and (on most(?)
systems) doesn't include netinet/in.h
Attempt to compile news/nn on NetBSD - most likely any NetBSD
version would do, I'm using pkg_comp with NetBSD 3.0 release
sets installed (so a pretty pure NetBSD 3.0 environment).
Expect to see ...
cc -Iconf -O2 -c nntp.c
nntp.c: In function `get_socket':
nntp.c:295: error: storage size of `sin' isn't known
*** Error code 1
That's from this line of code ...
struct sockaddr_in sin;
which suggests that sockaddr_in isn't defined.
And sure, enough, around lines 60-65 of nntp.c
there appears ...
/* This is necessary due to the definitions in m-XXX.h */
/* IRIX needs it for struct sockaddr_in */
#if !defined(NETWORK_DATABASE) || defined(NETWORK_BYTE_ORDER) || defined(__sgi)
which doesn't manage to include netinet/in.h on NetBSD systems.
Patching nntp.c to add
to the #if allowed it to compile for me.
A better fix would be to get rid of the use of sockaddr_in and
get getaddrinfo() instead of gethostbyname(0 and getservbynam()
(wich might possibly also be extended to allow IPv6 to work, but
I certainly haven't tested that)
Howwever, this (adjusting the #if) might not be the right solution.
What systems (if any) don't require (or at least, allow) netinet/in.h
to be included to define sockaaddr_in ? That's where the
struct definition has been since it was invented. If there are
no such systems, then simply remove the #if/#endif completely,
and leave the #include always being included would seem like
a better idea.