From 5bdfac8a4a34e3edec05439fa3cd5544e0515e24 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Cardona?= <remi@gentoo.org>
Date: Sun, 10 Jun 2018 10:09:16 +0200
Subject: [PATCH] Allow full control over which plugins are built

---
 meson.build             |  2 +-
 meson_options.txt       | 28 ++++++++++++++++++++-
 src/plugins/meson.build | 56 ++++++++++++++++++++++++++++++-----------
 3 files changed, 69 insertions(+), 17 deletions(-)

diff --git a/meson.build b/meson.build
index 9c4797dd..aa91ae10 100644
--- a/meson.build
+++ b/meson.build
@@ -3,7 +3,7 @@ project(
   version: '3.30.0',
   license: 'GPL2+ with exception',
   default_options: 'buildtype=debugoptimized',
-  meson_version: '>= 0.43.0'
+  meson_version: '>= 0.44.0'
 )
 
 totem_version = meson.project_version()
diff --git a/meson_options.txt b/meson_options.txt
index 3b6ff67b..6e056952 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -1,7 +1,33 @@
 option('enable-easy-codec-installation', type: 'combo', choices: ['yes', 'no', 'auto'], value: 'auto', description: 'Whether to enable easy codec installation support for GStreamer')
 option('enable-python', type: 'combo', choices: ['yes', 'no', 'auto'], value: 'auto', description: 'Enable python support')
 option('enable-vala', type: 'combo', choices: ['yes', 'no', 'auto'], value: 'auto', description: 'whether Vala plugin support is requested')
-option('with-plugins', type: 'combo', choices: ['all', 'none', 'auto'], value: 'auto', description: 'Which Totem plugins to compile (default: auto; "all", "none" and "auto" are valid)')
+option('with-plugins', type: 'array', choices: [
+  'all',
+  'auto',
+  'apple-trailers',
+  'autoload-subtitles',
+  'brasero-disc-recorder',
+  'dbusservice',
+  'gromit',
+  'im-status',
+  'lirc',
+  'media-player-keys',
+  'ontop',
+  'opensubtitles',
+  'properties',
+  'pythonconsole',
+  'recent',
+  'rotation',
+  'sample-vala',
+  'samplepython',
+  'save-file',
+  'screensaver',
+  'screenshot',
+  'skipto',
+  'variable-rate',
+  'vimeo',
+  'zeitgeist-dp'
+], value: ['auto'], description: 'Which Totem plugins to compile (default: auto; "all", "none" and "auto" are valid)')
 option('enable-nautilus', type: 'combo', choices: ['yes', 'no', 'auto'], value: 'auto', description: 'compile the nautilus plugin')
 option('with-nautilusdir', type: 'string', value: '', description: 'Installation path for Nautilus extension')
 option('enable-gtk-doc', type: 'boolean', value: false, description: 'use gtk-doc to build documentation')
diff --git a/src/plugins/meson.build b/src/plugins/meson.build
index 95af6485..289ba811 100644
--- a/src/plugins/meson.build
+++ b/src/plugins/meson.build
@@ -41,8 +41,8 @@ allowed_plugins = [
 plugins = []
 
 plugins_option = get_option('with-plugins')
-if plugins_option != 'none'
-  plugins += [
+if plugins_option.length() > 0
+  foreach plugin: [
     'apple-trailers',
     'autoload-subtitles',
     'im-status',
@@ -56,26 +56,38 @@ if plugins_option != 'none'
     'variable-rate',
     'vimeo'
   ]
+    if plugins_option.contains('all') or plugins_option.contains('auto') or plugins_option.contains(plugin)
+      plugins += plugin
+    endif
+  endforeach
 
-  plugin_error = (plugins_option == 'all')
+  if plugins_option.contains('all') or plugins_option.contains('auto') or plugins_option.contains('gromit')
+    gdk_targets = gtk_dep.get_pkgconfig_variable('targets')
+  else
+    gdk_targets = []
+  endif
 
-  gdk_targets = gtk_dep.get_pkgconfig_variable('targets')
   if gdk_targets.contains('x11')
     plugins += 'gromit'
   else
     str = 'the gromit plugin is not supported on non-X11 targets'
-    if plugin_error
+    if plugins_option.contains('all') or plugins_option.contains('gromit')
       error(str)
     endif
     message(str)
   endif
 
-  lirc_dep = dependency('lirc', required: false)
+  if plugins_option.contains('all') or plugins_option.contains('auto') or plugins_option.contains('lirc')
+    lirc_dep = dependency('lirc', required: false)
+  else
+    lirc_dep = disabler()
+  endif
+
   if lirc_dep.found() and cc.has_function('lirc_init', dependencies: lirc_dep) and cc.has_header('lirc/lirc_client.h')
     plugins += 'lirc'
   else
     str = 'you need lirc_client installed for the lirc plugin'
-    if plugin_error
+    if plugins_option.contains('all') or plugins_option.contains('lirc')
       error(str)
     endif
     message(str)
@@ -84,33 +96,38 @@ if plugins_option != 'none'
   libxml_req_version = '>= 2.6.0'
   libxml_dep = dependency('libxml-2.0', version: libxml_req_version, required: false)
   gtk_x11_dep = dependency('gtk+-x11-3.0', version: gtk_req_version, required: false)
-  if libxml_dep.found() and gtk_x11_dep.found()
+
+  if libxml_dep.found() and gtk_x11_dep.found() and (plugins_option.contains('all') or plugins_option.contains('auto') or plugins_option.contains('brasero-disc-recorder'))
     plugins += 'brasero-disc-recorder'
   else
     str = 'you need libxml-2.0 ' + libxml_req_version + ' and gtk+-x11-3.0 to use the brasero-disc-recorder plugin'
-    if plugin_error
+    if plugins_option.contains('all') or plugins_option.contains('brasero-disc-recorder')
       error(str)
     endif
     message(str)
   endif
 
-  if have_nautilus
+  if have_nautilus and (plugins_option.contains('all') or plugins_option.contains('auto') or plugins_option.contains('save-file'))
     plugins += 'save-file'
   else
     str = 'you need libnautilus-extension to use the save-file plugin'
-    if plugin_error
+    if plugins_option.contains('all') or plugins_option.contains('save-file')
       error(str)
     endif
     message(str)
   endif
 
   if have_python
-    plugins += [
+    foreach plugin: [
       'dbusservice',
       'opensubtitles',
       'pythonconsole',
       'samplepython'
     ]
+      if plugins_option.contains('all') or plugins_option.contains('auto') or plugins_option.contains(plugin)
+        plugins += plugin
+      endif
+    endforeach
   endif
 
   if have_vala
@@ -129,17 +146,26 @@ if plugins_option != 'none'
       '--pkg=@0@-@1@'.format(totem_gir_ns, totem_api_version)
     ]
 
-    plugins += [
+    foreach plugin: [
       'rotation',
       'sample-vala'
     ]
+      if plugins_option.contains('all') or plugins_option.contains('auto') or plugins_option.contains(plugin)
+        plugins += plugin
+      endif
+    endforeach
+
+    if plugins_option.contains('all') or plugins_option.contains('auto') or plugins_option.contains('zeitgeist-dp')
+      zeitgeist_dep = dependency('zeitgeist-2.0', version: '>= 0.9.12', required: false)
+    else
+      zeitgeist_dep = disabler()
+    endif
 
-    zeitgeist_dep = dependency('zeitgeist-2.0', version: '>= 0.9.12', required: false)
     if zeitgeist_dep.found()
       plugins += 'zeitgeist-dp'
     else
       str = 'you need zeitgeist-2.0 >= 0.9.12 to use the zeitgeist-dp plugin'
-      if plugin_error
+      if plugins_option.contains('all') or plugins_option.contains('zeitgeist-dp')
         error(str)
       endif
       message(str)
-- 
2.17.1

