diff options
-rw-r--r-- | mesonbuild/dependencies/__init__.py | 4 | ||||
-rw-r--r-- | mesonbuild/dependencies/base.py | 6 | ||||
-rw-r--r-- | mesonbuild/dependencies/boost.py | 6 | ||||
-rw-r--r-- | mesonbuild/dependencies/dev.py | 18 | ||||
-rw-r--r-- | mesonbuild/dependencies/misc.py | 45 | ||||
-rw-r--r-- | mesonbuild/modules/pkgconfig.py | 6 |
6 files changed, 42 insertions, 43 deletions
diff --git a/mesonbuild/dependencies/__init__.py b/mesonbuild/dependencies/__init__.py index 2626c24..6b91b38 100644 --- a/mesonbuild/dependencies/__init__.py +++ b/mesonbuild/dependencies/__init__.py @@ -24,7 +24,7 @@ from .dev import ValgrindDependency, gmock_factory, gtest_factory, llvm_factory from .coarrays import CoarrayDependency from .mpi import MPIDependency from .scalapack import ScalapackDependency -from .misc import (BlocksDependency, CursesDependency, OpenMPDependency, ThreadDependency, cups_factory, gpgme_factory, libgcrypt_factory, libwmf_factory, netcdf_factory, pcap_factory, python3_factory, shaderc_factory) +from .misc import (BlocksDependency, CursesDependency, OpenMPDependency, cups_factory, gpgme_factory, libgcrypt_factory, libwmf_factory, netcdf_factory, pcap_factory, python3_factory, shaderc_factory, threads_factory) from .platform import AppleFrameworks from .ui import GnuStepDependency, Qt4Dependency, Qt5Dependency, WxDependency, gl_factory, sdl2_factory, vulkan_factory @@ -51,7 +51,7 @@ packages.update({ 'netcdf': netcdf_factory, 'openmp': OpenMPDependency, 'python3': python3_factory, - 'threads': ThreadDependency, + 'threads': threads_factory, 'pcap': pcap_factory, 'cups': cups_factory, 'libwmf': libwmf_factory, diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py index b6c6f19..c38786b 100644 --- a/mesonbuild/dependencies/base.py +++ b/mesonbuild/dependencies/base.py @@ -195,8 +195,8 @@ class Dependency: return True return False - def _add_sub_dependency(self, dep_type: T.Type['Dependency'], env: Environment, - kwargs: T.Dict[str, T.Any], *, + def _add_sub_dependency(self, dep_type: T.Type['Dependency'], name: str, + env: Environment, kwargs: T.Dict[str, T.Any], *, method: DependencyMethods = DependencyMethods.AUTO) -> None: """Add an internal dependency of of the given type. @@ -207,7 +207,7 @@ class Dependency: """ kwargs = kwargs.copy() kwargs['method'] = method - self.ext_deps.append(dep_type(env, kwargs)) + self.ext_deps.append(dep_type(name, env, kwargs)) def get_variable(self, *, cmake: T.Optional[str] = None, pkgconfig: T.Optional[str] = None, configtool: T.Optional[str] = None, internal: T.Optional[str] = None, diff --git a/mesonbuild/dependencies/boost.py b/mesonbuild/dependencies/boost.py index 0f7216f..6054313 100644 --- a/mesonbuild/dependencies/boost.py +++ b/mesonbuild/dependencies/boost.py @@ -22,7 +22,7 @@ from .. import mesonlib from ..environment import detect_cpu_family from .base import (DependencyException, ExternalDependency) -from .misc import ThreadDependency +from .misc import threads_factory # On windows 3 directory layouts are supported: # * The default layout (versioned) installed: @@ -105,7 +105,9 @@ class BoostDependency(ExternalDependency): self.requested_modules = self.get_requested(kwargs) if 'thread' in self.requested_modules: - self._add_sub_dependency(ThreadDependency, environment, kwargs) + if not self._add_sub_dependency2(threads_factory(environment, self.for_machine, {})): + self.is_found = False + return self.boost_root = None self.boost_roots = [] diff --git a/mesonbuild/dependencies/dev.py b/mesonbuild/dependencies/dev.py index 649975a..9bd6e4f 100644 --- a/mesonbuild/dependencies/dev.py +++ b/mesonbuild/dependencies/dev.py @@ -27,7 +27,7 @@ from .base import ( DependencyException, DependencyMethods, ExternalDependency, PkgConfigDependency, strip_system_libdirs, ConfigToolDependency, CMakeDependency, DependencyFactory, ) -from .misc import ThreadDependency +from .misc import threads_factory if T.TYPE_CHECKING: from .. environment import Environment @@ -50,8 +50,10 @@ class GTestDependencySystem(ExternalDependency): super().__init__(name, environment, kwargs, language='cpp') self.main = kwargs.get('main', False) self.src_dirs = ['/usr/src/gtest/src', '/usr/src/googletest/googletest/src'] + if not self._add_sub_dependency2(threads_factory(environment, self.for_machine, {})): + self.is_found = False + return self.detect() - self._add_sub_dependency(ThreadDependency, environment, kwargs) def detect(self): gtest_detect = self.clib_compiler.find_library("gtest", self.env, []) @@ -117,7 +119,9 @@ class GMockDependencySystem(ExternalDependency): def __init__(self, name: str, environment, kwargs): super().__init__(name, environment, kwargs, language='cpp') self.main = kwargs.get('main', False) - self._add_sub_dependency(ThreadDependency, environment, kwargs) + if not self._add_sub_dependency2(threads_factory(environment, self.for_machine, {})): + self.is_found = False + return # If we are getting main() from GMock, we definitely # want to avoid linking in main() from GTest @@ -231,7 +235,9 @@ class LLVMDependencyConfigTool(ConfigToolDependency): self._set_old_link_args() self.link_args = strip_system_libdirs(environment, self.for_machine, self.link_args) self.link_args = self.__fix_bogus_link_args(self.link_args) - self._add_sub_dependency(ThreadDependency, environment, kwargs) + if not self._add_sub_dependency2(threads_factory(environment, self.for_machine, {})): + self.is_found = False + return def __fix_bogus_link_args(self, args): """This function attempts to fix bogus link arguments that llvm-config @@ -394,7 +400,9 @@ class LLVMDependencyCMake(CMakeDependency): defs = self.traceparser.get_cmake_var('PACKAGE_DEFINITIONS') temp = ['-I' + x for x in inc_dirs] + defs self.compile_args += [x for x in temp if x not in self.compile_args] - self._add_sub_dependency(ThreadDependency, env, kwargs) + if not self._add_sub_dependency2(threads_factory(env, self.for_machine, {})): + self.is_found = False + return def _main_cmake_file(self) -> str: # Use a custom CMakeLists.txt for LLVM diff --git a/mesonbuild/dependencies/misc.py b/mesonbuild/dependencies/misc.py index 6a05ef1..7eba808 100644 --- a/mesonbuild/dependencies/misc.py +++ b/mesonbuild/dependencies/misc.py @@ -105,33 +105,17 @@ class OpenMPDependency(ExternalDependency): class ThreadDependency(ExternalDependency): - def __init__(self, environment, kwargs): - super().__init__('threads', environment, kwargs) - self.name = 'threads' - self.is_found = False - methods = listify(self.methods) - if DependencyMethods.AUTO in methods: - self.is_found = True - # Happens if you are using a language with threads - # concept without C, such as plain Cuda. - if self.clib_compiler is None: - self.compile_args = [] - self.link_args = [] - else: - self.compile_args = self.clib_compiler.thread_flags(environment) - self.link_args = self.clib_compiler.thread_link_flags(environment) - return - - if DependencyMethods.CMAKE in methods: - # for unit tests and for those who simply want - # dependency('threads', method: 'cmake') - cmakedep = CMakeDependency('Threads', environment, kwargs) - if cmakedep.found(): - self.compile_args = cmakedep.get_compile_args() - self.link_args = cmakedep.get_link_args() - self.version = cmakedep.get_version() - self.is_found = True - return + def __init__(self, name: str, environment, kwargs): + super().__init__(name, environment, kwargs) + self.is_found = True + # Happens if you are using a language with threads + # concept without C, such as plain Cuda. + if self.clib_compiler is None: + self.compile_args = [] + self.link_args = [] + else: + self.compile_args = self.clib_compiler.thread_flags(environment) + self.link_args = self.clib_compiler.thread_link_flags(environment) @staticmethod def get_methods(): @@ -508,3 +492,10 @@ python3_factory = DependencyFactory( # Python 3 will always be in /Library extra_kwargs={'paths': ['/Library/Frameworks']}, ) + +threads_factory = DependencyFactory( + 'threads', + [DependencyMethods.SYSTEM, DependencyMethods.CMAKE], + cmake_name='Threads', + system_class=ThreadDependency, +) diff --git a/mesonbuild/modules/pkgconfig.py b/mesonbuild/modules/pkgconfig.py index dc45a5b..2341bd2 100644 --- a/mesonbuild/modules/pkgconfig.py +++ b/mesonbuild/modules/pkgconfig.py @@ -17,6 +17,7 @@ from pathlib import PurePath from .. import build from .. import dependencies +from ..dependencies.misc import ThreadDependency from .. import mesonlib from .. import mlog from . import ModuleReturnValue @@ -94,7 +95,7 @@ class DependenciesHelper: self.add_version_reqs(name, version_req) elif isinstance(obj, dependencies.Dependency) and not obj.found(): pass - elif isinstance(obj, dependencies.ThreadDependency): + elif isinstance(obj, ThreadDependency): pass else: raise mesonlib.MesonException('requires argument not a string, ' @@ -125,9 +126,6 @@ class DependenciesHelper: if obj.found(): processed_reqs.append(obj.name) self.add_version_reqs(obj.name, obj.version_reqs) - elif isinstance(obj, dependencies.ThreadDependency): - processed_libs += obj.get_compiler().thread_link_flags(obj.env) - processed_cflags += obj.get_compiler().thread_flags(obj.env) elif isinstance(obj, dependencies.InternalDependency): if obj.found(): processed_libs += obj.get_link_args() |