summaryrefslogtreecommitdiff
path: root/mesonbuild/dependencies/coarrays.py
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/dependencies/coarrays.py')
-rw-r--r--mesonbuild/dependencies/coarrays.py31
1 files changed, 17 insertions, 14 deletions
diff --git a/mesonbuild/dependencies/coarrays.py b/mesonbuild/dependencies/coarrays.py
index a4dbdc535..ddb50058f 100644
--- a/mesonbuild/dependencies/coarrays.py
+++ b/mesonbuild/dependencies/coarrays.py
@@ -3,10 +3,9 @@
from __future__ import annotations
-import functools
import typing as T
-from .base import DependencyMethods, detect_compiler, SystemDependency
+from .base import DependencyCandidate, DependencyMethods, detect_compiler, SystemDependency
from .cmake import CMakeDependency
from .detect import packages
from .pkgconfig import PkgConfigDependency
@@ -15,15 +14,15 @@ from .factory import factory_methods
if T.TYPE_CHECKING:
from . factory import DependencyGenerator
from ..environment import Environment
- from ..mesonlib import MachineChoice
from .base import DependencyObjectKWs
@factory_methods({DependencyMethods.PKGCONFIG, DependencyMethods.CMAKE, DependencyMethods.SYSTEM})
def coarray_factory(env: 'Environment',
- for_machine: 'MachineChoice',
kwargs: DependencyObjectKWs,
methods: T.List[DependencyMethods]) -> T.List['DependencyGenerator']:
+ kwargs['language'] = 'fortran'
+ for_machine = kwargs['native']
fcid = detect_compiler('coarray', env, for_machine, 'fortran').get_id()
candidates: T.List['DependencyGenerator'] = []
@@ -31,19 +30,24 @@ def coarray_factory(env: 'Environment',
# OpenCoarrays is the most commonly used method for Fortran Coarray with GCC
if DependencyMethods.PKGCONFIG in methods:
for pkg in ['caf-openmpi', 'caf']:
- candidates.append(functools.partial(
- PkgConfigDependency, pkg, env, kwargs, language='fortran'))
+ candidates.append(DependencyCandidate.from_dependency(
+ pkg, PkgConfigDependency, (env, kwargs)))
if DependencyMethods.CMAKE in methods:
+ nkwargs = kwargs
if not kwargs.get('modules'):
- kwargs['modules'] = ['OpenCoarrays::caf_mpi']
- candidates.append(functools.partial(
- CMakeDependency, 'OpenCoarrays', env, kwargs, language='fortran'))
+ nkwargs = kwargs.copy()
+ nkwargs['modules'] = ['OpenCoarrays::caf_mpi']
+ candidates.append(DependencyCandidate.from_dependency(
+ 'OpenCoarrays', CMakeDependency, (env, nkwargs)))
if DependencyMethods.SYSTEM in methods:
- candidates.append(functools.partial(CoarrayDependency, env, kwargs))
+ candidates.append(DependencyCandidate.from_dependency(
+ 'coarray', CoarrayDependency, (env, kwargs)))
return candidates
+
+
packages['coarray'] = coarray_factory
@@ -56,10 +60,9 @@ class CoarrayDependency(SystemDependency):
Coarrays may be thought of as a high-level language abstraction of
low-level MPI calls.
"""
- def __init__(self, environment: 'Environment', kwargs: DependencyObjectKWs) -> None:
- super().__init__('coarray', environment, kwargs, language='fortran')
- kwargs['required'] = False
- kwargs['silent'] = True
+ def __init__(self, name: str, environment: 'Environment', kwargs: DependencyObjectKWs) -> None:
+ kwargs['language'] = 'fortran'
+ super().__init__(name, environment, kwargs)
cid = self.get_compiler().get_id()
if cid == 'gcc':