/
package.py
89 lines (71 loc) · 3.35 KB
/
package.py
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
82
83
84
85
86
87
88
89
# Copyright 2013-2024 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)
import sys
from spack.package import *
class Parmetis(CMakePackage):
"""ParMETIS is an MPI-based parallel library that implements a variety of
algorithms for partitioning unstructured graphs, meshes, and for
computing fill-reducing orderings of sparse matrices."""
homepage = "http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview"
url = "http://glaros.dtc.umn.edu/gkhome/fetch/sw/parmetis/parmetis-4.0.3.tar.gz"
list_url = "http://glaros.dtc.umn.edu/gkhome/fetch/sw/parmetis/OLD"
version("4.0.3", sha256="f2d9a231b7cf97f1fee6e8c9663113ebf6c240d407d3c118c55b3633d6be6e5f")
version("4.0.2", sha256="5acbb700f457d3bda7d4bb944b559d7f21f075bb6fa4c33f42c261019ef2f0b2")
variant("shared", default=True, description="Enables the build of shared libraries.")
variant("gdb", default=False, description="Enables gdb support.")
variant("int64", default=False, description="Sets the bit width of METIS's index type to 64.")
depends_on("cmake@2.8:", type="build")
depends_on("mpi")
depends_on("metis@5:")
depends_on("metis+int64", when="+int64")
depends_on("metis~int64", when="~int64")
patch("enable_external_metis.patch")
# bug fixes from PETSc developers
# https://bitbucket.org/petsc/pkg-parmetis/commits/1c1a9fd0f408dc4d42c57f5c3ee6ace411eb222b/raw/
patch("pkg-parmetis-1c1a9fd0f408dc4d42c57f5c3ee6ace411eb222b.patch")
# https://bitbucket.org/petsc/pkg-parmetis/commits/82409d68aa1d6cbc70740d0f35024aae17f7d5cb/raw/
patch("pkg-parmetis-82409d68aa1d6cbc70740d0f35024aae17f7d5cb.patch")
def flag_handler(self, name, flags):
if name == "cflags":
if "%pgi" in self.spec:
my_flags = flags + ["-c11"]
return (None, None, my_flags)
return (None, None, flags)
def url_for_version(self, version):
url = "http://glaros.dtc.umn.edu/gkhome/fetch/sw/parmetis"
if version < Version("3.2.0"):
url += "/OLD"
url += "/parmetis-{0}.tar.gz".format(version)
return url
def cmake_args(self):
spec = self.spec
options = []
options.extend(
[
"-DGKLIB_PATH:PATH=%s/GKlib" % spec["metis"].prefix.include,
"-DMETIS_PATH:PATH=%s" % spec["metis"].prefix,
"-DCMAKE_C_COMPILER:STRING=%s" % spec["mpi"].mpicc,
"-DCMAKE_CXX_COMPILER:STRING=%s" % spec["mpi"].mpicxx,
]
)
if "+shared" in spec:
options.append("-DSHARED:BOOL=ON")
else:
# Remove all RPATH options
# (RPATHxxx options somehow trigger cmake to link dynamically)
rpath_options = []
for o in options:
if o.find("RPATH") >= 0:
rpath_options.append(o)
for o in rpath_options:
options.remove(o)
if "+gdb" in spec:
options.append("-DGDB:BOOL=ON")
return options
@run_after("install")
def darwin_fix(self):
# The shared library is not installed correctly on Darwin; fix this
if (sys.platform == "darwin") and ("+shared" in self.spec):
fix_darwin_install_name(prefix.lib)