aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/dependencies/dev.py
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 /mesonbuild/dependencies/dev.py
parent8a9d6b1ed918268be9542971cd6221a4b4b0b72b (diff)
downloadmeson-29b6d3e63ce6b18fa159a9d36de77c4f78c8bcc9.zip
meson-29b6d3e63ce6b18fa159a9d36de77c4f78c8bcc9.tar.gz
meson-29b6d3e63ce6b18fa159a9d36de77c4f78c8bcc9.tar.bz2
dependencies: Use a DependencyFactory for LLVM
Diffstat (limited to 'mesonbuild/dependencies/dev.py')
-rw-r--r--mesonbuild/dependencies/dev.py42
1 files changed, 15 insertions, 27 deletions
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,
+)