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
90
91
92
93
|
# Copyright 2013-2023 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 glob
import os
from spack.package import *
class Fckit(CMakePackage):
"""A Fortran toolkit for interoperating Fortran with C/C++."""
homepage = "https://software.ecmwf.int/wiki/display/fckit"
git = "https://github.com/ecmwf/fckit.git"
url = "https://github.com/ecmwf/fckit/archive/0.9.0.tar.gz"
maintainers("climbfuji")
license("Apache-2.0")
version("master", branch="master")
version("develop", branch="develop")
version("0.11.0", sha256="846f5c369940c0a3d42cd12932f7d6155339e79218d149ebbfdd02e759dc86c5")
version("0.10.1", sha256="9cde04fefa50624bf89068ab793cc2e9437c0cd1c271a41af7d54dbd37c306be")
version("0.10.0", sha256="f16829f63a01cdef5e158ed2a51f6d4200b3fe6dce8f251af158141a1afe482b")
version("0.9.5", sha256="183cd78e66d3283d9e6e8e9888d3145f453690a4509fb701b28d1ac6757db5de")
depends_on("mpi")
depends_on("python")
depends_on("ecbuild", type=("build"))
variant(
"build_type",
default="RelWithDebInfo",
description="CMake build type",
values=("Debug", "Release", "RelWithDebInfo"),
)
variant("eckit", default=True, description="Enable eckit")
depends_on("eckit@:1.23 +mpi", when="@:0.10 +eckit")
depends_on("eckit@1.24: +mpi", when="@0.11: +eckit")
variant("openmp", default=True, description="Use OpenMP?")
depends_on("llvm-openmp", when="+openmp %apple-clang", type=("build", "run"))
variant("shared", default=True, description="Build shared libraries")
variant("fismahigh", default=False, description="Apply patching for FISMA-high compliance")
variant(
"finalize_ddts",
default="auto",
description="Enable / disable automatic finalization of derived types",
values=("auto", "no", "yes"),
)
# fckit fails to auto-detect/switch off finalization
# of derived types for latest Intel compilers. If set
# to auto, turn off in cmake_args. If set to yes, abort.
conflicts("%intel@2021.8:", when="finalize_ddts=yes")
def cmake_args(self):
args = [
self.define_from_variant("ENABLE_ECKIT", "eckit"),
self.define_from_variant("ENABLE_OMP", "openmp"),
"-DPYTHON_EXECUTABLE:FILEPATH=" + self.spec["python"].command.path,
"-DFYPP_NO_LINE_NUMBERING=ON",
]
if "~shared" in self.spec:
args.append("-DBUILD_SHARED_LIBS=OFF")
if "finalize_ddts=auto" not in self.spec:
args.append(self.define_from_variant("ENABLE_FINAL", "finalize_ddts"))
elif "finalize_ddts=auto" in self.spec and self.spec.satisfies("%intel@2021.8:"):
# See comment above (conflicts for finalize_ddts)
args.append("-DENABLE_FINAL=OFF")
if self.spec.satisfies("%intel") or self.spec.satisfies("%gcc"):
cxxlib = "stdc++"
elif self.spec.satisfies("%clang") or self.spec.satisfies("%apple-clang"):
cxxlib = "c++"
else:
raise InstallError("C++ library not configured for compiler")
args.append("-DECBUILD_CXX_IMPLICIT_LINK_LIBRARIES={}".format(cxxlib))
return args
@when("+fismahigh")
def patch(self):
patterns = ["tools/install-*", "tools/github-sha*", ".travis.yml"]
for pattern in patterns:
for path in glob.glob(pattern):
os.remove(path)
|