pipewire/meson_options.txt

398 lines
13 KiB
Meson
Raw Normal View History

option('docdir',
type : 'string',
description : 'Directory for installing documentation to (defaults to pipewire_datadir/doc/meson.project_name() )')
option('docs',
description: 'Documentation',
type: 'feature',
value: 'disabled')
option('man',
description: 'Manual pages',
type: 'feature',
value: 'disabled')
option('examples',
description: 'Build examples',
type: 'feature',
value: 'enabled')
option('tests',
description: 'Build tests',
type: 'feature',
value: 'enabled',
yield : true)
option('installed_tests',
description: 'Install manual and automated test executables',
type: 'feature',
value: 'disabled')
option('gstreamer',
2017-11-13 20:08:29 +01:00
description: 'Build GStreamer plugins',
type: 'feature',
value: 'auto')
option('gstreamer-device-provider',
description: 'Build GStreamer device provider plugin',
type: 'feature',
value: 'auto')
meson.build: rework `systemd` related options One issues is that the `systemd-{system,user}-service` feature options do not anything without the `systemd` option. This makes it more complicated to arrive at the desired build configuration since there are 3^3 = 27 possible ways to set each of them, but if `systemd=disabled`, then the other two are just ignored. Secondly, the `systemd` option also influences whether or not libsystemd will be used or not. This is not strictly necessary, since the "systemd" and "libsystemd" pkg-config files might be split, and one might wish to disable any kind of service file generation, but use libsystemd. Solve the first issues by using the `systemd-{system,user}-service` options when looking up the "systemd" dependency for generating service files. This means that the corresponding option is in full control, no secondary options are necessary. This means that the "systemd" dependency is looked up potentially twice, but that should not be a significant issue since meson caches dependecy lookups. And solve the second issue by renaming the now unused `systemd` option to `libsystemd` and using it solely to control whether or not libsystemd will be used. Furthermore, the default value of `systemd-user-service` is set to "auto" to prevent the dependency lookup from failing on non-systemd systemd out of the box. And the journal tests in "test-support" are extended to return "skip" if `sd_journal_open()` returns `ENOSYS`, which is needed because "elogind" ships the systemd pkg-config files and headers.
2025-05-10 17:43:28 +02:00
option('libsystemd',
description: 'Enable code that depends on libsystemd',
type: 'feature',
value: 'auto')
option('logind',
description: 'Enable logind integration',
type: 'feature',
value: 'auto')
option('logind-provider',
description: 'Provider for logind integration',
type: 'combo',
choices: ['libelogind', 'libsystemd'],
value: 'libsystemd')
option('systemd-system-service',
description: 'Install systemd system service file',
type: 'feature',
value: 'disabled')
option('systemd-user-service',
meson.build: rework `systemd` related options One issues is that the `systemd-{system,user}-service` feature options do not anything without the `systemd` option. This makes it more complicated to arrive at the desired build configuration since there are 3^3 = 27 possible ways to set each of them, but if `systemd=disabled`, then the other two are just ignored. Secondly, the `systemd` option also influences whether or not libsystemd will be used or not. This is not strictly necessary, since the "systemd" and "libsystemd" pkg-config files might be split, and one might wish to disable any kind of service file generation, but use libsystemd. Solve the first issues by using the `systemd-{system,user}-service` options when looking up the "systemd" dependency for generating service files. This means that the corresponding option is in full control, no secondary options are necessary. This means that the "systemd" dependency is looked up potentially twice, but that should not be a significant issue since meson caches dependecy lookups. And solve the second issue by renaming the now unused `systemd` option to `libsystemd` and using it solely to control whether or not libsystemd will be used. Furthermore, the default value of `systemd-user-service` is set to "auto" to prevent the dependency lookup from failing on non-systemd systemd out of the box. And the journal tests in "test-support" are extended to return "skip" if `sd_journal_open()` returns `ENOSYS`, which is needed because "elogind" ships the systemd pkg-config files and headers.
2025-05-10 17:43:28 +02:00
description: 'Install systemd user service file',
type: 'feature',
meson.build: rework `systemd` related options One issues is that the `systemd-{system,user}-service` feature options do not anything without the `systemd` option. This makes it more complicated to arrive at the desired build configuration since there are 3^3 = 27 possible ways to set each of them, but if `systemd=disabled`, then the other two are just ignored. Secondly, the `systemd` option also influences whether or not libsystemd will be used or not. This is not strictly necessary, since the "systemd" and "libsystemd" pkg-config files might be split, and one might wish to disable any kind of service file generation, but use libsystemd. Solve the first issues by using the `systemd-{system,user}-service` options when looking up the "systemd" dependency for generating service files. This means that the corresponding option is in full control, no secondary options are necessary. This means that the "systemd" dependency is looked up potentially twice, but that should not be a significant issue since meson caches dependecy lookups. And solve the second issue by renaming the now unused `systemd` option to `libsystemd` and using it solely to control whether or not libsystemd will be used. Furthermore, the default value of `systemd-user-service` is set to "auto" to prevent the dependency lookup from failing on non-systemd systemd out of the box. And the journal tests in "test-support" are extended to return "skip" if `sd_journal_open()` returns `ENOSYS`, which is needed because "elogind" ships the systemd pkg-config files and headers.
2025-05-10 17:43:28 +02:00
value: 'auto')
option('selinux',
description: 'Enable SELinux integration',
type: 'feature',
value: 'auto')
option('pipewire-alsa',
description: 'Enable pipewire-alsa integration',
type: 'feature',
value: 'auto')
option('pipewire-jack',
description: 'Enable pipewire-jack integration',
type: 'feature',
value: 'enabled')
option('pipewire-v4l2',
description: 'Enable pipewire-v4l2 integration',
type: 'feature',
value: 'enabled')
option('jack-devel',
description: 'Install jack development files',
type: 'boolean',
value: false)
option('libjack-path',
description: 'Where to install the libjack.so library',
type: 'string')
option('libv4l2-path',
description: 'Where to install the libpw-v4l2.so library',
type: 'string')
option('spa-plugins',
description: 'Enable spa plugins integration',
type: 'feature',
value: 'enabled')
option('alsa',
description: 'Enable alsa spa plugin integration',
type: 'feature',
value: 'auto')
option('audiomixer',
description: 'Enable audiomixer spa plugin integration',
type: 'feature',
value: 'enabled')
option('audioconvert',
description: 'Enable audioconvert spa plugin integration',
type: 'feature',
value: 'enabled')
option('resampler-precomp-tuples',
description: 'Array of "inrate,outrate[,quality]" tuples to precompute resampler coefficients for',
type: 'array',
value: [ '32000,44100', '32000,48000', '48000,44100', '44100,48000' ])
option('bluez5',
description: 'Enable bluez5 spa plugin integration',
type: 'feature',
value: 'auto')
option('bluez5-backend-hsp-native',
description: 'Enable HSP in native backend in bluez5 spa plugin',
type: 'feature',
value: 'enabled')
option('bluez5-backend-hfp-native',
description: 'Enable HFP in native backend in bluez5 spa plugin',
type: 'feature',
value: 'enabled')
option('bluez5-backend-native-mm',
description: 'Enable ModemManager in native backend in bluez5 spa plugin',
type: 'feature',
value: 'disabled')
option('bluez5-backend-ofono',
description: 'Enable oFono HFP backend in bluez5 spa plugin (no dependency on oFono)',
type: 'feature',
value: 'enabled')
option('bluez5-backend-hsphfpd',
description: 'Enable hsphfpd backend in bluez5 spa plugin (no dependency on hsphfpd)',
type: 'feature',
value: 'enabled')
option('bluez5-codec-aptx',
description: 'Enable AptX Qualcomm open source codec implementation',
type: 'feature',
value: 'auto')
option('bluez5-codec-ldac',
description: 'Enable LDAC Sony open source codec implementation',
type: 'feature',
value: 'auto')
option('bluez5-codec-ldac-dec',
description: 'Enable LDAC Sony open source codec decoding',
type: 'feature',
value: 'auto')
option('bluez5-codec-aac',
description: 'Enable Fraunhofer FDK AAC open source codec implementation',
type: 'feature',
value: 'auto')
option('bluez5-codec-lc3plus',
description: 'Enable LC3plus open source codec implementation',
type: 'feature',
value: 'auto')
option('bluez5-codec-opus',
description: 'Enable Opus open source codec implementation',
type: 'feature',
value: 'auto')
option('bluez5-codec-lc3',
description: 'Enable LC3 open source codec implementation',
type: 'feature',
value: 'auto')
option('bluez5-codec-g722',
description: 'Enable G722 open source codec implementation',
type: 'feature',
value: 'auto')
option('bluez5-plc-spandsp',
description: 'Enable SpanDSP for packet loss concealment',
type: 'feature',
value: 'auto')
option('control',
description: 'Enable control spa plugin integration',
type: 'feature',
value: 'enabled')
option('audiotestsrc',
description: 'Enable audiotestsrc spa plugin integration',
type: 'feature',
value: 'enabled')
option('ffmpeg',
description: 'Enable ffmpeg spa plugin integration',
type: 'feature',
value: 'disabled')
option('jack',
description: 'Enable jack spa plugin integration',
type: 'feature',
value: 'auto')
option('support',
description: 'Enable support spa plugin integration',
type: 'feature',
value: 'enabled')
2019-06-18 18:01:14 +02:00
option('evl',
description: 'Enable EVL support spa plugin integration',
type: 'feature',
value: 'disabled')
option('test',
description: 'Enable test spa plugin integration',
type: 'feature',
value: 'disabled')
option('v4l2',
description: 'Enable v4l2 spa plugin integration',
type: 'feature',
value: 'auto')
option('dbus',
description: 'Enable code that depends on dbus',
type: 'feature',
value: 'enabled')
2020-04-20 12:26:50 +05:30
option('libcamera',
description: 'Enable libcamera spa plugin integration',
type: 'feature',
value: 'auto')
option('videoconvert',
description: 'Enable videoconvert spa plugin integration',
type: 'feature',
value: 'enabled')
option('videotestsrc',
description: 'Enable videotestsrc spa plugin integration',
type: 'feature',
value: 'enabled')
option('volume',
description: 'Build the legacy volume spa plugin',
type: 'feature',
value: 'disabled')
option('vulkan',
description: 'Enable vulkan spa plugin integration',
type: 'feature',
value: 'disabled')
option('pw-cat',
description: 'Build pw-cat/pw-play/pw-record',
type: 'feature',
value: 'auto')
option('pw-cat-ffmpeg',
description: 'Enable FFmpeg integration in pw-cat/pw-play/pw-record',
type: 'feature',
value: 'disabled')
option('udev',
description: 'Enable Udev integration',
type: 'feature',
value: 'auto')
option('udevrulesdir',
type : 'string',
description : 'Directory for udev rules (defaults to /lib/udev/rules.d)')
option('systemd-system-unit-dir',
type : 'string',
description : 'Directory for system systemd units (defaults to /usr/lib/systemd/system)')
option('systemd-user-unit-dir',
type : 'string',
description : 'Directory for user systemd units (defaults to /usr/lib/systemd/user)')
option('sdl2',
description: 'Enable code that depends on SDL 2',
type: 'feature',
value: 'auto')
option('sndfile',
description: 'Enable code that depends on libsndfile',
type: 'feature',
value: 'auto')
option('libmysofa',
description: 'Enable code that depends on libmysofa',
type: 'feature',
value: 'auto')
option('libpulse',
description: 'Enable code that depends on libpulse',
type: 'feature',
value: 'auto')
option('roc',
description: 'Enable code that depends on roc toolkit',
type: 'feature',
value: 'auto')
option('avahi',
description: 'Enable code that depends on avahi',
type: 'feature',
value: 'auto')
option('echo-cancel-webrtc',
description : 'Enable WebRTC-based echo canceller',
type : 'feature',
value : 'auto')
option('libusb',
description: 'Enable code that depends on libusb',
type: 'feature',
value: 'auto')
option('session-managers',
description : 'Session managers to build (can be [] for none or an absolute path)',
type : 'array',
value : ['wireplumber'])
option('raop',
description: 'Enable module for Remote Audio Output Protocol',
type: 'feature',
value: 'auto')
option('lv2',
description: 'Enable loading of LV2 plugins',
type: 'feature',
value: 'auto')
option('x11',
description: 'Enable code that depends on X11',
type: 'feature',
value: 'auto')
option('x11-xfixes',
description: 'Enable code that depends on XFixes',
type: 'feature',
value: 'auto')
option('libcanberra',
description: 'Enable code that depends on libcanberra',
type: 'feature',
value: 'auto')
option('legacy-rtkit',
description: 'Build legacy rtkit module',
type: 'boolean',
value: true)
2022-03-07 20:24:46 +01:00
option('avb',
description: 'Enable AVB code',
type: 'feature',
value: 'auto')
option('flatpak',
description: 'Enable Flatpak support',
type: 'feature',
value: 'enabled')
option('readline',
description: 'Enable code that depends on libreadline',
type: 'feature',
value: 'auto')
option('gsettings',
description: 'Enable code that depends on gsettings',
type: 'feature',
value: 'auto')
option('compress-offload',
description: 'Enable ALSA Compress-Offload support',
type: 'feature',
value: 'auto')
option('pam-defaults-install',
description: 'Install limits.d file modifying defaults for all PAM users. Only for old kernels/systemd!',
type: 'boolean',
value: false)
option('pam-memlock-default',
description : 'The default memlock value for any PAM user in kilobytes. Multiples of 64 recommended.',
type : 'integer',
min: 640,
value: 8192)
option('rlimits-install',
description: 'Install PAM limits.d file. Voids all following rlimits-* options, if false',
type: 'boolean',
value: true)
option('rlimits-match',
description : 'PAM match rule for the generated limits.d file. @<name> denotes matching a group.',
type : 'string',
value: '@pipewire')
option('rtprio-server',
description : 'PipeWire server realtime priority',
type : 'integer',
min: 11,
max: 99,
value: 88)
option('rtprio-client',
description : 'PipeWire clients realtime priority',
type : 'integer',
min: 11,
max: 99,
value: 83)
option('rlimits-rtprio',
description : 'RR and FIFO scheduler priority permitted for realtime threads of the matching user(s)',
type : 'integer',
min: 11,
max: 99,
value: 95)
option('rlimits-memlock',
description : 'kB of memory each process of the user matched by the rule can lock. Can be unlimited .',
type : 'string',
value: '4194304')
option('rlimits-nice',
description : 'Not niceness permitted for non-realtime threads of the matching user(s)',
type : 'integer',
min: -20,
max: -1,
value: -19)
2023-03-10 17:39:51 +01:00
option('opus',
description: 'Enable code that depends on opus',
type: 'feature',
value: 'auto')
2023-05-28 15:49:09 +02:00
option('libffado',
description: 'Enable code that depends on libffado',
type: 'feature',
value: 'auto')
option('gsettings-pulse-schema',
description: 'Install gsettings schema for pulseaudio',
type: 'feature',
value: 'auto')
pipewire-pulse: add snap permissions support SNAP containers have two main "audio" security rules: * audio-playback: the applications inside the container can send audio samples into a sink * audio-record: the applications inside the container can get audio samples from a source Also, old SNAP containers had the "pulseaudio" rule, which just exposed the pulseaudio socket directly, without limits. This is similar to the current Flatpak audio permissions. In the pulseaudio days, a specific pulseaudio module was used that checked the permissions given to the application and allowed or forbade access to the pulseaudio operations. With the change to pipewire, this functionality must be implemented in pipewire-pulse to guarantee the sandbox security. This patch adds support for sandboxing permissions in the pulseaudio module, and implements support for the SNAP audio security model, thus forbiding a SNAP application to record audio unless it has permissions to do so. The current code for pipewire-pulseaudio checks the permissions of the snap and adds three properties to each new client: * pipewire.snap.id: contains the Snap ID of the client. * pipewire.snap.audio.playback: its value is 'true' if the client has permission to play audio, or 'false' if not. * pipewire.snap.audio.record: its value is 'true' if the client has permission to record audio, or 'false' if not. These properties must be processed by wireplumber to add or remove access permissions to the corresponding nodes. That code is available in a separate patch: https://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/567
2023-11-22 11:26:16 +01:00
option('snap',
2023-11-22 16:47:26 +01:00
description : 'Enable Snap permissions support.',
pipewire-pulse: add snap permissions support SNAP containers have two main "audio" security rules: * audio-playback: the applications inside the container can send audio samples into a sink * audio-record: the applications inside the container can get audio samples from a source Also, old SNAP containers had the "pulseaudio" rule, which just exposed the pulseaudio socket directly, without limits. This is similar to the current Flatpak audio permissions. In the pulseaudio days, a specific pulseaudio module was used that checked the permissions given to the application and allowed or forbade access to the pulseaudio operations. With the change to pipewire, this functionality must be implemented in pipewire-pulse to guarantee the sandbox security. This patch adds support for sandboxing permissions in the pulseaudio module, and implements support for the SNAP audio security model, thus forbiding a SNAP application to record audio unless it has permissions to do so. The current code for pipewire-pulseaudio checks the permissions of the snap and adds three properties to each new client: * pipewire.snap.id: contains the Snap ID of the client. * pipewire.snap.audio.playback: its value is 'true' if the client has permission to play audio, or 'false' if not. * pipewire.snap.audio.record: its value is 'true' if the client has permission to record audio, or 'false' if not. These properties must be processed by wireplumber to add or remove access permissions to the corresponding nodes. That code is available in a separate patch: https://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/567
2023-11-22 11:26:16 +01:00
type : 'feature',
value : 'auto')
option('doc-prefix-value',
description : 'Installation prefix to show in documentation instead of the actual value.',
type : 'string',
value : '')
option('doc-sysconfdir-value',
description : 'Sysconf data directory to show in documentation instead of the actual value.',
type : 'string',
value : '')
option('ebur128',
description: 'Enable code that depends on ebur128',
type: 'feature',
value: 'auto')
option('fftw',
description: 'Enable code that depends on fftw',
type: 'feature',
value: 'auto')
option('onnxruntime',
description: 'Enable code that depends on onnxruntime',
type: 'feature',
value: 'auto')