avahi: fix build on uclibc 0.9.31 without ipv6 support
authorPeter Korsgaard <jacmet@sunsite.dk>
Tue, 18 May 2010 08:41:38 +0000 (10:41 +0200)
committerPeter Korsgaard <jacmet@sunsite.dk>
Tue, 18 May 2010 08:42:13 +0000 (10:42 +0200)
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
CHANGES
package/avahi/avahi-optional-ipv6.patch [new file with mode: 0644]

diff --git a/CHANGES b/CHANGES
index 76f5651fd045b6e016cffda62422075bf263d437..8c7aaba964dbefc722c07f68441dba43dcc8bcf2 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -2,7 +2,7 @@
 
        Fixes all over the tree.
 
-       Updated/fixed packages: busybox
+       Updated/fixed packages: avahi, busybox
 
 2010.05-rc2, Released May 11th, 2010:
 
diff --git a/package/avahi/avahi-optional-ipv6.patch b/package/avahi/avahi-optional-ipv6.patch
new file mode 100644 (file)
index 0000000..5caf87c
--- /dev/null
@@ -0,0 +1,147 @@
+[PATCH] avahi-core: make ipv6 support optional on uclibc 0.9.31+
+
+uClibc 0.9.31+ doesn't define the IPV6_* defines when IPv6 support isn't
+enabled, causing the avahi build to break. Detect this configuration, and
+comment out IPv6 code if so.
+
+Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
+---
+ avahi-core/socket.c |   28 +++++++++++++++++++++++-----
+ 1 file changed, 23 insertions(+), 5 deletions(-)
+
+Index: avahi-0.6.23/avahi-core/socket.c
+===================================================================
+--- avahi-0.6.23.orig/avahi-core/socket.c
++++ avahi-0.6.23/avahi-core/socket.c
+@@ -47,6 +47,11 @@
+ #include <net/if_dl.h>
+ #endif
++#include <features.h>
++#if defined(__UCLIBC__) && !defined (__UCLIBC_HAS_IPV6__)
++#define NO_IPV6
++#endif
++
+ #include "dns.h"
+ #include "fdutil.h"
+ #include "socket.h"
+@@ -75,6 +80,7 @@ static void mdns_mcast_group_ipv4(struct
+     inet_pton(AF_INET, AVAHI_IPV4_MCAST_GROUP, &ret_sa->sin_addr);
+ }
++#ifndef NO_IPV6
+ static void mdns_mcast_group_ipv6(struct sockaddr_in6 *ret_sa) {
+     assert(ret_sa);
+@@ -83,6 +89,7 @@ static void mdns_mcast_group_ipv6(struct
+     ret_sa->sin6_port = htons(AVAHI_MDNS_PORT);
+     inet_pton(AF_INET6, AVAHI_IPV6_MCAST_GROUP, &ret_sa->sin6_addr);
+ }
++#endif
+ static void ipv4_address_to_sockaddr(struct sockaddr_in *ret_sa, const AvahiIPv4Address *a, uint16_t port) {
+     assert(ret_sa);
+@@ -95,6 +102,7 @@ static void ipv4_address_to_sockaddr(str
+     memcpy(&ret_sa->sin_addr, a, sizeof(AvahiIPv4Address));
+ }
++#ifndef NO_IPV6
+ static void ipv6_address_to_sockaddr(struct sockaddr_in6 *ret_sa, const AvahiIPv6Address *a, uint16_t port) {
+     assert(ret_sa);
+     assert(a);
+@@ -105,6 +113,7 @@ static void ipv6_address_to_sockaddr(str
+     ret_sa->sin6_port = htons(port);
+     memcpy(&ret_sa->sin6_addr, a, sizeof(AvahiIPv6Address));
+ }
++#endif
+ int avahi_mdns_mcast_join_ipv4(int fd, const AvahiIPv4Address *a, int idx, int join) {
+ #ifdef HAVE_STRUCT_IP_MREQN
+@@ -143,6 +152,7 @@ int avahi_mdns_mcast_join_ipv4(int fd, c
+ }
+ int avahi_mdns_mcast_join_ipv6(int fd, const AvahiIPv6Address *a, int idx, int join) {
++#ifndef NO_IPV6
+     struct ipv6_mreq mreq6;
+     struct sockaddr_in6 sa6;
+@@ -164,6 +174,9 @@ int avahi_mdns_mcast_join_ipv6(int fd, c
+     }
+     return 0;
++#else
++    return -1;
++#endif
+ }
+ static int reuseaddr(int fd) {
+@@ -372,6 +385,7 @@ fail:
+ }
+ int avahi_open_socket_ipv6(int no_reuse) {
++#ifndef NO_IPV6
+     struct sockaddr_in6 sa, local;
+     int fd = -1, yes, r;
+     int ttl;
+@@ -437,7 +451,7 @@ int avahi_open_socket_ipv6(int no_reuse)
+ fail:
+     if (fd >= 0)
+         close(fd);
+-
++#endif
+     return -1;
+ }
+@@ -567,7 +581,7 @@ int avahi_send_dns_packet_ipv6(
+         const AvahiIPv6Address *src_address,
+         const AvahiIPv6Address *dst_address,
+         uint16_t dst_port) {
+-
++#ifndef NO_IPV6
+     struct sockaddr_in6 sa;
+     struct msghdr msg;
+     struct iovec io;
+@@ -620,6 +634,9 @@ int avahi_send_dns_packet_ipv6(
+     }
+     return sendmsg_loop(fd, &msg, 0);
++#else
++    return -1;
++#endif
+ }
+ AvahiDnsPacket *avahi_recv_dns_packet_ipv4(
+@@ -782,7 +799,7 @@ AvahiDnsPacket *avahi_recv_dns_packet_ip
+         AvahiIPv6Address *ret_dst_address,
+         AvahiIfIndex *ret_iface,
+         uint8_t *ret_ttl) {
+-
++#ifndef NO_IPV6
+     AvahiDnsPacket *p = NULL;
+     struct msghdr msg;
+     struct iovec io;
+@@ -889,7 +906,7 @@ AvahiDnsPacket *avahi_recv_dns_packet_ip
+ fail:
+     if (p)
+         avahi_dns_packet_free(p);
+-
++#endif
+     return NULL;
+ }
+@@ -934,6 +951,7 @@ fail:
+ }
+ int avahi_open_unicast_socket_ipv6(void) {
++#ifndef NO_IPV6
+     struct sockaddr_in6 local;
+     int fd = -1, yes;
+@@ -974,6 +992,6 @@ int avahi_open_unicast_socket_ipv6(void)
+ fail:
+     if (fd >= 0)
+         close(fd);
+-
++#endif
+     return -1;
+ }