summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/cool/package.py
blob: 94fecafbb921ae121731be9854f9138f83eaae47 (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
# Copyright 2013-2022 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 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']
    maintainers = ['iarspider']

    version('3.3.10', tag='COOL_3_3_10')
    version('3.3.7', tag='COOL_3_3_7')
    version('3.3.5', tag='COOL_3_3_5')
    version('3.3.4', tag='COOL_3_3_4')
    version('3.3.3', tag='COOL_3_3_3')

    # 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