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