aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/dependencies/coarrays.py
diff options
context:
space:
mode:
authorMichael Hirsch, Ph.D <scivision@users.noreply.github.com>2019-12-16 13:20:01 -0500
committerMichael Hirsch, Ph.D <scivision@users.noreply.github.com>2019-12-19 11:52:32 -0500
commitf1d370247fc3a46a5232ea2356ea6d67e5950e0f (patch)
treeb6c53f8c1d22fc754a831a896a8648110ec81016 /mesonbuild/dependencies/coarrays.py
parent06821755d253a930ebe29bb27f55b442c1790fed (diff)
downloadmeson-f1d370247fc3a46a5232ea2356ea6d67e5950e0f.zip
meson-f1d370247fc3a46a5232ea2356ea6d67e5950e0f.tar.gz
meson-f1d370247fc3a46a5232ea2356ea6d67e5950e0f.tar.bz2
dependencies: refactor to use methods properly
Diffstat (limited to 'mesonbuild/dependencies/coarrays.py')
-rw-r--r--mesonbuild/dependencies/coarrays.py53
1 files changed, 33 insertions, 20 deletions
diff --git a/mesonbuild/dependencies/coarrays.py b/mesonbuild/dependencies/coarrays.py
index 8a0bc56..b0b6cf4 100644
--- a/mesonbuild/dependencies/coarrays.py
+++ b/mesonbuild/dependencies/coarrays.py
@@ -12,7 +12,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-from .base import CMakeDependency, ExternalDependency, PkgConfigDependency
+from ..mesonlib import listify
+from .base import CMakeDependency, DependencyMethods, ExternalDependency, PkgConfigDependency
class CoarrayDependency(ExternalDependency):
@@ -29,33 +30,41 @@ class CoarrayDependency(ExternalDependency):
kwargs['required'] = False
kwargs['silent'] = True
self.is_found = False
+ methods = listify(self.methods)
cid = self.get_compiler().get_id()
if cid == 'gcc':
""" OpenCoarrays is the most commonly used method for Fortran Coarray with GCC """
- # first try pkg-config
- for pkg in ['caf-openmpi', 'caf']:
- pkgdep = PkgConfigDependency(pkg, environment, kwargs, language=self.language)
- if pkgdep.found():
- self.compile_args = pkgdep.get_compile_args()
- self.link_args = pkgdep.get_link_args()
- self.version = pkgdep.get_version()
+
+ if set([DependencyMethods.AUTO, DependencyMethods.PKGCONFIG]).intersection(methods):
+ for pkg in ['caf-openmpi', 'caf']:
+ pkgdep = PkgConfigDependency(pkg, environment, kwargs, language=self.language)
+ if pkgdep.found():
+ self.compile_args = pkgdep.get_compile_args()
+ self.link_args = pkgdep.get_link_args()
+ self.version = pkgdep.get_version()
+ self.is_found = True
+ self.pcdep = pkgdep
+ return
+
+ if set([DependencyMethods.AUTO, DependencyMethods.CMAKE]).intersection(methods):
+ if not kwargs.get('modules'):
+ kwargs['modules'] = 'OpenCoarrays::caf_mpi'
+ cmakedep = CMakeDependency('OpenCoarrays', environment, kwargs, language=self.language)
+ 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
- self.pcdep = pkgdep
return
- # second try CMake
- kwargs['modules'] = 'OpenCoarrays::caf_mpi'
- cmakedep = CMakeDependency('OpenCoarrays', environment, kwargs)
- if cmakedep.found():
- self.compile_args = cmakedep.get_compile_args()
- self.link_args = cmakedep.get_link_args()
- self.version = cmakedep.get_version()
+
+ if DependencyMethods.AUTO in methods:
+ # fallback to single image
+ self.compile_args = ['-fcoarray=single']
+ self.version = 'single image (fallback)'
self.is_found = True
return
- # give up, just run as single image fallback
- self.compile_args = ['-fcoarray=single']
- self.version = 'single image'
- self.is_found = True
+
elif cid == 'intel':
""" Coarrays are built into Intel compilers, no external library needed """
self.is_found = True
@@ -68,3 +77,7 @@ class CoarrayDependency(ExternalDependency):
elif cid == 'nagfor':
""" NAG doesn't require any special arguments for Coarray """
self.is_found = True
+
+ @staticmethod
+ def get_methods():
+ return [DependencyMethods.AUTO, DependencyMethods.CMAKE, DependencyMethods.PKGCONFIG]