summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/cool/package.py
blob: c849e48149d6171f5e16517d3f0e1bc0f58beabf (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
# 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)

from spack.package import *


class Cool(CMakePackage):
    """COOL provides specific software components and tools for the handling of the time
    variation and versioning of the experiment conditions data."""

    homepage = "https://coral-cool.docs.cern.ch/"
    git = "https://gitlab.cern.ch/lcgcool/cool.git"

    tags = ["hep"]

    version("3.3.10", tag="COOL_3_3_10", commit="110b51c2b50af07cbe1f64a1c67ce9f737c4421d")
    version("3.3.7", tag="COOL_3_3_7", commit="6f9a29d903e51ecbb26bdc8a694a67db9f28e234")
    version("3.3.5", tag="COOL_3_3_5", commit="9af359de6a14350b9ab4cab572c638df73edfe84")
    version("3.3.4", tag="COOL_3_3_4", commit="c3f9f780e0949fc78277c05d21d06fd7ddc6ea48")
    version("3.3.3", tag="COOL_3_3_3", commit="42137f0ecd5028c41a46a99f0b95b56e105ef4e3")

    # Spack-specific patches:
    # * Create python/PyCool/_internal directory
    #   (only necessary for Spack builds, for some reason)
    # * Explicitly request Boost components
    patch("cool.patch", level=0, when="@:3.3.8")

    @when("@3.3.9:")
    def patch(self):
        filter_file(
            "find_package(Boost REQUIRED)",
            "find_package(Boost REQUIRED chrono system thread)",
            "src/RelationalCool/CMakeLists.txt",
        )

    # BINARY_TAG is a combination of target, os, compiler name and build type (opt/dbg)
    # If you override it, please also override it for CORAL
    variant(
        "binary_tag",
        default="auto",
        description='Force specific BINARY_TAG, "auto" '
        + "will determine the correct value at buildtime",
    )

    depends_on("coral")
    depends_on("root")
    depends_on("vdt")
    depends_on("xz")
    depends_on("qt@5:", when="platform=linux")
    depends_on("boost+chrono+system+thread")
    depends_on("python")

    def determine_binary_tag(self):
        # As far as I can tell from reading the source code, `binary_tag`
        # can be almost arbitrary.  The only real difference it makes is
        # disabling oracle dependency for non-x86 platforms.
        if self.spec.variants["binary_tag"].value != "auto":
            return self.spec.variants["binary_tag"].value

        binary_tag = (
            str(self.spec.target.family)
            + "-"
            + self.spec.os
            + "-"
            + self.spec.compiler.name
            + str(self.spec.compiler.version.joined)
            + ("-opt" if "Rel" in self.spec.variants["build_type"].value else "-dbg")
        )

        return binary_tag

    def cmake_args(self):
        binary_tag = self.determine_binary_tag()
        args = ["-DBINARY_TAG=" + binary_tag]
        if self.spec["python"].version >= Version("3.0.0"):
            args.append("-DLCG_python3=on")

        return args