aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2020-01-07 15:47:55 -0800
committerDylan Baker <dylan@pnwbakers.com>2020-01-29 09:11:24 -0800
commit29b6d3e63ce6b18fa159a9d36de77c4f78c8bcc9 (patch)
treed6d6c2e7f63e2ddf90540d74ace2140df47af8c5
parent8a9d6b1ed918268be9542971cd6221a4b4b0b72b (diff)
downloadmeson-29b6d3e63ce6b18fa159a9d36de77c4f78c8bcc9.zip
meson-29b6d3e63ce6b18fa159a9d36de77c4f78c8bcc9.tar.gz
meson-29b6d3e63ce6b18fa159a9d36de77c4f78c8bcc9.tar.bz2
dependencies: Use a DependencyFactory for LLVM
-rw-r--r--mesonbuild/dependencies/__init__.py7
-rw-r--r--mesonbuild/dependencies/base.py6
-rw-r--r--mesonbuild/dependencies/dev.py42
3 files changed, 24 insertions, 31 deletions
diff --git a/mesonbuild/dependencies/__init__.py b/mesonbuild/dependencies/__init__.py
index cc8817d..4393ed6 100644
--- a/mesonbuild/dependencies/__init__.py
+++ b/mesonbuild/dependencies/__init__.py
@@ -18,8 +18,9 @@ from .hdf5 import HDF5Dependency
from .base import ( # noqa: F401
Dependency, DependencyException, DependencyMethods, ExternalProgram, EmptyExternalProgram, NonExistingExternalProgram,
ExternalDependency, NotFoundDependency, ExternalLibrary, ExtraFrameworkDependency, InternalDependency,
- PkgConfigDependency, CMakeDependency, find_external_dependency, get_dep_identifier, packages, _packages_accept_language)
-from .dev import GMockDependency, GTestDependency, LLVMDependency, ValgrindDependency
+ PkgConfigDependency, CMakeDependency, find_external_dependency, get_dep_identifier, packages, _packages_accept_language,
+ DependencyFactory)
+from .dev import GMockDependency, GTestDependency, ValgrindDependency, llvm_factory
from .coarrays import CoarrayDependency
from .mpi import MPIDependency
from .scalapack import ScalapackDependency
@@ -33,7 +34,7 @@ packages.update({
# From dev:
'gtest': GTestDependency,
'gmock': GMockDependency,
- 'llvm': LLVMDependency,
+ 'llvm': llvm_factory,
'valgrind': ValgrindDependency,
'boost': BoostDependency,
diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py
index ed59be2..0596395 100644
--- a/mesonbuild/dependencies/base.py
+++ b/mesonbuild/dependencies/base.py
@@ -2212,6 +2212,7 @@ class DependencyFactory:
"""
def __init__(self, name: str, methods: T.List[DependencyMethods], *,
+ extra_kwargs: T.Optional[T.Dict[str, T.Any]] = None,
pkgconfig_name: T.Optional[str] = None,
pkgconfig_class: 'T.Type[PkgConfigDependency]' = PkgConfigDependency,
cmake_name: T.Optional[str] = None,
@@ -2224,6 +2225,7 @@ class DependencyFactory:
if DependencyMethods.CONFIG_TOOL in methods and not configtool_class:
raise DependencyException('A configtool must have a custom class')
+ self.extra_kwargs = extra_kwargs or {}
self.methods = methods
self.classes = {
# Just attach the correct name right now, either the generic name
@@ -2256,8 +2258,10 @@ class DependencyFactory:
kwargs: T.Dict[str, T.Any]) -> T.List['DependencyType']:
"""Return a list of Dependencies with the arguments already attached."""
methods = process_method_kw(self.methods, kwargs)
+ nwargs = self.extra_kwargs.copy()
+ nwargs.update(kwargs)
- return [functools.partial(self.classes[m], env, kwargs) for m in methods
+ return [functools.partial(self.classes[m], env, nwargs) for m in methods
if self._process_method(m, env, for_machine)]
diff --git a/mesonbuild/dependencies/dev.py b/mesonbuild/dependencies/dev.py
index da19e90..2cedc97 100644
--- a/mesonbuild/dependencies/dev.py
+++ b/mesonbuild/dependencies/dev.py
@@ -19,18 +19,18 @@ import functools
import glob
import os
import re
+import typing as T
from .. import mesonlib, mlog
from ..mesonlib import version_compare, stringlistify, extract_as_list, MachineChoice
from ..environment import get_llvm_tool_names
from .base import (
DependencyException, DependencyMethods, ExternalDependency, PkgConfigDependency,
- strip_system_libdirs, ConfigToolDependency, CMakeDependency, process_method_kw
+ strip_system_libdirs, ConfigToolDependency, CMakeDependency, process_method_kw,
+ DependencyFactory,
)
from .misc import ThreadDependency
-import typing as T
-
def get_shared_library_suffix(environment, for_machine: MachineChoice):
"""This is only guaranteed to work for languages that compile to machine
@@ -204,7 +204,7 @@ class LLVMDependencyConfigTool(ConfigToolDependency):
tool_name = 'llvm-config'
__cpp_blacklist = {'-DNDEBUG'}
- def __init__(self, environment, kwargs):
+ def __init__(self, name: str, environment, kwargs):
self.tools = get_llvm_tool_names('llvm-config')
# Fedora starting with Fedora 30 adds a suffix of the number
@@ -218,7 +218,7 @@ class LLVMDependencyConfigTool(ConfigToolDependency):
# It's necessary for LLVM <= 3.8 to use the C++ linker. For 3.9 and 4.0
# the C linker works fine if only using the C API.
- super().__init__('LLVM', environment, kwargs, language='cpp')
+ super().__init__(name, environment, kwargs, language='cpp')
self.provided_modules = []
self.required_modules = set()
self.module_details = []
@@ -391,10 +391,10 @@ class LLVMDependencyConfigTool(ConfigToolDependency):
return ''
class LLVMDependencyCMake(CMakeDependency):
- def __init__(self, env, kwargs):
+ def __init__(self, name: str, env, kwargs):
self.llvm_modules = stringlistify(extract_as_list(kwargs, 'modules'))
self.llvm_opt_modules = stringlistify(extract_as_list(kwargs, 'optional_modules'))
- super().__init__('LLVM', env, kwargs, language='cpp')
+ super().__init__(name, env, kwargs, language='cpp')
if self.traceparser is None:
return
@@ -433,26 +433,6 @@ class LLVMDependencyCMake(CMakeDependency):
return orig_name[0]
return module
-class LLVMDependency(ExternalDependency):
- def __init__(self, env, kwargs):
- super().__init__('LLVM', env, kwargs, language='cpp')
-
- @classmethod
- def _factory(cls, env, kwargs):
- methods = process_method_kw(cls.get_methods(), kwargs)
- candidates = []
-
- if DependencyMethods.CONFIG_TOOL in methods:
- candidates.append(functools.partial(LLVMDependencyConfigTool, env, kwargs))
-
- if DependencyMethods.CMAKE in methods:
- candidates.append(functools.partial(LLVMDependencyCMake, env, kwargs))
-
- return candidates
-
- @staticmethod
- def get_methods():
- return [DependencyMethods.CMAKE, DependencyMethods.CONFIG_TOOL]
class ValgrindDependency(PkgConfigDependency):
'''
@@ -464,3 +444,11 @@ class ValgrindDependency(PkgConfigDependency):
def get_link_args(self, **kwargs):
return []
+
+
+llvm_factory = DependencyFactory(
+ 'LLVM',
+ [DependencyMethods.CMAKE, DependencyMethods.CONFIG_TOOL],
+ cmake_class=LLVMDependencyCMake,
+ configtool_class=LLVMDependencyConfigTool,
+)