[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [libvirt] OSX 10.6 build failures



On Tue, Sep 14, 2010 at 7:57 PM, Osier <jyang redhat com> wrote:
>
> ----- "Osier" <jyang redhat com> wrote:
>
>> From: "Osier" <jyang redhat com>
>> To: "Justin Clift" <jclift redhat com>
>> Cc: "Libvirt Developers Mailing List" <libvir-list 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 redhat com> wrote:
>>
>> > From: "Justin Clift" <jclift redhat com>
>> > To: "Libvirt Developers Mailing List" <libvir-list 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


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]