# 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 llnl.util.tty as tty from spack import * class Rpm(AutotoolsPackage): """ The RPM package manager https://github.com/rpm-software-management/rpm/blob/master/INSTALL Note that debugedit is an additional tool that *should* compile with adding libdw and elfutils, but the library (as of 4.16.1.2) is being removed from rpm and will be put somewhere else. """ homepage = "https://github.com/rpm-software-management/rpm" url = "https://github.com/rpm-software-management/rpm/archive/rpm-4.16.0-release.tar.gz" git = "https://github.com/rpm-software-management/rpm.git" maintainers = ['haampie'] version('master', branch='master') version('4.16.1.2', sha256='3d2807807a8ccaa92a8ced74e09b5bf5b2417a5bbf9bee4abc7c6aa497547bf3') version('4.16.0', sha256='a62b744e3404b107e8467e1a36ff0f2bf9e5c1b748dbfeb36db54bbb859446ea') variant('crypto', values=('openssl', 'libgcrypt'), default='libgcrypt', multi=False, description='What cryptographic library to use') variant('sqlite', default=False, description='Use sqlite instead of ndb') variant('berkeley-db', values=('full', 'readonly', 'none'), default='none', multi=False, description='Type of support for Berkeley DB') variant('selinux', default=False, description="Enable support for SELinux") variant('python', default=False, description="Build Python bindings to RPM library") variant('lua', default=True, description='Build with lua support') variant('zstd', default=False, description='Build with zstd suport') variant('posix', default=False, description="Enable POSIX.1e draft 15 file capabilities support") variant('gpg', default=False, description="Install gpg for using cryptographic signatures") variant('openmp', default=True, description="OpenMP multithreading support") variant('nls', default=False, description='Enable native language support') # Always required depends_on('popt') # Without this file patch, we don't detect lua depends_on('lua+pcfile@5.3.5:', when='+lua') # Enable POSIX.1e draft 15 file capabilities support depends_on('libcap', when="+posix") depends_on('berkeley-db@4.5:', when='berkeley-db=full') depends_on('berkeley-db@4.5:', when='berkeley-db=readonly') depends_on('gettext', when='+nls') depends_on('gettext', type='build') depends_on('iconv') depends_on('file') # provides magic.h depends_on('libarchive') # support for cryptographic signatures depends_on('gnupg', when='+gpg') # cryptographic library to support digests and signatures depends_on('libgcrypt', when='crypto=libgcrypt') depends_on('openssl@1.0.2:', when='crypto=openssl') # RPM needs some database, ndb requires no extra dependencies but sqlite does depends_on('sqlite@3.22.0:', when='+sqlite') # Python 2.x support is being deprecated depends_on('python@3.1:', when='+sqlite') # compression support -- there is no configure option for many of these # and they autodetect the libraries, so it's better to just make them # hard requirements to avoid linking against system libraries. depends_on('zlib') depends_on('bzip2') depends_on('gzip') depends_on('xz') depends_on('lzma') depends_on('zstd', when='+zstd') # java jar dependency analysis (already requirement for lua) depends_on('unzip', type='run') # Build dependencies depends_on('doxygen', type='build') depends_on('pkgconfig', type='build') depends_on('autoconf', type='build') depends_on('automake', type='build') depends_on('libtool', type='build') depends_on('m4', type='build') # Lua is about to become a hard requirement conflicts('~lua', when='@4.17:') def autoreconf(self, spec, prefix): bash = which('bash') bash('./autogen.sh', '--noconfigure') def configure_args(self): spec = self.spec args = [ '--enable-ndb', '--disable-inhibit-plugin', '--with-crypto={0}'.format(spec.variants['crypto'].value) ] args += self.enable_or_disable('nls') args += self.enable_or_disable('sqlite') args += self.with_or_without('selinux') args += self.with_or_without('python') # OpenMP multithreading support automatically enabled if C compiler has # support for OpenMP version 4.5 or higher args += self.enable_or_disable('openmp') # Option got removed in 4.17 if self.spec.satisfies('@:4.16'): args += self.with_or_without('lua') # Legacy berkely db support if 'berkeley-db=full' in spec: args.extend(['--enable-bdb', '--disable-bdb-ro']) elif 'berkeley-db=readonly' in spec: args.extend(['--disable-bdb', '--enable-bdb-ro']) else: args.extend(['--disable-bdb', '--disable-bdb-ro']) # enable POSIX.1e draft 15 file capabilities support if '+posix' in spec: args.append('--with-cap') if 'crypto=openssl' in spec: tty.warn(openssl_warning) return args # This warning is from the INSTALL about licensing when using openssl. # We need to show it to the user if they choose the openssl variant. openssl_warning = """ When compiling against OpenSSL, there is a possible license incompatibility. For more details on this, see https://people.gnome.org/~markmc/openssl-and-the-gpl.html Some Linux distributions have different legal interpretations of this possible incompatibility. It is recommended to consult with a lawyer before building RPM against OpenSSL. Fedora: https://fedoraproject.org/wiki/Licensing:FAQ#What.27s_the_deal_with_the_OpenSSL_license.3F Debian: https://lists.debian.org/debian-legal/2002/10/msg00113.html"""