diff --git a/0001-rpi3-bcm43xx-The-UART-speed-must-be-reset-after-the-firmw.patch b/0001-rpi3-bcm43xx-The-UART-speed-must-be-reset-after-the-firmw.patch index e88c920..abc3f7f 100644 --- a/0001-rpi3-bcm43xx-The-UART-speed-must-be-reset-after-the-firmw.patch +++ b/0001-rpi3-bcm43xx-The-UART-speed-must-be-reset-after-the-firmw.patch @@ -8,11 +8,11 @@ Subject: [PATCH] bcm43xx: The UART speed must be reset after the firmware tools/hciattach_bcm43xx.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) -Index: bluez-5.60/tools/hciattach_bcm43xx.c +Index: bluez-5.71/tools/hciattach_bcm43xx.c =================================================================== ---- bluez-5.60.orig/tools/hciattach_bcm43xx.c -+++ bluez-5.60/tools/hciattach_bcm43xx.c -@@ -354,11 +354,8 @@ int bcm43xx_init(int fd, int def_speed, +--- bluez-5.71.orig/tools/hciattach_bcm43xx.c ++++ bluez-5.71/tools/hciattach_bcm43xx.c +@@ -350,11 +350,8 @@ int bcm43xx_init(int fd, int def_speed, return -1; if (bcm43xx_locate_patch(FIRMWARE_DIR, chip_name, fw_path)) { @@ -25,7 +25,7 @@ Index: bluez-5.60/tools/hciattach_bcm43xx.c if (bcm43xx_load_firmware(fd, fw_path)) return -1; -@@ -368,6 +365,7 @@ int bcm43xx_init(int fd, int def_speed, +@@ -364,6 +361,7 @@ int bcm43xx_init(int fd, int def_speed, return -1; } diff --git a/Fix-.device_probe-failing-if-SDP-record-is-not.patch b/Fix-.device_probe-failing-if-SDP-record-is-not.patch deleted file mode 100644 index 12bd723..0000000 --- a/Fix-.device_probe-failing-if-SDP-record-is-not.patch +++ /dev/null @@ -1,310 +0,0 @@ -From 3a9c637010f8dc1ba3e8382abe01065761d4f5bb Mon Sep 17 00:00:00 2001 -From: Luiz Augusto von Dentz -Date: Tue, 10 Oct 2023 12:38:29 -0700 -Subject: [PATCH] input: Fix .device_probe failing if SDP record is not found - -Due to changes introduced by 67a26abe53bf -("profile: Add probe_on_discover flag") profiles may get probed when -their profile UUID are discovered, rather than resolved, which means -the SDP record may not be available. - -Fixes: https://github.com/bluez/bluez/issues/614 ---- - profiles/input/device.c | 182 +++++++++++++++++++--------------------- - 1 file changed, 84 insertions(+), 98 deletions(-) - -diff --git a/profiles/input/device.c b/profiles/input/device.c -index e2ac6ea60..4a50ea992 100644 ---- a/profiles/input/device.c -+++ b/profiles/input/device.c -@@ -60,7 +60,7 @@ struct input_device { - char *path; - bdaddr_t src; - bdaddr_t dst; -- uint32_t handle; -+ const sdp_record_t *rec; - GIOChannel *ctrl_io; - GIOChannel *intr_io; - guint ctrl_watch; -@@ -754,7 +754,8 @@ static void epox_endian_quirk(unsigned char *data, int size) - } - } - --static int create_hid_dev_name(sdp_record_t *rec, struct hidp_connadd_req *req) -+static int create_hid_dev_name(const sdp_record_t *rec, -+ struct hidp_connadd_req *req) - { - char sdesc[sizeof(req->name) / 2]; - -@@ -776,7 +777,7 @@ static int create_hid_dev_name(sdp_record_t *rec, struct hidp_connadd_req *req) - - /* See HID profile specification v1.0, "7.11.6 HIDDescriptorList" for details - * on the attribute format. */ --static int extract_hid_desc_data(sdp_record_t *rec, -+static int extract_hid_desc_data(const sdp_record_t *rec, - struct hidp_connadd_req *req) - { - sdp_data_t *d; -@@ -817,36 +818,40 @@ invalid_desc: - return -EINVAL; - } - --static int extract_hid_record(sdp_record_t *rec, struct hidp_connadd_req *req) -+static int extract_hid_record(struct input_device *idev, -+ struct hidp_connadd_req *req) - { - sdp_data_t *pdlist; - uint8_t attr_val; - int err; - -- err = create_hid_dev_name(rec, req); -+ if (!idev->rec) -+ return -ENOENT; -+ -+ err = create_hid_dev_name(idev->rec, req); - if (err < 0) - DBG("No valid Service Name or Service Description found"); - -- pdlist = sdp_data_get(rec, SDP_ATTR_HID_PARSER_VERSION); -+ pdlist = sdp_data_get(idev->rec, SDP_ATTR_HID_PARSER_VERSION); - req->parser = pdlist ? pdlist->val.uint16 : 0x0100; - -- pdlist = sdp_data_get(rec, SDP_ATTR_HID_DEVICE_SUBCLASS); -+ pdlist = sdp_data_get(idev->rec, SDP_ATTR_HID_DEVICE_SUBCLASS); - req->subclass = pdlist ? pdlist->val.uint8 : 0; - -- pdlist = sdp_data_get(rec, SDP_ATTR_HID_COUNTRY_CODE); -+ pdlist = sdp_data_get(idev->rec, SDP_ATTR_HID_COUNTRY_CODE); - req->country = pdlist ? pdlist->val.uint8 : 0; - -- pdlist = sdp_data_get(rec, SDP_ATTR_HID_VIRTUAL_CABLE); -+ pdlist = sdp_data_get(idev->rec, SDP_ATTR_HID_VIRTUAL_CABLE); - attr_val = pdlist ? pdlist->val.uint8 : 0; - if (attr_val) - req->flags |= (1 << HIDP_VIRTUAL_CABLE_UNPLUG); - -- pdlist = sdp_data_get(rec, SDP_ATTR_HID_BOOT_DEVICE); -+ pdlist = sdp_data_get(idev->rec, SDP_ATTR_HID_BOOT_DEVICE); - attr_val = pdlist ? pdlist->val.uint8 : 0; - if (attr_val) - req->flags |= (1 << HIDP_BOOT_PROTOCOL_MODE); - -- err = extract_hid_desc_data(rec, req); -+ err = extract_hid_desc_data(idev->rec, req); - if (err < 0) - return err; - -@@ -1035,11 +1040,6 @@ static gboolean encrypt_notify(GIOChannel *io, GIOCondition condition, - static int hidp_add_connection(struct input_device *idev) - { - struct hidp_connadd_req *req; -- sdp_record_t *rec; -- char src_addr[18], dst_addr[18]; -- char filename[PATH_MAX]; -- GKeyFile *key_file; -- char handle[11], *str; - GError *gerr = NULL; - int err; - -@@ -1049,33 +1049,7 @@ static int hidp_add_connection(struct input_device *idev) - req->flags = 0; - req->idle_to = idle_timeout; - -- ba2str(&idev->src, src_addr); -- ba2str(&idev->dst, dst_addr); -- -- snprintf(filename, PATH_MAX, STORAGEDIR "/%s/cache/%s", src_addr, -- dst_addr); -- sprintf(handle, "0x%8.8X", idev->handle); -- -- key_file = g_key_file_new(); -- if (!g_key_file_load_from_file(key_file, filename, 0, &gerr)) { -- error("Unable to load key file from %s: (%s)", filename, -- gerr->message); -- g_clear_error(&gerr); -- } -- str = g_key_file_get_string(key_file, "ServiceRecords", handle, NULL); -- g_key_file_free(key_file); -- -- if (!str) { -- error("Rejected connection from unknown device %s", dst_addr); -- err = -EPERM; -- goto cleanup; -- } -- -- rec = record_from_string(str); -- g_free(str); -- -- err = extract_hid_record(rec, req); -- sdp_record_free(rec); -+ err = extract_hid_record(idev, req); - if (err < 0) { - error("Could not parse HID SDP record: %s (%d)", strerror(-err), - -err); -@@ -1091,7 +1065,7 @@ static int hidp_add_connection(struct input_device *idev) - - /* Make sure the device is bonded if required */ - if (classic_bonded_only && !input_device_bonded(idev)) { -- error("Rejected connection from !bonded device %s", dst_addr); -+ error("Rejected connection from !bonded device %s", idev->path); - goto cleanup; - } - -@@ -1161,6 +1135,68 @@ static int connection_disconnect(struct input_device *idev, uint32_t flags) - return ioctl_disconnect(idev, flags); - } - -+static bool is_device_sdp_disable(const sdp_record_t *rec) -+{ -+ sdp_data_t *data; -+ -+ data = sdp_data_get(rec, SDP_ATTR_HID_SDP_DISABLE); -+ -+ return data && data->val.uint8; -+} -+ -+static enum reconnect_mode_t hid_reconnection_mode(bool reconnect_initiate, -+ bool normally_connectable) -+{ -+ if (!reconnect_initiate && !normally_connectable) -+ return RECONNECT_NONE; -+ else if (!reconnect_initiate && normally_connectable) -+ return RECONNECT_HOST; -+ else if (reconnect_initiate && !normally_connectable) -+ return RECONNECT_DEVICE; -+ else /* (reconnect_initiate && normally_connectable) */ -+ return RECONNECT_ANY; -+} -+ -+static void extract_hid_props(struct input_device *idev, -+ const sdp_record_t *rec) -+{ -+ /* Extract HID connectability */ -+ bool reconnect_initiate, normally_connectable; -+ sdp_data_t *pdlist; -+ -+ /* HIDNormallyConnectable is optional and assumed FALSE if not -+ * present. -+ */ -+ pdlist = sdp_data_get(rec, SDP_ATTR_HID_RECONNECT_INITIATE); -+ reconnect_initiate = pdlist ? pdlist->val.uint8 : TRUE; -+ -+ pdlist = sdp_data_get(rec, SDP_ATTR_HID_NORMALLY_CONNECTABLE); -+ normally_connectable = pdlist ? pdlist->val.uint8 : FALSE; -+ -+ /* Update local values */ -+ idev->reconnect_mode = -+ hid_reconnection_mode(reconnect_initiate, normally_connectable); -+} -+ -+static void input_device_update_rec(struct input_device *idev) -+{ -+ struct btd_profile *p = btd_service_get_profile(idev->service); -+ const sdp_record_t *rec; -+ -+ rec = btd_device_get_record(idev->device, p->remote_uuid); -+ if (!rec || idev->rec == rec) -+ return; -+ -+ idev->rec = rec; -+ idev->disable_sdp = is_device_sdp_disable(rec); -+ -+ /* Initialize device properties */ -+ extract_hid_props(idev, rec); -+ -+ if (idev->disable_sdp) -+ device_set_refresh_discovery(idev->device, false); -+} -+ - static int input_device_connected(struct input_device *idev) - { - int err; -@@ -1168,6 +1204,9 @@ static int input_device_connected(struct input_device *idev) - if (idev->intr_io == NULL || idev->ctrl_io == NULL) - return -ENOTCONN; - -+ /* Attempt to update SDP record if it had changed */ -+ input_device_update_rec(idev); -+ - err = hidp_add_connection(idev); - if (err < 0) - return err; -@@ -1411,74 +1450,21 @@ int input_device_disconnect(struct btd_service *service) - return 0; - } - --static bool is_device_sdp_disable(const sdp_record_t *rec) --{ -- sdp_data_t *data; -- -- data = sdp_data_get(rec, SDP_ATTR_HID_SDP_DISABLE); -- -- return data && data->val.uint8; --} -- --static enum reconnect_mode_t hid_reconnection_mode(bool reconnect_initiate, -- bool normally_connectable) --{ -- if (!reconnect_initiate && !normally_connectable) -- return RECONNECT_NONE; -- else if (!reconnect_initiate && normally_connectable) -- return RECONNECT_HOST; -- else if (reconnect_initiate && !normally_connectable) -- return RECONNECT_DEVICE; -- else /* (reconnect_initiate && normally_connectable) */ -- return RECONNECT_ANY; --} -- --static void extract_hid_props(struct input_device *idev, -- const sdp_record_t *rec) --{ -- /* Extract HID connectability */ -- bool reconnect_initiate, normally_connectable; -- sdp_data_t *pdlist; -- -- /* HIDNormallyConnectable is optional and assumed FALSE -- * if not present. */ -- pdlist = sdp_data_get(rec, SDP_ATTR_HID_RECONNECT_INITIATE); -- reconnect_initiate = pdlist ? pdlist->val.uint8 : TRUE; -- -- pdlist = sdp_data_get(rec, SDP_ATTR_HID_NORMALLY_CONNECTABLE); -- normally_connectable = pdlist ? pdlist->val.uint8 : FALSE; -- -- /* Update local values */ -- idev->reconnect_mode = -- hid_reconnection_mode(reconnect_initiate, normally_connectable); --} -- - static struct input_device *input_device_new(struct btd_service *service) - { - struct btd_device *device = btd_service_get_device(service); -- struct btd_profile *p = btd_service_get_profile(service); - const char *path = device_get_path(device); -- const sdp_record_t *rec = btd_device_get_record(device, p->remote_uuid); - struct btd_adapter *adapter = device_get_adapter(device); - struct input_device *idev; - -- if (!rec) -- return NULL; -- - idev = g_new0(struct input_device, 1); - bacpy(&idev->src, btd_adapter_get_address(adapter)); - bacpy(&idev->dst, device_get_address(device)); - idev->service = btd_service_ref(service); - idev->device = btd_device_ref(device); - idev->path = g_strdup(path); -- idev->handle = rec->handle; -- idev->disable_sdp = is_device_sdp_disable(rec); -- -- /* Initialize device properties */ -- extract_hid_props(idev, rec); - -- if (idev->disable_sdp) -- device_set_refresh_discovery(device, false); -+ input_device_update_rec(idev); - - return idev; - } --- -2.42.0 - diff --git a/bluez-5.70.tar.xz b/bluez-5.70.tar.xz deleted file mode 100644 index ccbf3c7..0000000 --- a/bluez-5.70.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:37e372e916955e144cb882f888e4be40898f10ae3b7c213ddcdd55ee9c009278 -size 2339844 diff --git a/bluez-5.77.tar.xz b/bluez-5.77.tar.xz new file mode 100644 index 0000000..7c89369 --- /dev/null +++ b/bluez-5.77.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d032fdc1d4a085813554f57591e2e1fb0ceb2b3616ee56f689bc00e1d150812 +size 2432176 diff --git a/bluez-cups-libexec.patch b/bluez-cups-libexec.patch deleted file mode 100644 index d7b0554..0000000 --- a/bluez-cups-libexec.patch +++ /dev/null @@ -1,26 +0,0 @@ -Index: bluez-5.65/Makefile.in -=================================================================== ---- bluez-5.65.orig/Makefile.in -+++ bluez-5.65/Makefile.in -@@ -3871,7 +3871,7 @@ unit_tests = $(am__append_55) unit/test- - @DEPRECATED_TRUE@@READLINE_TRUE@attrib_gatttool_LDADD = lib/libbluetooth-internal.la \ - @DEPRECATED_TRUE@@READLINE_TRUE@ src/libshared-glib.la $(GLIB_LIBS) -lreadline - --@CUPS_TRUE@cupsdir = $(libdir)/cups/backend -+@CUPS_TRUE@cupsdir = $(prefix)/lib/cups/backend - @CUPS_TRUE@profiles_cups_bluetooth_SOURCES = profiles/cups/main.c \ - @CUPS_TRUE@ profiles/cups/cups.h \ - @CUPS_TRUE@ profiles/cups/sdp.c \ -Index: bluez-5.65/Makefile.tools -=================================================================== ---- bluez-5.65.orig/Makefile.tools -+++ bluez-5.65/Makefile.tools -@@ -499,7 +499,7 @@ endif - endif - - if CUPS --cupsdir = $(libdir)/cups/backend -+cupsdir = $(prefix)/lib/cups/backend - - cups_PROGRAMS = profiles/cups/bluetooth - diff --git a/bluez-disable-broken-tests.diff b/bluez-disable-broken-tests.diff index 69bd8ed..d40239a 100644 --- a/bluez-disable-broken-tests.diff +++ b/bluez-disable-broken-tests.diff @@ -1,8 +1,17 @@ -Index: bluez-5.65/Makefile.am +Index: bluez-5.71/Makefile.am =================================================================== ---- bluez-5.65.orig/Makefile.am -+++ bluez-5.65/Makefile.am -@@ -572,7 +574,7 @@ unit_test_midi_LDADD = src/libshared-gli +--- bluez-5.71.orig/Makefile.am ++++ bluez-5.71/Makefile.am +@@ -679,7 +679,7 @@ unit_test_bass_SOURCES = unit/test-bass. + unit_test_bass_LDADD = src/libshared-glib.la \ + lib/libbluetooth-internal.la $(GLIB_LIBS) + +-unit_tests += unit/test-vcp ++# unit_tests += unit/test-vcp + + unit_test_vcp_SOURCES = unit/test-vcp.c $(btio_sources) + unit_test_vcp_LDADD = src/libshared-glib.la \ +@@ -696,7 +696,7 @@ unit_test_midi_LDADD = src/libshared-gli endif if MESH diff --git a/bluez-no-cups-devel-buildreq.patch b/bluez-no-cups-devel-buildreq.patch new file mode 100644 index 0000000..dabd98f --- /dev/null +++ b/bluez-no-cups-devel-buildreq.patch @@ -0,0 +1,22 @@ +Subject: avoid cups-devel buildrequires +Author: Stefan Seyfried +Date: 2024-08-15 + +The only thing required from cups-devel during build is the cups_serverbin +variable. Unfortunately, pulling in cups-devel creates a huge dependency +loop. +To avoid this, just hardcode the cups_serverbin value for now. + +Index: b/configure.ac +=================================================================== +--- a/configure.ac ++++ b/configure.ac +@@ -252,7 +252,7 @@ AC_ARG_ENABLE(cups, AS_HELP_STRING([--di + AM_CONDITIONAL(CUPS, test "${enable_cups}" != "no") + if (test "${enable_cups}" != "no"); then + AC_MSG_CHECKING([cups directory]) +- cups_serverbin=`$PKG_CONFIG cups --variable=cups_serverbin` ++ cups_serverbin="/usr/lib/cups" + AC_MSG_RESULT([${cups_serverbin}]) + fi + AM_CONDITIONAL(CUPS_SERVERBIN, test "${cups_serverbin}" != "") diff --git a/bluez-test-2to3.diff b/bluez-test-2to3.diff deleted file mode 100644 index e92c1c2..0000000 --- a/bluez-test-2to3.diff +++ /dev/null @@ -1,601 +0,0 @@ -Index: bluez-5.65/test/bluezutils.py -=================================================================== ---- bluez-5.65.orig/test/bluezutils.py -+++ bluez-5.65/test/bluezutils.py -@@ -17,7 +17,7 @@ def find_adapter(pattern=None): - - def find_adapter_in_objects(objects, pattern=None): - bus = dbus.SystemBus() -- for path, ifaces in objects.items(): -+ for path, ifaces in list(objects.items()): - adapter = ifaces.get(ADAPTER_INTERFACE) - if adapter is None: - continue -@@ -37,7 +37,7 @@ def find_device_in_objects(objects, devi - if adapter_pattern: - adapter = find_adapter_in_objects(objects, adapter_pattern) - path_prefix = adapter.object_path -- for path, ifaces in objects.items(): -+ for path, ifaces in list(objects.items()): - device = ifaces.get(DEVICE_INTERFACE) - if device is None: - continue -Index: bluez-5.65/test/example-advertisement -=================================================================== ---- bluez-5.65.orig/test/example-advertisement -+++ bluez-5.65/test/example-advertisement -@@ -164,7 +164,7 @@ def find_adapter(bus): - DBUS_OM_IFACE) - objects = remote_om.GetManagedObjects() - -- for o, props in objects.items(): -+ for o, props in list(objects.items()): - if LE_ADVERTISING_MANAGER_IFACE in props: - return o - -Index: bluez-5.65/test/example-gatt-client -=================================================================== ---- bluez-5.65.orig/test/example-gatt-client -+++ bluez-5.65/test/example-gatt-client -@@ -33,7 +33,7 @@ hr_ctrl_pt_chrc = None - - - def generic_error_cb(error): -- print('D-Bus call failed: ' + str(error)) -+ print(('D-Bus call failed: ' + str(error))) - mainloop.quit() - - -@@ -69,10 +69,10 @@ def sensor_contact_val_to_str(val): - - def body_sensor_val_cb(value): - if len(value) != 1: -- print('Invalid body sensor location value: ' + repr(value)) -+ print(('Invalid body sensor location value: ' + repr(value))) - return - -- print('Body sensor location value: ' + body_sensor_val_to_str(value[0])) -+ print(('Body sensor location value: ' + body_sensor_val_to_str(value[0]))) - - - def hr_msrmt_start_notify_cb(): -@@ -104,12 +104,12 @@ def hr_msrmt_changed_cb(iface, changed_p - hr_msrmt = value[1] | (value[2] << 8) - next_ind = 3 - -- print('\tHR: ' + str(int(hr_msrmt))) -- print('\tSensor Contact status: ' + -- sensor_contact_val_to_str(sc_status)) -+ print(('\tHR: ' + str(int(hr_msrmt)))) -+ print(('\tSensor Contact status: ' + -+ sensor_contact_val_to_str(sc_status))) - - if ee_status: -- print('\tEnergy Expended: ' + str(int(value[next_ind]))) -+ print(('\tEnergy Expended: ' + str(int(value[next_ind])))) - - - def start_client(): -@@ -147,7 +147,7 @@ def process_chrc(chrc_path): - global hr_ctrl_pt_chrc - hr_ctrl_pt_chrc = (chrc, chrc_props) - else: -- print('Unrecognized characteristic: ' + uuid) -+ print(('Unrecognized characteristic: ' + uuid)) - - return True - -@@ -162,7 +162,7 @@ def process_hr_service(service_path, chr - if uuid != HR_SVC_UUID: - return False - -- print('Heart Rate Service found: ' + service_path) -+ print(('Heart Rate Service found: ' + service_path)) - - # Process the characteristics. - for chrc_path in chrc_paths: -@@ -199,14 +199,14 @@ def main(): - chrcs = [] - - # List characteristics found -- for path, interfaces in objects.items(): -- if GATT_CHRC_IFACE not in interfaces.keys(): -+ for path, interfaces in list(objects.items()): -+ if GATT_CHRC_IFACE not in list(interfaces.keys()): - continue - chrcs.append(path) - - # List sevices found -- for path, interfaces in objects.items(): -- if GATT_SERVICE_IFACE not in interfaces.keys(): -+ for path, interfaces in list(objects.items()): -+ if GATT_SERVICE_IFACE not in list(interfaces.keys()): - continue - - chrc_paths = [d for d in chrcs if d.startswith(path + "/")] -Index: bluez-5.65/test/example-gatt-server -=================================================================== ---- bluez-5.65.orig/test/example-gatt-server -+++ bluez-5.65/test/example-gatt-server -@@ -293,7 +293,7 @@ class HeartRateMeasurementChrc(Character - min(0xffff, self.service.energy_expended + 1) - self.hr_ee_count += 1 - -- print('Updating value: ' + repr(value)) -+ print(('Updating value: ' + repr(value))) - - self.PropertiesChanged(GATT_CHRC_IFACE, { 'Value': value }, []) - -@@ -355,7 +355,7 @@ class HeartRateControlPointChrc(Characte - raise InvalidValueLengthException() - - byte = value[0] -- print('Control Point value: ' + repr(byte)) -+ print(('Control Point value: ' + repr(byte))) - - if byte != 1: - raise FailedException("0x80") -@@ -408,12 +408,12 @@ class BatteryLevelCharacteristic(Charact - self.battery_lvl -= 2 - if self.battery_lvl < 0: - self.battery_lvl = 0 -- print('Battery Level drained: ' + repr(self.battery_lvl)) -+ print(('Battery Level drained: ' + repr(self.battery_lvl))) - self.notify_battery_level() - return True - - def ReadValue(self, options): -- print('Battery Level read: ' + repr(self.battery_lvl)) -+ print(('Battery Level read: ' + repr(self.battery_lvl))) - return [dbus.Byte(self.battery_lvl)] - - def StartNotify(self): -@@ -466,11 +466,11 @@ class TestCharacteristic(Characteristic) - CharacteristicUserDescriptionDescriptor(bus, 1, self)) - - def ReadValue(self, options): -- print('TestCharacteristic Read: ' + repr(self.value)) -+ print(('TestCharacteristic Read: ' + repr(self.value))) - return self.value - - def WriteValue(self, value, options): -- print('TestCharacteristic Write: ' + repr(value)) -+ print(('TestCharacteristic Write: ' + repr(value))) - self.value = value - - -@@ -538,11 +538,11 @@ class TestEncryptCharacteristic(Characte - CharacteristicUserDescriptionDescriptor(bus, 3, self)) - - def ReadValue(self, options): -- print('TestEncryptCharacteristic Read: ' + repr(self.value)) -+ print(('TestEncryptCharacteristic Read: ' + repr(self.value))) - return self.value - - def WriteValue(self, value, options): -- print('TestEncryptCharacteristic Write: ' + repr(value)) -+ print(('TestEncryptCharacteristic Write: ' + repr(value))) - self.value = value - - class TestEncryptDescriptor(Descriptor): -@@ -584,11 +584,11 @@ class TestSecureCharacteristic(Character - CharacteristicUserDescriptionDescriptor(bus, 3, self)) - - def ReadValue(self, options): -- print('TestSecureCharacteristic Read: ' + repr(self.value)) -+ print(('TestSecureCharacteristic Read: ' + repr(self.value))) - return self.value - - def WriteValue(self, value, options): -- print('TestSecureCharacteristic Write: ' + repr(value)) -+ print(('TestSecureCharacteristic Write: ' + repr(value))) - self.value = value - - -@@ -616,7 +616,7 @@ def register_app_cb(): - - - def register_app_error_cb(error): -- print('Failed to register application: ' + str(error)) -+ print(('Failed to register application: ' + str(error))) - mainloop.quit() - - -@@ -625,8 +625,8 @@ def find_adapter(bus): - DBUS_OM_IFACE) - objects = remote_om.GetManagedObjects() - -- for o, props in objects.items(): -- if GATT_MANAGER_IFACE in props.keys(): -+ for o, props in list(objects.items()): -+ if GATT_MANAGER_IFACE in list(props.keys()): - return o - - return None -Index: bluez-5.65/test/list-devices -=================================================================== ---- bluez-5.65.orig/test/list-devices -+++ bluez-5.65/test/list-devices -@@ -33,16 +33,16 @@ def extract_uuids(uuid_list): - objects = manager.GetManagedObjects() - - all_devices = (str(path) for path, interfaces in objects.items() if -- "org.bluez.Device1" in interfaces.keys()) -+ "org.bluez.Device1" in list(interfaces.keys())) - - for path, interfaces in objects.items(): -- if "org.bluez.Adapter1" not in interfaces.keys(): -+ if "org.bluez.Adapter1" not in list(interfaces.keys()): - continue - - print("[ " + path + " ]") - - properties = interfaces["org.bluez.Adapter1"] -- for key in properties.keys(): -+ for key in list(properties.keys()): - value = properties[key] - if (key == "UUIDs"): - list = extract_uuids(value) -@@ -58,7 +58,7 @@ for path, interfaces in objects.items(): - dev = objects[dev_path] - properties = dev["org.bluez.Device1"] - -- for key in properties.keys(): -+ for key in list(properties.keys()): - value = properties[key] - if (key == "UUIDs"): - list = extract_uuids(value) -Index: bluez-5.65/test/pbap-client -=================================================================== ---- bluez-5.65.orig/test/pbap-client -+++ bluez-5.65/test/pbap-client -@@ -135,11 +135,11 @@ if __name__ == '__main__': - print(header) - for line in lines: - print(line), -- print -+ print() - - def test_paths(paths): - if len(paths) == 0: -- print -+ print() - print("FINISHED") - mainloop.quit() - return -Index: bluez-5.65/test/sap_client.py -=================================================================== ---- bluez-5.65.orig/test/sap_client.py -+++ bluez-5.65/test/sap_client.py -@@ -165,7 +165,7 @@ class SAPParam_ConnectionStatus(SAPParam - - def __validate(self): - if self.value is not None and self.value not in (0x00, 0x01, 0x02, 0x03, 0x04): -- print "Warning. ConnectionStatus value in reserved range (0x%x)" % self.value -+ print("Warning. ConnectionStatus value in reserved range (0x%x)" % self.value) - - def deserialize(self, buf): - ret = SAPParam.deserialize(self, buf) -@@ -183,7 +183,7 @@ class SAPParam_ResultCode(SAPParam): - - def __validate(self): - if self.value is not None and self.value not in (0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07): -- print "Warning. ResultCode value in reserved range (0x%x)" % self.value -+ print("Warning. ResultCode value in reserved range (0x%x)" % self.value) - - def deserialize(self, buf): - ret = SAPParam.deserialize(self, buf) -@@ -201,7 +201,7 @@ class SAPParam_DisconnectionType(SAPPara - - def __validate(self): - if self.value is not None and self.value not in (0x00, 0x01): -- print "Warning. DisconnectionType value in reserved range (0x%x)" % self.value -+ print("Warning. DisconnectionType value in reserved range (0x%x)" % self.value) - - def deserialize(self, buf): - ret = SAPParam.deserialize(self, buf) -@@ -227,7 +227,7 @@ class SAPParam_StatusChange(SAPParam): - - def __validate(self): - if self.value is not None and self.value not in (0x00, 0x01, 0x02, 0x03, 0x04, 0x05): -- print "Warning. StatusChange value in reserved range (0x%x)" % self.value -+ print("Warning. StatusChange value in reserved range (0x%x)" % self.value) - - def deserialize(self, buf): - ret = SAPParam.deserialize(self, buf) -@@ -245,7 +245,7 @@ class SAPParam_TransportProtocol(SAPPara - - def __validate(self): - if self.value is not None and self.value not in (0x00, 0x01): -- print "Warning. TransportProtoco value in reserved range (0x%x)" % self.value -+ print("Warning. TransportProtoco value in reserved range (0x%x)" % self.value) - - def deserialize(self, buf): - ret = SAPParam.deserialize(self, buf) -@@ -728,7 +728,7 @@ class SAPClient: - self.port = first_match["port"] - self.host = first_match["host"] - -- print "SAP Service found on %s(%s)" % first_match["name"] % self.host -+ print("SAP Service found on %s(%s)" % first_match["name"] % self.host) - - def __connectRFCOMM(self): - self.sock=BluetoothSocket( RFCOMM ) -@@ -739,19 +739,19 @@ class SAPClient: - def __sendMsg(self, msg): - if isinstance(msg, SAPMessage): - s = msg.serialize() -- print "\tTX: " + msg.getContent() -+ print("\tTX: " + msg.getContent()) - return self.sock.send(s.tostring()) - - def __rcvMsg(self, msg): - if isinstance(msg, SAPMessage): -- print "\tRX Wait: %s(id = 0x%.2x)" % (msg.name, msg.id) -+ print("\tRX Wait: %s(id = 0x%.2x)" % (msg.name, msg.id)) - data = self.sock.recv(self.bufsize) - if data: - if msg.deserialize(array('B',data)): -- print "\tRX: len(%d) %s" % (len(data), msg.getContent()) -+ print("\tRX: len(%d) %s" % (len(data), msg.getContent())) - return msg - else: -- print "msg: %s" % array('B',data) -+ print("msg: %s" % array('B',data)) - raise BluetoothError ("Message deserialization failed.") - else: - raise BluetoothError ("Timeout. No data received.") -@@ -797,8 +797,8 @@ class SAPClient: - return False - else: - return False -- except BluetoothError , e: -- print "Error. " +str(e) -+ except BluetoothError as e: -+ print("Error. " +str(e)) - return False - - def proc_disconnectByClient(self, timeout=0): -@@ -808,8 +808,8 @@ class SAPClient: - time.sleep(timeout) # let srv to close rfcomm - self.__disconnectRFCOMM() - return True -- except BluetoothError , e: -- print "Error. " +str(e) -+ except BluetoothError as e: -+ print("Error. " +str(e)) - return False - - def proc_disconnectByServer(self, timeout=0): -@@ -823,8 +823,8 @@ class SAPClient: - - return self.proc_disconnectByClient(timeout) - -- except BluetoothError , e: -- print "Error. " +str(e) -+ except BluetoothError as e: -+ print("Error. " +str(e)) - return False - - def proc_transferAPDU(self, apdu = "Sample APDU command"): -@@ -832,8 +832,8 @@ class SAPClient: - self.__sendMsg(SAPMessage_TRANSFER_APDU_REQ(apdu)) - params = self.__rcvMsg(SAPMessage_TRANSFER_APDU_RESP()).getParams() - return True -- except BluetoothError , e: -- print "Error. " +str(e) -+ except BluetoothError as e: -+ print("Error. " +str(e)) - return False - - def proc_transferATR(self): -@@ -841,8 +841,8 @@ class SAPClient: - self.__sendMsg(SAPMessage_TRANSFER_ATR_REQ()) - params = self.__rcvMsg(SAPMessage_TRANSFER_ATR_RESP()).getParams() - return True -- except BluetoothError , e: -- print "Error. " +str(e) -+ except BluetoothError as e: -+ print("Error. " +str(e)) - return False - - def proc_powerSimOff(self): -@@ -850,8 +850,8 @@ class SAPClient: - self.__sendMsg(SAPMessage_POWER_SIM_OFF_REQ()) - params = self.__rcvMsg(SAPMessage_POWER_SIM_OFF_RESP()).getParams() - return True -- except BluetoothError , e: -- print "Error. " +str(e) -+ except BluetoothError as e: -+ print("Error. " +str(e)) - return False - - def proc_powerSimOn(self): -@@ -862,8 +862,8 @@ class SAPClient: - return self.proc_transferATR() - - return True -- except BluetoothError , e: -- print "Error. " +str(e) -+ except BluetoothError as e: -+ print("Error. " +str(e)) - return False - - def proc_resetSim(self): -@@ -874,23 +874,23 @@ class SAPClient: - return self.proc_transferATR() - - return True -- except BluetoothError , e: -- print "Error. " +str(e) -+ except BluetoothError as e: -+ print("Error. " +str(e)) - return False - - def proc_reportStatus(self): - try: - params = self.__rcvMsg(SAPMessage_STATUS_IND()).getParams() -- except BluetoothError , e: -- print "Error. " +str(e) -+ except BluetoothError as e: -+ print("Error. " +str(e)) - return False - - def proc_transferCardReaderStatus(self): - try: - self.__sendMsg(SAPMessage_TRANSFER_CARD_READER_STATUS_REQ()) - params = self.__rcvMsg(SAPMessage_TRANSFER_CARD_READER_STATUS_RESP()).getParams() -- except BluetoothError , e: -- print "Error. " +str(e) -+ except BluetoothError as e: -+ print("Error. " +str(e)) - return False - - def proc_errorResponse(self): -@@ -899,8 +899,8 @@ class SAPClient: - self.__sendMsg(SAPMessage_CONNECT_REQ()) - - params = self.__rcvMsg(SAPMessage_ERROR_RESP()).getParams() -- except BluetoothError , e: -- print "Error. " +str(e) -+ except BluetoothError as e: -+ print("Error. " +str(e)) - return False - - def proc_setTransportProtocol(self, protocol = 0): -@@ -922,8 +922,8 @@ class SAPClient: - else: - return False - -- except BluetoothError , e: -- print "Error. " +str(e) -+ except BluetoothError as e: -+ print("Error. " +str(e)) - return False - - if __name__ == "__main__": -Index: bluez-5.65/test/simple-agent -=================================================================== ---- bluez-5.65.orig/test/simple-agent -+++ bluez-5.65/test/simple-agent -@@ -24,9 +24,9 @@ dev_path = None - - def ask(prompt): - try: -- return raw_input(prompt) -- except: - return input(prompt) -+ except: -+ return eval(input(prompt)) - - def set_trusted(path): - props = dbus.Interface(bus.get_object("org.bluez", path), -Index: bluez-5.65/test/simple-player -=================================================================== ---- bluez-5.65.orig/test/simple-player -+++ bluez-5.65/test/simple-player -@@ -119,7 +119,7 @@ class InputHandler: - return True - - try: -- exec "self.player.%s" % s -+ exec("self.player.%s" % s) - except Exception as e: - print(e) - pass -Index: bluez-5.65/test/test-adapter -=================================================================== ---- bluez-5.65.orig/test/test-adapter -+++ bluez-5.65/test/test-adapter -@@ -69,7 +69,7 @@ if (args[0] == "list"): - - props = interfaces["org.bluez.Adapter1"] - -- for (key, value) in props.items(): -+ for (key, value) in list(props.items()): - if (key == "Class"): - print(" %s = 0x%06x" % (key, value)) - else: -Index: bluez-5.65/test/test-discovery -=================================================================== ---- bluez-5.65.orig/test/test-discovery -+++ bluez-5.65/test/test-discovery -@@ -39,10 +39,10 @@ def print_compact(address, properties): - def print_normal(address, properties): - print("[ " + address + " ]") - -- for key in properties.keys(): -+ for key in list(properties.keys()): - value = properties[key] - if type(value) is dbus.String: -- value = unicode(value).encode('ascii', 'replace') -+ value = str(value).encode('ascii', 'replace') - if (key == "Class"): - print(" %s = 0x%06x" % (key, value)) - else: -@@ -71,7 +71,7 @@ def interfaces_added(path, interfaces): - - if compact and skip_dev(dev, properties): - return -- devices[path] = dict(devices[path].items() + properties.items()) -+ devices[path] = dict(list(devices[path].items()) + list(properties.items())) - else: - devices[path] = properties - -@@ -94,7 +94,7 @@ def properties_changed(interface, change - - if compact and skip_dev(dev, changed): - return -- devices[path] = dict(devices[path].items() + changed.items()) -+ devices[path] = dict(list(devices[path].items()) + list(changed.items())) - else: - devices[path] = changed - -Index: bluez-5.65/test/test-hfp -=================================================================== ---- bluez-5.65.orig/test/test-hfp -+++ bluez-5.65/test/test-hfp -@@ -186,7 +186,7 @@ class HfpProfile(dbus.service.Object): - version = 0x0105 - features = 0 - print("NewConnection(%s, %d)" % (path, fd)) -- for key in properties.keys(): -+ for key in list(properties.keys()): - if key == "Version": - version = properties[key] - elif key == "Features": -Index: bluez-5.65/test/test-profile -=================================================================== ---- bluez-5.65.orig/test/test-profile -+++ bluez-5.65/test/test-profile -@@ -34,7 +34,7 @@ class Profile(dbus.service.Object): - def NewConnection(self, path, fd, properties): - self.fd = fd.take() - print("NewConnection(%s, %d)" % (path, self.fd)) -- for key in properties.keys(): -+ for key in list(properties.keys()): - if key == "Version" or key == "Features": - print(" %s = 0x%04x" % (key, properties[key])) - else: -Index: bluez-5.65/test/map-client -=================================================================== ---- bluez-5.65.orig/test/map-client -+++ bluez-5.65/test/map-client -@@ -27,7 +27,7 @@ def unwrap(x): - printed. Taken from d-feet """ - - if isinstance(x, list): -- return map(unwrap, x) -+ return list(map(unwrap, x)) - - if isinstance(x, tuple): - return tuple(map(unwrap, x)) -@@ -35,7 +35,7 @@ def unwrap(x): - if isinstance(x, dict): - return dict([(unwrap(k), unwrap(v)) for k, v in x.items()]) - -- for t in [unicode, str, long, int, float, bool]: -+ for t in [str, str, int, int, float, bool]: - if isinstance(x, t): - return t(x) - diff --git a/bluez.changes b/bluez.changes index 4a32bec..9e5c864 100644 --- a/bluez.changes +++ b/bluez.changes @@ -1,3 +1,93 @@ +------------------------------------------------------------------- +Thu Aug 15 06:51:24 UTC 2024 - Stefan Seyfried + +- add bluez-no-cups-devel-buildreq.patch to avoid cups-devel + buildrequires which results in an excessive build loop + +------------------------------------------------------------------- +Mon Aug 5 12:12:11 UTC 2024 - Dirk Müller + +- update to 5.77: + * Fix issue with storing and handling connection parameters. + * Fix issue with handling device that are marked as temporary. + * Fix issue with HID and special handling for non-keyboards. + * Fix issue with BR/EDR not support when discoverable is off. + * Add support for initial implementation of ASHA profile. + * Fix issue with broadcast channel location and stream + capabilities. + * Fix issue with handling BIS management and synchronization. + * Fix issue with handling Extended Advertising. + * Fix issue with UserspaceHID and replay structures. + * Add support for providing PPCP characteristic. + * Fix issue with build system and header inclusion. + * Fix issue with not enabling Wideband Speech when available. + * Fix issue with UserspaceHID and Bluetooth Classic devices. + * Fix issue with checking for services being connected. + * Fix issue with GATT client connection creation. + * Fix issue with OBEX and small file transfers. + * Fix issue with handling pairing with Apple AirPods. + * Fix issue with BAP and setting up broadcast source. + * Fix issue with BAP and register all endpoints. + * Fix issue with BAP and missing metadata property. + * Fix issue with BAP and not handling out of order responses. + * Fix issue with BAP and attempting to set device as + connectable. + * Add support for CCP plugin for call control profile. + * Fix issue with BAP and handling stream IO linking. + * Fix issue with BAP and setup of multiple streams per + endpoint. + * Fix issue with AVDTP and potential incorrect transaction + label. + * Fix issue with A2DP and handling crash on suspend. + * Fix issue with GATT database and an invalid pointer. + * Add support for AICS service. +- drop bluez-test-2to3.diff, bluez-cups-libexec.patch: + upstream has different solutions for ages, use those instead +- drop fix-link-key-address-type.patch, + fix-a2dp-suspend-crash.patch: upstream + +------------------------------------------------------------------- +Mon Aug 5 00:03:24 UTC 2024 - Chang + +- add fix-a2dp-suspend-crash.patch (Issue #701 in upstream) + +------------------------------------------------------------------- +Tue Jun 11 09:15:31 UTC 2024 - Daniel Garcia + +- Fix python3 shebang from test files (bsc#1212476) + +------------------------------------------------------------------- +Wed Feb 28 08:07:28 UTC 2024 - Yifan Jiang + +- Add necessary Supplements (gnome-bluetooth, blueman, bluedevil5) + to bluez-obexd, so that file transfer features of the applications + can be used by default (bsc#1209153). +- Update the description of bluez-obexd. + +------------------------------------------------------------------- +Wed Jan 3 17:35:25 UTC 2024 - Dirk Müller + +- add fix-link-key-address-type.patch - thanks to + pallaswept for identifying the right patch for the pairing + regression + +------------------------------------------------------------------- +Wed Dec 20 23:28:42 UTC 2023 - Dirk Müller + +- update to 5.71: + * Fix issue with not registering CSIS service. + * Fix issue with registering pairing callbacks. + * Fix issue with corruption during discovery filter parsing. + +- drop CVE-2023-45866.patch, + Fix-.device_probe-failing-if-SDP-record-is-not.patch: upstream +- update bluez-disable-broken-tests.diff: disable failing vcp test + +------------------------------------------------------------------- +Wed Dec 13 09:34:20 UTC 2023 - Dirk Müller + +- add CVE-2023-45866.patch (CVE-2023-45866, bsc#1217877) + ------------------------------------------------------------------- Mon Nov 6 21:20:03 UTC 2023 - Dirk Müller diff --git a/bluez.spec b/bluez.spec index 0eb47b5..7fecf5a 100644 --- a/bluez.spec +++ b/bluez.spec @@ -1,7 +1,7 @@ # # spec file for package bluez # -# Copyright (c) 2023 SUSE LLC +# Copyright (c) 2024 SUSE LLC # Copyright (c) 2010-2020 B1 Systems GmbH, Vohburg, Germany # # All modifications and additions to the file contributed by third parties @@ -35,12 +35,12 @@ %endif Name: bluez -Version: 5.70 +Version: 5.77 Release: 0 Summary: Bluetooth Stack for Linux License: GPL-2.0-or-later Group: Hardware/Mobile -URL: http://www.bluez.org +URL: https://www.bluez.org Source: https://www.kernel.org/pub/linux/bluetooth/bluez-%{version}.tar.xz # we still want debuginfo #KEEP NOSOURCE DEBUGINFO @@ -50,16 +50,12 @@ Source9: bluez.changes.sle # fix some logitech HID devices, bnc#681049, bnc#850478 --seife+obs@b1-systems.com Patch1: bluez-5.11-logitech-hid2hci.patch Patch2: bluez-sdp-unix-path.patch -# PATCH-FIX-UPSTREAM: find the cups dir in libexec not in libdir -Patch3: bluez-cups-libexec.patch +# avoid cups-devel buildrequires --seife+obs@b1-systems.com +Patch3: bluez-no-cups-devel-buildreq.patch # workaround for broken tests (reported upstream but not yet fixed) Patch4: bluez-disable-broken-tests.diff -# PATCH-FIX-UPSTREAM: fix regression in pairing gamepads -- https://github.com/bluez/bluez/issues/614 -Patch5: Fix-.device_probe-failing-if-SDP-record-is-not.patch # disable tests for bypass boo#1078285 Patch12: disable_some_obex_tests.patch -# get rid of python2. WARNING: this is autogenerated by 2to3 and might not work -Patch13: bluez-test-2to3.diff # bsc#1013708 CVE-2016-9797 Patch14: hcidump-Add-assoc-dump-function-assoc-date-length-ch.patch # bsc#1015171 CVE-2016-9917 @@ -85,6 +81,8 @@ BuildRequires: readline-devel BuildRequires: systemd-rpm-macros BuildRequires: pkgconfig(alsa) BuildRequires: pkgconfig(check) +## we use bluez-no-cups-devel-buildreq.patch instead to avoid a build loop +# BuildRequires: pkgconfig(cups) BuildRequires: pkgconfig(dbus-1) >= 1.6 BuildRequires: pkgconfig(glib-2.0) >= 2.28 BuildRequires: pkgconfig(libcap-ng) @@ -94,6 +92,7 @@ BuildRequires: pkgconfig(sndfile) BuildRequires: pkgconfig(udev) # for rst2man BuildRequires: python3-docutils +BuildRequires: python3-Pygments # libgio-2_0-0 has a runtime dependency on shared-mime-info, which is not # required for building here, but causes a build loop #!BuildIgnore: shared-mime-info @@ -204,13 +203,18 @@ to use the modern tools instead. %endif %package obexd -Summary: Object Exchange daemon for sharing content +Summary: Object Exchange daemon for sharing binary objects License: GPL-2.0-or-later Group: Hardware/Mobile Requires: bluez = %{version} +Supplements: bluedevil5 +Supplements: blueman +Supplements: gnome-bluetooth %description obexd -Object Exchange daemon for sharing content. +This is an object exchange daemon for binary objects transferring between +devices. obexd is necessary to install for sharing files, contacts +etc. through bluetooth. %package zsh-completion Summary: Zsh completion for bluez @@ -231,8 +235,8 @@ cp -a doc/*.txt dbus-apis/ # for auto-enable subpackage sed -i '/^#AutoEnable=false/aAutoEnable=true' src/main.conf -# 2to3 does not fix the #! line -sed -i '1s#/usr/bin/python$#/usr/bin/python3#' test/* +# Fix shebangs in test files +%{?python3_fix_shebang_path:%python3_fix_shebang_path test/*} %build %if 0%{?suse_version} < 1550 @@ -303,9 +307,6 @@ install --mode 0644 -D src/main.conf %{buildroot}/%{_sysconfdir}/bluetooth/main. cd %{buildroot}%{_libdir}/bluez/test chmod 0644 *.py *.xml *.dtd -# fix python shebang -sed -i -e '1s/env p/p/' %{buildroot}%{_libdir}/bluez/test/{example-gatt-{client,server},test-mesh} - mkdir -p %{buildroot}%{_defaultdocdir}/%{name} cp %{SOURCE9} %{buildroot}%{_defaultdocdir}/%{name} %if %{with mesh} @@ -390,9 +391,6 @@ done %{_bindir}/hex2hcd %{_bindir}/isotest %{_bindir}/mpris-proxy -%dir %{_libdir}/bluetooth -%dir %{_libdir}/bluetooth/plugins -%{_libdir}/bluetooth/plugins/sixaxis.so %dir %{_libexecdir}/bluetooth %{_libexecdir}/bluetooth/bluetoothd %if %{with mesh} @@ -414,9 +412,18 @@ done %{_mandir}/man1/hid2hci.1%{?ext_man} %{_mandir}/man1/l2ping.1%{?ext_man} %{_mandir}/man1/rctest.1%{?ext_man} +%{_mandir}/man1/bluetoothctl.1%{?ext_man} %{_mandir}/man1/bluetoothctl-mgmt.1%{?ext_man} %{_mandir}/man1/bluetoothctl-monitor.1%{?ext_man} +%{_mandir}/man1/bluetoothctl-admin.1%{?ext_man} +%{_mandir}/man1/bluetoothctl-advertise.1%{?ext_man} +%{_mandir}/man1/bluetoothctl-endpoint.1%{?ext_man} +%{_mandir}/man1/bluetoothctl-gatt.1%{?ext_man} +%{_mandir}/man1/bluetoothctl-player.1%{?ext_man} +%{_mandir}/man1/bluetoothctl-scan.1%{?ext_man} +%{_mandir}/man1/bluetoothctl-transport.1%{?ext_man} %{_mandir}/man1/btmgmt.1%{?ext_man} +%{_mandir}/man5/org.bluez.*.5%{?ext_man} %{_datadir}/dbus-1/system.d/bluetooth.conf # not packaged, boo#1151518 ###%%{_datadir}/dbus-1/system.d/bluetooth-mesh.conf @@ -430,11 +437,15 @@ done %{_datadir}/dbus-1/system-services/org.bluez.service # not packaged, boo#1151518 ###%%{_datadir}/dbus-1/system-services/org.bluez.mesh.service +%{_sysconfdir}/bluetooth/input.conf +%{_sysconfdir}/bluetooth/mesh-main.conf +%{_sysconfdir}/bluetooth/network.conf %files obexd %{_libexecdir}/bluetooth/obexd %{_datadir}/dbus-1/services/org.bluez.obex.service %{_userunitdir}/obex.service +%{_userunitdir}/dbus-org.bluez.obex.service %if %{with bluez_deprecated} %files deprecated @@ -453,6 +464,7 @@ done %{_mandir}/man1/sdptool.1%{?ext_man} %{_mandir}/man1/ciptool.1%{?ext_man} %{_mandir}/man1/rfcomm.1%{?ext_man} +%{_mandir}/man7/rfcomm.7%{?ext_man} %endif %files devel @@ -478,6 +490,7 @@ done %{_bindir}/btgatt-client %dir %{_libdir}/bluez %{_libdir}/bluez/test +%{_mandir}/man7/l2cap.7%{?ext_man} %files auto-enable-devices %dir %{_sysconfdir}/bluetooth diff --git a/disable_some_obex_tests.patch b/disable_some_obex_tests.patch index b432a6c..a56223d 100644 --- a/disable_some_obex_tests.patch +++ b/disable_some_obex_tests.patch @@ -11,11 +11,11 @@ Signed-off-by: Michel Normand Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) -Index: bluez-5.65/Makefile.am +Index: bluez-5.71/Makefile.am =================================================================== ---- bluez-5.65.orig/Makefile.am -+++ bluez-5.65/Makefile.am -@@ -502,8 +502,8 @@ unit_test_gdbus_client_LDADD = gdbus/lib +--- bluez-5.71.orig/Makefile.am ++++ bluez-5.71/Makefile.am +@@ -602,8 +602,8 @@ unit_test_gdbus_client_LDADD = gdbus/lib src/libshared-glib.la $(GLIB_LIBS) $(DBUS_LIBS) if OBEX