blob: e0973af1e90bf196affb36d0969cd245d94e2d4d [file] [log] [blame]
From 3d1307735667758f44378585482fe421db086af8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
Date: Mon, 8 Apr 2019 23:10:43 +0200
Subject: [PATCH 2/2] Fix build with musl
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The build issues caused by definition conflicts musl vs linux-libc headers
(error: redefinition of ...) can be reduced to two headers:
1. netinet/if_ether.h <-> linux/if_ether.h: linux-libc header plays well with
glibc and musl headers in case libc's variant (netinet/if_ether.h) is
included BEFORE linux variant [1]. We add include at two positions:
1. shared/nm-default.h: This is a global which used for networkmanager and
is included at the very beginning of all c-files.
2. libnm-core/nm-utils.h: This file makes it into installation and is used
by dependent packages as network-manager-applet
2. net/if_arp. <-> linux/if_ether.h: linux-libc: Unfortunaly these files do
not play together in harmony. Therefore the libc variant is included early in
shared/nm-default.h and occurances linux/if_arp.h are removed.
Note:
Be aware that this is still nasty business: We have to trust that musl headers
define same signatures as linux would do - just because musl-makers consider
linux-libc headers 'notoriously broken for userspace' [2] (search for
'error: redefinition of').
[1] http://lists.openembedded.org/pipermail/openembedded-core/2019-March/280440.html
[2] https://wiki.musl-libc.org/faq.html
Upstream-Status: Pending
Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
---
clients/tui/nmt-device-entry.c | 1 -
libnm-core/nm-utils.h | 4 ++++
shared/nm-default.h | 3 +++
src/devices/nm-device.c | 2 +-
src/platform/nm-linux-platform.c | 1 -
5 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/clients/tui/nmt-device-entry.c b/clients/tui/nmt-device-entry.c
index 43fbbc1..3eae286 100644
--- a/clients/tui/nmt-device-entry.c
+++ b/clients/tui/nmt-device-entry.c
@@ -39,7 +39,6 @@
#include "nmt-device-entry.h"
#include <sys/socket.h>
-#include <linux/if_arp.h>
#include "nmtui.h"
diff --git a/libnm-core/nm-utils.h b/libnm-core/nm-utils.h
index 2b5baba..f7abab6 100644
--- a/libnm-core/nm-utils.h
+++ b/libnm-core/nm-utils.h
@@ -25,6 +25,10 @@
#error "Only <NetworkManager.h> can be included directly."
#endif
+/* include as early as possible for musl */
+#include <netinet/if_ether.h>
+/* #include <net/if_arp.h> - uncoment for broken dependents?? */
+
#include <glib.h>
#include <netinet/in.h>
diff --git a/shared/nm-default.h b/shared/nm-default.h
index 54e9916..26e9f4e 100644
--- a/shared/nm-default.h
+++ b/shared/nm-default.h
@@ -211,6 +211,9 @@
#endif
#include <stdlib.h>
+/* include as early as possible for musl */
+#include <netinet/if_ether.h>
+#include <net/if_arp.h>
/*****************************************************************************/
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
index bd4fbcc..f70b309 100644
--- a/src/devices/nm-device.c
+++ b/src/devices/nm-device.c
@@ -24,6 +24,7 @@
#include "nm-device.h"
#include <netinet/in.h>
+#include <net/if.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <signal.h>
@@ -32,7 +33,6 @@
#include <arpa/inet.h>
#include <fcntl.h>
#include <linux/if_addr.h>
-#include <linux/if_arp.h>
#include <linux/rtnetlink.h>
#include <linux/pkt_sched.h>
diff --git a/src/platform/nm-linux-platform.c b/src/platform/nm-linux-platform.c
index d4b0115..22a3a90 100644
--- a/src/platform/nm-linux-platform.c
+++ b/src/platform/nm-linux-platform.c
@@ -28,7 +28,6 @@
#include <libudev.h>
#include <linux/fib_rules.h>
#include <linux/ip.h>
-#include <linux/if_arp.h>
#include <linux/if_bridge.h>
#include <linux/if_link.h>
#include <linux/if_tun.h>
--
2.17.1