summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/justbuild/package.py
blob: 1150716bd8d4482e4e5d340e721b1ea54892f089 (plain) (blame)
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
94
95
# 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")

    license("Apache-2.0")

    version("master", branch="master")
    version("1.2.3", tag="v1.2.3", commit="45e9c1c85399f00372ad8b72894979a0002d8f95")
    version("1.2.2", tag="v1.2.2", commit="e1ee04684c34ae30ac3c91b6753e99a81a9dc51c")
    version("1.2.1", tag="v1.2.1", commit="959cd90083d0c783389cd09e187c98322c16469f")
    version("1.1.4", tag="v1.1.4", commit="32e96afd159f2158ca129fd00bf02c273d8e1e48")
    version("1.1.3", tag="v1.1.3", commit="3aed5d450aec38be18edec822ac2efac6d49a938")
    version("1.1.2", tag="v1.1.2", commit="67b486e2ce6ab657a98b2212a9b6f68935d07a29")
    version("1.0.0", tag="v1.0.0", commit="c29b671f798e82ba26b5f54ebc9e24c7dcfb8166")

    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.version < Version("1.2.1"):
            family = ', "COMPILER_FAMILY":"unknown"'
        else:
            family = ', "TOOLCHAIN_CONFIG": {"FAMILY": "unknown"}'
        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)
                + family
                + ', "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