Skip to content

Commit

Permalink
Add rpmbuild too, and disable its config by default
Browse files Browse the repository at this point in the history
  • Loading branch information
haampie committed May 20, 2021
1 parent a515503 commit 2ebd5c4
Show file tree
Hide file tree
Showing 7 changed files with 261 additions and 20 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
v2.2.1
- Actually use symlink gpg2 -> gpg even on gnupg1 to make sure spack picks it
up.

v2.2.0
- Also ship gpg 1.4 and py-boto3 to make binary caches work.

Expand Down
Empty file added build/6_spack/rpmrc
Empty file.
5 changes: 5 additions & 0 deletions build/6_spack/spack
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@ export GIT_EXEC_PATH="$HERE/view/libexec/git-core"
export GIT_TEMPLATE_DIR="$HERE/view/share/git-core/templates/"
export TERMINFO="$HERE/view/share/terminfo"

# rpm has MANY macros to be configured, let's just make everything fail and let
# the user configure every macro they need -- if that turns out incredibly
# unhelpful then I'll likely remove rpm altogether from spack.x
export RPM_CONFIGDIR="$HERE"

# By default run spack $@, but if NO_ENTRYPOINT=... run the command directly
if [ -z ${NO_ENTRYPOINT+x} ]; then
$HERE/view/bin/python3 $HERE/spack_src/bin/spack "$@"
Expand Down
4 changes: 3 additions & 1 deletion build/6_spack/spack.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ spack:
- patchelf
- py-boto3
- python ~dbm ~libxml2
- rpm berkeley-db=none crypto=openssl ~gpg ~lua ~nls ~openmp ~posix ~python ~selinux
~sqlite ~zstd
- squashfs +gzip +zstd +lz4 +lzo +xz default_compression=zstd
- tar
- unzip
Expand All @@ -27,7 +29,7 @@ spack:
target:
- ${TARGET}
gettext:
variants: ~bzip2 ~curses ~git +libxml2 ~tar ~xz ~openmp ~libasprintf
variants: ~bzip2 ~curses ~git ~libxml2 ~tar ~xz ~openmp ~libasprintf
openssl:
variants: ~systemcerts
berkeley-db:
Expand Down
27 changes: 8 additions & 19 deletions build/patches/gpg.patch
Original file line number Diff line number Diff line change
@@ -1,17 +1,8 @@
From 60abe27d7ef5559a3d49b2e98e19cd243f06ff5b Mon Sep 17 00:00:00 2001
From: Harmen Stoppels <harmenstoppels@gmail.com>
Date: Wed, 19 May 2021 22:55:48 +0200
Subject: [PATCH] GPG fixes

---
.../repos/builtin/packages/gnupg/package.py | 67 ++++++++++++++-----
1 file changed, 50 insertions(+), 17 deletions(-)

diff --git a/var/spack/repos/builtin/packages/gnupg/package.py b/var/spack/repos/builtin/packages/gnupg/package.py
index 51d30b7f97..7706c7558c 100644
index 2a602d8eff..e34c1d1b57 100644
--- a/var/spack/repos/builtin/packages/gnupg/package.py
+++ b/var/spack/repos/builtin/packages/gnupg/package.py
@@ -28,42 +28,75 @@ class Gnupg(AutotoolsPackage):
@@ -28,47 +28,74 @@ class Gnupg(AutotoolsPackage):
version('2.2.3', sha256='cbd37105d139f7aa74f92b6f65d136658682094b0e308666b820ae4b984084b4')
version('2.1.21', sha256='7aead8a8ba75b69866f583b6c747d91414d523bfdfbe9a8e0fe026b16ba427dd')

Expand Down Expand Up @@ -46,11 +37,12 @@ index 51d30b7f97..7706c7558c 100644
+ # Getting some linking error.
+ conflicts('%gcc@10:', when='@:1')
+
+ @run_after('install')
+ def add_gpg2_symlink(self):
+ if self.spec.satisfies("@2.0:2.999"):
+ symlink('gpg', self.prefix.bin.gpg2)
+
@run_after('install')
def add_gpg2_symlink(self):
- if self.spec.satisfies("@2.0:2.999"):
- symlink('gpg', self.prefix.bin.gpg2)
+ symlink('gpg', self.prefix.bin.gpg2)

def configure_args(self):
args = [
+ '--disable-nls',
Expand Down Expand Up @@ -104,6 +96,3 @@ index 51d30b7f97..7706c7558c 100644
if self.run_tests:
args.append('--enable-all-tests')

--
2.25.1

240 changes: 240 additions & 0 deletions build/patches/rpm.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,240 @@
From 17b80d63c6fd22886eedf49db53c5675f20c25ec Mon Sep 17 00:00:00 2001
From: Harmen Stoppels <harmenstoppels@gmail.com>
Date: Thu, 20 May 2021 17:14:03 +0200
Subject: [PATCH 1/2] Various improvements to the rpm package

- use a multi-valued variant for crypotgraphy and berkeley-db support
- add lua, zstd and nls variants

Make gettext a build only dep when using `~nls`

Use spack's pkgconfig unconditionally instead of setting env variables
manually for it.

Add missnig iconv dep.

Doxygen is always invoked, so just make it a build dep and drop the doc
variant.

Explicitly disable the systemd inhibit plugin.
---
.../repos/builtin/packages/rpm/package.py | 117 ++++++++++--------
1 file changed, 62 insertions(+), 55 deletions(-)

diff --git a/var/spack/repos/builtin/packages/rpm/package.py b/var/spack/repos/builtin/packages/rpm/package.py
index ec7842325007..481de03cfbda 100644
--- a/var/spack/repos/builtin/packages/rpm/package.py
+++ b/var/spack/repos/builtin/packages/rpm/package.py
@@ -3,7 +3,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

-import os
from spack import *
import llnl.util.tty as tty

@@ -20,44 +19,46 @@ class Rpm(AutotoolsPackage):
homepage = "https://github.com/rpm-software-management/rpm"
url = "https://github.com/rpm-software-management/rpm/archive/rpm-4.16.0-release.tar.gz"

- version('4.16.0', sha256='a62b744e3404b107e8467e1a36ff0f2bf9e5c1b748dbfeb36db54bbb859446ea')
version('4.16.1.2', sha256='3d2807807a8ccaa92a8ced74e09b5bf5b2417a5bbf9bee4abc7c6aa497547bf3')
+ version('4.16.0', sha256='a62b744e3404b107e8467e1a36ff0f2bf9e5c1b748dbfeb36db54bbb859446ea')

- variant('openssl', default=False, description='use openssl for cryptographic library')
- variant('sqlite', default=False, description='use sqlite instead of ndb')
- variant('bdb_ro', default=False, description='standalone support for read-only BDB databases')
- variant('selinux', default=False, description="enable support for SELinux")
- variant('python', default=False, description="build Python bindings to RPM library")
- 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('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 databases')
+ 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('docs', default=False, description='build documentation')
+ 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:')
-
- depends_on('autoconf', type='build')
- depends_on('automake', type='build')
- depends_on('libtool', type='build')
+ 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:')
+ depends_on('berkeley-db@4.5:', when='berkeley-db=full')
+ depends_on('berkeley-db@4.5:', when='berkeley-db=readonly')

- # Required for National Language Support, if not present autopoint error
- depends_on('gettext')
+ depends_on('gettext', when='+nls')
+ depends_on('gettext', type='build')
+ depends_on('iconv')
depends_on('file') # provides magic.h
depends_on('libarchive')

- # suppot for cryptographic signatures
- depends_on('gnupg', when="+gpg")
+ # support for cryptographic signatures
+ depends_on('gnupg', when='+gpg')

# cryptographic library to support digests and signatures
- depends_on('libgcrypt', when='-openssl')
- depends_on('openssl@1.0.2:', when='+openssl')
+ 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')
@@ -65,22 +66,29 @@ class Rpm(AutotoolsPackage):
# Python 2.x support is being deprecated
depends_on('python@3.1:', when='+sqlite')

- # compression support
+ # 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')
-
- # Desired to install these formats for use
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')

- # Documentation dependencies
- depends_on('doxygen', type="build", when="+docs")
+ # 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')

- def setup_build_environment(self, env):
- env.set('LIBS', self.spec['gettext'].libs.search_flags + ' -lintl')
+ # Lua is about to become a hard requirement
+ conflicts('~lua', when='@4.17:')

def autoreconf(self, spec, prefix):
bash = which('bash')
@@ -89,39 +97,38 @@ def autoreconf(self, spec, prefix):
def configure_args(self):
spec = self.spec

- args = ["--enable-ndb"]
-
- pkg_config = os.path.join(spec['lua'].prefix.lib, "pkgconfig")
- os.environ['PKG_CONFIG_PATH'] = pkg_config
- os.putenv('PKG_CONFIG_PATH', pkg_config)
+ args = [
+ '--enable-ndb',
+ '--disable-inhibit-plugin',
+ '--with-crypto={0}'.format(spec.variants['crypto'].value)
+ ]

- # cryptography library defaults to libgcrypt, but doesn't hurt to specify
- if "+openssl" in spec:
- args.append("--with-crypto=openssl")
- tty.warning(openssl_warning)
- else:
- args.append("--with-crypto=libgcrypt")
+ 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')

- # Default to ndb (no deps) if sqlite not wanted
- if "+sqlite" in spec:
- args.append("--enable-sqlite")
- if "+bdb_ro" in spec:
- args.append("--bdb-ro")
+ # Option got removed in 4.17
+ if self.spec.satisfies('@:4.16'):
+ args += self.with_or_without('lua')

- # Enable support for selinux
- if "+selinux" in spec:
- args.append('--with-selinux')
- if "+python" in spec:
- args.append("--enable-python")
+ # 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:
+ if '+posix' in spec:
args.append('--with-cap')

- # OpenMP multithreading support automatically enabled if C compiler has
- # support for OpenMP version 4.5 or higher
- if "~openmp" in spec:
- args.append("--disable-openmp")
+ if 'crypto=openssl' in spec:
+ tty.warn(openssl_warning)

return args


From 93a7d7ad74f49d5c810ad25c0b983a7d961eade3 Mon Sep 17 00:00:00 2001
From: Harmen Stoppels <harmenstoppels@gmail.com>
Date: Thu, 20 May 2021 20:50:58 +0200
Subject: [PATCH 2/2] Add myself as maintainer

---
var/spack/repos/builtin/packages/rpm/package.py | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/var/spack/repos/builtin/packages/rpm/package.py b/var/spack/repos/builtin/packages/rpm/package.py
index 481de03cfbda..1498441cd963 100644
--- a/var/spack/repos/builtin/packages/rpm/package.py
+++ b/var/spack/repos/builtin/packages/rpm/package.py
@@ -18,7 +18,11 @@ class Rpm(AutotoolsPackage):

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

@@ -26,7 +30,7 @@ class Rpm(AutotoolsPackage):
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 databases')
+ 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')
1 change: 1 addition & 0 deletions setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -32,5 +32,6 @@ patch -p1 -d /opt/spack -i /build/patches/hack-wrapper.patch
patch -p1 -d /opt/spack -i /build/patches/curl.patch
patch -p1 -d /opt/spack -i /build/patches/gettext.patch
patch -p1 -d /opt/spack -i /build/patches/gpg.patch
patch -p1 -d /opt/spack -i /build/patches/rpm.patch
patch -p1 -d /opt/spack -i /build/patches/squashfuse.patch
patch -p1 -d /opt/spack -i /build/patches/tar.patch

0 comments on commit 2ebd5c4

Please sign in to comment.