blob: c7f3e67022e01f8d540b4d276b743ead035d795e [file] [log] [blame]
Patrick Williamsc124f4f2015-09-15 14:41:29 -05001SUMMARY = "Sound server for Linux and Unix-like operating systems"
2HOMEPAGE = "http://www.pulseaudio.org"
3AUTHOR = "Lennart Poettering"
4SECTION = "libs/multimedia"
Brad Bishop6e60e8b2018-02-01 10:27:11 -05005
6# Most of PulseAudio code is under LGPLv2.1+. There are a few exceptions:
7#
8# The "adrian" echo canceller variant has code under a non-standard permissive
9# license. See src/modules/echo-cancel/adrian-license.txt for details. This
10# recipe disables the adrian echo canceller to avoid hassle with the unusual
11# license.
12#
13# The src/modules/reserve* and src/pulsecore/rtkit* files are under the MIT
14# license.
15#
16# The src/pulsecore/filter/ directory contains code under the 3-clause BSD
17# license.
18#
Brad Bishop6e60e8b2018-02-01 10:27:11 -050019# People who distribute PulseAudio binaries need to also consider that there
20# are some dependencies to GPL libraries. LGPL code that depends on GPL
21# libraries probably becomes effectively GPL-licensed (at compile-time? or at
22# at link-time?). I'm not a lawyer, though, so I'm not sure of the exact
23# implications. The GPL dependencies only affect the server, not the client
24# library, with the exception of libdbus that affects both. These are the GPL
25# library dependencies:
26#
27# One of the resampler implementations uses libsamplerate. This recipe doesn't
28# enable that resampler, however.
29#
30# One of the database implementations uses gdbm. This recipe doesn't enable
31# that database implementation, however.
32#
33# module-lirc (enabled by PACKAGECONFIG[lirc]) uses LIRC.
34#
35# module-equalizer-sink uses FFTW. This recipe disables that, however.
36#
37# The dependency with the most complicated licensing considerations is libdbus.
38# When PACKAGECONFIG[dbus] is enabled (like it is by default), libdbus will be
39# used by both the server and the client library (libpulse). Does this affect
40# applications that use libpulse? It should be also noted that libdbus is
41# dual-licensed: either GPLv2+ or AFL-2 terms apply. Whose decision is it which
42# of the licenses apply? What a mess. Some people hold the view that libdbus is
43# a system library that is covered by the "special exception" in GPLv2's
44# section 3, and therefore libdbus's GPL license doesn't affect PulseAudio.
45LICENSE = "LGPLv2.1+ & MIT & BSD-3-Clause"
46
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080047LIC_FILES_CHKSUM = "file://LICENSE;md5=0e5cd938de1a7a53ea5adac38cc10c39 \
Patrick Williamsc0f7c042017-02-23 20:41:17 -060048 file://GPL;md5=4325afd396febcb659c36b49533135d4 \
Patrick Williamsc124f4f2015-09-15 14:41:29 -050049 file://LGPL;md5=2d5025d4aa3495befef8f17206a5b0a1 \
Brad Bishop6e60e8b2018-02-01 10:27:11 -050050 file://src/modules/echo-cancel/adrian-license.txt;md5=abbab006a561fbffccedf1c3531f34ab \
51 file://src/pulsecore/filter/LICENSE.WEBKIT;md5=49defbaffddf8c51faf606ff7fc3b1f7 \
52 file://src/pulsecore/resampler.h;beginline=4;endline=21;md5=09794012ae16912c0270f3280cc8ff84 \
53 file://src/modules/reserve.h;beginline=6;endline=28;md5=0e23094760367d51b6609750e9b31fbb \
54 file://src/pulsecore/rtkit.h;beginline=6;endline=29;md5=3f00ff966716ae0817c31576d1473528 \
Brad Bishop6e60e8b2018-02-01 10:27:11 -050055 file://src/modules/echo-cancel/adrian-aec.h;beginline=3;endline=12;md5=d3ed4fad1c073f8b06f37495dc5d1026 \
56 file://src/pulsecore/filter/biquad.h;beginline=1;endline=4;md5=6d46d1365206528a20137355924233c1 \
57"
Patrick Williamsc124f4f2015-09-15 14:41:29 -050058
Andrew Geissler82c905d2020-04-13 13:39:40 -050059DEPENDS = "libatomic-ops libsndfile1 libtool"
Patrick Williamsc124f4f2015-09-15 14:41:29 -050060# optional
Brad Bishop19323692019-04-05 15:28:33 -040061DEPENDS += "udev alsa-lib glib-2.0"
Brad Bishop6e60e8b2018-02-01 10:27:11 -050062DEPENDS += "speexdsp libxml-parser-perl-native libcap"
Patrick Williamsc124f4f2015-09-15 14:41:29 -050063
Brad Bishop96ff1982019-08-19 13:50:42 -040064inherit autotools bash-completion pkgconfig useradd gettext perlnative systemd manpages gsettings
Patrick Williamsc124f4f2015-09-15 14:41:29 -050065
Andrew Geissler82c905d2020-04-13 13:39:40 -050066# When compiling for Thumb or Thumb2, frame pointers _must_ be disabled since the
67# Thumb frame pointer in r7 clashes with pulseaudio's use of inline asm to make syscalls
68# (where r7 is used for the syscall NR). In most cases, frame pointers will be
69# disabled automatically due to the optimisation level, but append an explicit
70# -fomit-frame-pointer to handle cases where optimisation is set to -O0 or frame
71# pointers have been enabled by -fno-omit-frame-pointer earlier in CFLAGS, etc.
72CFLAGS_append_arm = " ${@bb.utils.contains('TUNE_CCARGS', '-mthumb', '-fomit-frame-pointer', '', d)}"
73
Patrick Williamsc124f4f2015-09-15 14:41:29 -050074# *.desktop rules wont be generated during configure and build will fail
75# if using --disable-nls
76USE_NLS = "yes"
77
78EXTRA_OECONF = "\
79 --disable-hal-compat \
80 --disable-orc \
81 --enable-tcpwrap=no \
82 --with-access-group=audio \
83 --disable-openssl \
Patrick Williamsc124f4f2015-09-15 14:41:29 -050084 --with-database=simple \
Patrick Williamsc124f4f2015-09-15 14:41:29 -050085 --without-zsh-completion-dir \
86 --with-udev-rules-dir=`pkg-config --variable=udevdir udev`/rules.d \
Brad Bishop19323692019-04-05 15:28:33 -040087 ac_cv_header_valgrind_memcheck_h=no \
88 --disable-tests \
89 --disable-running-from-build-tree \
Patrick Williamsc124f4f2015-09-15 14:41:29 -050090"
91
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050092# soxr (the SoX Resampler library) doesn't seem to be currently packaged in
93# oe-core nor meta-oe, so let's not add a PACKAGECONFIG entry for it for now.
94EXTRA_OECONF += "--without-soxr"
95
Brad Bishop6e60e8b2018-02-01 10:27:11 -050096# The FFTW dependency (for module-equalizer-sink) was removed in commit
97# ddbd713293 without explaining why it was not made a PACKAGECONFIG item
98# instead. Oh well, let's keep it disabled until someone expresses some
99# interest in having it enabled.
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500100EXTRA_OECONF += "--without-fftw"
101
102# The "adrian" echo canceller implementation has a non-standard license
103# (src/modules/echo-cancel/adrian-license.txt). It's a permissive license, so
104# the licensing terms are probably not problematic, but it would be an extra
105# hassle to add the license to OE-Core's set of licenses. The canceller isn't
106# very good anyway, better alternatives exist (such as the webrtc canceller).
107EXTRA_OECONF += "--disable-adrian-aec"
108
Brad Bishop96ff1982019-08-19 13:50:42 -0400109PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez5', '', d)} \
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500110 ${@bb.utils.contains('DISTRO_FEATURES', 'zeroconf', 'avahi', '', d)} \
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500111 ${@bb.utils.contains('DISTRO_FEATURES', '3g', 'ofono', '', d)} \
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500112 ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6 systemd x11', d)} \
Brad Bishop19323692019-04-05 15:28:33 -0400113 dbus gsettings \
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500114 "
115
116PACKAGECONFIG[dbus] = "--enable-dbus,--disable-dbus,dbus"
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500117PACKAGECONFIG[bluez5] = "--enable-bluez5,--disable-bluez5,bluez5 sbc"
Brad Bishop19323692019-04-05 15:28:33 -0400118PACKAGECONFIG[gconf] = "--enable-gconf,--disable-gconf,gconf"
119PACKAGECONFIG[gsettings] = "--enable-gsettings,--disable-gsettings,glib-2.0-native glib-2.0"
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500120PACKAGECONFIG[ofono] = "--enable-bluez5-ofono-headset,--disable-bluez5-ofono-headset,ofono"
121PACKAGECONFIG[gtk] = "--enable-gtk3,--disable-gtk3,gtk+3"
122PACKAGECONFIG[systemd] = "--enable-systemd-daemon --enable-systemd-login --enable-systemd-journal --with-systemduserunitdir=${systemd_user_unitdir},--disable-systemd-daemon --disable-systemd-login --disable-systemd-journal,systemd"
123PACKAGECONFIG[x11] = "--enable-x11,--disable-x11,virtual/libx11 libxtst libice libsm libxcb"
124PACKAGECONFIG[avahi] = "--enable-avahi,--disable-avahi,avahi"
125PACKAGECONFIG[jack] = "--enable-jack,--disable-jack,jack"
126# Since many embedded systems don't have non-root users, it's useful to be
127# able to use pulseaudio autospawn for root as well.
128PACKAGECONFIG[autospawn-for-root] = ",,,"
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500129PACKAGECONFIG[lirc] = "--enable-lirc,--disable-lirc,lirc"
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600130PACKAGECONFIG[webrtc] = "--enable-webrtc-aec,--disable-webrtc-aec,webrtc-audio-processing"
131PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500132PACKAGECONFIG[manpages] = "--enable-manpages, --disable-manpages, "
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500133
134EXTRA_OECONF_append_arm = "${@bb.utils.contains("TUNE_FEATURES", "neon", "", " --enable-neon-opt=no", d)}"
135EXTRA_OECONF_append_armeb = "${@bb.utils.contains("TUNE_FEATURES", "neon", "", " --enable-neon-opt=no", d)}"
136
137
138export TARGET_PFPU = "${TARGET_FPU}"
139
140# TODO: Use more fine granular version
141#OE_LT_RPATH_ALLOW=":${libdir}/pulse-0.9:"
142OE_LT_RPATH_ALLOW = "any"
143OE_LT_RPATH_ALLOW[export]="1"
144
145set_cfg_value () {
146 sed -i -e "s/\(; *\)\?$2 =.*/$2 = $3/" "$1"
147 if ! grep -q "^$2 = $3\$" "$1"; then
148 die "Use of sed to set '$2' to '$3' in '$1' failed"
149 fi
150}
151
152do_compile_append () {
153 if ${@bb.utils.contains('PACKAGECONFIG', 'autospawn-for-root', 'true', 'false', d)}; then
154 set_cfg_value src/client.conf allow-autospawn-for-root yes
155 fi
156}
157
158do_install_append() {
159 install -d ${D}${sysconfdir}/default/volatiles
160 install -m 0644 ${WORKDIR}/volatiles.04_pulse ${D}${sysconfdir}/default/volatiles/volatiles.04_pulse
161}
162
163USERADD_PACKAGES = "pulseaudio-server"
Brad Bishop316dfdd2018-06-25 12:45:53 -0400164GROUPADD_PARAM_pulseaudio-server = "--system pulse"
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500165USERADD_PARAM_pulseaudio-server = "--system --home /var/run/pulse \
166 --no-create-home --shell /bin/false \
167 --groups audio,pulse --gid pulse pulse"
168
Andrew Geissler82c905d2020-04-13 13:39:40 -0500169PACKAGES =+ "\
170 libpulse \
171 libpulse-mainloop-glib \
172 libpulse-simple \
173 libpulsecommon \
174 libpulsecore \
175 ${PN}-pa-info \
176 ${PN}-server \
177 ${PN}-misc \
178 "
179
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500180# The console-kit module is included here explicitly so bitbake can map to the
181# RDEPENDS we define for it in this recipe, and thereby ensure that when
182# adding the console-kit module to an image, we also get the necessary
183# consolekit package produced.
Andrew Geissler82c905d2020-04-13 13:39:40 -0500184PACKAGES =+ "${@bb.utils.contains('PACKAGECONFIG', 'dbus', 'pulseaudio-module-console-kit', '', d)}"
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500185
186#upgrade path:
187RREPLACES_pulseaudio-server = "libpulse-bin libpulse-conf"
188
189PACKAGES_DYNAMIC += "^pulseaudio-lib-.* ^pulseaudio-module-.*"
190
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500191FILES_libpulsecore = "${libdir}/pulseaudio/libpulsecore*.so"
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500192FILES_libpulsecommon = "${libdir}/pulseaudio/libpulsecommon*.so"
193
194# client.conf configures the behaviour of libpulse, so it belongs in the same
195# package.
196FILES_libpulse = "${libdir}/libpulse.so.* ${sysconfdir}/pulse/client.conf"
197
198FILES_libpulse-simple = "${libdir}/libpulse-simple.so.*"
199FILES_libpulse-mainloop-glib = "${libdir}/libpulse-mainloop-glib.so.*"
200
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500201FILES_${PN}-dev += "${libdir}/pulse-${PV}/modules/*.la ${datadir}/vala ${libdir}/cmake"
202FILES_${PN}-conf = "${sysconfdir}"
203FILES_${PN}-bin += "${sysconfdir}/default/volatiles/volatiles.04_pulse"
Andrew Geissler82c905d2020-04-13 13:39:40 -0500204FILES_${PN}-pa-info = "${bindir}/pa-info"
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500205FILES_${PN}-server = "${bindir}/pulseaudio ${bindir}/start-* ${sysconfdir} ${bindir}/pactl */udev/rules.d/*.rules */*/udev/rules.d/*.rules ${systemd_user_unitdir}/*"
206
207#SYSTEMD_PACKAGES = "${PN}-server"
208SYSTEMD_SERVICE_${PN}-server = "pulseaudio.service"
209
210FILES_${PN}-misc = "${bindir}/* ${libdir}/pulseaudio/libpulsedsp.so"
211
212# Allow the pulseaudio package to be created empty as a placeholder (-dbg and -dev depend on it)
Brad Bishop19323692019-04-05 15:28:33 -0400213FILES_${PN} = ""
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500214ALLOW_EMPTY_${PN} = "1"
215
216CONFFILES_libpulse = "${sysconfdir}/pulse/client.conf"
217
218CONFFILES_pulseaudio-server = "\
219 ${sysconfdir}/pulse/default.pa \
220 ${sysconfdir}/pulse/daemon.conf \
221 ${sysconfdir}/pulse/system.pa \
222 "
223
224pkg_postinst_${PN}-server() {
225 if [ -z "$D" ] && [ -e ${sysconfdir}/init.d/populate-volatile.sh ] ; then
226 ${sysconfdir}/init.d/populate-volatile.sh update
227 fi
228}
229
230python populate_packages_prepend() {
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500231 plugindir = d.expand('${libdir}/pulse-${PV}/modules/')
Brad Bishop19323692019-04-05 15:28:33 -0400232 do_split_packages(d, plugindir, r'^module-(.*)\.so$', '${PN}-module-%s', 'PulseAudio module for %s', extra_depends='', prepend=True)
233 do_split_packages(d, plugindir, r'^lib(.*)\.so$', '${PN}-lib-%s', 'PulseAudio library for %s', extra_depends='', prepend=True)
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500234}
235
Andrew Geissler82c905d2020-04-13 13:39:40 -0500236# pa-info is a bash script that collects information about the audio setup.
237# It's primarily useful for attaching an information dump when reporting bugs.
238RDEPENDS_${PN}-pa-info = "\
239 alsa-utils-amixer \
240 alsa-utils-aplay \
241 alsa-utils-scripts \
242 bash \
243 ${PN}-server \
244 "
245
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500246RDEPENDS_pulseaudio-server = " \
247 pulseaudio-module-filter-apply \
248 pulseaudio-module-filter-heuristics \
249 pulseaudio-module-udev-detect \
250 pulseaudio-module-null-sink \
251 pulseaudio-module-device-restore \
252 pulseaudio-module-stream-restore \
253 pulseaudio-module-card-restore \
254 pulseaudio-module-augment-properties \
255 pulseaudio-module-detect \
256 pulseaudio-module-alsa-sink \
257 pulseaudio-module-alsa-source \
258 pulseaudio-module-alsa-card \
259 pulseaudio-module-native-protocol-unix \
260 pulseaudio-module-default-device-restore \
261 pulseaudio-module-intended-roles \
262 pulseaudio-module-rescue-streams \
263 pulseaudio-module-always-sink \
264 pulseaudio-module-suspend-on-idle \
265 pulseaudio-module-position-event-sounds \
266 pulseaudio-module-role-cork \
267 pulseaudio-module-switch-on-port-available"
268
269# If the server is installed, it's usually desirable to make ALSA applications
270# use PulseAudio. alsa-plugins-pulseaudio-conf will install the configuration
271# that makes the PulseAudio plugin the default ALSA device.
272RDEPENDS_pulseaudio-server += "alsa-plugins-pulseaudio-conf"
273
274# pulseaudio-module-console-kit is built whenever dbus is enabled by PACKAGECONFIG
275# but consolekit depends on libx11 and is available only for DISTRO with x11 in DISTRO_FEATURES
276RDEPENDS_pulseaudio-module-console-kit =+ "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'consolekit', '', d)}"
277RDEPENDS_pulseaudio-misc += "pulseaudio-module-cli-protocol-unix"
278
Brad Bishop19323692019-04-05 15:28:33 -0400279FILES_${PN}-module-alsa-card += "${datadir}/pulseaudio/alsa-mixer"
280FILES_${PN}-module-gconf += "${libexecdir}/pulse/gconf-helper"
281
282GSETTINGS_PACKAGE = "${@bb.utils.contains('PACKAGECONFIG', 'gsettings', '${PN}-module-gsettings', '', d)}"
283FILES_${PN}-module-gsettings += "${libexecdir}/pulse/gsettings-helper ${datadir}/GConf/gsettings ${datadir}/glib-2.0/schemas"
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500284
285# The console-kit module is good to have on X11 systems (it keeps PulseAudio
286# running for the duration of the user login session). The device-manager and
287# x11-* modules are referenced from the start-pulseaudio-x11 script, so those
288# modules must be installed when X11 is enabled.
289RDEPENDS_pulseaudio-server += "\
290 ${@bb.utils.contains('DISTRO_FEATURES', 'x11', '\
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500291 pulseaudio-module-device-manager \
292 pulseaudio-module-x11-cork-request \
293 pulseaudio-module-x11-publish \
294 pulseaudio-module-x11-xsmp \
295 ', '', d)}"
Brad Bishop08902b02019-08-20 09:16:51 -0400296
297RDEPENDS_pulseaudio-server += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', \
298 bb.utils.contains('DISTRO_FEATURES', 'systemd', 'pulseaudio-module-systemd-login', 'pulseaudio-module-console-kit', d), \
299 '', d)}"