text: # 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"""
  