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
|
# 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 os
from spack.package import *
class Justbuild(Package):
"just, a generic build tool"
git = "https://github.com/just-buildsystem/justbuild.git"
homepage = "https://github.com/just-buildsystem/justbuild"
tags = ["build-tools"]
executables = ["^just$"]
maintainers("asartori86")
version("master", branch="master")
version("1.1.4", tag="v1.1.4")
version("1.1.3", tag="v1.1.3")
version("1.1.2", tag="v1.1.2")
version("1.0.0", tag="v1.0.0")
depends_on("python@3:", type=("build", "run"))
depends_on("wget", type=("build", "run"))
sanity_check_is_file = [join_path("bin", "just"), join_path("bin", "just-mr")]
def setup_build_environment(self, env):
ar = which("ar")
if self.spec.satisfies("%gcc@10:"):
gcc = which("gcc")
gpp = which("g++")
env.set(
"JUST_BUILD_CONF",
" {"
+ ' "CC":"{0}"'.format(gcc.path)
+ ', "CXX":"{0}"'.format(gpp.path)
+ ', "AR":"{0}"'.format(ar.path)
+ ', "COMPILER_FAMILY":"unknown"'
+ ', "ENV":{'
+ ' "PATH":"{0}"'.format(os.environ["PATH"])
+ " }"
+ "}",
)
elif self.spec.satisfies("%clang@11:") or spec.satisfies("%apple-clang@11:"):
clang = which("clang")
clangpp = which("clang++")
env.set(
"JUST_BUILD_CONF",
" {"
+ ' "CC":"{0}"'.format(clang.path)
+ ', "CXX":"{0}"'.format(clangpp.path)
+ ', "AR":"{0}"'.format(ar.path)
+ ', "COMPILER_FAMILY":"unknown"'
+ ', "ENV":{'
+ ' "PATH":"{0}"'.format(os.environ["PATH"])
+ " }"
+ "}",
)
else:
raise InstallError("please use gcc >= 10 or clang >= 11")
def install(self, spec, prefix):
python = which("python3")
python(os.path.join("bin", "bootstrap.py"), ".", prefix)
mkdirp(prefix.bin)
install(os.path.join(prefix, "out", "bin", "just"), prefix.bin)
install(os.path.join("bin", "just-mr.py"), os.path.join(prefix.bin, "just-mr"))
@classmethod
def determine_version(cls, exe):
import json
try:
s = os.popen(exe + " version").read()
d = json.loads(s)
return ".".join(map(str, d["version"])) + d["suffix"].replace("~", "-")
except Exception:
return None
|