summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/krb5/package.py
blob: 830bc5d887320526bff06b7121f60ae234bedbab (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
# 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 re

from spack.package import *


class Krb5(AutotoolsPackage):
    """Network authentication protocol"""

    homepage = "https://kerberos.org"
    url = "https://kerberos.org/dist/krb5/1.16/krb5-1.16.1.tar.gz"
    list_url = "https://kerberos.org/dist/krb5/"
    list_depth = 1

    license("MIT")

    version("1.20.1", sha256="704aed49b19eb5a7178b34b2873620ec299db08752d6a8574f95d41879ab8851")
    version("1.19.4", sha256="41f5981c5a4de0a26b3937e679a116cd5b3739641fd253124aac91f7179b54eb")
    version("1.19.3", sha256="56d04863cfddc9d9eb7af17556e043e3537d41c6e545610778676cf551b9dcd0")
    version("1.19.2", sha256="10453fee4e3a8f8ce6129059e5c050b8a65dab1c257df68b99b3112eaa0cdf6a")
    version("1.18.2", sha256="c6e4c9ec1a98141c3f5d66ddf1a135549050c9fab4e9a4620ee9b22085873ae0")
    version("1.18.1", sha256="02a4e700f10936f937cd1a4c303cab8687a11abecc6107bd4b706b9329cd5400")
    version("1.18", sha256="73913934d711dcf9d5f5605803578edb44b9a11786df3c1b2711f4e1752f2c88")
    version("1.17.1", sha256="3706d7ec2eaa773e0e32d3a87bf742ebaecae7d064e190443a3acddfd8afb181")
    version("1.17", sha256="5a6e2284a53de5702d3dc2be3b9339c963f9b5397d3fbbc53beb249380a781f5")
    version("1.16.3", sha256="e40499df7c6dbef0cf9b11870a0e167cde827737d8b2c06a9436334f08ab9b0d")
    version("1.16.2", sha256="9f721e1fe593c219174740c71de514c7228a97d23eb7be7597b2ae14e487f027")
    version("1.16.1", sha256="214ffe394e3ad0c730564074ec44f1da119159d94281bbec541dc29168d21117")

    depends_on("diffutils", type="build")
    depends_on("bison", type="build")
    depends_on("openssl@:1", when="@:1.19")
    depends_on("openssl")
    depends_on("gettext")
    depends_on("findutils", type="build")
    depends_on("pkgconfig", type="build", when="^openssl~shared")

    variant(
        "shared", default=True, description="install shared libraries if True, static if false"
    )
    # This patch is applied in newer upstream releases
    patch("mit-krb5-1.17-static-libs.patch", level=0, when="@:1.18.9")
    patch("freebsd-link.patch", when="platform=freebsd")

    configure_directory = "src"
    build_directory = "src"

    executables = ["^krb5-config$"]

    @classmethod
    def determine_version(cls, exe):
        output = Executable(exe)("--version", output=str, error=str)
        match = re.search(r"Kerberos 5 release\s+(\S+)", output)
        return match.group(1) if match else None

    def url_for_version(self, version):
        url = "https://kerberos.org/dist/krb5/{0}/krb5-{1}.tar.gz"
        return url.format(version.up_to(2), version)

    def patch(self):
        # https://github.com/Homebrew/homebrew-core/blob/master/Formula/krb5.rb
        # https://krbdev.mit.edu/rt/Ticket/Display.html?id=8928
        filter_file(
            "void foo1() __attribute__((constructor));",
            "#include <unistd.h>\nvoid foo1() __attribute__((constructor));",
            join_path(self.configure_directory, "configure"),
            string=True,
        )

    def configure_args(self):
        args = ["--without-system-verto"]

        if "~shared" in self.spec:
            args.append("--enable-static")
            args.append("--disable-shared")
        else:
            args.append("--disable-static")

        # https://github.com/spack/spack/issues/34193
        if "%gcc@10:" in self.spec:
            args.append("CFLAGS=-fcommon")

        if self.spec["openssl"].satisfies("~shared"):
            pkgconf = which("pkg-config")
            ssllibs = pkgconf("--static", "--libs", "openssl", output=str)
            args.append(f"LDFLAGS={ssllibs}")

        return args

    def flag_handler(self, name, flags):
        if name == "ldlibs" and "intl" in self.spec["gettext"].libs.names:
            flags.append("-lintl")
        return inject_flags(name, flags)