meson: Add a new option to control the source for orc
authorNirbheek Chauhan <nirbheek@centricular.com>
Wed, 21 Sep 2022 16:18:31 +0000 (21:48 +0530)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Thu, 22 Sep 2022 22:31:21 +0000 (22:31 +0000)
Previously we were unconditionally cloning the orc subproject because
we want the developer environment to use the latest orc. However, some
people want to use the system orc instead, or want to auto-detect
which to use, with the system orc getting preference. This requires
adding a new option to select that. See discussion at:
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2556

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1282

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3062>

meson.build
meson_options.txt
subprojects/orc.wrap

index 47567e6..5922429 100644 (file)
@@ -119,7 +119,19 @@ elif build_system == 'darwin'
   subproject('macos-bison-binary')
 endif
 
-orc_subproject = subproject('orc', required: get_option('orc'))
+orc_option = get_option('orc')
+# There is a check below to keep this in sync with subprojects/gst-plugins-base/meson.build
+orc_req = '>= 0.4.24'
+orc_source_option = get_option('orc-source')
+orc_subproject = disabler()
+if orc_option.allowed()
+  if orc_source_option == 'subproject'
+    orc_subproject = subproject('orc', required: orc_option)
+  else
+    dependency('orc-0.4', version: orc_req, required: orc_option,
+               allow_fallback: orc_source_option == 'auto')
+  endif
+endif
 
 foreach custom_subproj: get_option('custom_subprojects').split(',')
     if custom_subproj != ''
@@ -157,6 +169,14 @@ foreach sp : subprojects
     subproj = subproject(project_name, required: is_required, default_options: default_options)
   endif
 
+  if project_name == 'gst-plugins-base'
+    gst_base_orc_req = subproj.get_variable('orc_req', '')
+    if gst_base_orc_req != orc_req
+      error('orc_req is "@0@" but it should be "@1@" from subprojects/gst-plugins-base/meson.build'
+            .format(orc_req, gst_base_orc_req))
+    endif
+  endif
+
   if subproj.found()
     plugins = subproj.get_variable('gst_plugins', [])
     legacy_plugins = subproj.get_variable('plugins', [])
index 1896d25..49c20a0 100644 (file)
@@ -38,6 +38,7 @@ option('gst-full-device-providers', type : 'string', value : '',
   description : '''List of device providers to expose in gstreamer-full's ABI with the syntax plugin1:dp1;plugin2:dp1:dp2. By default '' will export all device provider of the enabled plugin.''')
 option('gst-full-dynamic-types', type : 'string', value : '',
   description : '''List of dynamic types to expose in gstreamer-full's ABI with the syntax plugin:dt1,dt2. By default '' will export all device provider of the enabled plugin.''')
+option('orc-source', type: 'combo', choices: ['system', 'subproject', 'auto'], value: 'subproject')
 
 # License-related feature options
 option('gpl', type: 'feature', value: 'disabled',
index c7170e5..036c82b 100644 (file)
@@ -3,3 +3,6 @@ directory=orc
 url=https://gitlab.freedesktop.org/gstreamer/orc.git
 push-url=git@gitlab.freedesktop.org:gstreamer/orc.git
 revision=8ef6d657ccc1e98476ebc5d101c6729e6b916f78
+
+[provide]
+orc-0.4 = orc_dep