| From 1ae38f7ba738c2adaaebc66576143f96cdd5e962 Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com> |
| Date: Tue, 9 Jun 2015 10:59:42 +0200 |
| Subject: [PATCH] ptp: Check for the actual API we use instead of just looking |
| for __APPLE__ |
| |
| Should fix the build on FreeBSD, DragonFly and other BSDs. |
| |
| https://bugzilla.gnome.org/show_bug.cgi?id=750530 |
| --- |
| configure.ac | 38 ++++++++++++++++++++++++++++++++++++++ |
| libs/gst/helpers/gst-ptp-helper.c | 14 +++++++++----- |
| 2 files changed, 47 insertions(+), 5 deletions(-) |
| |
| diff --git a/configure.ac b/configure.ac |
| index 71309c9..3717518 100644 |
| --- a/configure.ac |
| +++ b/configure.ac |
| @@ -325,6 +325,44 @@ AC_PATH_PROG([SETCAP], [setcap], [no], [$PATH:/usr/bin:/bin:/usr/sbin:/sbin]) |
| if test "x$HAVE_PTP" = "xyes"; then |
| AC_DEFINE(HAVE_PTP, 1, [PTP support available]) |
| |
| +AC_MSG_CHECKING([for SIOCGIFCONF, SIOCGIFFLAGS and SIOCGIFHWADDR]) |
| +AC_COMPILE_IFELSE([AC_LANG_PROGRAM( |
| + [[ |
| + #include <sys/ioctl.h> |
| + #include <net/if.h> |
| + ]], |
| + [[ |
| + struct ifreq ifr; |
| + struct ifconf ifc; |
| + ioctl(0, SIOCGIFCONF, &ifc); |
| + ioctl(0, SIOCGIFFLAGS, &ifr); |
| + ioctl(0, SIOCGIFHWADDR, &ifr); |
| + int dummy = ifr.ifr_hwaddr.sa_data[0]; |
| + ]])], [ |
| + AC_MSG_RESULT(yes) |
| + AC_DEFINE(HAVE_SIOCGIFCONF_SIOCGIFFLAGS_SIOCGIFHWADDR, 1, [SIOCGIFCONF, SIOCGIFFLAGS and SIOCGIFHWADDR is available]) |
| + ], [ |
| + AC_MSG_RESULT(no) |
| +]) |
| + |
| +AC_MSG_CHECKING([for getifaddrs() and AF_LINK]) |
| +AC_COMPILE_IFELSE([AC_LANG_PROGRAM( |
| + [[ |
| + #include <ifaddrs.h> |
| + #include <net/if.h> |
| + #include <net/if_dl.h> |
| + ]], |
| + [[ |
| + struct ifaddrs *ifaddr; |
| + getifaddrs(&ifaddr); |
| + int dummy = (ifaddr->ifa_flags & IFF_LOOPBACK) && ifaddr->ifa_addr->sa_family != AF_LINK; |
| + ]])], [ |
| + AC_MSG_RESULT(yes) |
| + AC_DEFINE(HAVE_GETIFADDRS_AF_LINK, 1, [getifaddrs() and AF_LINK is available]) |
| + ], [ |
| + AC_MSG_RESULT(no) |
| + ]) |
| + |
| AC_MSG_CHECKING([how to install gst-ptp-helper]) |
| if test "x$with_ptp_helper_permissions" = "xauto"; then |
| if test "x$gst_ptp_have_cap" = "xyes" -a "x$SETCAP" != "xno"; then |
| diff --git a/libs/gst/helpers/gst-ptp-helper.c b/libs/gst/helpers/gst-ptp-helper.c |
| index 45a0206..6c753df 100644 |
| --- a/libs/gst/helpers/gst-ptp-helper.c |
| +++ b/libs/gst/helpers/gst-ptp-helper.c |
| @@ -41,7 +41,7 @@ |
| #include <netinet/in.h> |
| #include <string.h> |
| |
| -#ifdef __APPLE__ |
| +#ifdef HAVE_GETIFADDRS_AF_LINK |
| #include <ifaddrs.h> |
| #include <net/if_dl.h> |
| #endif |
| @@ -240,7 +240,7 @@ setup_sockets (void) |
| |
| /* Probe all non-loopback interfaces */ |
| if (!ifaces) { |
| -#ifndef __APPLE__ |
| +#if defined(HAVE_SIOCGIFCONF_SIOCGIFFLAGS_SIOCGIFHWADDR) |
| struct ifreq ifr; |
| struct ifconf ifc; |
| gchar buf[8192]; |
| @@ -269,7 +269,7 @@ setup_sockets (void) |
| ifaces = probed_ifaces; |
| } |
| } |
| -#else |
| +#elif defined(HAVE_GETIFADDRS_AF_LINK) |
| struct ifaddrs *ifaddr, *ifa; |
| |
| if (getifaddrs (&ifaddr) != -1) { |
| @@ -291,6 +291,8 @@ setup_sockets (void) |
| g_ptr_array_add (arr, NULL); |
| ifaces = probed_ifaces = (gchar **) g_ptr_array_free (arr, FALSE); |
| } |
| +#else |
| +#warning "Implement something to list all network interfaces" |
| #endif |
| } |
| |
| @@ -298,7 +300,7 @@ setup_sockets (void) |
| if (clock_id == (guint64) - 1) { |
| gboolean success = FALSE; |
| |
| -#ifndef __APPLE__ |
| +#if defined(HAVE_SIOCGIFCONF_SIOCGIFFLAGS_SIOCGIFHWADDR) |
| struct ifreq ifr; |
| |
| if (ifaces) { |
| @@ -356,7 +358,7 @@ setup_sockets (void) |
| } |
| } |
| } |
| -#else |
| +#elif defined(HAVE_GETIFADDRS_AF_LINK) |
| struct ifaddrs *ifaddr, *ifa; |
| |
| if (getifaddrs (&ifaddr) != -1) { |
| @@ -405,6 +407,8 @@ setup_sockets (void) |
| |
| freeifaddrs (ifaddr); |
| } |
| +#else |
| +#warning "Implement something to get MAC addresses of network interfaces" |
| #endif |
| |
| if (!success) { |
| -- |
| 2.1.4 |
| |