| From 877fbb4e848629ff57371b5bdb0d56369abe9d81 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] 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 4ab5932..915248c 100644 |
| --- a/clients/tui/nmt-device-entry.c |
| +++ b/clients/tui/nmt-device-entry.c |
| @@ -26,7 +26,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 5418a1e..f492da6 100644 |
| --- a/libnm-core/nm-utils.h |
| +++ b/libnm-core/nm-utils.h |
| @@ -10,6 +10,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 ace6ede..25357da 100644 |
| --- a/shared/nm-default.h |
| +++ b/shared/nm-default.h |
| @@ -182,6 +182,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 3bbc975..4e8a3f6 100644 |
| --- a/src/devices/nm-device.c |
| +++ b/src/devices/nm-device.c |
| @@ -9,6 +9,7 @@ |
| #include "nm-device.h" |
| |
| #include <netinet/in.h> |
| +#include <net/if.h> |
| #include <unistd.h> |
| #include <sys/ioctl.h> |
| #include <signal.h> |
| @@ -17,7 +18,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 7abe4df..9f53147 100644 |
| --- a/src/platform/nm-linux-platform.c |
| +++ b/src/platform/nm-linux-platform.c |
| @@ -14,7 +14,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> |