On Tue, Sep 14, 2010 at 7:57 PM, Osier <jyang(a)redhat.com> wrote:
----- "Osier" <jyang(a)redhat.com> wrote:
> From: "Osier" <jyang(a)redhat.com>
> To: "Justin Clift" <jclift(a)redhat.com>
> Cc: "Libvirt Developers Mailing List" <libvir-list(a)redhat.com>
> Sent: Wednesday, September 15, 2010 8:45:20 AM GMT +08:00 Beijing / Chongqing / Hong
Kong / Urumqi
> Subject: Re: [libvirt] OSX 10.6 build failures
>
> ----- "Justin Clift" <jclift(a)redhat.com> wrote:
>
> > From: "Justin Clift" <jclift(a)redhat.com>
> > To: "Libvirt Developers Mailing List" <libvir-list(a)redhat.com>
> > Sent: Wednesday, September 15, 2010 7:42:48 AM GMT +08:00 Beijing /
> Chongqing / Hong Kong / Urumqi
> > Subject: [libvirt] OSX 10.6 build failures
> >
> > Hi us,
> >
> > Going through the process of getting libvirt to compile on OSX,
> making
> >
> > notes of the failures on the way through (from a clean system) to
> be
> > fixed.
> >
> > a) libtool -> glibtool
> > libtoolize -> glibtoolize
> >
> > It turns out that autogen.sh is hard coded to use "libtool",
> and
> > wants the GNU version.
> >
> > OSX supplies has it's own version, without a --version option,
> so
> > autogen.sh fails.
> >
> > Installing GNU libtool through MacPorts, makes it available as
> > glibtool, with libtoolize being glibtoolize.
> >
> > Adjusting autogen.sh to detect that, then set LIBTOOL and
> > LIBTOOLIZE
> > appropriately was fairly trivial.
> >
> > Will submit a patch to fix that in a bit.
> >
> >
> > b) pkg-config
> >
> > The next thing to barf was autoconf, complaining about
> > AC_MSG_ERROR
> > not being a defined macro.
> >
> > Googling with some persistence showed this is caused by
> > pkg-config
> > not being installed. Fixed that.
> >
> > Will submit a patch for that too. Probably "pkg-config
> > --version"
> > based, copying the approach used for the other autogen.sh
> checks.
> >
> >
> > c) This is a compilation failure, one I don't readily know how to
> > fix:
> >
> > ...
> > Making all in src
> > make all-am
> > CC libvirt_util_la-network.lo
> > util/network.c: In function 'getIPv6Addr':
> > util/network.c:50: error: 'struct in6_addr' has no member named
>
> > 's6_addr16'
> > util/network.c:50: error: 'struct in6_addr' has no member named
>
> > 's6_addr16'
> > util/network.c:50: error: 'struct in6_addr' has no member named
>
> > 's6_addr16'
> > util/network.c:50: error: 'struct in6_addr' has no member named
>
> > 's6_addr16'
> > make[3]: *** [libvirt_util_la-network.lo] Error 1
> > make[2]: *** [all] Error 2
> > make[1]: *** [all-recursive] Error 1
> > make: *** [all] Error 2
> > $
> >
> > They're the only problems so far, though most things have been
> > disabled
> > on the ./configure line so it's only the client libraries being
> > built.
> >
> > Anyone know how to address that third one?
> >
>
> % man ipv6
>
> Address Format
> struct sockaddr_in6 {
> sa_family_t sin6_family; /* AF_INET6 */
> in_port_t sin6_port; /* port number */
> uint32_t sin6_flowinfo; /* IPv6 flow information
> */
> struct in6_addr sin6_addr; /* IPv6 address */
> uint32_t sin6_scope_id; /* Scope ID (new in 2.4)
> */
> };
>
> struct in6_addr {
> unsigned char s6_addr[16]; /* IPv6 address */
> };
>
> % vim libvirt/src/util/network.c
>
> 43 static int getIPv6Addr(virSocketAddrPtr addr, virIPv6AddrPtr tab)
> {
> 44 int i;
> 45
> 46 if ((addr == NULL) || (tab == NULL) || (addr->stor.ss_family
> != AF_INET6 ))
> 47 return(-1);
> 48
> 49 for (i = 0;i < 8;i++) {
> 50 (*tab)[i] = ntohs(addr->inet6.sin6_addr.s6_addr16[i]);
> 51 }
> 52
> 53 return(0);
> 54 }
>
> I guess it's a typo, should be "addr->inet6.sin6_addr.s6_addr[i]",
but
> not
> "addr->inet6.sin6_addr.s6_addr16[i]".. :-)
BTW: Got it under Linux, not sure if the ipv6 implementation is same on OSX. :-)
Yep. Just checked my OS X 10.6 box.. Here's the relevant snippet.
/*
* IPv6 address
*/
struct in6_addr {
union {
__uint8_t __u6_addr8[16];
__uint16_t __u6_addr16[8];
__uint32_t __u6_addr32[4];
} __u6_addr; /* 128-bit IP6 address */
};
#define s6_addr __u6_addr.__u6_addr8
--
Doug Goldstein