summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/libstdcompat/package.py
blob: 069eea1dc33a01d9b3219ad62958b8dc68697f2c (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
96
97
98
99
100
# 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)

from spack.package import *


class Libstdcompat(CMakePackage):
    """A compatibility header for C++14, 17, and 20 for C++11"""

    homepage = "https://github.com/robertu94/std_compat"
    url = "https://github.com/robertu94/std_compat/archive/0.0.1.tar.gz"
    git = "https://github.com/robertu94/std_compat"

    maintainers("robertu94")

    version("master", branch="master")
    version("0.0.17", sha256="8c8a3f2727dd28c51ab10e02a1114e39b683d6d9ea119d5c2a953f8c41d6bedd")
    version("0.0.16", sha256="1287251b694adb80210536ab6eb75c1ff2c4ed8b77023208a757ae27c9dae0bb")
    version("0.0.15", sha256="af374a8883a32d874f6cd18cce4e4344e32f9d60754be403a5ac7114feca2a28")
    version("0.0.14", sha256="9a794d43a1d79aec3350b89d8c06689b8b32cf75e2742cdfa9dc0e3f2be6f04e")
    version("0.0.13", sha256="460656189e317e108a489af701fa8f33f13a93d96380788e692a1c68100e0388")
    version("0.0.12", sha256="67c1d1724122a1ba7cebcd839658786680fa06a549369f4a7c36a44ad93ddd5d")
    version("0.0.11", sha256="f166cd55e3cf845e4ed9eee1fb25de1f991dee5ef538c1e3ea9cbe7714863ccb")
    version("0.0.10", sha256="d55ad9b7f61efa5a4bbef047f729af5ed9e44f96bb9d54f36023fa99af2bfe40")
    version("0.0.9", sha256="325e816153aab0aee791e4c628e01dbc5b7aa336558d1694bd5de763f34e37e6")
    version("0.0.8", sha256="3103295033fb6723dc462a8979ccfe3b571347c2a458f4cc8d8324981dedead9")
    version("0.0.7", sha256="8cb4ed704aef427bbe4c86ee874a350561e6e059223e7b3d60f1e0d7300ccfe9")
    version("0.0.6", sha256="cf4288422c9e9ab9e7c831c11a6a67907fe19b0da40601cc2b05e76e3be2f795")
    version("0.0.5", sha256="a8599a12253b5ebdb38c6e416e7896444fd48a15167fe481985182ed17fc6883")
    version("0.0.4", sha256="b2aeb4e60105635acb3f41b2c9559956e7b75d999c73b84b14be5b78daa4e6a9")
    version("0.0.3", sha256="098678618a335bb2e8b25ceae8c3498f4c3056fd9e03467948bab18252afb46d")
    version("0.0.2", sha256="36424399e649be38bdb21899aa45f94aebba25c66048bab2751b1b3b9fd27238")
    version("0.0.1", sha256="3d63e901f4e20b9032a67086f4b4281f641ee0dea436cf15f7058faa40d8637b")

    variant(
        "cpp_compat",
        values=("11", "14", "17", "20", "auto"),
        default="auto",
        multi=False,
        description="version of the c++ standard to use and depend on",
    )
    variant("cpp_unstable", default=True, description="sets CXX_STANDARD_REQUIRED")
    variant("boost", default=False, description="support older compilers using boost")

    depends_on("boost+thread", when="%gcc@:8.0.0")
    depends_on("boost+thread", when="+boost")
    depends_on("boost+thread", when="cpp_compat=11")
    depends_on("boost+thread", when="cpp_compat=14")

    conflicts("~cpp_unstable", when="@0.0.7: cpp_compat=auto")
    conflicts("+cpp_unstable", when="@:0.0.7")
    conflicts("cpp_compat=11", when="@:0.0.7")
    conflicts("cpp_compat=14", when="@:0.0.7")
    conflicts("cpp_compat=17", when="@:0.0.7")
    conflicts("cpp_compat=20", when="@:0.0.7")

    def max_cxx_version(self):
        try:
            self.compiler.cxx17_flag
            return "17"
        except Exception:
            pass
        try:
            self.compiler.cxx14_flag
            return "14"
        except Exception:
            pass
        self.compiler.cxx11_flag
        return "11"

    def cmake_args(self):
        args = []
        cpp_compat = self.spec.variants["cpp_compat"].value

        if "cpp_unstable" in self.spec:
            args.append("-DSTDCOMPAT_CXX_UNSTABLE=ON")

        if cpp_compat == "auto":
            args.append("-DSTDCOMPAT_CXX_VERSION=%s" % self.max_cxx_version())
        elif cpp_compat == "11":
            args.append("-DSTDCOMPAT_CXX_VERSION=11")
        elif cpp_compat == "14":
            args.append("-DSTDCOMPAT_CXX_VERSION=14")
        elif cpp_compat == "17":
            args.append("-DSTDCOMPAT_CXX_VERSION=17")
        elif cpp_compat == "20":
            args.append("-DSTDCOMPAT_CXX_VERSION=20")

        if self.run_tests:
            args.append("-DBUILD_TESTING=ON")
        else:
            args.append("-DBUILD_TESTING=OFF")
        return args

    @run_after("build")
    @on_package_attributes(run_tests=True)
    def test(self):
        make("test")