bluez5: Fix build with musl

(From OE-Core rev: e5f9870757bf7ffd009ce4ba999d37e41274982c)

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Khem Raj
2024-08-27 21:10:00 -07:00
committed by Richard Purdie
parent 405fe4d77d
commit 98eaec26ff
2 changed files with 144 additions and 0 deletions

View File

@@ -70,6 +70,7 @@ SRC_URI = "${KERNELORG_MIRROR}/linux/bluetooth/bluez-${PV}.tar.xz \
file://0001-tests-add-a-target-for-building-tests-without-runnin.patch \
file://0001-test-gatt-Fix-hung-issue.patch \
file://0004-src-shared-util.c-include-linux-limits.h.patch \
file://0001-Provide-GNU-basename-compatible-implementation.patch \
"
S = "${WORKDIR}/bluez-${PV}"

View File

@@ -0,0 +1,143 @@
From 9000923c07a68857e8ea32a49bfca660b1d1001a Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Mon, 26 Aug 2024 09:55:03 -0700
Subject: [PATCH BlueZ] Provide GNU basename compatible implementation
Call to basename() relies on a GNU extension
to take a const char * vs a char *. Let's define
a trivial helper function to ensure compatibility
with musl.
Fixes Issue: https://github.com/bluez/bluez/issues/843
Upstream-Status: Submitted [https://lore.kernel.org/linux-bluetooth/20240826173844.2918630-1-raj.khem@gmail.com/T/#u]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
Makefile.mesh | 2 ++
Makefile.tools | 3 ++-
mesh/mesh-config-json.c | 6 ++++--
mesh/rpl.c | 3 ++-
src/shared/util.h | 7 +++++++
tools/hex2hcd.c | 3 ++-
6 files changed, 19 insertions(+), 5 deletions(-)
Index: bluez-5.77/mesh/mesh-config-json.c
===================================================================
--- bluez-5.77.orig/mesh/mesh-config-json.c
+++ bluez-5.77/mesh/mesh-config-json.c
@@ -28,6 +28,7 @@
#include <ell/ell.h>
#include <json-c/json.h>
+#include "mesh/missing.h"
#include "mesh/mesh-defs.h"
#include "mesh/util.h"
#include "mesh/mesh-config.h"
@@ -2694,7 +2695,8 @@ bool mesh_config_load_nodes(const char *
void mesh_config_destroy_nvm(struct mesh_config *cfg)
{
- char *node_dir, *node_name;
+ char *node_dir;
+ const char* node_name;
char uuid[33];
if (!cfg)
Index: bluez-5.77/mesh/rpl.c
===================================================================
--- bluez-5.77.orig/mesh/rpl.c
+++ bluez-5.77/mesh/rpl.c
@@ -24,6 +24,7 @@
#include <ell/ell.h>
+#include "mesh/missing.h"
#include "mesh/mesh-defs.h"
#include "mesh/node.h"
Index: bluez-5.77/tools/hex2hcd.c
===================================================================
--- bluez-5.77.orig/tools/hex2hcd.c
+++ bluez-5.77/tools/hex2hcd.c
@@ -24,6 +24,7 @@
#include <stdlib.h>
#include <stdbool.h>
#include <sys/stat.h>
+#include "tools/missing.h"
static ssize_t process_record(int fd, const char *line, uint16_t *upper_addr)
{
Index: bluez-5.77/configure.ac
===================================================================
--- bluez-5.77.orig/configure.ac
+++ bluez-5.77/configure.ac
@@ -70,7 +70,16 @@ AC_CHECK_LIB(pthread, pthread_create, du
AC_CHECK_LIB(dl, dlopen, dummy=yes,
AC_MSG_ERROR(dynamic linking loader is required))
-AC_CHECK_HEADERS(linux/types.h linux/if_alg.h linux/uinput.h linux/uhid.h sys/random.h)
+AC_CHECK_HEADERS(string.h linux/types.h linux/if_alg.h linux/uinput.h linux/uhid.h sys/random.h)
+
+# basename may be only available in libgen.h with the POSIX behavior,
+# not desired here
+AC_CHECK_DECLS([basename], [],
+ AC_MSG_WARN([GNU basename extension not found]),
+ [#define _GNU_SOURCE 1
+ #include <string.h>
+ ])
+
PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.28)
Index: bluez-5.77/tools/missing.h
===================================================================
--- /dev/null
+++ bluez-5.77/tools/missing.h
@@ -0,0 +1,21 @@
+// SPDX-License-Identifier: LGPL-2.1-or-later
+/*
+ *
+ * BlueZ - Bluetooth protocol stack for Linux
+ *
+ * Copyright (C) 2024 Khem Raj <raj.khem@gmail.com>
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#if !HAVE_DECL_BASENAME
+#include <string.h>
+static inline const char *basename(const char *path)
+{
+ const char *base = strrchr(path, '/');
+
+ return base ? base + 1 : path;
+}
+#endif
Index: bluez-5.77/mesh/missing.h
===================================================================
--- /dev/null
+++ bluez-5.77/mesh/missing.h
@@ -0,0 +1,21 @@
+// SPDX-License-Identifier: LGPL-2.1-or-later
+/*
+ *
+ * BlueZ - Bluetooth protocol stack for Linux
+ *
+ * Copyright (C) 2024 Khem Raj <raj.khem@gmail.com>
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#if !HAVE_DECL_BASENAME
+#include <string.h>
+static inline const char *basename(const char *path)
+{
+ const char *base = strrchr(path, '/');
+
+ return base ? base + 1 : path;
+}
+#endif