diff mbox

package/socat: fix build issue

Message ID 1472415533-19764-1-git-send-email-romain.naour@gmail.com
State Accepted
Headers show

Commit Message

Romain Naour Aug. 28, 2016, 8:18 p.m. UTC
Fix two build issue when socat is build with musl:
  - Set NETDB_INTERNAL locally since it's not provided by musl
  - remove if_tun.h kernel header

Fixes:
http://autobuild.buildroot.net/results/029/02977d3844ef62b1e9cbfbab244593632757c5e2

Signed-off-by: Romain Naour <romain.naour@gmail.com>
---
 package/socat/0003-compat-set-NETDB_INTERNAL.patch | 35 +++++++++
 ...004-xio-tun-remove-if_tun.h-kernel-header.patch | 91 ++++++++++++++++++++++
 2 files changed, 126 insertions(+)
 create mode 100644 package/socat/0003-compat-set-NETDB_INTERNAL.patch
 create mode 100644 package/socat/0004-xio-tun-remove-if_tun.h-kernel-header.patch

Comments

Thomas Petazzoni Sept. 6, 2016, 9:37 p.m. UTC | #1
Hello,

On Sun, 28 Aug 2016 22:18:53 +0200, Romain Naour wrote:

> diff --git a/package/socat/0003-compat-set-NETDB_INTERNAL.patch b/package/socat/0003-compat-set-NETDB_INTERNAL.patch
> new file mode 100644
> index 0000000..da31073
> --- /dev/null
> +++ b/package/socat/0003-compat-set-NETDB_INTERNAL.patch
> @@ -0,0 +1,35 @@
> +From e7804d1750652e39c7a5803d360b29b2637a695f Mon Sep 17 00:00:00 2001
> +From: Romain Naour <romain.naour@gmail.com>
> +Date: Sun, 28 Aug 2016 21:04:01 +0200
> +Subject: [PATCH] compat: set NETDB_INTERNAL
> +
> +Musl doesn't provide NETDB_INTERNAL which is defined in resolv/netdb.h
> +in Glibc [1].
> +
> +Set NETDB_INTERNAL to -1 locally if not already defined.
> +Based on [2].
> +
> +[1] https://sourceware.org/git/?p=glibc.git;a=blob;f=resolv/netdb.h;h=3aba530932c7a62a4f23e3193e9186da677f552b;hb=fdfc9260b61d3d72541f18104d24c7bcb0ce5ca2#l74
> +[2] http://git.alpinelinux.org/cgit/aports/tree/main/socat/netdb-internal.patch?id=5a45173b50892cb634197c30b3506ebff98d3b7d
> +
> +Signed-off-by: Romain Naour <romain.naour@gmail.com>
> +---
> + compat.h | 2 ++
> + 1 file changed, 2 insertions(+)
> +
> +diff --git a/compat.h b/compat.h
> +index 19a929f..4f5ee6d 100644
> +--- a/compat.h
> ++++ b/compat.h
> +@@ -666,6 +666,8 @@ typedef int sig_atomic_t;
> + 
> + #if !defined(NETDB_INTERNAL) && defined(h_NETDB_INTERNAL)
> + #  define NETDB_INTERNAL h_NETDB_INTERNAL
> ++#elif !defined(NETDB_INTERNAL)
> ++#  define NETDB_INTERNAL (-1)
> + #endif

I am not a big fan of this solution, as it's really a hack: musl will
never set h_errno to NETDB_INTERNAL, so it's a bit weird to define it
to -1.

But maybe that's the easiest solution. Have you tried talking with
upstream about this?

> ++/* TUNSETIFF flags from if_tun.h kernel header */
> ++#define IFF_TUN		0x0001
> ++#define IFF_TAP		0x0002
> ++#define IFF_NO_PI	0x1000
> ++
> ++#define TUNSETIFF	_IOW('T', 202, int)

I know doing this is what the musl developers recommend, but it is
_really_ silly that we have to duplicate stuff from the kernel headers,
while the kernel headers (and specifically their uapi part) are part of
the toolchain headers... precisely for the purpose of allowing
userspace to use the types/definitions of the kernel to userspace
interface.

Thanks,

Thomas
Thomas Petazzoni Sept. 20, 2016, 7:05 p.m. UTC | #2
Hello,

On Sun, 28 Aug 2016 22:18:53 +0200, Romain Naour wrote:
> Fix two build issue when socat is build with musl:
>   - Set NETDB_INTERNAL locally since it's not provided by musl
>   - remove if_tun.h kernel header
> 
> Fixes:
> http://autobuild.buildroot.net/results/029/02977d3844ef62b1e9cbfbab244593632757c5e2
> 
> Signed-off-by: Romain Naour <romain.naour@gmail.com>
> ---
>  package/socat/0003-compat-set-NETDB_INTERNAL.patch | 35 +++++++++
>  ...004-xio-tun-remove-if_tun.h-kernel-header.patch | 91 ++++++++++++++++++++++
>  2 files changed, 126 insertions(+)
>  create mode 100644 package/socat/0003-compat-set-NETDB_INTERNAL.patch
>  create mode 100644 package/socat/0004-xio-tun-remove-if_tun.h-kernel-header.patch

Even though I am not too happy with the solutions, it's probably the
simplest we can do, so I've applied. Could you try to submit them
upstream?

Thanks!

Thomas
diff mbox

Patch

diff --git a/package/socat/0003-compat-set-NETDB_INTERNAL.patch b/package/socat/0003-compat-set-NETDB_INTERNAL.patch
new file mode 100644
index 0000000..da31073
--- /dev/null
+++ b/package/socat/0003-compat-set-NETDB_INTERNAL.patch
@@ -0,0 +1,35 @@ 
+From e7804d1750652e39c7a5803d360b29b2637a695f Mon Sep 17 00:00:00 2001
+From: Romain Naour <romain.naour@gmail.com>
+Date: Sun, 28 Aug 2016 21:04:01 +0200
+Subject: [PATCH] compat: set NETDB_INTERNAL
+
+Musl doesn't provide NETDB_INTERNAL which is defined in resolv/netdb.h
+in Glibc [1].
+
+Set NETDB_INTERNAL to -1 locally if not already defined.
+Based on [2].
+
+[1] https://sourceware.org/git/?p=glibc.git;a=blob;f=resolv/netdb.h;h=3aba530932c7a62a4f23e3193e9186da677f552b;hb=fdfc9260b61d3d72541f18104d24c7bcb0ce5ca2#l74
+[2] http://git.alpinelinux.org/cgit/aports/tree/main/socat/netdb-internal.patch?id=5a45173b50892cb634197c30b3506ebff98d3b7d
+
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ compat.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/compat.h b/compat.h
+index 19a929f..4f5ee6d 100644
+--- a/compat.h
++++ b/compat.h
+@@ -666,6 +666,8 @@ typedef int sig_atomic_t;
+ 
+ #if !defined(NETDB_INTERNAL) && defined(h_NETDB_INTERNAL)
+ #  define NETDB_INTERNAL h_NETDB_INTERNAL
++#elif !defined(NETDB_INTERNAL)
++#  define NETDB_INTERNAL (-1)
+ #endif
+ 
+ #ifndef INET_ADDRSTRLEN
+-- 
+2.5.5
+
diff --git a/package/socat/0004-xio-tun-remove-if_tun.h-kernel-header.patch b/package/socat/0004-xio-tun-remove-if_tun.h-kernel-header.patch
new file mode 100644
index 0000000..7704123
--- /dev/null
+++ b/package/socat/0004-xio-tun-remove-if_tun.h-kernel-header.patch
@@ -0,0 +1,91 @@ 
+From 1c141194e3587cc8124e5f4512dc3030e5a104b1 Mon Sep 17 00:00:00 2001
+From: Romain Naour <romain.naour@gmail.com>
+Date: Sun, 28 Aug 2016 22:06:09 +0200
+Subject: [PATCH] xio-tun: remove if_tun.h kernel header
+
+xio-tun mixes userspace and kernel headers.
+
+http://wiki.musl-libc.org/wiki/FAQ#Q:_why_am_i_getting_.22error:_redefinition_of_struct_ethhdr.2Ftcphdr.2Fetc.22_.3F
+
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ config.h.in   | 3 ---
+ configure.in  | 8 +-------
+ sysincludes.h | 3 ---
+ xio-tun.c     | 6 ++++++
+ 4 files changed, 7 insertions(+), 13 deletions(-)
+
+diff --git a/config.h.in b/config.h.in
+index 9058bf8..ed0962c 100644
+--- a/config.h.in
++++ b/config.h.in
+@@ -258,9 +258,6 @@
+ /* Define if you have the <linux/errqueue.h> header file.  */
+ #undef HAVE_LINUX_ERRQUEUE_H
+ 
+-/* Define if you have the <linux/if_tun.h> header file.  */
+-#undef HAVE_LINUX_IF_TUN_H
+-
+ /* Define if you have the <netpacket/packet.h> header file.  */
+ #undef HAVE_NETPACKET_PACKET_H
+ 
+diff --git a/configure.in b/configure.in
+index 1d2e76f..27bb3d5 100644
+--- a/configure.in
++++ b/configure.in
+@@ -78,7 +78,7 @@ AC_CHECK_HEADERS(arpa/nameser.h)
+ 
+ AC_HEADER_RESOLV()
+ 
+-AC_CHECK_HEADERS(termios.h linux/if_tun.h)
++AC_CHECK_HEADERS(termios.h)
+ AC_CHECK_HEADERS(net/if_dl.h)
+ AC_CHECK_HEADERS(linux/types.h)
+ AC_CHECK_HEADER(linux/errqueue.h, AC_DEFINE(HAVE_LINUX_ERRQUEUE_H), [], [#include <sys/time.h>
+@@ -680,12 +680,6 @@ AC_ARG_ENABLE(tun, [  --disable-tun           disable TUN/TAP support],
+ 	       esac],
+ 	       [AC_MSG_RESULT(yes);    WITH_TUN=1 ])
+ 
+-#
+-if ! test "$ac_cv_header_linux_if_tun_h" = 'yes'; then
+-  AC_MSG_WARN(include file linux/if_tun.h not found, disabling TUN)
+-  WITH_TUN=
+-fi
+-#
+ if test -n "$WITH_TUN"; then
+   AC_DEFINE(WITH_TUN)
+ fi
+diff --git a/sysincludes.h b/sysincludes.h
+index 98dff77..28067f4 100644
+--- a/sysincludes.h
++++ b/sysincludes.h
+@@ -142,9 +142,6 @@
+ #if HAVE_NETINET_IF_ETHER_H
+ #include <netinet/if_ether.h>
+ #endif
+-#if HAVE_LINUX_IF_TUN_H
+-#include <linux/if_tun.h>
+-#endif
+ 
+ #if HAVE_TERMIOS_H && _WITH_TERMIOS
+ #include <termios.h>
+diff --git a/xio-tun.c b/xio-tun.c
+index 0628d27..f965a7e 100644
+--- a/xio-tun.c
++++ b/xio-tun.c
+@@ -14,6 +14,12 @@
+ 
+ #include "xio-tun.h"
+ 
++/* TUNSETIFF flags from if_tun.h kernel header */
++#define IFF_TUN		0x0001
++#define IFF_TAP		0x0002
++#define IFF_NO_PI	0x1000
++
++#define TUNSETIFF	_IOW('T', 202, int)
+ 
+ static int xioopen_tun(int argc, const char *argv[], struct opt *opts, int xioflags, xiofile_t *fd, unsigned groups, int dummy1, int dummy2, int dummy3);
+ 
+-- 
+2.5.5
+