> Enable both ofono and native backends to be built into the same > libbluez5-util. Never build the null backend. can you please add the check whether bluetooth headers (build dependency) are available in this patch series? thanks, p. > Signed-off-by: David Henningsson <david.henningsson at canonical.com> > --- > configure.ac | 30 +++++++++++++++++------------- > src/Makefile.am | 12 ++++++++++-- > src/modules/bluetooth/backend-native.c | 4 ++-- > src/modules/bluetooth/backend-ofono.c | 4 ++-- > src/modules/bluetooth/bluez5-util.c | 24 ++++++++++++++++-------- > src/modules/bluetooth/bluez5-util.h | 21 +++++++++++++++++++-- > 6 files changed, 66 insertions(+), 29 deletions(-) > > diff --git a/configure.ac b/configure.ac > index f165eb4..f98b194 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -1035,18 +1035,19 @@ AM_CONDITIONAL([HAVE_BLUEZ], [test "x$HAVE_BLUEZ" = x1]) > > ## Bluetooth Headset profiles backend ## > > -AC_ARG_WITH(bluetooth_headset_backend, > - AS_HELP_STRING([--with-bluetooth-headset-backend=<ofono|native|null>],[Backend for Bluetooth headset profiles (native)])) > -if test -z "$with_bluetooth_headset_backend" ; then > - BLUETOOTH_HEADSET_BACKEND=native > -else > - BLUETOOTH_HEADSET_BACKEND=$with_bluetooth_headset_backend > -fi > - > -AS_IF([test "x$BLUETOOTH_HEADSET_BACKEND" != "xofono" && test "x$BLUETOOTH_HEADSET_BACKEND" != "xnull" && test "x$BLUETOOTH_HEADSET_BACKEND" != "xnative"], > - [AC_MSG_ERROR([*** Invalid Bluetooth Headset backend])]) > - > -AC_SUBST(BLUETOOTH_HEADSET_BACKEND) > +AC_ARG_ENABLE([bluez5-ofono-headset], > + AS_HELP_STRING([--disable-bluez5-ofono-headset],[Disable optional ofono headset backend support (Bluez 5)])) > +AS_IF([test "x$HAVE_BLUEZ_5" = "x1" && test "x$enable_bluez5_ofono_headset" != "xno"], HAVE_BLUEZ_5_OFONO_HEADSET=1) > +AC_SUBST(HAVE_BLUEZ_5_OFONO_HEADSET) > +AM_CONDITIONAL([HAVE_BLUEZ_5_OFONO_HEADSET], [test "x$HAVE_BLUEZ_5_OFONO_HEADSET" = x1]) > +AS_IF([test "x$HAVE_BLUEZ_5_OFONO_HEADSET" = "x1"], AC_DEFINE([HAVE_BLUEZ_5_OFONO_HEADSET], 1, [Bluez 5 ofono headset backend enabled])) > + > +AC_ARG_ENABLE([bluez5-native-headset], > + AS_HELP_STRING([--disable-bluez5-native-headset],[Disable optional native headset backend support (Bluez 5)])) > +AS_IF([test "x$HAVE_BLUEZ_5" = "x1" && test "x$enable_bluez5_native_headset" != "xno"], HAVE_BLUEZ_5_NATIVE_HEADSET=1) > +AC_SUBST(HAVE_BLUEZ_5_NATIVE_HEADSET) > +AM_CONDITIONAL([HAVE_BLUEZ_5_NATIVE_HEADSET], [test "x$HAVE_BLUEZ_5_NATIVE_HEADSET" = x1]) > +AS_IF([test "x$HAVE_BLUEZ_5_NATIVE_HEADSET" = "x1"], AC_DEFINE([HAVE_BLUEZ_5_NATIVE_HEADSET], 1, [Bluez 5 native headset backend enabled])) > > #### UDEV support (optional) #### > > @@ -1462,6 +1463,8 @@ AS_IF([test "x$HAVE_SYSTEMD" = "x1"], ENABLE_SYSTEMD=yes, ENABLE_SYSTEMD=no) > AS_IF([test "x$HAVE_SYSTEMD_JOURNAL" = "x1"], ENABLE_SYSTEMD_JOURNAL=yes, ENABLE_SYSTEMD_JOURNAL=no) > AS_IF([test "x$HAVE_BLUEZ_4" = "x1"], ENABLE_BLUEZ_4=yes, ENABLE_BLUEZ_4=no) > AS_IF([test "x$HAVE_BLUEZ_5" = "x1"], ENABLE_BLUEZ_5=yes, ENABLE_BLUEZ_5=no) > +AS_IF([test "x$HAVE_BLUEZ_5_OFONO_HEADSET" = "x1"], ENABLE_BLUEZ_5_OFONO_HEADSET=yes, ENABLE_BLUEZ_5_OFONO_HEADSET=no) > +AS_IF([test "x$HAVE_BLUEZ_5_NATIVE_HEADSET" = "x1"], ENABLE_BLUEZ_5_NATIVE_HEADSET=yes, ENABLE_BLUEZ_5_NATIVE_HEADSET=no) > AS_IF([test "x$HAVE_HAL_COMPAT" = "x1"], ENABLE_HAL_COMPAT=yes, ENABLE_HAL_COMPAT=no) > AS_IF([test "x$HAVE_TCPWRAP" = "x1"], ENABLE_TCPWRAP=yes, ENABLE_TCPWRAP=no) > AS_IF([test "x$HAVE_LIBSAMPLERATE" = "x1"], ENABLE_LIBSAMPLERATE=yes, ENABLE_LIBSAMPLERATE=no) > @@ -1516,7 +1519,8 @@ echo " > Enable D-Bus: ${ENABLE_DBUS} > Enable BlueZ 4: ${ENABLE_BLUEZ_4} > Enable BlueZ 5: ${ENABLE_BLUEZ_5} > - headset backend: ${BLUETOOTH_HEADSET_BACKEND} > + Enable ofono headsets: ${ENABLE_BLUEZ_5_OFONO_HEADSET} > + Enable native headsets: ${ENABLE_BLUEZ_5_NATIVE_HEADSET} > Enable udev: ${ENABLE_UDEV} > Enable HAL->udev compat: ${ENABLE_HAL_COMPAT} > Enable systemd login: ${ENABLE_SYSTEMD} > diff --git a/src/Makefile.am b/src/Makefile.am > index 4219ece..5e43f4e 100644 > --- a/src/Makefile.am > +++ b/src/Makefile.am > @@ -2110,8 +2110,16 @@ module_bluez4_device_la_CFLAGS = $(AM_CFLAGS) $(DBUS_CFLAGS) $(SBC_CFLAGS) > libbluez5_util_la_SOURCES = \ > modules/bluetooth/bluez5-util.c \ > modules/bluetooth/bluez5-util.h \ > - modules/bluetooth/a2dp-codecs.h \ > - modules/bluetooth/backend- at BLUETOOTH_HEADSET_BACKEND@.c > + modules/bluetooth/a2dp-codecs.h > +if HAVE_BLUEZ_5_OFONO_HEADSET > +libbluez5_util_la_SOURCES += \ > + modules/bluetooth/backend-ofono.c > +endif > +if HAVE_BLUEZ_5_NATIVE_HEADSET > +libbluez5_util_la_SOURCES += \ > + modules/bluetooth/backend-native.c > +endif > + > libbluez5_util_la_LDFLAGS = -avoid-version > libbluez5_util_la_LIBADD = $(MODULE_LIBADD) $(DBUS_LIBS) > libbluez5_util_la_CFLAGS = $(AM_CFLAGS) $(DBUS_CFLAGS) > diff --git a/src/modules/bluetooth/backend-native.c b/src/modules/bluetooth/backend-native.c > index a9dc64c..66dacf9 100644 > --- a/src/modules/bluetooth/backend-native.c > +++ b/src/modules/bluetooth/backend-native.c > @@ -464,7 +464,7 @@ static void profile_done(pa_bluetooth_backend *b, pa_bluetooth_profile_t profile > } > } > > -pa_bluetooth_backend *pa_bluetooth_backend_new(pa_core *c, pa_bluetooth_discovery *y) { > +pa_bluetooth_backend *pa_bluetooth_native_backend_new(pa_core *c, pa_bluetooth_discovery *y) { > pa_bluetooth_backend *backend; > DBusError err; > > @@ -488,7 +488,7 @@ pa_bluetooth_backend *pa_bluetooth_backend_new(pa_core *c, pa_bluetooth_discover > return backend; > } > > -void pa_bluetooth_backend_free(pa_bluetooth_backend *backend) { > +void pa_bluetooth_native_backend_free(pa_bluetooth_backend *backend) { > pa_assert(backend); > > pa_dbus_free_pending_list(&backend->pending); > diff --git a/src/modules/bluetooth/backend-ofono.c b/src/modules/bluetooth/backend-ofono.c > index ba10ed6..797d35c 100644 > --- a/src/modules/bluetooth/backend-ofono.c > +++ b/src/modules/bluetooth/backend-ofono.c > @@ -582,7 +582,7 @@ static DBusHandlerResult hf_audio_agent_handler(DBusConnection *c, DBusMessage * > return DBUS_HANDLER_RESULT_HANDLED; > } > > -pa_bluetooth_backend *pa_bluetooth_backend_new(pa_core *c, pa_bluetooth_discovery *y) { > +pa_bluetooth_backend *pa_bluetooth_ofono_backend_new(pa_core *c, pa_bluetooth_discovery *y) { > pa_bluetooth_backend *backend; > DBusError err; > static const DBusObjectPathVTable vtable_hf_audio_agent = { > @@ -635,7 +635,7 @@ pa_bluetooth_backend *pa_bluetooth_backend_new(pa_core *c, pa_bluetooth_discover > return backend; > } > > -void pa_bluetooth_backend_free(pa_bluetooth_backend *backend) { > +void pa_bluetooth_ofono_backend_free(pa_bluetooth_backend *backend) { > pa_assert(backend); > > pa_dbus_free_pending_list(&backend->pending); > diff --git a/src/modules/bluetooth/bluez5-util.c b/src/modules/bluetooth/bluez5-util.c > index 9431aed..f7bf654 100644 > --- a/src/modules/bluetooth/bluez5-util.c > +++ b/src/modules/bluetooth/bluez5-util.c > @@ -87,7 +87,7 @@ struct pa_bluetooth_discovery { > pa_hashmap *devices; > pa_hashmap *transports; > > - pa_bluetooth_backend *backend; > + pa_bluetooth_backend *ofono_backend, *native_backend; > PA_LLIST_HEAD(pa_dbus_pending, pending); > }; > > @@ -899,8 +899,10 @@ static void get_managed_objects_reply(DBusPendingCall *pending, void *userdata) > > y->objects_listed = true; > > - if (!y->backend) > - y->backend = pa_bluetooth_backend_new(y->core, y); > + if (!y->ofono_backend) > + y->ofono_backend = pa_bluetooth_ofono_backend_new(y->core, y); > + if (!y->ofono_backend && !y->native_backend) > + y->native_backend = pa_bluetooth_native_backend_new(y->core, y); > > finish: > dbus_message_unref(r); > @@ -954,9 +956,13 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *m, void *us > pa_hashmap_remove_all(y->devices); > pa_hashmap_remove_all(y->adapters); > y->objects_listed = false; > - if (y->backend) { > - pa_bluetooth_backend_free(y->backend); > - y->backend = NULL; > + if (y->ofono_backend) { > + pa_bluetooth_ofono_backend_free(y->ofono_backend); > + y->ofono_backend = NULL; > + } > + if (y->native_backend) { > + pa_bluetooth_native_backend_free(y->native_backend); > + y->native_backend = NULL; > } > } > > @@ -1648,8 +1654,10 @@ void pa_bluetooth_discovery_unref(pa_bluetooth_discovery *y) { > pa_hashmap_free(y->transports); > } > > - if (y->backend) > - pa_bluetooth_backend_free(y->backend); > + if (y->ofono_backend) > + pa_bluetooth_ofono_backend_free(y->ofono_backend); > + if (y->native_backend) > + pa_bluetooth_native_backend_free(y->native_backend); > > if (y->connection) { > > diff --git a/src/modules/bluetooth/bluez5-util.h b/src/modules/bluetooth/bluez5-util.h > index 3ef0ac8..d1abd39 100644 > --- a/src/modules/bluetooth/bluez5-util.h > +++ b/src/modules/bluetooth/bluez5-util.h > @@ -117,8 +117,25 @@ struct pa_bluetooth_adapter { > bool valid; > }; > > -pa_bluetooth_backend *pa_bluetooth_backend_new(pa_core *c, pa_bluetooth_discovery *y); > -void pa_bluetooth_backend_free(pa_bluetooth_backend *b); > +#ifdef HAVE_BLUEZ_5_OFONO_HEADSET > +pa_bluetooth_backend *pa_bluetooth_ofono_backend_new(pa_core *c, pa_bluetooth_discovery *y); > +void pa_bluetooth_ofono_backend_free(pa_bluetooth_backend *b); > +#else > +static inline pa_bluetooth_backend *pa_bluetooth_ofono_backend_new(pa_core *c, pa_bluetooth_discovery *y) { > + return NULL; > +} > +static inline void pa_bluetooth_ofono_backend_free(pa_bluetooth_backend *b) {} > +#endif > + > +#ifdef HAVE_BLUEZ_5_NATIVE_HEADSET > +pa_bluetooth_backend *pa_bluetooth_native_backend_new(pa_core *c, pa_bluetooth_discovery *y); > +void pa_bluetooth_native_backend_free(pa_bluetooth_backend *b); > +#else > +static inline pa_bluetooth_backend *pa_bluetooth_native_backend_new(pa_core *c, pa_bluetooth_discovery *y) { > + return NULL; > +} > +static inline void pa_bluetooth_native_backend_free(pa_bluetooth_backend *b) {} > +#endif > > pa_bluetooth_transport *pa_bluetooth_transport_new(pa_bluetooth_device *d, const char *owner, const char *path, > pa_bluetooth_profile_t p, const uint8_t *config, size_t size); > -- > 1.9.1 > > _______________________________________________ > pulseaudio-discuss mailing list > pulseaudio-discuss at lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss > -- Peter Meerwald +43-664-2444418 (mobile)