1SUMMARY = "Sound server for Linux and Unix-like operating systems"
2DESCRIPTION = "A general purpose sound server intended to run as a middleware \
3between your applications and your hardware devices, either using ALSA or OSS."
4HOMEPAGE = "http://www.pulseaudio.org"
5AUTHOR = "Lennart Poettering"
6SECTION = "libs/multimedia"
7
8# Most of PulseAudio code is under LGPLv2.1+. There are a few exceptions:
9#
10# The "adrian" echo canceller variant has code under a non-standard permissive
11# license. See src/modules/echo-cancel/adrian-license.txt for details. This
12# recipe disables the adrian echo canceller to avoid hassle with the unusual
13# license.
14#
15# The src/modules/reserve* and src/pulsecore/rtkit* files are under the MIT
16# license.
17#
18# The src/pulsecore/filter/ directory contains code under the 3-clause BSD
19# license.
20#
21# People who distribute PulseAudio binaries need to also consider that there
22# are some dependencies to GPL libraries. LGPL code that depends on GPL
23# libraries probably becomes effectively GPL-licensed (at compile-time? or at
24# at link-time?). I'm not a lawyer, though, so I'm not sure of the exact
25# implications. The GPL dependencies only affect the server, not the client
26# library, with the exception of libdbus that affects both. These are the GPL
27# library dependencies:
28#
29# One of the resampler implementations uses libsamplerate. This recipe doesn't
30# enable that resampler, however.
31#
32# One of the database implementations uses gdbm. This recipe doesn't enable
33# that database implementation, however.
34#
35# module-lirc (enabled by PACKAGECONFIG[lirc]) uses LIRC.
36#
37# module-equalizer-sink uses FFTW. This recipe disables that, however.
38#
39# The dependency with the most complicated licensing considerations is libdbus.
40# When PACKAGECONFIG[dbus] is enabled (like it is by default), libdbus will be
41# used by both the server and the client library (libpulse). Does this affect
42# applications that use libpulse? It should be also noted that libdbus is
43# dual-licensed: either GPLv2+ or AFL-2 terms apply. Whose decision is it which
44# of the licenses apply? What a mess. Some people hold the view that libdbus is
45# a system library that is covered by the "special exception" in GPLv2's
46# section 3, and therefore libdbus's GPL license doesn't affect PulseAudio.
47LICENSE = "LGPLv2.1+ & MIT & BSD-3-Clause"
48
49LIC_FILES_CHKSUM = "file://LICENSE;md5=0e5cd938de1a7a53ea5adac38cc10c39 \
50                    file://GPL;md5=4325afd396febcb659c36b49533135d4 \
51                    file://LGPL;md5=2d5025d4aa3495befef8f17206a5b0a1 \
52                    file://src/modules/echo-cancel/adrian-license.txt;md5=abbab006a561fbffccedf1c3531f34ab \
53                    file://src/pulsecore/filter/LICENSE.WEBKIT;md5=49defbaffddf8c51faf606ff7fc3b1f7 \
54                    file://src/pulsecore/resampler.h;beginline=4;endline=21;md5=09794012ae16912c0270f3280cc8ff84 \
55                    file://src/modules/reserve.h;beginline=6;endline=28;md5=0e23094760367d51b6609750e9b31fbb \
56                    file://src/pulsecore/rtkit.h;beginline=6;endline=29;md5=3f00ff966716ae0817c31576d1473528 \
57                    file://src/modules/echo-cancel/adrian-aec.h;beginline=3;endline=12;md5=d3ed4fad1c073f8b06f37495dc5d1026 \
58                    file://src/pulsecore/filter/biquad.h;beginline=1;endline=4;md5=6d46d1365206528a20137355924233c1 \
59"
60
61# libtool is needed for libltdl, used in module loading.
62DEPENDS = "libatomic-ops libsndfile1 libtool"
63# optional
64DEPENDS += "udev alsa-lib glib-2.0"
65DEPENDS += "speexdsp libxml-parser-perl-native libcap"
66
67inherit bash-completion meson pkgconfig useradd gettext perlnative systemd manpages gsettings
68
69# *.desktop rules wont be generated during configure and build will fail
70# if using --disable-nls
71USE_NLS = "yes"
72
73EXTRA_OEMESON = "\
74		-Dhal-compat=false \
75		-Dorc=disabled \
76		-Daccess_group=audio \
77		-Dopenssl=disabled \
78		-Ddatabase=simple \
79		-Dzshcompletiondir=no \
80		-Dudevrulesdir=`pkg-config --variable=udevdir udev`/rules.d \
81		-Dvalgrind=disabled \
82		-Dtests=false \
83		-Drunning-from-build-tree=false \
84"
85
86# soxr (the SoX Resampler library) doesn't seem to be currently packaged in
87# oe-core nor meta-oe, so let's not add a PACKAGECONFIG entry for it for now.
88EXTRA_OEMESON += "-Dsoxr=disabled"
89
90# The FFTW dependency (for module-equalizer-sink) was removed in commit
91# ddbd713293 without explaining why it was not made a PACKAGECONFIG item
92# instead. Oh well, let's keep it disabled until someone expresses some
93# interest in having it enabled.
94EXTRA_OEMESON += "-Dfftw=disabled"
95
96# The "adrian" echo canceller implementation has a non-standard license
97# (src/modules/echo-cancel/adrian-license.txt). It's a permissive license, so
98# the licensing terms are probably not problematic, but it would be an extra
99# hassle to add the license to OE-Core's set of licenses. The canceller isn't
100# very good anyway, better alternatives exist (such as the webrtc canceller).
101EXTRA_OEMESON += "-Dadrian-aec=false"
102
103PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez5', '', d)} \
104                   ${@bb.utils.contains('DISTRO_FEATURES', 'zeroconf', 'avahi', '', d)} \
105                   ${@bb.utils.contains('DISTRO_FEATURES', '3g', 'ofono', '', d)} \
106                   ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6 systemd x11', d)} \
107                   dbus gsettings \
108                   "
109
110PACKAGECONFIG[dbus] = "-Ddbus=enabled,-Ddbus=disabled,dbus"
111PACKAGECONFIG[bluez5] = "-Dbluez5=true,-Dbluez5=false,bluez5 sbc"
112PACKAGECONFIG[gsettings] = "-Dgsettings=enabled,-Dgsettings=disabled,glib-2.0-native glib-2.0"
113PACKAGECONFIG[ofono] = "-Dbluez5-ofono-headset=true,-Dbluez5-ofono-headset=false,ofono"
114PACKAGECONFIG[gtk] = "-Dgtk=enabled,-Dgtk=disabled,gtk+3"
115PACKAGECONFIG[systemd] = "-Dsystemd=enabled -Dsystemduserunitdir=${systemd_user_unitdir},-Dsystemd=disabled,systemd"
116PACKAGECONFIG[x11] = "-Dx11=enabled,-Dx11=disabled,virtual/libx11 libxtst libice libsm libxcb"
117PACKAGECONFIG[avahi] = "-Davahi=enabled,-Davahi=disabled,avahi"
118PACKAGECONFIG[jack] = "-Djack=enabled,-Djack=disabled,jack"
119# Since many embedded systems don't have non-root users, it's useful to be
120# able to use pulseaudio autospawn for root as well.
121PACKAGECONFIG[autospawn-for-root] = ",,,"
122PACKAGECONFIG[lirc] = "-Dlirc=enabled,-Dlirc=disabled,lirc"
123PACKAGECONFIG[webrtc] = "-Dwebrtc-aec=enabled,-Dwebrtc-aec=disabled,webrtc-audio-processing"
124PACKAGECONFIG[ipv6] = "-Dipv6=true,-Dipv6=false,"
125PACKAGECONFIG[manpages] = "-Dman=true,-Dman=false,"
126
127export TARGET_PFPU = "${TARGET_FPU}"
128
129set_cfg_value () {
130	sed -i -e "s/\(; *\)\?$2 =.*/$2 = $3/" "$1"
131	if ! grep -q "^$2 = $3\$" "$1"; then
132		die "Use of sed to set '$2' to '$3' in '$1' failed"
133	fi
134}
135
136do_compile:append () {
137	if ${@bb.utils.contains('PACKAGECONFIG', 'autospawn-for-root', 'true', 'false', d)}; then
138		set_cfg_value src/pulse/client.conf allow-autospawn-for-root yes
139	fi
140}
141
142do_install:append() {
143	install -d ${D}${sysconfdir}/default/volatiles
144	install -m 0644 ${WORKDIR}/volatiles.04_pulse  ${D}${sysconfdir}/default/volatiles/04_pulse
145}
146
147USERADD_PACKAGES = "pulseaudio-server"
148GROUPADD_PARAM:pulseaudio-server = "--system pulse"
149USERADD_PARAM:pulseaudio-server = "--system --home /var/run/pulse \
150                              --no-create-home --shell /bin/false \
151                              --groups audio,pulse --gid pulse pulse"
152
153PACKAGES =+ "\
154             libpulse \
155             libpulse-mainloop-glib \
156             libpulse-simple \
157             libpulsecommon \
158             libpulsecore \
159             ${PN}-pa-info \
160             ${PN}-server \
161             ${PN}-misc \
162             "
163
164# The console-kit module is included here explicitly so bitbake can map to the
165# RDEPENDS we define for it in this recipe, and thereby ensure that when
166# adding the console-kit module to an image, we also get the necessary
167# consolekit package produced.
168PACKAGES =+ "${@bb.utils.contains('PACKAGECONFIG', 'dbus', 'pulseaudio-module-console-kit', '', d)}"
169
170#upgrade path:
171RREPLACES:pulseaudio-server = "libpulse-bin libpulse-conf"
172
173PACKAGES_DYNAMIC += "^pulseaudio-lib-.* ^pulseaudio-module-.*"
174
175FILES:libpulsecore = "${libdir}/pulseaudio/libpulsecore*.so"
176FILES:libpulsecommon = "${libdir}/pulseaudio/libpulsecommon*.so"
177
178# client.conf configures the behaviour of libpulse, so it belongs in the same
179# package.
180FILES:libpulse = "${libdir}/libpulse.so.* ${sysconfdir}/pulse/client.conf"
181
182FILES:libpulse-simple = "${libdir}/libpulse-simple.so.*"
183FILES:libpulse-mainloop-glib = "${libdir}/libpulse-mainloop-glib.so.*"
184
185FILES:${PN}-dev += "${libdir}/pulse-${PV}/modules/*.la ${datadir}/vala"
186FILES:${PN}-bin += "${sysconfdir}/default/volatiles/04_pulse"
187FILES:${PN}-pa-info = "${bindir}/pa-info"
188FILES:${PN}-server = "${bindir}/pulseaudio ${bindir}/start-* ${sysconfdir} ${bindir}/pactl */udev/rules.d/*.rules */*/udev/rules.d/*.rules ${systemd_user_unitdir}/*"
189
190#SYSTEMD_PACKAGES = "${PN}-server"
191SYSTEMD_SERVICE:${PN}-server = "pulseaudio.service"
192
193FILES:${PN}-misc = "${bindir}/* ${libdir}/pulseaudio/libpulsedsp.so"
194
195# Allow the pulseaudio package to be created empty as a placeholder (-dbg and -dev depend on it)
196FILES:${PN} = ""
197ALLOW_EMPTY:${PN} = "1"
198
199CONFFILES:libpulse = "${sysconfdir}/pulse/client.conf"
200
201CONFFILES:pulseaudio-server = "\
202  ${sysconfdir}/pulse/default.pa \
203  ${sysconfdir}/pulse/daemon.conf \
204  ${sysconfdir}/pulse/system.pa \
205  "
206
207pkg_postinst:${PN}-server() {
208        if [ -z "$D" ] && [ -e ${sysconfdir}/init.d/populate-volatile.sh ] ; then
209            ${sysconfdir}/init.d/populate-volatile.sh update
210        fi
211}
212
213python populate_packages:prepend() {
214    plugindir = d.expand('${libdir}/pulse-${PV}/modules/')
215    do_split_packages(d, plugindir, r'^module-(.*)\.so$', '${PN}-module-%s', 'PulseAudio module for %s', extra_depends='', prepend=True)
216    do_split_packages(d, plugindir, r'^lib(.*)\.so$', '${PN}-lib-%s', 'PulseAudio library for %s', extra_depends='', prepend=True)
217}
218
219# pa-info is a bash script that collects information about the audio setup.
220# It's primarily useful for attaching an information dump when reporting bugs.
221RDEPENDS:${PN}-pa-info = "\
222                          alsa-utils-amixer \
223                          alsa-utils-aplay \
224                          alsa-utils-scripts \
225                          bash \
226                          ${PN}-server \
227                          "
228
229RDEPENDS:pulseaudio-server = " \
230    pulseaudio-module-filter-apply \
231    pulseaudio-module-filter-heuristics \
232    pulseaudio-module-udev-detect \
233    pulseaudio-module-null-sink \
234    pulseaudio-module-device-restore \
235    pulseaudio-module-stream-restore \
236    pulseaudio-module-card-restore \
237    pulseaudio-module-augment-properties \
238    pulseaudio-module-detect \
239    pulseaudio-module-alsa-sink \
240    pulseaudio-module-alsa-source \
241    pulseaudio-module-alsa-card \
242    pulseaudio-module-native-protocol-unix \
243    pulseaudio-module-default-device-restore \
244    pulseaudio-module-intended-roles \
245    pulseaudio-module-rescue-streams \
246    pulseaudio-module-always-sink \
247    pulseaudio-module-suspend-on-idle \
248    pulseaudio-module-position-event-sounds \
249    pulseaudio-module-role-cork \
250    pulseaudio-module-switch-on-port-available"
251
252# If the server is installed, it's usually desirable to make ALSA applications
253# use PulseAudio. alsa-plugins-pulseaudio-conf will install the configuration
254# that makes the PulseAudio plugin the default ALSA device.
255RDEPENDS:pulseaudio-server += "alsa-plugins-pulseaudio-conf"
256
257# pulseaudio-module-console-kit is built whenever dbus is enabled by PACKAGECONFIG
258# but consolekit depends on libx11 and is available only for DISTRO with x11 in DISTRO_FEATURES
259RDEPENDS:pulseaudio-module-console-kit =+ "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'consolekit', '', d)}"
260RDEPENDS:pulseaudio-misc += "pulseaudio-module-cli-protocol-unix"
261
262FILES:${PN}-module-alsa-card += "${datadir}/pulseaudio/alsa-mixer"
263
264GSETTINGS_PACKAGE = "${@bb.utils.contains('PACKAGECONFIG', 'gsettings', '${PN}-module-gsettings', '', d)}"
265FILES:${PN}-module-gsettings += "${libexecdir}/pulse/gsettings-helper ${datadir}/GConf/gsettings ${datadir}/glib-2.0/schemas"
266
267# The console-kit module is good to have on X11 systems (it keeps PulseAudio
268# running for the duration of the user login session). The device-manager and
269# x11-* modules are referenced from the start-pulseaudio-x11 script, so those
270# modules must be installed when X11 is enabled.
271RDEPENDS:pulseaudio-server += "\
272        ${@bb.utils.contains('DISTRO_FEATURES', 'x11', '\
273                pulseaudio-module-device-manager \
274                pulseaudio-module-x11-cork-request \
275                pulseaudio-module-x11-publish \
276                pulseaudio-module-x11-xsmp \
277        ', '', d)}"
278
279RDEPENDS:pulseaudio-server += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', \
280                                  bb.utils.contains('DISTRO_FEATURES', 'systemd', 'pulseaudio-module-systemd-login', 'pulseaudio-module-console-kit', d), \
281                                  '', d)}"
282