summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/squashfs/package.py
blob: 73d37fab5b9a933d8afd5665ed29ebfe1633870d (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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# 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 Squashfs(MakefilePackage):
    """Squashfs - read only compressed filesystem"""

    homepage = "http://squashfs.sourceforge.net"
    url = "https://downloads.sourceforge.net/project/squashfs/squashfs/squashfs4.3/squashfs4.3.tar.gz"

    license("GPL-2.0-or-later")

    # version      sha1
    version("4.6.1", sha256="94201754b36121a9f022a190c75f718441df15402df32c2b520ca331a107511c")
    version(
        "4.5.1",
        sha256="277b6e7f75a4a57f72191295ae62766a10d627a4f5e5f19eadfbc861378deea7",
        url="https://downloads.sourceforge.net/project/squashfs/squashfs/squashfs4.5.1/squashfs-tools-4.5.1.tar.gz",
    )
    version(
        "4.5",
        sha256="c493b29c3d152789d04fae5e6532499d96ce3f79256bc6df4f97b5170c88e979",
        deprecated=True,
    )
    version(
        "4.4",
        sha256="a981b3f3f2054b5a2e658851a3c06a2460ad04a9a8a645e0afe063a63fdbb07e",
        deprecated=True,
    )
    version(
        "4.3",
        sha256="0d605512437b1eb800b4736791559295ee5f60177e102e4d4ccd0ee241a5f3f6",
        deprecated=True,
    )
    version(
        "4.2",
        sha256="d9e0195aa922dbb665ed322b9aaa96e04a476ee650f39bbeadb0d00b24022e96",
        deprecated=True,
    )
    version(
        "4.1",
        sha256="3a870d065a25b3f5467bc6d9ed34340befab51a3f9e4b7e3792ea0ff4e06046a",
        deprecated=True,
    )
    version(
        "4.0",
        sha256="18948edbe06bac2c4307eea99bfb962643e4b82e5b7edd541b4d743748e12e21",
        deprecated=True,
    )

    variant("gzip", default=True, description="Enable gzip compression support")
    variant("lz4", default=False, description="Enable LZ4 compression support")
    variant("lzo", default=False, description="Enable LZO compression support")
    variant("xz", default=False, description="Enable xz compression support")
    variant("zstd", default=False, description="Enable Zstandard/zstd support")
    variant(
        "default_compression",
        default="gzip",
        values=("gzip", "lz4", "lzo", "xz", "zstd"),
        multi=False,
        description="Default compression algorithm",
    )
    variant("static", default=False, description="Build fully static mksquashfs executable")

    conflicts(
        "squashfs~gzip default_compression=gzip",
        msg="Cannot set default compression to missing algorithm",
    )
    conflicts(
        "squashfs~lz4 default_compression=lz4",
        msg="Cannot set default compression to missing algorithm",
    )
    conflicts(
        "squashfs~lzo default_compression=lzo",
        msg="Cannot set default compression to missing algorithm",
    )
    conflicts(
        "squashfs~xz default_compression=xz",
        msg="Cannot set default compression to missing algorithm",
    )
    conflicts(
        "squashfs~zstd default_compression=zstd",
        msg="Cannot set default compression to missing algorithm",
    )

    depends_on("zlib-api", when="+gzip")
    depends_on("lz4", when="+lz4")
    depends_on("lz4 libs=static", when="+lz4 +static")
    depends_on("lzo", when="+lzo")
    depends_on("lzo libs=static", when="+lzo +static")
    depends_on("xz", when="+xz")
    depends_on("xz libs=static", when="+xz +static")
    depends_on("zstd", when="+zstd")
    depends_on("zstd libs=static", when="+zstd +static")

    # patch from
    # https://github.com/plougher/squashfs-tools/commit/fe2f5da4b0f8994169c53e84b7cb8a0feefc97b5.patch
    patch("gcc-10.patch", when="@:4.4 %gcc@10:")
    patch("gcc-10.patch", when="@:4.4 %clang@11:")

    def make_options(self, spec):
        default = spec.variants["default_compression"].value
        return [
            "GZIP_SUPPORT={0}".format(1 if "+gzip" in spec else 0),
            "LZ4_SUPPORT={0}".format(1 if "+lz4" in spec else 0),
            "LZO_SUPPORT={0}".format(1 if "+lzo" in spec else 0),
            "XZ_SUPPORT={0}".format(1 if "+xz" in spec else 0),
            "ZSTD_SUPPORT={0}".format(1 if "+zstd" in spec else 0),
            "COMP_DEFAULT={0}".format(default),
            "EXTRA_LDFLAGS={0}".format("-static" if "+static" in spec else ""),
        ]

    def build(self, spec, prefix):
        options = self.make_options(spec)
        with working_dir("squashfs-tools"):
            make(*options)

    def install(self, spec, prefix):
        options = self.make_options(spec)
        if "@4.5.1:" in spec:
            prefix_arg = "INSTALL_PREFIX={}".format(prefix)
        else:
            prefix_arg = "INSTALL_DIR={}".format(prefix.bin)
        with working_dir("squashfs-tools"):
            make("install", prefix_arg, *options)