From fd4828bafe613eec33e8f3faef5ab5181a73c8b6 Mon Sep 17 00:00:00 2001 From: Nirbheek Chauhan Date: Wed, 18 Oct 2023 14:19:44 +0530 Subject: [PATCH] meson: Add a top-level option to enable webrtc There are a bunch of plugins that you need for webrtc support, and it's not obvious at all to users which those are. With this commit, srtp, sctp and dtls options will be auto-enabled if the webrtc option is enabled. Requires meson 1.1 Part-of: --- meson.build | 2 +- meson_options.txt | 1 + subprojects/gst-plugins-bad/ext/dtls/meson.build | 5 +++-- subprojects/gst-plugins-bad/ext/sctp/meson.build | 7 ++++--- subprojects/gst-plugins-bad/ext/srtp/meson.build | 5 +++-- subprojects/gst-plugins-bad/meson.build | 2 +- subprojects/gst-plugins-bad/meson_options.txt | 2 +- 7 files changed, 14 insertions(+), 10 deletions(-) diff --git a/meson.build b/meson.build index 03e5a74643..ae5878ae4f 100644 --- a/meson.build +++ b/meson.build @@ -1,6 +1,6 @@ project('gstreamer-full', 'c', version : '1.23.0.1', - meson_version : '>= 0.63.0', + meson_version : '>= 1.1', default_options : ['buildtype=debugoptimized', # Needed due to https://github.com/mesonbuild/meson/issues/1889, # but this can cause problems in the future. Remove it diff --git a/meson_options.txt b/meson_options.txt index 8b3c316abd..274274f6a5 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -57,6 +57,7 @@ option('doc', type : 'feature', value : 'disabled', description : 'Generate API option('gtk_doc', type : 'feature', value : 'disabled', description : 'Generate API documentation with gtk-doc') option('qt5', type : 'feature', value : 'auto', description : 'Qt5 toolkit support') option('qt6', type : 'feature', value : 'auto', description : 'Qt6 toolkit support') +option('webrtc', type : 'feature', value : 'auto', description : 'WebRTC support') option('package-origin', type : 'string', value : 'Unknown package origin', yield : true, description : 'package origin URL to use in plugins') diff --git a/subprojects/gst-plugins-bad/ext/dtls/meson.build b/subprojects/gst-plugins-bad/ext/dtls/meson.build index afdd8d224b..ca07da01e4 100644 --- a/subprojects/gst-plugins-bad/ext/dtls/meson.build +++ b/subprojects/gst-plugins-bad/ext/dtls/meson.build @@ -12,8 +12,9 @@ dtls_sources = [ 'gstdtlselement.c', ] -openssl_dep = dependency('openssl', version : '>= 1.0.1', required : get_option('dtls')) -libcrypto_dep = dependency('libcrypto', required : get_option('dtls')) +dtls_option = get_option('dtls').enable_if(get_option('webrtc').enabled(), error_message: 'webrtc option is enabled') +openssl_dep = dependency('openssl', version: '>= 1.0.1', required: dtls_option) +libcrypto_dep = dependency('libcrypto', required: dtls_option) if openssl_dep.found() and libcrypto_dep.found() gstdtls = library('gstdtls', diff --git a/subprojects/gst-plugins-bad/ext/sctp/meson.build b/subprojects/gst-plugins-bad/ext/sctp/meson.build index 6b3d7f249d..2b4f88a86d 100644 --- a/subprojects/gst-plugins-bad/ext/sctp/meson.build +++ b/subprojects/gst-plugins-bad/ext/sctp/meson.build @@ -5,7 +5,8 @@ sctp_sources = [ 'sctpassociation.c' ] -if get_option('sctp').disabled() +sctp_option = get_option('sctp').enable_if(get_option('webrtc').enabled(), error_message: 'webrtc option is enabled') +if sctp_option.disabled() subdir_done() endif @@ -23,7 +24,7 @@ if not get_option('sctp-internal-usrsctp').enabled() found_system_usrsctp = sctp_dep.found() and sctp_header if get_option('sctp-internal-usrsctp').disabled() and not found_system_usrsctp - if get_option('sctp').enabled() + if sctp_option.enabled() error('sctp plugin enabled but could not find libusrsctp or usrsctp.h, and internal libusrsctp disabled') else message('Could not find libusrsctp or usrsctp.h, and internal libusrsctp disabled - not building sctp plugin') @@ -37,7 +38,7 @@ if not found_system_usrsctp subdir('usrsctp') sctp_dep = usrsctp_dep sctp_header = true - if get_option('sctp').enabled() and not sctp_dep.found() + if sctp_option.enabled() and not sctp_dep.found() error('sctp plugin enabled but could not find system libusrsctp or configure internal libusrsctp') endif endif diff --git a/subprojects/gst-plugins-bad/ext/srtp/meson.build b/subprojects/gst-plugins-bad/ext/srtp/meson.build index 908ead9661..d15d58c132 100644 --- a/subprojects/gst-plugins-bad/ext/srtp/meson.build +++ b/subprojects/gst-plugins-bad/ext/srtp/meson.build @@ -7,7 +7,8 @@ srtp_sources = [ ] srtp_cargs = [] -if get_option('srtp').disabled() +srtp_option = get_option('srtp').enable_if(get_option('webrtc').enabled(), error_message: 'webrtc option is enabled') +if srtp_option.disabled() srtp_dep = dependency('', required : false) subdir_done() endif @@ -21,7 +22,7 @@ else srtp_dep = cc.find_library('srtp', required : false) endif endif -if not srtp_dep.found() and get_option('srtp').enabled() +if not srtp_dep.found() and srtp_option.enabled() error('srtp plugin enabled but libsrtp not found') endif diff --git a/subprojects/gst-plugins-bad/meson.build b/subprojects/gst-plugins-bad/meson.build index 9852206ec4..d2833182c2 100644 --- a/subprojects/gst-plugins-bad/meson.build +++ b/subprojects/gst-plugins-bad/meson.build @@ -1,6 +1,6 @@ project('gst-plugins-bad', 'c', 'cpp', version : '1.23.0.1', - meson_version : '>= 0.62', + meson_version : '>= 1.1', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) diff --git a/subprojects/gst-plugins-bad/meson_options.txt b/subprojects/gst-plugins-bad/meson_options.txt index 05f5115bc7..a799b6b388 100644 --- a/subprojects/gst-plugins-bad/meson_options.txt +++ b/subprojects/gst-plugins-bad/meson_options.txt @@ -180,7 +180,7 @@ option('vulkan', type : 'feature', value : 'auto', description : 'Vulkan video s option('wasapi', type : 'feature', value : 'auto', description : 'Windows Audio Session API source/sink plugin') option('wasapi2', type : 'feature', value : 'auto', description : 'Windows Audio Session API source/sink plugin with WinRT API') option('webp', type : 'feature', value : 'auto', description : 'WebP image codec plugin') -option('webrtc', type : 'feature', value : 'auto', description : 'WebRTC audio/video network bin plugin') +option('webrtc', type : 'feature', value : 'auto', yield: true, description : 'WebRTC audio/video network bin plugin') option('webrtcdsp', type : 'feature', value : 'auto', description : 'Plugin with various audio filters provided by the WebRTC audio processing library') option('wildmidi', type : 'feature', value : 'auto', description : 'WildMidi midi soft synth plugin') option('wic', type : 'feature', value : 'auto', description : 'Windows Imaging Component plugin')