diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2019-12-21 23:25:10 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-12-21 23:25:10 +0200 |
commit | 7981308e6e600535efeba6b50cdda62d43e7c584 (patch) | |
tree | 92015ea92f246c309ccbfd0d7486c047ad21a080 /mesonbuild/dependencies/coarrays.py | |
parent | e5297aeca5b384634897dac3f862453a3df71c90 (diff) | |
parent | ccbb20e8810986656c01cc417f7d23731b0febdb (diff) | |
download | meson-7981308e6e600535efeba6b50cdda62d43e7c584.zip meson-7981308e6e600535efeba6b50cdda62d43e7c584.tar.gz meson-7981308e6e600535efeba6b50cdda62d43e7c584.tar.bz2 |
Merge pull request #6355 from scivision/depmethod
dependencies: refactor {coarray,mpi,hdf5,netcdf} to use dependency(.., methods: ...)
Diffstat (limited to 'mesonbuild/dependencies/coarrays.py')
-rw-r--r-- | mesonbuild/dependencies/coarrays.py | 53 |
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] |