Automatic import for version 4.96

This commit is contained in:
Rosa 2012-02-01 18:02:49 +04:00
parent 5bc297646d
commit b1f6e4e40c
6 changed files with 736 additions and 135 deletions

View file

@ -1,2 +1,2 @@
sources: sources:
"bluez-4.93.tar.gz": 30cabd0deec55ba44ca25f5621485e1d6a6e10d4 "bluez-4.96.tar.gz": c9327784cbcf1efc03cc547ceb18de90c8fb4c7c

View file

@ -0,0 +1,554 @@
From 3c2e6dab927acfa3dfbeb7b9bc910d6a9780b095 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Tue, 1 Sep 2009 17:32:48 +0100
Subject: [PATCH 1/2] Add sixaxis cable-pairing plugin
Implement the old "sixpair" using libudev and libusb-1.0.
When a Sixaxis device is plugged in, events are filtered, and
the device is selected, poked around to set the default Bluetooth
address, and added to the database of the current default adapter.
---
Makefile.am | 9 +-
acinclude.m4 | 16 +++
configure.ac | 1 +
plugins/cable.c | 382 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
src/adapter.c | 19 +++
src/adapter.h | 3 +
6 files changed, 428 insertions(+), 2 deletions(-)
create mode 100644 plugins/cable.c
diff --git a/Makefile.am b/Makefile.am
index 7eadf82..aecc8f2 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -223,6 +223,11 @@ builtin_sources += thermometer/main.c \
thermometer/thermometer.h thermometer/thermometer.c
endif
+if CABLE
+builtin_modules += cable
+builtin_sources += plugins/cable.c
+endif
+
builtin_modules += hciops mgmtops
builtin_sources += plugins/hciops.c plugins/mgmtops.c
@@ -282,7 +287,7 @@ src_bluetoothd_SOURCES = $(gdbus_sources) $(builtin_sources) \
src/event.h src/event.c \
src/oob.h src/oob.c src/eir.h src/eir.c
src_bluetoothd_LDADD = lib/libbluetooth.la @GLIB_LIBS@ @DBUS_LIBS@ \
- @CAPNG_LIBS@ -ldl -lrt
+ @CAPNG_LIBS@ @CABLE_LIBS@ -ldl -lrt
src_bluetoothd_LDFLAGS = -Wl,--export-dynamic \
-Wl,--version-script=$(srcdir)/src/bluetooth.ver
@@ -397,7 +402,7 @@ EXTRA_DIST += doc/manager-api.txt \
AM_YFLAGS = -d
-AM_CFLAGS = @DBUS_CFLAGS@ @GLIB_CFLAGS@ @CAPNG_CFLAGS@ \
+AM_CFLAGS = @DBUS_CFLAGS@ @GLIB_CFLAGS@ @CAPNG_CFLAGS@ @CABLE_CFLAGS@ \
-DBLUETOOTH_PLUGIN_BUILTIN -DPLUGINDIR=\""$(plugindir)"\"
INCLUDES = -I$(builddir)/lib -I$(builddir)/src -I$(srcdir)/src \
diff --git a/acinclude.m4 b/acinclude.m4
index 3cb9459..c23368b 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -155,6 +155,12 @@ AC_DEFUN([AC_PATH_UDEV], [
AC_SUBST(UDEV_LIBS)
])
+AC_DEFUN([AC_PATH_CABLE], [
+ PKG_CHECK_MODULES(CABLE, libudev libusb-1.0, cable_found=yes, cable_found=no)
+ AC_SUBST(CABLE_CFLAGS)
+ AC_SUBST(CABLE_LIBS)
+])
+
AC_DEFUN([AC_PATH_SNDFILE], [
PKG_CHECK_MODULES(SNDFILE, sndfile, sndfile_found=yes, sndfile_found=no)
AC_SUBST(SNDFILE_CFLAGS)
@@ -186,6 +192,7 @@ AC_DEFUN([AC_ARG_BLUEZ], [
sndfile_enable=${sndfile_found}
hal_enable=no
usb_enable=${usb_found}
+ cable_enable=${cable_found}
alsa_enable=${alsa_found}
gstreamer_enable=${gstreamer_found}
audio_enable=yes
@@ -286,6 +293,10 @@ AC_DEFUN([AC_ARG_BLUEZ], [
usb_enable=${enableval}
])
+ AC_ARG_ENABLE(cable, AC_HELP_STRING([--enable-cable], [enable DeviceKit support]), [
+ cable_enable=${enableval}
+ ])
+
AC_ARG_ENABLE(tracer, AC_HELP_STRING([--enable-tracer], [install Tracing daemon]), [
tracer_enable=${enableval}
])
@@ -385,6 +396,10 @@ AC_DEFUN([AC_ARG_BLUEZ], [
AC_DEFINE(HAVE_LIBUSB, 1, [Define to 1 if you have USB library.])
fi
+ if (test "${cable_enable}" = "yes" && test "${cable_found}" = "yes"); then
+ AC_DEFINE(HAVE_CABLE, 1, [Define to 1 if you have libcable.])
+ fi
+
AM_CONDITIONAL(SNDFILE, test "${sndfile_enable}" = "yes" && test "${sndfile_found}" = "yes")
AM_CONDITIONAL(USB, test "${usb_enable}" = "yes" && test "${usb_found}" = "yes")
AM_CONDITIONAL(SBC, test "${alsa_enable}" = "yes" || test "${gstreamer_enable}" = "yes" ||
@@ -421,4 +436,5 @@ AC_DEFUN([AC_ARG_BLUEZ], [
AM_CONDITIONAL(DBUSOOBPLUGIN, test "${dbusoob_enable}" = "yes")
AM_CONDITIONAL(WIIMOTEPLUGIN, test "${wiimote_enable}" = "yes")
AM_CONDITIONAL(THERMOMETERPLUGIN, test "${thermometer_enable}" = "yes")
+ AM_CONDITIONAL(CABLE, test "${cable_enable}" = "yes" && test "${cable_found}" = "yes")
])
diff --git a/configure.ac b/configure.ac
index 908ad55..bc2658c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -46,6 +46,7 @@ AC_PATH_GSTREAMER
AC_PATH_USB
AC_PATH_UDEV
AC_PATH_SNDFILE
+AC_PATH_CABLE
AC_PATH_OUI
AC_PATH_READLINE
diff --git a/plugins/cable.c b/plugins/cable.c
new file mode 100644
index 0000000..e8cff76
--- /dev/null
+++ b/plugins/cable.c
@@ -0,0 +1,382 @@
+/*
+ *
+ * BlueZ - Bluetooth protocol stack for Linux
+ *
+ * Copyright (C) 2009 Bastien Nocera <hadess@hadess.net>
+ *
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <glib.h>
+#define LIBUDEV_I_KNOW_THE_API_IS_SUBJECT_TO_CHANGE 1
+#include <libudev.h>
+#include <dbus/dbus.h>
+#include <bluetooth/bluetooth.h>
+#include <bluetooth/sdp.h>
+#include <libusb.h>
+
+#include "plugin.h"
+#include "log.h"
+
+#include "adapter.h"
+#include "manager.h"
+#include "device.h"
+
+#include "storage.h"
+#include "sdp_lib.h"
+
+/* Vendor and product ID for the Sixaxis PS3 controller */
+#define VENDOR 0x054c
+#define PRODUCT 0x0268
+#define SIXAXIS_PNP_RECORD "3601920900000A000100000900013503191124090004350D35061901000900113503190011090006350909656E09006A0901000900093508350619112409010009000D350F350D350619010009001335031900110901002513576972656C65737320436F6E74726F6C6C65720901012513576972656C65737320436F6E74726F6C6C6572090102251B536F6E7920436F6D707574657220456E7465727461696E6D656E740902000901000902010901000902020800090203082109020428010902052801090206359A35980822259405010904A101A102850175089501150026FF00810375019513150025013500450105091901291381027501950D0600FF8103150026FF0005010901A10075089504350046FF0009300931093209358102C0050175089527090181027508953009019102750895300901B102C0A1028502750895300901B102C0A10285EE750895300901B102C0A10285EF750895300901B102C0C0090207350835060904090901000902082800090209280109020A280109020B09010009020C093E8009020D280009020E2800"
+#define HID_UUID "00001124-0000-1000-8000-00805f9b34fb"
+
+static struct btd_device *create_cable_association(DBusConnection *conn,
+ struct btd_adapter *adapter,
+ const char *name,
+ const char *address,
+ guint32 vendor_id,
+ guint32 product_id,
+ const char *pnp_record)
+{
+ sdp_record_t *rec;
+ struct btd_device *device;
+ bdaddr_t src, dst;
+ char srcaddr[18];
+
+ device = adapter_find_device(adapter, address);
+ if (device == NULL) {
+ device = device_create(conn, adapter, address, DEVICE_TYPE_UNKNOWN);
+ if (device != NULL)
+ adapter_create_device_for_device(conn, adapter, device);
+ }
+ if (device != NULL) {
+ device_set_temporary(device, FALSE);
+ device_set_name(device, name);
+ }
+
+ str2ba(address, &dst);
+ adapter_get_address(adapter, &src);
+ ba2str(&src, srcaddr);
+
+ write_device_name(&dst, &src, (char *) name);
+
+ /* Store the device's SDP record */
+ rec = record_from_string(pnp_record);
+ store_record(srcaddr, address, rec);
+ sdp_record_free(rec);
+ /* Set the device id */
+ store_device_id(srcaddr, address, 0xffff, vendor_id, product_id, 0);
+ /* Don't write a profile, it will be updated when the device connects */
+
+ write_trust(srcaddr, address, "[all]", TRUE);
+
+ return device;
+}
+
+static char *get_bdaddr(libusb_device_handle *devh, int itfnum)
+{
+ unsigned char msg[17];
+ char *address;
+ int res;
+
+ res = libusb_control_transfer(devh,
+ LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE,
+ 0x01, 0x03f2, itfnum,
+ (void*) msg, sizeof(msg),
+ 5000);
+
+ if (res < 0) {
+ DBG("Getting the device Bluetooth address failed");
+ return NULL;
+ }
+
+ address = g_strdup_printf("%02X:%02X:%02X:%02X:%02X:%02X",
+ msg[4], msg[5], msg[6], msg[7], msg[8], msg[9]);
+
+ DBG("Device Bluetooth address: %s\n", address);
+
+ return address;
+}
+
+static gboolean set_master_bdaddr(libusb_device_handle *devh, int itfnum, char *host)
+{
+ unsigned char msg[8];
+ int mac[6];
+ int res;
+
+ if (sscanf(host, "%X:%X:%X:%X:%X:%X",
+ &mac[0],&mac[1],&mac[2],&mac[3],&mac[4],&mac[5]) != 6) {
+ return FALSE;
+ }
+
+ msg[0] = 0x01;
+ msg[1] = 0x00;
+ msg[2] = mac[0];
+ msg[3] = mac[1];
+ msg[4] = mac[2];
+ msg[5] = mac[3];
+ msg[6] = mac[4];
+ msg[7] = mac[5];
+
+ res = libusb_control_transfer(devh,
+ LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE,
+ 0x09, 0x03f5, itfnum,
+ (void*) msg, sizeof(msg),
+ 5000);
+
+ if (res < 0) {
+ DBG("Setting the master Bluetooth address failed");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+static void handle_usb_device(struct btd_adapter *adapter,
+ libusb_device *dev,
+ struct libusb_config_descriptor *cfg,
+ int itfnum,
+ const struct libusb_interface_descriptor *alt)
+{
+ DBusConnection *conn;
+ libusb_device_handle *devh;
+ char *device_bdaddr;
+ char adapter_bdaddr[18];
+ struct btd_device *device;
+ bdaddr_t dst;
+
+ device_bdaddr = NULL;
+ conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
+ if (conn == NULL) {
+ DBG("Failed to get on the bus");
+ return;
+ }
+
+ if (libusb_open(dev, &devh) < 0) {
+ DBG("Can't open device");
+ goto bail;
+ }
+ libusb_detach_kernel_driver(devh, itfnum);
+
+ if (libusb_claim_interface(devh, itfnum) < 0) {
+ DBG("Can't claim interface %d", itfnum);
+ goto bail;
+ }
+
+ device_bdaddr = get_bdaddr(devh, itfnum);
+ if (device_bdaddr == NULL) {
+ DBG("Failed to get the Bluetooth address from the device");
+ goto bail;
+ }
+
+ device = create_cable_association(conn,
+ adapter,
+ "PLAYSTATION(R)3 Controller",
+ device_bdaddr,
+ VENDOR, PRODUCT, SIXAXIS_PNP_RECORD);
+ btd_device_add_uuid(device, HID_UUID);
+
+ adapter_get_address(adapter, &dst);
+ ba2str(&dst, adapter_bdaddr);
+ DBG("Adapter bdaddr %s", adapter_bdaddr);
+
+ if (set_master_bdaddr(devh, itfnum, adapter_bdaddr) == FALSE) {
+ DBG("Failed to set the master Bluetooth address");
+ goto bail;
+ }
+
+bail:
+ dbus_connection_unref(conn);
+ g_free(device_bdaddr);
+ libusb_release_interface(devh, itfnum);
+ /* We ignore errors from the reattach, as there's nothing we
+ * can do about it */
+ libusb_attach_kernel_driver(devh, itfnum);
+ if (devh != NULL)
+ libusb_close(devh);
+}
+
+static void handle_device_plug(struct udev_device *udevice)
+{
+ struct btd_adapter *adapter;
+ guint i;
+
+ libusb_device **list, *usbdev;
+ ssize_t num_devices;
+ struct libusb_device_descriptor desc;
+ guint8 j;
+
+ if (g_strcmp0(udev_device_get_property_value(udevice, "ID_SERIAL"),
+ "Sony_PLAYSTATION_R_3_Controller") != 0)
+ return;
+ /* Don't look at events with an associated driver */
+ if (udev_device_get_property_value(udevice, "ID_USB_DRIVER") != NULL)
+ return;
+
+ DBG("Found Sixaxis device");
+
+ /* Look for the default adapter */
+ adapter = manager_get_default_adapter();
+ if (adapter == NULL)
+ return;
+
+ /* Look for the USB device */
+ libusb_init(NULL);
+
+ num_devices = libusb_get_device_list(NULL, &list);
+ if (num_devices < 0) {
+ DBG("libusb_get_device_list failed");
+ return;
+ }
+
+ usbdev = NULL;
+ for (i = 0; i < num_devices; i++) {
+ char *path;
+
+ path = g_strdup_printf("%s/%03d/%03d", "/dev/bus/usb",
+ libusb_get_bus_number(list[i]),
+ libusb_get_device_address(list[i]));
+ if (g_strcmp0(path, udev_device_get_devnode(udevice)) == 0) {
+ g_free(path);
+ usbdev = libusb_ref_device(list[i]);
+ break;
+ }
+ g_free(path);
+ }
+
+ libusb_free_device_list(list, TRUE);
+ if (usbdev == NULL) {
+ DBG("Found a Sixaxis, but couldn't find it via libusb");
+ goto out;
+ }
+
+ if (libusb_get_device_descriptor(usbdev, &desc) < 0) {
+ DBG("libusb_get_device_descriptor() failed");
+ goto out;
+ }
+
+ /* Look for the interface number that interests us */
+ for (j = 0; j < desc.bNumConfigurations; j++) {
+ struct libusb_config_descriptor *config;
+ guint8 k;
+
+ if (libusb_get_config_descriptor(usbdev, j, &config) < 0) {
+ DBG("Failed to get config descriptor %d", j);
+ continue;
+ }
+
+ for (k = 0; k < config->bNumInterfaces; k++) {
+ const struct libusb_interface *itf = &config->interface[k];
+ int l;
+
+ for (l = 0; l < itf->num_altsetting ; l++) {
+ struct libusb_interface_descriptor alt;
+
+ alt = itf->altsetting[l];
+ if (alt.bInterfaceClass == 3) {
+ handle_usb_device(adapter, usbdev, config, l, &alt);
+ }
+ }
+ }
+ }
+
+out:
+ if (usbdev != NULL)
+ libusb_unref_device(usbdev);
+ libusb_exit(NULL);
+}
+
+static gboolean device_event_idle(struct udev_device *udevice)
+{
+ handle_device_plug(udevice);
+ udev_device_unref(udevice);
+ return FALSE;
+}
+
+static struct udev *ctx = NULL;
+static struct udev_monitor *monitor = NULL;
+static guint watch_id = 0;
+
+static gboolean
+monitor_event(GIOChannel *source,
+ GIOCondition condition,
+ gpointer data)
+{
+ struct udev_device *udevice;
+
+ udevice = udev_monitor_receive_device(monitor);
+ if (udevice == NULL)
+ goto out;
+ if (g_strcmp0(udev_device_get_action(udevice), "add") != 0)
+ goto out;
+
+ g_timeout_add_seconds(1, (GSourceFunc) device_event_idle, udevice);
+
+out:
+ return TRUE;
+}
+
+
+static int cable_init(void)
+{
+ GIOChannel *channel;
+
+ DBG("Setup cable plugin");
+
+ ctx = udev_new();
+ monitor = udev_monitor_new_from_netlink(ctx, "udev");
+ if (monitor == NULL) {
+ error ("Could not get udev monitor");
+ return -1;
+ }
+
+ /* Listen for newly connected usb device */
+ udev_monitor_filter_add_match_subsystem_devtype(monitor,
+ "usb", NULL);
+ udev_monitor_enable_receiving(monitor);
+
+ channel = g_io_channel_unix_new(udev_monitor_get_fd(monitor));
+ watch_id = g_io_add_watch(channel, G_IO_IN, monitor_event, NULL);
+ g_io_channel_unref(channel);
+
+ return 0;
+}
+
+static void cable_exit(void)
+{
+ DBG("Cleanup cable plugin");
+
+ if (watch_id != 0) {
+ g_source_remove(watch_id);
+ watch_id = 0;
+ }
+ if (monitor != NULL) {
+ udev_monitor_unref(monitor);
+ monitor = NULL;
+ }
+ if (ctx != NULL) {
+ udev_unref(ctx);
+ ctx = NULL;
+ }
+}
+
+BLUETOOTH_PLUGIN_DEFINE(cable, VERSION,
+ BLUETOOTH_PLUGIN_PRIORITY_DEFAULT, cable_init, cable_exit)
diff --git a/src/adapter.c b/src/adapter.c
index 4c88a0e..09d8392 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -1092,6 +1092,25 @@ static struct btd_device *adapter_create_device(DBusConnection *conn,
return device;
}
+void adapter_create_device_for_device(DBusConnection *conn,
+ struct btd_adapter *adapter,
+ struct btd_device *device)
+{
+ const char *path;
+
+ device_set_temporary(device, TRUE);
+
+ adapter->devices = g_slist_append(adapter->devices, device);
+
+ path = device_get_path(device);
+ g_dbus_emit_signal(conn, adapter->path,
+ ADAPTER_INTERFACE, "DeviceCreated",
+ DBUS_TYPE_OBJECT_PATH, &path,
+ DBUS_TYPE_INVALID);
+
+ adapter_update_devices(adapter);
+}
+
void adapter_remove_device(DBusConnection *conn, struct btd_adapter *adapter,
struct btd_device *device,
gboolean remove_storage)
diff --git a/src/adapter.h b/src/adapter.h
index 687275a..7f7cb55 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -116,6 +116,9 @@ void adapter_update_found_devices(struct btd_adapter *adapter, bdaddr_t *bdaddr,
int adapter_remove_found_device(struct btd_adapter *adapter, bdaddr_t *bdaddr);
void adapter_emit_device_found(struct btd_adapter *adapter,
struct remote_dev_info *dev);
+void adapter_create_device_for_device(DBusConnection *conn,
+ struct btd_adapter *adapter,
+ struct btd_device *device);
void adapter_mode_changed(struct btd_adapter *adapter, uint8_t scan_mode);
int adapter_update_local_name(struct btd_adapter *adapter, const char *name);
void adapter_service_insert(struct btd_adapter *adapter, void *rec);
--
1.7.6

View file

@ -0,0 +1,121 @@
From 0080ce8a37152b0ee7750799e01de3bf810f8caf Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Wed, 21 Jul 2010 19:20:44 +0200
Subject: [PATCH] systemd: install systemd unit files
This also enables bus activation for bluetoothd, but only if systemd is
running. Only if that's the case we can make sure in a race-free fashion
that bluetoothd is not started twice at the same time.
---
Makefile.am | 21 ++++++++++++++++++---
configure.ac | 9 +++++++++
scripts/.gitignore | 1 +
scripts/bluetooth.service.in | 13 +++++++++++++
scripts/org.bluez.service | 5 +++++
5 files changed, 46 insertions(+), 3 deletions(-)
create mode 100644 scripts/.gitignore
create mode 100644 scripts/bluetooth.service.in
create mode 100644 scripts/org.bluez.service
diff --git a/Makefile.am b/Makefile.am
index aecc8f2..6e18003 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -387,10 +387,25 @@ endif
rules_DATA = $(foreach file,$(udev_files), scripts/97-$(notdir $(file)))
endif
+if HAVE_SYSTEMD
+systemdsystemunit_DATA = \
+ scripts/bluetooth.service
+
+scripts/bluetooth.service: scripts/bluetooth.service.in
+ @$(SED) -e "s|\@sbindir\@|$(sbindir)|" $< >$@
+
+dbussystemservicesdir = $(datadir)/dbus-1/system-services
+
+dbussystemservices_DATA = \
+ scripts/org.bluez.service
+
+endif
+
CLEANFILES += $(rules_DATA)
EXTRA_DIST += scripts/bluetooth.rules \
- scripts/bluetooth-hid2hci.rules scripts/bluetooth-serial.rules
+ scripts/bluetooth-hid2hci.rules scripts/bluetooth-serial.rules \
+ scripts/bluetooth.service.in scripts/org.bluez.service
EXTRA_DIST += doc/manager-api.txt \
doc/adapter-api.txt doc/device-api.txt \
@@ -417,9 +432,9 @@ pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = bluez.pc
-DISTCHECK_CONFIGURE_FLAGS = --disable-datafiles
+DISTCHECK_CONFIGURE_FLAGS = --disable-datafiles --with-systemdsystemunitdir=
-DISTCLEANFILES = $(pkgconfig_DATA)
+DISTCLEANFILES = $(pkgconfig_DATA) scripts/bluetooth.service
MAINTAINERCLEANFILES = Makefile.in \
aclocal.m4 configure config.h.in config.sub config.guess \
diff --git a/configure.ac b/configure.ac
index bc2658c..b4502ab 100644
--- a/configure.ac
+++ b/configure.ac
@@ -71,5 +71,14 @@ if (test -n "${path_systemdunit}"); then
fi
AM_CONDITIONAL(SYSTEMD, test -n "${path_systemdunit}")
+# systemd
+
+AC_ARG_WITH([systemdsystemunitdir],
+ AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),
+ [],
+ [with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)])
+AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
+AM_CONDITIONAL(HAVE_SYSTEMD, [test -n "$with_systemdsystemunitdir"])
+
AC_OUTPUT(Makefile scripts/bluetooth.rules doc/version.xml
src/bluetoothd.8 src/bluetooth.service bluez.pc)
diff --git a/scripts/.gitignore b/scripts/.gitignore
new file mode 100644
index 0000000..4b9f765
--- /dev/null
+++ b/scripts/.gitignore
@@ -0,0 +1 @@
+bluetooth.service
diff --git a/scripts/bluetooth.service.in b/scripts/bluetooth.service.in
new file mode 100644
index 0000000..d0089ea
--- /dev/null
+++ b/scripts/bluetooth.service.in
@@ -0,0 +1,13 @@
+[Unit]
+Description=Bluetooth Manager
+After=syslog.target
+
+[Service]
+Type=dbus
+BusName=org.bluez
+ExecStart=@sbindir@/bluetoothd -n
+StandardOutput=syslog
+
+[Install]
+WantedBy=bluetooth.target
+Alias=dbus-org.bluez.service
diff --git a/scripts/org.bluez.service b/scripts/org.bluez.service
new file mode 100644
index 0000000..dd7ae8f
--- /dev/null
+++ b/scripts/org.bluez.service
@@ -0,0 +1,5 @@
+[D-BUS Service]
+Name=org.bluez
+Exec=/bin/false
+User=root
+SystemdService=dbus-org.bluez.service
--
1.7.6

View file

@ -1,92 +0,0 @@
--- bluez-4.93/Makefile.am.systemd 2011-05-03 10:20:36.000000000 +0200
+++ bluez-4.93/Makefile.am 2011-05-16 10:44:20.000000000 +0200
@@ -352,7 +352,8 @@
CLEANFILES += $(rules_DATA)
EXTRA_DIST += scripts/bluetooth.rules \
- scripts/bluetooth-hid2hci.rules scripts/bluetooth-serial.rules
+ scripts/bluetooth-hid2hci.rules scripts/bluetooth-serial.rules \
+ scripts/bluetooth.service.in scripts/org.bluez.service
if PCMCIA
udevdir = $(libexecdir)/udev
@@ -360,6 +361,27 @@
dist_udev_SCRIPTS = scripts/bluetooth_serial
endif
+if HAVE_SYSTEMD
+systemdsystemunit_DATA = \
+ scripts/bluetooth.service
+
+scripts/bluetooth.service: scripts/bluetooth.service.in
+ @$(SED) -e "s|\@sbindir\@|$(sbindir)|" $< >$@
+
+dbussystemservicesdir = $(datadir)/dbus-1/system-services
+
+dbussystemservices_DATA = \
+ scripts/org.bluez.service
+
+endif
+
+install-data-hook:
+if HAVE_SYSTEMD
+ $(MKDIR_P) $(DESTDIR)$(systemdsystemunitdir)/bluetooth.target.wants
+ ( cd $(DESTDIR)$(systemdsystemunitdir)/bluetooth.target.wants && \
+ $(LN_S) ../bluetooth.service bluetooth.service )
+endif
+
EXTRA_DIST += doc/manager-api.txt \
doc/adapter-api.txt doc/device-api.txt \
doc/service-api.txt doc/agent-api.txt doc/attribute-api.txt \
@@ -385,9 +407,9 @@
pkgconfig_DATA = bluez.pc
-DISTCHECK_CONFIGURE_FLAGS = --disable-udevrules
+DISTCHECK_CONFIGURE_FLAGS = --disable-udevrules --with-systemdsystemunitdir=
-DISTCLEANFILES = $(pkgconfig_DATA)
+DISTCLEANFILES = $(pkgconfig_DATA) scripts/bluetooth.service
MAINTAINERCLEANFILES = Makefile.in \
aclocal.m4 configure config.h.in config.sub config.guess \
--- bluez-4.93/configure.ac.systemd 2011-05-03 10:20:36.000000000 +0200
+++ bluez-4.93/configure.ac 2011-05-16 10:40:24.000000000 +0200
@@ -57,5 +57,14 @@
AC_DEFINE(HAVE_CAPNG, 1, [Define to 1 if you have capabilities library.])
fi
+# systemd
+
+AC_ARG_WITH([systemdsystemunitdir],
+ AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),
+ [],
+ [with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)])
+AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
+AM_CONDITIONAL(HAVE_SYSTEMD, [test -n "$with_systemdsystemunitdir"])
+
AC_OUTPUT(Makefile scripts/bluetooth.rules doc/version.xml
src/bluetoothd.8 bluez.pc)
--- bluez-4.93/scripts/.gitignore.systemd 2011-05-16 10:40:24.000000000 +0200
+++ bluez-4.93/scripts/.gitignore 2011-05-16 10:40:24.000000000 +0200
@@ -0,0 +1 @@
+bluetooth.service
--- bluez-4.93/scripts/bluetooth.service.in.systemd 2011-05-16 10:40:24.000000000 +0200
+++ bluez-4.93/scripts/bluetooth.service.in 2011-05-16 10:40:24.000000000 +0200
@@ -0,0 +1,8 @@
+[Unit]
+Description=Bluetooth Manager
+After=syslog.target
+
+[Service]
+Type=dbus
+BusName=org.bluez
+ExecStart=@sbindir@/bluetoothd -n
--- bluez-4.93/scripts/org.bluez.service.systemd 2011-05-16 10:40:24.000000000 +0200
+++ bluez-4.93/scripts/org.bluez.service 2011-05-16 10:40:24.000000000 +0200
@@ -0,0 +1,5 @@
+[D-BUS Service]
+Name=org.bluez
+Exec=/bin/false
+User=root
+SystemdService=bluetooth.service

View file

@ -0,0 +1,12 @@
diff --git a/scripts/bluetooth-serial.rules b/scripts/bluetooth-serial.rules
index 072335f..f6284ff 100644
--- a/scripts/bluetooth-serial.rules
+++ b/scripts/bluetooth-serial.rules
@@ -33,3 +33,7 @@ SUBSYSTEM=="tty", SUBSYSTEMS=="pcmcia", ATTRS{prod_id1}=="PCMCIA", ATTRS{prod_id
# CC&C BT0100M
SUBSYSTEM=="tty", SUBSYSTEMS=="pcmcia", ATTRS{prod_id1}=="Bluetooth BT0100M", ENV{HCIOPTS}="bcsp 115200", RUN+="bluetooth_serial"
+
+# SocketMobile CF Connection Kit
+SUBSYSTEM=="tty", SUBSYSTEMS=="pcmcia", ATTRS{prod_id1}=="Socket", ATTRS{prod_id2}=="CF+ Personal Network Card Rev 2.5", ENV{HCIOPTS}="socket", RUN+="bluetooth_serial"
+

View file

@ -6,29 +6,26 @@
Name: bluez Name: bluez
Summary: Official Linux Bluetooth protocol stack Summary: Official Linux Bluetooth protocol stack
Version: 4.93 Version: 4.96
Release: %mkrel 2 Release: %mkrel 1
License: GPLv2+ License: GPLv2+
Group: Communications Group: Communications
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
URL: http://bluez.sourceforge.net/ Source: http://www.kernel.org/pub/linux/bluetooth/%{name}-%{version}.tar.gz
Source0: http://www.kernel.org/pub/linux/bluetooth/%{name}-%{version}.tar.gz
#Source1: bluetooth.init
#Source2: pand.init
#Source3: dund.init
#Source4: hidd.init
#Source5: bluetooth.conf
Source6: pand.conf Source6: pand.conf
Source7: dund.conf Source7: dund.conf
Source8: hidd.conf Source8: hidd.conf
Source9: rfcomm.conf Source9: rfcomm.conf
#Source10: hidd.hotplug
#Source11: hidd.udev.rules
# (bor) also disable rule if systemd is active # (bor) also disable rule if systemd is active
Patch100: bluez-4.79-fail_udev_event_on_error.patch Patch100: bluez-4.79-fail_udev_event_on_error.patch
# (bor) based on http://article.gmane.org/gmane.linux.bluez.kernel/6479 # (kazancas) patch from Fedora
Patch101: bluez-4.93-systemd_support.patch # https://bugzilla.redhat.com/show_bug.cgi?id=498756
Patch4: bluez-socket-mobile-cf-connection-kit.patch
# http://thread.gmane.org/gmane.linux.bluez.kernel/2396
Patch5: 0001-Add-sixaxis-cable-pairing-plugin.patch
# http://thread.gmane.org/gmane.linux.bluez.kernel/8645
Patch6: 0001-systemd-install-systemd-unit-files.patch
BuildRequires: dbus-devel BuildRequires: dbus-devel
BuildRequires: flex BuildRequires: flex
@ -37,22 +34,24 @@ BuildRequires: libusb-devel
BuildRequires: libalsa-devel BuildRequires: libalsa-devel
BuildRequires: udev-tools BuildRequires: udev-tools
BuildRequires: libgstreamer0.10-plugins-base-devel BuildRequires: libgstreamer0.10-plugins-base-devel
BuildRequires: gstreamer0.10-devel hal-devel BuildRequires: gstreamer0.10-devel
BuildRequires: expat-devel BuildRequires: expat-devel
BuildRequires: udev-devel BuildRequires: udev-devel
BuildRequires: libcap-ng-devel BuildRequires: libcap-ng-devel
# (bor) for P101 # (bor) for P101
BuildRequires: automake autoconf BuildRequires: automake autoconf
# (kazancas)
Buildrequires: systemd, readline
Requires: python-gobject Requires: python-gobject
Requires: bluez-pin Requires: bluez-pin
Requires: obex-data-server Requires: obex-data-server
Provides: bluez-sdp Provides: bluez-sdp
Obsoletes: bluez-sdp < 4.0 Obsoletes: bluez-sdp < 4.5
Provides: bluez-pan Provides: bluez-pan
Provides: bluez-hciemu Provides: bluez-hciemu
Obsoletes: bluez-hciemu Obsoletes: bluez-hciemu
Provides: bluez-utils Provides: bluez-utils
Obsoletes: bluez-utils < 4.0 Obsoletes: bluez-utils < 4.5
Suggests: bluez-firmware Suggests: bluez-firmware
%description %description
@ -67,27 +66,22 @@ if [ "$1" = "2" -a -d %{_var}/lib/lib/bluetooth ]; then
rmdir %{_var}/lib/lib/ > /dev/null 2>&1 || exit 0 rmdir %{_var}/lib/lib/ > /dev/null 2>&1 || exit 0
fi fi
##%_post_service bluetooth if [ $1 -eq 1 ]; then
##%_post_service dund /bin/systemctl enable bluetooth.service >/dev/null 2>&1 || :
##%_post_service hidd fi
##%_post_service pand
%preun
##%_preun_service bluetooth
##%_preun_service dund
##%_preun_service hidd
##%_preun_service pand
%postun %postun
if [ "$1" = "0" ]; then if [ "$1" = "0" ]; then
update-alternatives --remove bluepin /usr/bin/bluepin update-alternatives --remove bluepin /usr/bin/bluepin
fi fi
%triggerin -- bluez < 4.46-4mdv /bin/systemctl daemon-reload >/dev/null 2>&1 || :
/sbin/chkconfig --del bluetooth if [ $1 -ge 1 ] ; then
/sbin/chkconfig --del dund /bin/systemctl try-restart bluetooth.service >/dev/null 2>&1 || :
/sbin/chkconfig --del hidd fi
/sbin/chkconfig --del pand
%triggerun -- bluez < 4.94-4
/bin/systemctl --no-reload enable bluetooth.service >/dev/null 2>&1 || :
%files %files
%defattr(-,root,root) %defattr(-,root,root)
@ -97,7 +91,7 @@ fi
/sbin/bluetoothd /sbin/bluetoothd
%if %{_with_systemd} %if %{_with_systemd}
/lib/systemd/system/bluetooth.service /lib/systemd/system/bluetooth.service
/lib/systemd/system/bluetooth.target.wants/bluetooth.service #/lib/systemd/system/bluetooth.target.wants/bluetooth.service
%endif %endif
#/sbin/udev_bluetooth_helper #/sbin/udev_bluetooth_helper
%{_mandir}/man?/* %{_mandir}/man?/*
@ -203,8 +197,9 @@ applications which will use libraries from %{name}.
%prep %prep
%setup -q -n %name-%{version} %setup -q -n %name-%{version}
%patch100 -p1 -b .fail_event %patch100 -p1 -b .fail_event
%patch101 -p1 -b .systemd %patch4 -p1 -b .socket-mobile
%patch5 -p1 -b .cable-pairing
%patch6 -p1 -b .systemd
%build %build
# (bor) for P101 # (bor) for P101
@ -226,7 +221,8 @@ autoreconf -fi
--enable-hid2hci \ --enable-hid2hci \
--enable-pcmcia \ --enable-pcmcia \
--enable-udevrules \ --enable-udevrules \
--enable-capng --enable-capng \
--with-systemdsystemunitdir=/lib/systemd/system
%make %make
@ -268,9 +264,6 @@ cp %{buildroot}%{_sbindir}/bluetoothd %{buildroot}/sbin/
cp test/test-* %{buildroot}%{_bindir} cp test/test-* %{buildroot}%{_bindir}
cp test/simple-agent %{buildroot}%{_bindir}/simple-agent cp test/simple-agent %{buildroot}%{_bindir}/simple-agent
#install -D -m0755 %{SOURCE10} %{buildroot}/sbin/udev_bluetooth_helper
#install -D -m0644 %{SOURCE11} %{buildroot}%{_sysconfdir}/udev/rules.d/60-bluetooth.rules
#install more config files #install more config files
install -m0644 audio/audio.conf %{buildroot}%{_sysconfdir}/bluetooth/ install -m0644 audio/audio.conf %{buildroot}%{_sysconfdir}/bluetooth/
install -m0644 network/network.conf %{buildroot}%{_sysconfdir}/bluetooth/ install -m0644 network/network.conf %{buildroot}%{_sysconfdir}/bluetooth/
@ -291,7 +284,21 @@ rm -fr %{buildroot}
%changelog %changelog
* Wed Jun 29 2011 Michael Scherer <misc@mandriva.org> 4.93-2mdv2011.0 * Tue Oct 04 2011 Александр Казанцев <kazancas@mandriva.org> 4.96-1mdv2012.0
+ Revision: 702844
- new version 4.96
- enable bluetoothd by default
- drop systemd patch rather upstream impliment
- add patches from Fedora
- remove obsoletes dating back to october 2008
- remove old obsoletes ( likely no longer needed )
- drop hal buildrequires. No longer needed
- br systemd, readline
+ Matthew Dawkins <mattydaw@mandriva.org>
- removed unnecessary hal-devel BR
* Wed Jun 29 2011 Michael Scherer <misc@mandriva.org> 4.93-2
+ Revision: 688284 + Revision: 688284
- fix requires - fix requires
@ -418,8 +425,7 @@ rm -fr %{buildroot}
* Wed Aug 19 2009 Emmanuel Andry <eandry@mandriva.org> 4.48-1mdv2010.0 * Wed Aug 19 2009 Emmanuel Andry <eandry@mandriva.org> 4.48-1mdv2010.0
+ Revision: 418001 + Revision: 418001
- New version 4.48 - update files list
?\195- update files list
* Sun Aug 02 2009 Emmanuel Andry <eandry@mandriva.org> 4.47-1mdv2010.0 * Sun Aug 02 2009 Emmanuel Andry <eandry@mandriva.org> 4.47-1mdv2010.0
+ Revision: 407555 + Revision: 407555
@ -652,7 +658,7 @@ rm -fr %{buildroot}
+ Revision: 63509 + Revision: 63509
- new release: 3.14 - new release: 3.14
* Thu Aug 02 2007 Olivier Blin <oblin@mandriva.com> 3.13-1mdv2008.0 * Thu Aug 02 2007 Olivier Blin <blino@mandriva.org> 3.13-1mdv2008.0
+ Revision: 58035 + Revision: 58035
- drop pkgconfig buildrequires, it's required by rpm-mandriva-setup-build - drop pkgconfig buildrequires, it's required by rpm-mandriva-setup-build
- 3.13 - 3.13