aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/dependencies/misc.py
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/dependencies/misc.py')
-rw-r--r--mesonbuild/dependencies/misc.py130
1 files changed, 50 insertions, 80 deletions
diff --git a/mesonbuild/dependencies/misc.py b/mesonbuild/dependencies/misc.py
index 745dff0..78ce51b 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
@@ -37,7 +38,6 @@ class MPIDependency(ExternalDependency):
def __init__(self, environment, kwargs):
language = kwargs.get('language', 'c')
super().__init__('mpi', environment, language, kwargs)
- required = kwargs.pop('required', True)
kwargs['required'] = False
kwargs['silent'] = True
self.is_found = False
@@ -103,13 +103,6 @@ class MPIDependency(ExternalDependency):
self.is_found = True
self.version, self.compile_args, self.link_args = result
- if self.is_found:
- mlog.log('Dependency', mlog.bold(self.name), 'for', self.language, 'found:', mlog.green('YES'), self.version)
- else:
- mlog.log('Dependency', mlog.bold(self.name), 'for', self.language, 'found:', mlog.red('NO'))
- if required:
- raise DependencyException('MPI dependency {!r} not found'.format(self.name))
-
def _filter_compile_args(self, args):
"""
MPI wrappers return a bunch of garbage args.
@@ -267,10 +260,6 @@ class OpenMPDependency(ExternalDependency):
self.is_found = True
else:
mlog.log(mlog.yellow('WARNING:'), 'OpenMP found but omp.h missing.')
- if self.is_found:
- mlog.log('Dependency', mlog.bold(self.name), 'found:', mlog.green('YES'), self.version)
- else:
- mlog.log('Dependency', mlog.bold(self.name), 'found:', mlog.red('NO'))
def need_openmp(self):
return True
@@ -326,10 +315,6 @@ class Python3Dependency(ExternalDependency):
self.compile_args = fw.get_compile_args()
self.link_args = fw.get_link_args()
self.is_found = True
- if self.is_found:
- mlog.log('Dependency', mlog.bold(self.name), 'found:', mlog.green('YES'))
- else:
- mlog.log('Dependency', mlog.bold(self.name), 'found:', mlog.red('NO'))
@staticmethod
def get_windows_python_arch():
@@ -436,33 +421,29 @@ 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',
+ PcapDependency.tool_finish_init))
+
+ return candidates
+
+ @staticmethod
+ def tool_finish_init(ctdep):
+ ctdep.compile_args = ctdep.get_config_value(['--cflags'], 'compile_args')
+ ctdep.link_args = ctdep.get_config_value(['--libs'], 'link_args')
+ ctdep.version = PcapDependency.get_pcap_lib_version(ctdep)
@staticmethod
def get_methods():
- if mesonlib.is_osx():
- return [DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL, DependencyMethods.EXTRAFRAMEWORK]
- else:
- return [DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL]
+ return [DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL]
@staticmethod
def get_pcap_lib_version(ctdep):
@@ -477,32 +458,29 @@ 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', CupsDependency.tool_finish_init))
+
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 tool_finish_init(ctdep):
+ ctdep.compile_args = ctdep.get_config_value(['--cflags'], 'compile_args')
+ ctdep.link_args = ctdep.get_config_value(['--ldflags', '--libs'], 'link_args')
@staticmethod
def get_methods():
@@ -519,30 +497,22 @@ 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))
+ candidates.append(functools.partial(ConfigToolDependency.factory,
+ 'libwmf', environment, None, kwargs, ['libwmf-config'], 'libwmf-config', LibWmfDependency.tool_finish_init))
- return LibWmfDependency(environment, kwargs)
+ return candidates
+
+ @staticmethod
+ def tool_finish_init(ctdep):
+ ctdep.compile_args = ctdep.get_config_value(['--cflags'], 'compile_args')
+ ctdep.link_args = ctdep.get_config_value(['--libs'], 'link_args')
@staticmethod
def get_methods():
- if mesonlib.is_osx():
- return [DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL, DependencyMethods.EXTRAFRAMEWORK]
- else:
- return [DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL]
+ return [DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL]