--- ./configure.ac.orig
+++ ./configure.ac
@@ -171,6 +171,8 @@
 AM_CONDITIONAL(PPTP, test "${enable_pptp}" != "no")
 AM_CONDITIONAL(PPTP_BUILTIN, test "${enable_pptp}" = "builtin")
 
+AC_CHECK_MEMBERS([struct in6_pktinfo.ipi6_addr], [], [], [[#include <netinet/in.h>]])
+AC_CHECK_HEADERS(execinfo.h)
 AC_CHECK_HEADERS(resolv.h, dummy=yes,
 	AC_MSG_ERROR(resolver header files are required))
 AC_CHECK_LIB(resolv, ns_initparse, dummy=yes, [
diff --git a/gdhcp/common.c b/gdhcp/common.c
index e111150..ee4dc43 100644
--- gdhcp/common.c
+++ gdhcp/common.c
@@ -22,6 +22,7 @@
 #include <config.h>
 #endif
 
+#define _GNU_SOURCE
 #include <stdio.h>
 #include <stdlib.h>
 #include <errno.h>
@@ -31,7 +32,6 @@
 #include <string.h>
 #include <endian.h>
 #include <net/if_arp.h>
-#include <linux/if.h>
 #include <netpacket/packet.h>
 #include <net/ethernet.h>
 #include <arpa/inet.h>
@@ -39,6 +39,8 @@
 #include "gdhcp.h"
 #include "common.h"
 
+#include <linux/if.h>
+
 static const DHCPOption client_options[] = {
 	{ OPTION_IP,			0x01 }, /* subnet-mask */
 	{ OPTION_IP | OPTION_LIST,	0x03 }, /* routers */
diff --git a/src/log.c b/src/log.c
index a693bd0..9054462 100644
--- src/log.c
+++ src/log.c
@@ -30,7 +30,9 @@
 #include <stdlib.h>
 #include <string.h>
 #include <syslog.h>
+#ifdef HAVE_EXECINFO_H
 #include <execinfo.h>
+#endif
 #include <dlfcn.h>
 
 #include "connman.h"
@@ -112,6 +114,7 @@ void connman_debug(const char *format, ...)
 
 static void print_backtrace(unsigned int offset)
 {
+#ifdef HAVE_EXECINFO_H
 	void *frames[99];
 	size_t n_ptrs;
 	unsigned int i;
@@ -210,6 +213,7 @@ static void print_backtrace(unsigned int offset)
 
 	close(outfd[1]);
 	close(infd[0]);
+#endif /* HAVE_EXECINFO_H */
 }
 
 static void signal_handler(int signo)
diff --git a/tools/dhcp-test.c b/tools/dhcp-test.c
index c34e10a..eae66fc 100644
--- tools/dhcp-test.c
+++ tools/dhcp-test.c
@@ -33,7 +33,6 @@
 #include <arpa/inet.h>
 #include <net/route.h>
 #include <net/ethernet.h>
-#include <linux/if_arp.h>
 
 #include <gdhcp/gdhcp.h>
 
--- plugins/wifi.c	2014-06-07 21:46:22.000000000 -0300
+++ plugins/wifi.c	2014-07-18 20:37:16.811343663 -0300
@@ -30,9 +30,8 @@
 #include <string.h>
 #include <sys/ioctl.h>
 #include <sys/socket.h>
-#include <linux/if_arp.h>
-#include <linux/wireless.h>
 #include <net/ethernet.h>
+#include <linux/wireless.h>
 
 #ifndef IFF_LOWER_UP
 #define IFF_LOWER_UP	0x10000
--- src/ntp.c	2014-06-07 21:46:22.000000000 -0300
+++ src/ntp.c	2014-07-18 20:38:12.144677543 -0300
@@ -180,7 +180,7 @@
 	msg.xmttime.fraction = htonl(transmit_timeval.tv_usec * 1000);
 
 	len = sendto(fd, &msg, sizeof(msg), MSG_DONTWAIT,
-						&addr, sizeof(addr));
+						(struct sockaddr *) &addr, sizeof(addr));
 	if (len < 0) {
 		connman_error("Time request for server %s failed (%d/%s)",
 			server, errno, strerror(errno));
--- src/tethering.c	2014-04-04 15:12:07.000000000 -0300
+++ src/tethering.c	2014-07-18 20:39:12.091344804 -0300
@@ -31,10 +31,8 @@
 #include <stdio.h>
 #include <sys/ioctl.h>
 #include <net/if.h>
-#include <linux/sockios.h>
 #include <string.h>
 #include <fcntl.h>
-#include <linux/if_tun.h>
 #include <netinet/in.h>
 #include <linux/if_bridge.h>
 
--- tools/dnsproxy-test.c	2013-12-05 09:12:12.000000000 -0200
+++ tools/dnsproxy-test.c	2014-07-18 20:36:37.484676606 -0300
@@ -24,6 +24,7 @@
 #endif
 
 #include <errno.h>
+#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
--- tools/private-network-test.c	2013-08-19 19:57:25.000000000 -0300
+++ tools/private-network-test.c	2014-07-18 20:28:42.644671909 -0300
@@ -32,7 +32,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <signal.h>
-#include <sys/poll.h>
+#include <poll.h>
 #include <sys/signalfd.h>
 #include <unistd.h>
 
--- tools/tap-test.c	2013-12-05 09:12:12.000000000 -0200
+++ tools/tap-test.c	2014-07-18 20:28:35.351338499 -0300
@@ -29,7 +29,7 @@
 #include <fcntl.h>
 #include <unistd.h>
 #include <string.h>
-#include <sys/poll.h>
+#include <poll.h>
 #include <sys/ioctl.h>
 
 #include <netinet/in.h>
--- gweb/gresolv.c	2014-07-18 20:43:40.000000000 -0300
+++ gweb/gresolv.c	2014-07-18 20:44:43.284681413 -0300
@@ -24,6 +24,7 @@
 #endif
 
 #include <errno.h>
+#include <stdio.h>
 #include <unistd.h>
 #include <stdarg.h>
 #include <string.h>
--- src/ippool.c	2014-04-04 15:12:07.000000000 -0300
+++ src/ippool.c	2014-07-18 20:44:56.068014872 -0300
@@ -28,7 +28,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <unistd.h>
-#include <sys/errno.h>
+#include <errno.h>
 #include <sys/socket.h>
 
 #include "connman.h"
--- src/iptables.c	2014-04-04 15:12:07.000000000 -0300
+++ src/iptables.c	2014-07-18 20:44:25.844681240 -0300
@@ -28,7 +28,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <unistd.h>
-#include <sys/errno.h>
+#include <errno.h>
 #include <sys/socket.h>
 #include <xtables.h>
 

--- gdhcp/common.h.orig
+++ gdhcp/common.h
@@ -18,6 +18,9 @@
  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  *
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <netinet/udp.h>
 #include <netinet/ip.h>
@@ -170,8 +173,8 @@
 	[OPTION_U32]	= 4,
 };
 
-/* already defined within netinet/in.h if using GNU compiler */
-#ifndef __USE_GNU
+/* already defined within netinet/in.h if using GNU or musl libc */
+#ifndef HAVE_STRUCT_IN6_PKTINFO_IPI6_ADDR
 struct in6_pktinfo {
 	struct in6_addr ipi6_addr;  /* src/dst IPv6 address */
 	unsigned int ipi6_ifindex;  /* send/recv interface index */
