dependencies: Use a DependencyFactory for gtest
This commit is contained in:
parent
c17fa3223f
commit
626f73416f
|
@ -20,7 +20,7 @@ from .base import ( # noqa: F401
|
|||
ExternalDependency, NotFoundDependency, ExternalLibrary, ExtraFrameworkDependency, InternalDependency,
|
||||
PkgConfigDependency, CMakeDependency, find_external_dependency, get_dep_identifier, packages, _packages_accept_language,
|
||||
DependencyFactory)
|
||||
from .dev import GMockDependency, GTestDependency, ValgrindDependency, llvm_factory
|
||||
from .dev import GMockDependency, ValgrindDependency, gtest_factory, llvm_factory
|
||||
from .coarrays import CoarrayDependency
|
||||
from .mpi import MPIDependency
|
||||
from .scalapack import ScalapackDependency
|
||||
|
@ -32,7 +32,7 @@ from .ui import GLDependency, GnuStepDependency, Qt4Dependency, Qt5Dependency, S
|
|||
|
||||
packages.update({
|
||||
# From dev:
|
||||
'gtest': GTestDependency,
|
||||
'gtest': gtest_factory,
|
||||
'gmock': GMockDependency,
|
||||
'llvm': llvm_factory,
|
||||
'valgrind': ValgrindDependency,
|
||||
|
|
|
@ -44,9 +44,9 @@ def get_shared_library_suffix(environment, for_machine: MachineChoice):
|
|||
return '.so'
|
||||
|
||||
|
||||
class GTestDependency(ExternalDependency):
|
||||
def __init__(self, environment, kwargs):
|
||||
super().__init__('gtest', environment, kwargs, language='cpp')
|
||||
class GTestDependencySystem(ExternalDependency):
|
||||
def __init__(self, name: str, environment, kwargs):
|
||||
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']
|
||||
self.detect()
|
||||
|
@ -98,25 +98,20 @@ class GTestDependency(ExternalDependency):
|
|||
def log_tried(self):
|
||||
return 'system'
|
||||
|
||||
@classmethod
|
||||
def _factory(cls, environment, kwargs):
|
||||
methods = process_method_kw(cls.get_methods(), kwargs)
|
||||
candidates = []
|
||||
|
||||
if DependencyMethods.PKGCONFIG in methods:
|
||||
pcname = 'gtest_main' if kwargs.get('main', False) else 'gtest'
|
||||
candidates.append(functools.partial(PkgConfigDependency, pcname, environment, kwargs))
|
||||
|
||||
if DependencyMethods.SYSTEM in methods:
|
||||
candidates.append(functools.partial(GTestDependency, environment, kwargs))
|
||||
|
||||
return candidates
|
||||
|
||||
@staticmethod
|
||||
def get_methods():
|
||||
return [DependencyMethods.PKGCONFIG, DependencyMethods.SYSTEM]
|
||||
|
||||
|
||||
class GTestDependencyPC(PkgConfigDependency):
|
||||
|
||||
def __init__(self, name: str, environment: 'Environment', kwargs: T.Dict[str, T.Any]):
|
||||
assert name == 'gtest'
|
||||
if kwargs.get('main'):
|
||||
name = 'gtest_main'
|
||||
super().__init__(name, environment, kwargs)
|
||||
|
||||
|
||||
class GMockDependency(ExternalDependency):
|
||||
def __init__(self, environment, kwargs):
|
||||
super().__init__('gmock', environment, kwargs, language='cpp')
|
||||
|
@ -132,11 +127,10 @@ class GMockDependency(ExternalDependency):
|
|||
# GMock without GTest is pretty much useless
|
||||
# this also mimics the structure given in WrapDB,
|
||||
# where GMock always pulls in GTest
|
||||
gtest_dep = GTestDependency(environment, gtest_kwargs)
|
||||
if not gtest_dep.is_found:
|
||||
found = self._add_sub_dependency2(gtest_factory(environment, self.for_machine, gtest_kwargs))
|
||||
if not found:
|
||||
self.is_found = False
|
||||
return
|
||||
self.ext_deps.append(gtest_dep)
|
||||
|
||||
# GMock may be a library or just source.
|
||||
# Work with both.
|
||||
|
@ -452,3 +446,10 @@ llvm_factory = DependencyFactory(
|
|||
cmake_class=LLVMDependencyCMake,
|
||||
configtool_class=LLVMDependencyConfigTool,
|
||||
)
|
||||
|
||||
gtest_factory = DependencyFactory(
|
||||
'gtest',
|
||||
[DependencyMethods.PKGCONFIG, DependencyMethods.SYSTEM],
|
||||
pkgconfig_class=GTestDependencyPC,
|
||||
system_class=GTestDependencySystem,
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue