1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack import *
class Formetis(CMakePackage):
"""Automated Fortran bindings to METIS and ParMETIS."""
homepage = "https://github.com/swig-fortran/formetis"
url = "https://github.com/swig-fortran/formetis/archive/refs/tags/v0.0.1.tar.gz"
maintainers = ['sethrj']
version('0.0.2', sha256='0067c03ca822f4a3955751acb470f21eed489256e2ec5ff24741eb2b638592f1')
variant('mpi', default=False, description='Enable ParMETIS support')
variant('shared', default=True, description='Build shared libraries')
variant('swig', default=False,
description='Regenerate source files using SWIG')
depends_on('metis@5:')
depends_on('parmetis', when='+mpi')
depends_on('mpi', when='+mpi')
depends_on('swig@4.0.2-fortran', when='+swig')
# Using non-standard int sizes requires regenerating the C/Fortran
# interface files with SWIG
conflicts('~swig', when='^metis+int64')
conflicts('~swig', when='^metis+real64')
def cmake_args(self):
from_variant = self.define_from_variant
args = [
from_variant('FORMETIS_USE_MPI', 'mpi'),
from_variant('BUILD_SHARED_LIBS', 'shared'),
from_variant('FORMETIS_USE_SWIG', 'swig'),
self.define('FORMETIS_BUILD_EXAMPLES', False),
]
return args
examples_src_dir = 'example'
@run_after('install')
def setup_smoke_tests(self):
"""Copy the example source files after the package is installed to an
install test subdirectory for use during `spack test run`."""
self.cache_extra_test_sources([self.examples_src_dir])
@property
def cached_tests_work_dir(self):
"""The working directory for cached test sources."""
return join_path(self.test_suite.current_test_cache_dir,
self.examples_src_dir)
def test(self):
"""Perform stand-alone/smoke tests on the installed package."""
cmake_args = [
self.define('CMAKE_PREFIX_PATH', self.prefix),
self.define('CMAKE_Fortran_COMPILER', self.compiler.fc),
self.define('METIS_ROOT', self.spec['metis'].prefix),
]
if '+mpi' in self.spec:
cmake_args.append(
self.define('ParMETIS_ROOT', self.spec['parmetis'].prefix))
cmake_args.append(self.cached_tests_work_dir)
self.run_test("cmake", cmake_args,
purpose="test: calling cmake",
work_dir=self.cached_tests_work_dir)
self.run_test("make", [],
purpose="test: building the tests",
work_dir=self.cached_tests_work_dir)
self.run_test('metis', [], [],
purpose="test: checking the installation",
installed=False,
work_dir=self.cached_tests_work_dir)
|