summaryrefslogtreecommitdiff
path: root/media-libs/libpulse
diff options
context:
space:
mode:
Diffstat (limited to 'media-libs/libpulse')
-rw-r--r--media-libs/libpulse/Manifest5
-rw-r--r--media-libs/libpulse/files/pulseaudio-16.1-add-more-standard-samplerates.patch35
-rw-r--r--media-libs/libpulse/files/pulseaudio-16.1-fix-memblock-alignment.patch122
-rw-r--r--media-libs/libpulse/files/pulseaudio-16.1-smoother-start-paused.patch26
-rw-r--r--media-libs/libpulse/files/pulseaudio-16.1-smoother-time-calculation.patch27
-rw-r--r--media-libs/libpulse/libpulse-16.1-r3.ebuild219
6 files changed, 434 insertions, 0 deletions
diff --git a/media-libs/libpulse/Manifest b/media-libs/libpulse/Manifest
index 9c839b7f0bb5..a8c5029fb2b2 100644
--- a/media-libs/libpulse/Manifest
+++ b/media-libs/libpulse/Manifest
@@ -1,6 +1,11 @@
+AUX pulseaudio-16.1-add-more-standard-samplerates.patch 1422 BLAKE2B 2e7ec0ee8560d80414550b0fe1eb8bfa0e1c9d90668dbb6366f0b23e651f6723fcd65a87ba16caba33b632919b39742cbc6b630f2a5a86952333606858b75a29 SHA512 534862debdac1aa091cedcd8058f7b0ef1cafc5c5f9bc72a96fc065b04b4809a6aed2f119fa71bfcd9ac9011d6809901972006efb908353f8baa16621024a657
+AUX pulseaudio-16.1-fix-memblock-alignment.patch 5531 BLAKE2B 419fdd5fde012455421e5020bc00105685e65b87c972eb50676f4f5e6a58a8d0fa574c0e3d946c15ce4a6ec42e9465913e3a60742784939d85d298bc1bbdf610 SHA512 e7b948a0eee82162fb2fbb8a679e1fcedd91a8525c3528e98c990aa33370a33345dfe7fa02a529a2d4e484ce011c882e0458edd9113e20c2a652a8bb8815d175
AUX pulseaudio-16.1-memfd-cleanup.patch 988 BLAKE2B cbb25ef86099e1c13bd07c33c871b38d2d21015759569f6ed51c7f04a4997e85e3926ea573e76699d3615744ebfa3fd7cab20e3cb0a6a53f11975c0cd3314ef1 SHA512 62029ff446d005fb0d47b3c88694e0d4497321a8967802de2e915b5a885f596354310e6f5f5805cb352dbdf8a9339beca67377447a69b64c1916b4c3e6f14e31
AUX pulseaudio-16.1-proplist-util-without-gdkx.patch 1486 BLAKE2B 74b6ed59dff2ab4c62bab9e218874ff4da1d651f8ff80d715965b7be61323d77436851f6f2ffb9f8667c9ee918d6eca315fea3f6fe2670798f1ef6ed58728a3c SHA512 a5b5ac40083237ea0cd916506eb490891937affc1d69f81399a6a1f8f0782ebe9654641463ab33931add749282880ab415dbf0f89bd1a1d6a0f88f2845886d13
+AUX pulseaudio-16.1-smoother-start-paused.patch 1177 BLAKE2B 33e23e6ff9f08674550c8d349cdf2c8e50e5b203228c7b42bde0acddaa351647efda81d9ef173c2724a6a32b672a9db09075f0df2b7b567d354628e0adcd9c4b SHA512 3bcd728dc70349710f919c9990d5145100b0dae9ee496d2c4d4d8d43bd6e331a5625fe2b124d3f81326b52a072bc4f335ef24b68245518c545fa3258283a8d07
+AUX pulseaudio-16.1-smoother-time-calculation.patch 1354 BLAKE2B 2fc644c66a0329ad03ad617590811ca980b7f2cd91b7f3ed0ea7831b4ece70dced407cfa4ac09efe4d3100fc7205d08341a28c6b0e1a6870aa5fae101279c9e6 SHA512 7ead95b6325ad921ec532f086ef62007f189d3ec533c07f985f09eb1618d5f600b3ce80d0ca64c60f9eb31e3e576bb98454d619e406c46ae2ec7fc5bfbf814be
DIST pulseaudio-16.1.tar.xz 1545596 BLAKE2B 535706abcea2cae39834b23c8bdc37f71b0e633de2d8e43ea4425da97a850b57c2f980c318681cbc86cf1e746200609dad41f8b96ecf4568f86d94aa6831c9a1 SHA512 33b0b4292f05e0882f3ec822cf5720414bb34c523d80fe287b9740d6be219787c562e8024c9b0d9e2ee010771ca72c7ae4f27df1bbef9c9cb6bb6a23cbcc412f
EBUILD libpulse-16.1-r1.ebuild 5765 BLAKE2B 1d7612f22f43daee09d1a3ccc6bf1d854410d293a2bfdd9e6c60453ff39556f3e40c21e776a9ed02bf6e62a29b4d7ec5be87003f9cdf64df4e0add642be423df SHA512 558d94ef4d2cde4a9a41e364a592ecf3acca0939d2f8c2f069b502c800549cd8a9400a6a3e3ad3645fda83b48c84811ac9bf1e8d6f9a614545e1fe2d0b4e2e03
EBUILD libpulse-16.1-r2.ebuild 5880 BLAKE2B 78dbe7da864b8c36cdc5730a98260b35a58ea0beaca798f86a63f9124b71f2ee2a449cb13f5c4cc3111c5298ecc900291e9c0d457c8d765be43bdd09d7e7c315 SHA512 3bb7b39fb201c202f3b20e605e37774b525a0a78979f8a24eabd464ae0a5b8314fc9362a9f9d8a47a43f3d534ddc5a9bd39b3874f3b9cc5ea402f7f897d12a38
+EBUILD libpulse-16.1-r3.ebuild 6436 BLAKE2B a0edc7c9561fc9c99e0591fbdb1f899f01dd2459652ff2005c2fd524e08fa239781eb6122970176af6312b77af11e540a50c5a3549e515b688fba88a3dd4fe0a SHA512 f6d3d91ad35c189b66ccfc52c201e82f7513d2d84b605757a5aa894b65506916fcd570d89d86afb0f042f0a1ebcd67eb20be061e43e2b8cd331e12cc2428b849
MISC metadata.xml 859 BLAKE2B 7d292e39737f2dcfaf44c3ba84cae976f90e8cfe29ea91589f01376292d029177d2f700138879dde89bbbedb99eebce02e83171e3e168f04cf030453674e0eb5 SHA512 756bef21c1da1fb996083f1da163cc3e80f03e5d1314d00f07496aab22cece34db48c0ec950eeaabf50ea3ad08f00d85befdb97a5dd4115aa5f665040fe89310
diff --git a/media-libs/libpulse/files/pulseaudio-16.1-add-more-standard-samplerates.patch b/media-libs/libpulse/files/pulseaudio-16.1-add-more-standard-samplerates.patch
new file mode 100644
index 000000000000..e1ea200c4c4c
--- /dev/null
+++ b/media-libs/libpulse/files/pulseaudio-16.1-add-more-standard-samplerates.patch
@@ -0,0 +1,35 @@
+commit 86c5fbab5778685e19b5a4a9b8eb04ca90dff780
+Author: Igor V. Kovalenko <igor.v.kovalenko@gmail.com>
+Date: Sun Feb 5 19:49:10 2023 +0300
+
+ alsa-util: Add more standard sample rates.
+
+ Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/776>
+
+diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
+index 9f35cb20f..fd30f18bd 100644
+--- a/src/modules/alsa/alsa-util.c
++++ b/src/modules/alsa/alsa-util.c
+@@ -1430,7 +1430,8 @@ unsigned int *pa_alsa_get_supported_rates(snd_pcm_t *pcm, unsigned int fallback_
+ 32000, 44100, 48000,
+ 64000, 88200, 96000,
+ 128000, 176400, 192000,
+- 384000 };
++ 352800, 384000,
++ 705600, 768000 };
+ bool supported[PA_ELEMENTSOF(all_rates)] = { false, };
+ snd_pcm_hw_params_t *hwparams;
+ unsigned int i, j, n, *rates = NULL;
+diff --git a/src/pulse/sample.h b/src/pulse/sample.h
+index 35346a865..65c0c5d6b 100644
+--- a/src/pulse/sample.h
++++ b/src/pulse/sample.h
+@@ -128,7 +128,7 @@ PA_C_DECL_BEGIN
+ #define PA_CHANNELS_MAX 32U
+
+ /** Maximum allowed sample rate */
+-#define PA_RATE_MAX (48000U*8U)
++#define PA_RATE_MAX (48000U*16U)
+
+ /** Sample format */
+ typedef enum pa_sample_format {
diff --git a/media-libs/libpulse/files/pulseaudio-16.1-fix-memblock-alignment.patch b/media-libs/libpulse/files/pulseaudio-16.1-fix-memblock-alignment.patch
new file mode 100644
index 000000000000..b05e530ac89d
--- /dev/null
+++ b/media-libs/libpulse/files/pulseaudio-16.1-fix-memblock-alignment.patch
@@ -0,0 +1,122 @@
+commit 300db779224625144d6279d230c2daa857c967d8
+Author: Igor V. Kovalenko <igor.v.kovalenko@gmail.com>
+Date: Thu Feb 9 13:28:29 2023 +0300
+
+ pstream: Pass frame size to keep split memblock parts aligned
+
+ `pa_pstream_send_memblock()` would split incoming memblock into parts not
+ exceeding maximum pool block size.
+
+ To make sure split parts of memblock are still frame-aligned add new `align` arg
+ to `pa_pstream_send_memblock`, find out required alignment from stream sample
+ format and pass it there. Bump default alignment to 256 which is good up to
+ 32bit 64ch frames.
+
+ Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/780>
+
+diff --git a/src/modules/module-tunnel.c b/src/modules/module-tunnel.c
+index 61f427bd3..ab094ba4e 100644
+--- a/src/modules/module-tunnel.c
++++ b/src/modules/module-tunnel.c
+@@ -676,7 +676,7 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
+ * IO thread context where the rest of the messages are
+ * dispatched. Yeah, ugly, but I am a lazy bastard. */
+
+- pa_pstream_send_memblock(u->pstream, u->channel, 0, PA_SEEK_RELATIVE, chunk);
++ pa_pstream_send_memblock(u->pstream, u->channel, 0, PA_SEEK_RELATIVE, chunk, pa_frame_size(&u->sink->sample_spec));
+
+ u->receive_counter += chunk->length;
+
+diff --git a/src/pulse/stream.c b/src/pulse/stream.c
+index 0aa627396..3585b27e8 100644
+--- a/src/pulse/stream.c
++++ b/src/pulse/stream.c
+@@ -1535,7 +1535,7 @@ int pa_stream_write_ext_free(
+ s->write_memblock = NULL;
+ s->write_data = NULL;
+
+- pa_pstream_send_memblock(s->context->pstream, s->channel, offset, seek, &chunk);
++ pa_pstream_send_memblock(s->context->pstream, s->channel, offset, seek, &chunk, pa_frame_size(&s->sample_spec));
+ pa_memblock_unref(chunk.memblock);
+
+ } else {
+@@ -1569,7 +1569,7 @@ int pa_stream_write_ext_free(
+ pa_memblock_release(chunk.memblock);
+ }
+
+- pa_pstream_send_memblock(s->context->pstream, s->channel, t_offset, t_seek, &chunk);
++ pa_pstream_send_memblock(s->context->pstream, s->channel, t_offset, t_seek, &chunk, pa_frame_size(&s->sample_spec));
+
+ t_offset = 0;
+ t_seek = PA_SEEK_RELATIVE;
+diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c
+index 672182fbc..1342dee10 100644
+--- a/src/pulsecore/protocol-native.c
++++ b/src/pulsecore/protocol-native.c
+@@ -1260,7 +1260,7 @@ static void native_connection_send_memblock(pa_native_connection *c) {
+ if (schunk.length > r->buffer_attr.fragsize)
+ schunk.length = r->buffer_attr.fragsize;
+
+- pa_pstream_send_memblock(c->pstream, r->index, 0, PA_SEEK_RELATIVE, &schunk);
++ pa_pstream_send_memblock(c->pstream, r->index, 0, PA_SEEK_RELATIVE, &schunk, pa_memblockq_get_base(r->memblockq));
+
+ pa_memblockq_drop(r->memblockq, schunk.length);
+ pa_memblock_unref(schunk.memblock);
+@@ -2535,7 +2535,7 @@ static void setup_srbchannel(pa_native_connection *c, pa_mem_type_t shm_type) {
+ mc.memblock = srbt.memblock;
+ mc.index = 0;
+ mc.length = pa_memblock_get_length(srbt.memblock);
+- pa_pstream_send_memblock(c->pstream, 0, 0, 0, &mc);
++ pa_pstream_send_memblock(c->pstream, 0, 0, 0, &mc, 0);
+
+ c->srbpending = srb;
+ return;
+diff --git a/src/pulsecore/pstream.c b/src/pulsecore/pstream.c
+index 7147b776a..ff62f464b 100644
+--- a/src/pulsecore/pstream.c
++++ b/src/pulsecore/pstream.c
+@@ -82,6 +82,10 @@ typedef uint32_t pa_pstream_descriptor[PA_PSTREAM_DESCRIPTOR_MAX];
+ */
+ #define FRAME_SIZE_MAX_ALLOW (1024*1024*16)
+
++/* Default memblock alignment used with pa_pstream_send_memblock()
++ */
++#define DEFAULT_PSTREAM_MEMBLOCK_ALIGN (256)
++
+ PA_STATIC_FLIST_DECLARE(items, 0, pa_xfree);
+
+ struct item_info {
+@@ -475,7 +479,7 @@ void pa_pstream_send_packet(pa_pstream*p, pa_packet *packet, pa_cmsg_ancil_data
+ p->mainloop->defer_enable(p->defer_event, 1);
+ }
+
+-void pa_pstream_send_memblock(pa_pstream*p, uint32_t channel, int64_t offset, pa_seek_mode_t seek_mode, const pa_memchunk *chunk) {
++void pa_pstream_send_memblock(pa_pstream*p, uint32_t channel, int64_t offset, pa_seek_mode_t seek_mode, const pa_memchunk *chunk, size_t align) {
+ size_t length, idx;
+ size_t bsm;
+
+@@ -492,6 +496,11 @@ void pa_pstream_send_memblock(pa_pstream*p, uint32_t channel, int64_t offset, pa
+
+ bsm = pa_mempool_block_size_max(p->mempool);
+
++ if (align == 0)
++ align = DEFAULT_PSTREAM_MEMBLOCK_ALIGN;
++
++ bsm = (bsm / align) * align;
++
+ while (length > 0) {
+ struct item_info *i;
+ size_t n;
+diff --git a/src/pulsecore/pstream.h b/src/pulsecore/pstream.h
+index 2bff270ad..88bdca4cc 100644
+--- a/src/pulsecore/pstream.h
++++ b/src/pulsecore/pstream.h
+@@ -51,7 +51,7 @@ void pa_pstream_unlink(pa_pstream *p);
+ int pa_pstream_attach_memfd_shmid(pa_pstream *p, unsigned shm_id, int memfd_fd);
+
+ void pa_pstream_send_packet(pa_pstream*p, pa_packet *packet, pa_cmsg_ancil_data *ancil_data);
+-void pa_pstream_send_memblock(pa_pstream*p, uint32_t channel, int64_t offset, pa_seek_mode_t seek, const pa_memchunk *chunk);
++void pa_pstream_send_memblock(pa_pstream*p, uint32_t channel, int64_t offset, pa_seek_mode_t seek, const pa_memchunk *chunk, size_t align);
+ void pa_pstream_send_release(pa_pstream *p, uint32_t block_id);
+ void pa_pstream_send_revoke(pa_pstream *p, uint32_t block_id);
+
diff --git a/media-libs/libpulse/files/pulseaudio-16.1-smoother-start-paused.patch b/media-libs/libpulse/files/pulseaudio-16.1-smoother-start-paused.patch
new file mode 100644
index 000000000000..3f0acbc8f95e
--- /dev/null
+++ b/media-libs/libpulse/files/pulseaudio-16.1-smoother-start-paused.patch
@@ -0,0 +1,26 @@
+commit 8fe50bbc31e11abf2f30864f1e2dbdaa16d0e1c3
+Author: Georg Chini <georg@chini.tk>
+Date: Thu Aug 25 08:11:04 2022 +0200
+
+ time-smoother-2: Fix stream time when stream starts paused
+
+ When a stream is started but has not yet called smoother_2_put(), pa_smoother_2_get()
+ returns the time since the start of the stream even if the stream was started paused.
+ When the stream is started paused, pa_smoother_2_get() should return 0 instead. This
+ patch fixes the problem.
+
+ Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/745>
+
+diff --git a/src/pulsecore/time-smoother_2.c b/src/pulsecore/time-smoother_2.c
+index e14b52f72..ea7ec1b36 100644
+--- a/src/pulsecore/time-smoother_2.c
++++ b/src/pulsecore/time-smoother_2.c
+@@ -295,7 +295,7 @@ pa_usec_t pa_smoother_2_get(pa_smoother_2 *s, pa_usec_t time_stamp) {
+
+ /* If the smoother has not started, just return system time since resume */
+ if (!s->start_time) {
+- if (time_stamp >= s->resume_time)
++ if (time_stamp >= s->resume_time && !s->paused)
+ current_time = time_stamp - s->resume_time;
+ else
+ current_time = 0;
diff --git a/media-libs/libpulse/files/pulseaudio-16.1-smoother-time-calculation.patch b/media-libs/libpulse/files/pulseaudio-16.1-smoother-time-calculation.patch
new file mode 100644
index 000000000000..9d976e5be984
--- /dev/null
+++ b/media-libs/libpulse/files/pulseaudio-16.1-smoother-time-calculation.patch
@@ -0,0 +1,27 @@
+commit c3eae5d00cb79bd897049483126e75bb48a69cd1
+Author: flyingOwl <ofenfisch@googlemail.com>
+Date: Fri Dec 30 00:16:03 2022 +0100
+
+ time-smoother-2: Fix time calculation by comparing timestamps
+
+ This fixes the rare case of resume_time being bigger than time_stamp. Which
+ happens sometimes when a gstreamer client is quickly seeking through a
+ media file. The resulting integer underflow then causes a huge value in
+ current_time which will break the playback.
+
+ Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/764>
+
+diff --git a/src/pulsecore/time-smoother_2.c b/src/pulsecore/time-smoother_2.c
+index ea7ec1b36..46cc5e9cc 100644
+--- a/src/pulsecore/time-smoother_2.c
++++ b/src/pulsecore/time-smoother_2.c
+@@ -307,7 +307,8 @@ pa_usec_t pa_smoother_2_get(pa_smoother_2 *s, pa_usec_t time_stamp) {
+ /* If we are initializing, add the time since resume to the card time at pause_time */
+ else if (s->init) {
+ current_time += (s->pause_time - s->start_time - s->time_offset - s->fixup_time) * s->time_factor;
+- current_time += (time_stamp - s->resume_time) * s->time_factor;
++ if (time_stamp > s->resume_time)
++ current_time += (time_stamp - s->resume_time) * s->time_factor;
+
+ /* Smoother is running, calculate current sound card time */
+ } else
diff --git a/media-libs/libpulse/libpulse-16.1-r3.ebuild b/media-libs/libpulse/libpulse-16.1-r3.ebuild
new file mode 100644
index 000000000000..a67865f3948a
--- /dev/null
+++ b/media-libs/libpulse/libpulse-16.1-r3.ebuild
@@ -0,0 +1,219 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="7"
+
+MY_PV="${PV/_pre*}"
+MY_P="pulseaudio-${MY_PV}"
+inherit bash-completion-r1 flag-o-matic gnome2-utils meson-multilib optfeature systemd toolchain-funcs udev
+
+DESCRIPTION="Libraries for PulseAudio clients"
+HOMEPAGE="https://www.freedesktop.org/wiki/Software/PulseAudio/"
+
+if [[ ${PV} = 9999 ]]; then
+ inherit git-r3
+ EGIT_BRANCH="master"
+ EGIT_REPO_URI="https://gitlab.freedesktop.org/pulseaudio/pulseaudio"
+else
+ SRC_URI="https://freedesktop.org/software/pulseaudio/releases/${MY_P}.tar.xz"
+ KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86 ~amd64-linux ~x86-linux"
+fi
+
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="LGPL-2.1+"
+
+SLOT="0"
+IUSE="+asyncns dbus doc +glib gtk selinux systemd test valgrind X"
+RESTRICT="!test? ( test )"
+
+# NOTE: libpcre needed in some cases, bug #472228
+# TODO: libatomic_ops is only needed on some architectures and conditions, and then at runtime too
+RDEPEND="
+ dev-libs/libatomic_ops
+ >=media-libs/libsndfile-1.0.20[${MULTILIB_USEDEP}]
+ asyncns? ( >=net-libs/libasyncns-0.1[${MULTILIB_USEDEP}] )
+ dbus? ( >=sys-apps/dbus-1.4.12[${MULTILIB_USEDEP}] )
+ elibc_mingw? ( dev-libs/libpcre:3 )
+ glib? ( >=dev-libs/glib-2.28.0:2[${MULTILIB_USEDEP}] )
+ gtk? ( x11-libs/gtk+:3 )
+ selinux? ( sec-policy/selinux-pulseaudio )
+ systemd? ( sys-apps/systemd:= )
+ valgrind? ( dev-util/valgrind )
+ X? (
+ x11-libs/libX11[${MULTILIB_USEDEP}]
+ >=x11-libs/libxcb-1.6[${MULTILIB_USEDEP}]
+ )
+ !<media-sound/pulseaudio-15.0-r100
+"
+
+DEPEND="${RDEPEND}
+ test? ( >=dev-libs/check-0.9.10 )
+ X? ( x11-base/xorg-proto )
+"
+
+# pulseaudio ships a bundled xmltoman, which uses XML::Parser
+BDEPEND="
+ dev-lang/perl
+ dev-perl/XML-Parser
+ sys-devel/gettext
+ sys-devel/m4
+ virtual/libiconv
+ virtual/libintl
+ virtual/pkgconfig
+ doc? ( app-doc/doxygen )
+"
+PDEPEND="
+ || (
+ media-video/pipewire[sound-server(+)]
+ >=media-sound/pulseaudio-daemon-16.1-r8
+ media-sound/pulseaudio[daemon(+)]
+ )
+"
+
+DOCS=( NEWS README )
+
+# patches merged upstream, to be removed with 16.2 or later bump
+PATCHES=(
+ "${FILESDIR}"/pulseaudio-16.1-memfd-cleanup.patch
+ "${FILESDIR}"/pulseaudio-16.1-proplist-util-without-gdkx.patch
+ "${FILESDIR}"/pulseaudio-16.1-smoother-start-paused.patch
+ "${FILESDIR}"/pulseaudio-16.1-smoother-time-calculation.patch
+ "${FILESDIR}"/pulseaudio-16.1-fix-memblock-alignment.patch
+ "${FILESDIR}"/pulseaudio-16.1-add-more-standard-samplerates.patch
+)
+
+src_prepare() {
+ default
+
+ # disable autospawn by client
+ sed -i -e 's:; autospawn = yes:autospawn = no:g' src/pulse/client.conf.in || die
+
+ gnome2_environment_reset
+}
+
+multilib_src_configure() {
+ # ideally we want !tc-ld-is-bfd for best future-proofing, but it needs
+ # https://github.com/gentoo/gentoo/pull/28355
+ # mold needs this too but right now tc-ld-is-mold is also not available
+ if tc-ld-is-lld; then
+ append-ldflags -Wl,--undefined-version
+ fi
+
+ local emesonargs=(
+ --localstatedir="${EPREFIX}"/var
+
+ -Ddaemon=false
+ -Dclient=true
+ $(meson_native_use_bool doc doxygen)
+ -Dgcov=false
+ # tests involve random modules, so just do them for the native # TODO: tests should run always
+ $(meson_native_use_bool test tests)
+ -Ddatabase=simple # Not used for non-daemon, simple database avoids external dep checks
+ -Dstream-restore-clear-old-devices=true
+ -Drunning-from-build-tree=false
+
+ # Paths
+ -Dmodlibexecdir="${EPREFIX}/usr/$(get_libdir)/pulseaudio/modules" # Was $(get_libdir)/${P}
+ -Dsystemduserunitdir=$(systemd_get_userunitdir)
+ -Dudevrulesdir="${EPREFIX}$(get_udevdir)/rules.d"
+ -Dbashcompletiondir="$(get_bashcompdir)" # Alternatively DEPEND on app-shells/bash-completion for pkg-config to provide the value
+
+ # Optional features
+ -Dalsa=disabled
+ $(meson_feature asyncns)
+ -Davahi=disabled
+ -Dbluez5=disabled
+ -Dbluez5-gstreamer=disabled
+ -Dbluez5-native-headset=false
+ -Dbluez5-ofono-headset=false
+ $(meson_feature dbus)
+ -Delogind=disabled
+ -Dfftw=disabled
+ $(meson_feature glib) # WARNING: toggling this likely changes ABI
+ -Dgsettings=disabled
+ -Dgstreamer=disabled
+ $(meson_native_use_feature gtk)
+ -Dhal-compat=false
+ -Dipv6=true
+ -Djack=disabled
+ -Dlirc=disabled
+ -Dopenssl=disabled
+ -Dorc=disabled
+ -Doss-output=disabled
+ -Dsamplerate=disabled # Matches upstream
+ -Dsoxr=disabled
+ -Dspeex=disabled
+ $(meson_native_use_feature systemd)
+ -Dtcpwrap=disabled
+ -Dudev=disabled
+ $(meson_native_use_feature valgrind)
+ $(meson_feature X x11)
+
+ # Echo cancellation
+ -Dadrian-aec=false
+ -Dwebrtc-aec=disabled
+ )
+
+ if multilib_is_native_abi; then
+ # Make padsp work for non-native ABI, supposedly only possible with glibc;
+ # this is used by /usr/bin/padsp that comes from native build, thus we need
+ # this argument for native build
+ if use elibc_glibc; then
+ emesonargs+=( -Dpulsedsp-location="${EPREFIX}"'/usr/\\$$LIB/pulseaudio' )
+ fi
+ else
+ emesonargs+=( -Dman=false )
+ if ! use elibc_glibc; then
+ # Non-glibc multilib is probably non-existent but just in case:
+ ewarn "padsp wrapper for OSS emulation will only work with native ABI applications!"
+ fi
+ fi
+
+ meson_src_configure
+}
+
+multilib_src_compile() {
+ meson_src_compile
+
+ if multilib_is_native_abi; then
+ if use doc; then
+ einfo "Generating documentation ..."
+ meson_src_compile doxygen
+ fi
+ fi
+}
+
+multilib_src_install() {
+ # The files referenced in the DOCS array do not exist in the multilib source directory,
+ # therefore clear the variable when calling the function that will access it.
+ DOCS= meson_src_install
+
+ # Upstream installs 'pactl' if client is built, with all symlinks except for
+ # 'pulseaudio', 'pacmd' and 'pasuspender' which are installed if server is built.
+ # This trips QA warning, workaround:
+ # - install missing aliases in media-libs/libpulse (client build)
+ # - remove corresponding symlinks in media-sound/pulseaudio-daemonclient (server build)
+ bashcomp_alias pactl pulseaudio
+ bashcomp_alias pactl pacmd
+ bashcomp_alias pactl pasuspender
+
+ if multilib_is_native_abi; then
+ if use doc; then
+ einfo "Installing documentation ..."
+ docinto html
+ dodoc -r doxygen/html/.
+ fi
+ fi
+}
+
+multilib_src_install_all() {
+ einstalldocs
+
+ find "${ED}" \( -name '*.a' -o -name '*.la' \) -delete || die
+}
+
+pkg_postinst() {
+ optfeature_header "PulseAudio can be enhanced by installing the following:"
+ use dbus && optfeature "restricted realtime capabilities via D-Bus" sys-auth/rtkit
+}