[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;
 }
