@@ -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}"
new file mode 100644
@@ -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
Signed-off-by: Khem Raj <raj.khem@gmail.com> --- v2: Fix the upstream submission and latest patch submitted upstream v3: Make just node_name as const and keep node_dir as such v4: Redo the patch to avoid textrel errors on ppc32/arm meta/recipes-connectivity/bluez5/bluez5.inc | 1 + ...U-basename-compatible-implementation.patch | 143 ++++++++++++++++++ 2 files changed, 144 insertions(+) create mode 100644 meta/recipes-connectivity/bluez5/bluez5/0001-Provide-GNU-basename-compatible-implementation.patch