aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/dependencies/base.py17
-rw-r--r--mesonbuild/dependencies/boost.py2
-rw-r--r--mesonbuild/dependencies/dev.py6
3 files changed, 21 insertions, 4 deletions
diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py
index 9664215..7a10d69 100644
--- a/mesonbuild/dependencies/base.py
+++ b/mesonbuild/dependencies/base.py
@@ -25,6 +25,7 @@ import textwrap
import platform
import itertools
import ctypes
+import typing
from typing import Any, Dict, List, Tuple
from enum import Enum
from pathlib import Path, PurePath
@@ -73,6 +74,8 @@ class Dependency:
@classmethod
def _process_method_kw(cls, kwargs):
method = kwargs.get('method', 'auto')
+ if isinstance(method, DependencyMethods):
+ return method
if method not in [e.value for e in DependencyMethods]:
raise DependencyException('method {!r} is invalid'.format(method))
method = DependencyMethods(method)
@@ -176,6 +179,20 @@ class Dependency:
"""
raise RuntimeError('Unreachable code in partial_dependency called')
+ def _add_sub_dependency(self, dep_type: typing.Type['Dependency'], env: Environment,
+ kwargs: typing.Dict[str, typing.Any], *,
+ method: DependencyMethods = DependencyMethods.AUTO) -> None:
+ """Add an internal dependency of of the given type.
+
+ This method is intended to simplify cases of adding a dependency on
+ another dependency type (such as threads). This will by default set
+ the method back to auto, but the 'method' keyword argument can be
+ used to overwrite this behavior.
+ """
+ kwargs = kwargs.copy()
+ kwargs['method'] = method
+ self.ext_deps.append(dep_type(env, kwargs))
+
class InternalDependency(Dependency):
def __init__(self, version, incdirs, compile_args, link_args, libraries, whole_libraries, sources, ext_deps):
diff --git a/mesonbuild/dependencies/boost.py b/mesonbuild/dependencies/boost.py
index f5b95f5..0de1372 100644
--- a/mesonbuild/dependencies/boost.py
+++ b/mesonbuild/dependencies/boost.py
@@ -105,7 +105,7 @@ class BoostDependency(ExternalDependency):
self.requested_modules = self.get_requested(kwargs)
if 'thread' in self.requested_modules:
- self.ext_deps.append(ThreadDependency(environment, kwargs))
+ self._add_sub_dependency(ThreadDependency, environment, kwargs)
self.boost_root = None
self.boost_roots = []
diff --git a/mesonbuild/dependencies/dev.py b/mesonbuild/dependencies/dev.py
index c911cfa..5ee85bf 100644
--- a/mesonbuild/dependencies/dev.py
+++ b/mesonbuild/dependencies/dev.py
@@ -46,7 +46,7 @@ class GTestDependency(ExternalDependency):
self.main = kwargs.get('main', False)
self.src_dirs = ['/usr/src/gtest/src', '/usr/src/googletest/googletest/src']
self.detect()
- self.ext_deps.append(ThreadDependency(environment, kwargs))
+ self._add_sub_dependency(ThreadDependency, environment, kwargs)
def detect(self):
gtest_detect = self.clib_compiler.find_library("gtest", self.env, [])
@@ -117,7 +117,7 @@ class GMockDependency(ExternalDependency):
def __init__(self, environment, kwargs):
super().__init__('gmock', environment, 'cpp', kwargs)
self.main = kwargs.get('main', False)
- self.ext_deps.append(ThreadDependency(environment, kwargs))
+ self._add_sub_dependency(ThreadDependency, environment, kwargs)
# If we are getting main() from GMock, we definitely
# want to avoid linking in main() from GTest
@@ -256,7 +256,7 @@ class LLVMDependency(ConfigToolDependency):
self._set_old_link_args()
self.link_args = strip_system_libdirs(environment, self.link_args)
self.link_args = self.__fix_bogus_link_args(self.link_args)
- self.ext_deps.append(ThreadDependency(environment, kwargs))
+ self._add_sub_dependency(ThreadDependency, environment, kwargs)
@staticmethod
def __fix_bogus_link_args(args):