aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/dependencies/misc.py
diff options
context:
space:
mode:
authorJon Turney <jon.turney@dronecode.org.uk>2018-05-31 21:23:17 +0100
committerJon Turney <jon.turney@dronecode.org.uk>2018-08-01 14:25:58 +0100
commit82bdf07a9d1ca6c62d4645a8c996975a5cef2989 (patch)
tree71c07793cc44f074b85ebf8a6caad5b51b845718 /mesonbuild/dependencies/misc.py
parent983263e82cee812b32b2863d2725027c779bf81d (diff)
downloadmeson-82bdf07a9d1ca6c62d4645a8c996975a5cef2989.zip
meson-82bdf07a9d1ca6c62d4645a8c996975a5cef2989.tar.gz
meson-82bdf07a9d1ca6c62d4645a8c996975a5cef2989.tar.bz2
Hoist trying several dependency detection methods up to find_external_dependency()
find_external_dependency() now makes and iterates over a list of callables which are constructors with bound arguments for the dependency objects we are going to attempt to make, so we can consolidate reporting on these attempts and handling failures in that function.
Diffstat (limited to 'mesonbuild/dependencies/misc.py')
-rw-r--r--mesonbuild/dependencies/misc.py100
1 files changed, 43 insertions, 57 deletions
diff --git a/mesonbuild/dependencies/misc.py b/mesonbuild/dependencies/misc.py
index 19874fc..6076433 100644
--- a/mesonbuild/dependencies/misc.py
+++ b/mesonbuild/dependencies/misc.py
@@ -14,6 +14,7 @@
# This file contains the detection logic for miscellaneous external dependencies.
+import functools
import os
import re
import shlex
@@ -436,26 +437,21 @@ class PcapDependency(ExternalDependency):
@classmethod
def _factory(cls, environment, kwargs):
methods = cls._process_method_kw(kwargs)
+ candidates = []
+
if DependencyMethods.PKGCONFIG in methods:
- try:
- pcdep = PkgConfigDependency('pcap', environment, kwargs)
- if pcdep.found():
- return pcdep
- except Exception as e:
- mlog.debug('Pcap not found via pkgconfig. Trying next, error was:', str(e))
+ candidates.append(functools.partial(PkgConfigDependency, 'pcap', environment, kwargs))
+
if DependencyMethods.CONFIG_TOOL in methods:
- try:
- ctdep = ConfigToolDependency.factory(
- 'pcap', environment, None, kwargs, ['pcap-config'], 'pcap-config')
- if ctdep.found():
- ctdep.compile_args = ctdep.get_config_value(['--cflags'], 'compile_args')
- ctdep.link_args = ctdep.get_config_value(['--libs'], 'link_args')
- ctdep.version = cls.get_pcap_lib_version(ctdep)
- return ctdep
- except Exception as e:
- mlog.debug('Pcap not found via pcap-config. Trying next, error was:', str(e))
-
- return PcapDependency(environment, kwargs)
+ candidates.append(functools.partial(ConfigToolDependency.factory,
+ 'pcap', environment, None, kwargs, ['pcap-config'], 'pcap-config'))
+# if ctdep.found():
+# ctdep.compile_args = ctdep.get_config_value(['--cflags'], 'compile_args')
+# ctdep.link_args = ctdep.get_config_value(['--libs'], 'link_args')
+# ctdep.version = cls.get_pcap_lib_version(ctdep)
+# return ctdep
+
+ return candidates
@staticmethod
def get_methods():
@@ -474,32 +470,27 @@ class CupsDependency(ExternalDependency):
@classmethod
def _factory(cls, environment, kwargs):
methods = cls._process_method_kw(kwargs)
+ candidates = []
+
if DependencyMethods.PKGCONFIG in methods:
- try:
- pcdep = PkgConfigDependency('cups', environment, kwargs)
- if pcdep.found():
- return pcdep
- except Exception as e:
- mlog.debug('cups not found via pkgconfig. Trying next, error was:', str(e))
+ candidates.append(functools.partial(PkgConfigDependency, 'cups', environment, kwargs))
+
if DependencyMethods.CONFIG_TOOL in methods:
- try:
- ctdep = ConfigToolDependency.factory(
- 'cups', environment, None, kwargs, ['cups-config'], 'cups-config')
- if ctdep.found():
- ctdep.compile_args = ctdep.get_config_value(['--cflags'], 'compile_args')
- ctdep.link_args = ctdep.get_config_value(['--ldflags', '--libs'], 'link_args')
- return ctdep
- except Exception as e:
- mlog.debug('cups not found via cups-config. Trying next, error was:', str(e))
+ candidates.append(functools.partial(ConfigToolDependency.factory,
+ 'cups', environment, None,
+ kwargs, ['cups-config'],
+ 'cups-config'))
+# if ctdep.found():
+# ctdep.compile_args = ctdep.get_config_value(['--cflags'], 'compile_args')
+# ctdep.link_args = ctdep.get_config_value(['--ldflags', '--libs'], 'link_args')
+
if DependencyMethods.EXTRAFRAMEWORK in methods:
if mesonlib.is_osx():
- fwdep = ExtraFrameworkDependency('cups', False, None, environment,
- kwargs.get('language', None), kwargs)
- if fwdep.found():
- return fwdep
- mlog.log('Dependency', mlog.bold('cups'), 'found:', mlog.red('NO'))
+ candidates.append(functools.partial(
+ ExtraFrameworkDependency, 'cups', False, None, environment,
+ kwargs.get('language', None), kwargs))
- return CupsDependency(environment, kwargs)
+ return candidates
@staticmethod
def get_methods():
@@ -516,26 +507,21 @@ class LibWmfDependency(ExternalDependency):
@classmethod
def _factory(cls, environment, kwargs):
methods = cls._process_method_kw(kwargs)
+ candidates = []
+
if DependencyMethods.PKGCONFIG in methods:
- try:
- kwargs['required'] = False
- pcdep = PkgConfigDependency('libwmf', environment, kwargs)
- if pcdep.found():
- return pcdep
- except Exception as e:
- mlog.debug('LibWmf not found via pkgconfig. Trying next, error was:', str(e))
+ candidates.append(functools.partial(PkgConfigDependency, 'libwmf', environment, kwargs))
+
if DependencyMethods.CONFIG_TOOL in methods:
- try:
- ctdep = ConfigToolDependency.factory(
- 'libwmf', environment, None, kwargs, ['libwmf-config'], 'libwmf-config')
- if ctdep.found():
- ctdep.compile_args = ctdep.get_config_value(['--cflags'], 'compile_args')
- ctdep.link_args = ctdep.get_config_value(['--libs'], 'link_args')
- return ctdep
- except Exception as e:
- mlog.debug('cups not found via libwmf-config. Trying next, error was:', str(e))
-
- return LibWmfDependency(environment, kwargs)
+ candidates.append(functools.partial(ConfigToolDependency.factory,
+ 'libwmf', environment, None, kwargs, ['libwmf-config'], 'libwmf-config'))
+
+# if ctdep.found():
+# ctdep.compile_args = ctdep.get_config_value(['--cflags'], 'compile_args')
+# ctdep.link_args = ctdep.get_config_value(['--libs'], 'link_args')
+# return ctdep
+
+ return candidates
@staticmethod
def get_methods():