summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/krb5/package.py
blob: 3554f6f04d7600057171e3ec8ae7c08610638aaa (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
# Copyright 2013-2021 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


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

    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('bison', type='build')
    depends_on('openssl@:1')

    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')

    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')

        return args