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
|
# 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)
import re
from spack import *
class Tar(AutotoolsPackage, GNUMirrorPackage):
"""GNU Tar provides the ability to create tar archives, as well as various
other kinds of manipulation."""
homepage = "https://www.gnu.org/software/tar/"
gnu_mirror_path = "tar/tar-1.32.tar.gz"
executables = [r'^tar$']
tags = ['core-packages']
version('1.34', sha256='03d908cf5768cfe6b7ad588c921c6ed21acabfb2b79b788d1330453507647aed')
version('1.32', sha256='b59549594d91d84ee00c99cf2541a3330fed3a42c440503326dab767f2fbb96c')
version('1.31', sha256='b471be6cb68fd13c4878297d856aebd50551646f4e3074906b1a74549c40d5a2')
version('1.30', sha256='4725cc2c2f5a274b12b39d1f78b3545ec9ebb06a6e48e8845e1995ac8513b088')
version('1.29', sha256='cae466e6e58c7292355e7080248f244db3a4cf755f33f4fa25ca7f9a7ed09af0')
version('1.28', sha256='6a6b65bac00a127a508533c604d5bf1a3d40f82707d56f20cefd38a05e8237de')
# A saner default than gzip?
variant('zip', default='pigz', values=('gzip', 'pigz'), description='Default compression program for tar -z')
depends_on('iconv')
# Compression
depends_on('gzip', type='run', when='zip=gzip')
depends_on('pigz', type='run', when='zip=pigz')
depends_on('zstd+programs', type='run', when='@1.31:')
depends_on('xz', type='run') # for xz/lzma
depends_on('bzip2', type='run')
patch('tar-pgi.patch', when='@1.29')
patch('config-pgi.patch', when='@:1.29')
patch('se-selinux.patch', when='@:1.29')
patch('argp-pgi.patch', when='@:1.29')
patch('gnutar-configure-xattrs.patch', when='@1.28')
# The NVIDIA compilers do not currently support some GNU builtins.
# Detect this case and use the fallback path.
patch('nvhpc-1.30.patch', when='@1.30:1.32 %nvhpc')
patch('nvhpc-1.34.patch', when='@1.34 %nvhpc')
# Workaround bug where __LONG_WIDTH__ is not defined
patch('nvhpc-long-width.patch', when='@1.34 %nvhpc')
@classmethod
def determine_version(cls, exe):
output = Executable(exe)('--version', output=str, error=str)
match = re.search(r'tar \(GNU tar\) (\S+)', output)
return match.group(1) if match else None
def configure_args(self):
# Note: compression programs are passed by abs path,
# so that tar can locate them when invoked without spack load.
args = [
'--with-libiconv-prefix={0}'.format(self.spec['iconv'].prefix),
'--with-xz={0}'.format(self.spec['xz'].prefix.bin.xz),
'--with-lzma={0}'.format(self.spec['xz'].prefix.bin.lzma),
'--with-bzip2={0}'.format(self.spec['bzip2'].prefix.bin.bzip2),
]
if '^zstd' in self.spec:
args.append('--with-zstd={0}'.format(self.spec['zstd'].prefix.bin.zstd))
# Choose gzip/pigz
zip = self.spec.variants['zip'].value
if zip == 'gzip':
gzip_path = self.spec['gzip'].prefix.bin.gzip
elif zip == 'pigz':
gzip_path = self.spec['pigz'].prefix.bin.pigz
args.append('--with-gzip={}'.format(gzip_path))
return args
|