From 7ee5172ce888140f3b5e5a6d641817b268ca82e5 Mon Sep 17 00:00:00 2001 From: George Kiagiadakis Date: Wed, 16 Jun 2021 19:50:16 +0300 Subject: [PATCH] meson: integrate wireplumber as a subproject This allows building wireplumber as part of the pipewire build and running it in the uninstalled environment instead of media-session. Building each session manager is individually contolled by the options: -Dmedia-session=auto/enabled/disabled -Dwireplumber=auto/enabled/disabled And controlling which one is used in pipewire.conf is done with: -Dsession-manager=media-session/wireplumber Wireplumber's source tree must be in subprojects/wireplumber/ If this is missing, the .wrap file ensures that the latest git master is downloaded while meson configures the build. This git tree will not be automatically updated later, you need to ensure that it is up-to-date on your own. --- .gitignore | 3 +++ meson_options.txt | 17 +++++++++++++---- src/daemon/meson.build | 24 ++++++++++++++++++++++-- src/daemon/pipewire.conf.in | 4 ++-- subprojects/wireplumber.wrap | 3 +++ 5 files changed, 43 insertions(+), 8 deletions(-) create mode 100644 subprojects/wireplumber.wrap diff --git a/.gitignore b/.gitignore index 0e6ce41d7..da8784ccd 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,9 @@ cscope.out cscope.in.out cscope.po.out Makefile +subprojects/lua* +subprojects/wireplumber +subprojects/packagecache # Created by https://www.gitignore.io/api/vim diff --git a/meson_options.txt b/meson_options.txt index f47536bc2..905a0161b 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -9,10 +9,6 @@ option('examples', description: 'Build examples', type: 'feature', value: 'enabled') -option('media-session', - description: 'Build and install pipewire-media-session', - type: 'feature', - value: 'auto') option('man', description: 'Build manpages', type: 'feature', @@ -195,3 +191,16 @@ option('echo-cancel-webrtc', description : 'Enable WebRTC-based echo canceller', type : 'feature', value : 'auto') +option('media-session', + description: 'Build and install pipewire-media-session', + type: 'feature', + value: 'auto') +option('wireplumber', + description: 'Build and install wireplumber (subproject)', + type: 'feature', + value: 'auto') +option('session-manager', + description : 'Session manager to build and use in the uninstalled environment', + type : 'combo', + choices : ['media-session', 'wireplumber'], + value : 'media-session') diff --git a/src/daemon/meson.build b/src/daemon/meson.build index dd1de610e..7ed2d6242 100644 --- a/src/daemon/meson.build +++ b/src/daemon/meson.build @@ -9,13 +9,14 @@ pipewire_c_args = [ conf_config = configuration_data() conf_config.set('VERSION', '"@0@"'.format(pipewire_version)) conf_config.set('PIPEWIRE_CONFIG_DIR', pipewire_configdir) -conf_config.set('media_session_path', pipewire_bindir / 'pipewire-media-session') +conf_config.set('session_manager_path', pipewire_bindir / 'pipewire-media-session') +conf_config.set('session_manager_args', '') conf_config.set('pipewire_path', pipewire_bindir / 'pipewire') conf_config.set('pipewire_pulse_path', pipewire_bindir / 'pipewire-pulse') conf_config.set('comment', '#') conf_config_uninstalled = conf_config -conf_config_uninstalled.set('media_session_path', +conf_config_uninstalled.set('session_manager_path', meson.build_root() / 'src' / 'examples' / 'pipewire-media-session') conf_config_uninstalled.set('pipewire_path', meson.build_root() / 'src' / 'daemon' / 'pipewire') @@ -23,6 +24,25 @@ conf_config_uninstalled.set('pipewire_pulse_path', meson.build_root() / 'src' / 'daemon' / 'pipewire-pulse') conf_config_uninstalled.set('comment', '') +# Build WirePlumber if requested, and set it up in the config files +build_wp = get_option('wireplumber') +sm_choice = get_option('session-manager') + +if build_wp.disabled() and (sm_choice == 'wireplumber') + error('option to build wireplumber is disabled, ' + + 'but the requested session-manager is wireplumber') +elif build_wp.enabled() or (build_wp.auto() and (sm_choice == 'wireplumber')) + wp_proj = subproject('wireplumber', required : true) + wp_bindir = wp_proj.get_variable('wireplumber_bin_dir', pipewire_bindir) + + conf_config.set('session_manager_path', wp_bindir / 'wireplumber') + + # wp-uninstalled.sh -b path/to/wp/build/root wireplumber + conf_config_uninstalled.set('session_manager_path', + meson.source_root() / 'subprojects' / 'wireplumber' / 'wp-uninstalled.sh') + conf_config_uninstalled.set('session_manager_args', + '-b ' + meson.build_root() / 'subprojects' / 'wireplumber' + ' wireplumber') +endif conf_files = [ 'pipewire.conf', diff --git a/src/daemon/pipewire.conf.in b/src/daemon/pipewire.conf.in index bd84feeff..f326f1b30 100644 --- a/src/daemon/pipewire.conf.in +++ b/src/daemon/pipewire.conf.in @@ -130,7 +130,7 @@ context.modules = [ # access.allowed to list an array of paths of allowed # apps. #access.allowed = [ - # @media_session_path@ + # @session_manager_path@ #] # An array of rejected paths. @@ -234,7 +234,7 @@ context.exec = [ # but it is better to start it as a systemd service. # Run the session manager with -h for options. # - @comment@{ path = "@media_session_path@" args = "" } + @comment@{ path = "@session_manager_path@" args = "@session_manager_args@" } # # You can optionally start the pulseaudio-server here as well # but it is better to start it as a systemd service. diff --git a/subprojects/wireplumber.wrap b/subprojects/wireplumber.wrap new file mode 100644 index 000000000..0153b2acc --- /dev/null +++ b/subprojects/wireplumber.wrap @@ -0,0 +1,3 @@ +[wrap-git] +url = https://gitlab.freedesktop.org/pipewire/wireplumber.git +revision = head