diff --git a/.files b/.files
index 6336d62..d229323 100644
Binary files a/.files and b/.files differ
diff --git a/.rev b/.rev
index f47860b..ce3e804 100644
--- a/.rev
+++ b/.rev
@@ -2166,4 +2166,12 @@ it, updates to Tumbleweed may end up with a broken rpm database.
See bugzilla 1167537 for the gory details.
787932
+
+ 0cbf0a12532f9b0765d288b0d7cda1ed
+ 4.15.1
+
+ dimstar_suse
+ - Initialize the libgcrypt library [bnc#1167343]
+ 791720
+
diff --git a/initgcrypt.diff b/initgcrypt.diff
new file mode 100644
index 0000000..bd03088
--- /dev/null
+++ b/initgcrypt.diff
@@ -0,0 +1,11 @@
+--- ./rpmio/digest_libgcrypt.c.orig 2020-04-06 10:10:26.096842925 +0000
++++ ./rpmio/digest_libgcrypt.c 2020-04-06 10:10:39.832806646 +0000
+@@ -20,6 +20,8 @@ struct DIGEST_CTX_s {
+ /**************************** init ************************************/
+
+ int rpmInitCrypto(void) {
++ gcry_check_version (NULL);
++ gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
+ return 0;
+ }
+
diff --git a/rpm.changes b/rpm.changes
index 024fc95..c677046 100644
--- a/rpm.changes
+++ b/rpm.changes
@@ -1,4 +1,10 @@
-------------------------------------------------------------------
+Fri Apr 3 12:34:42 CEST 2020 - mls@suse.de
+
+- Initialize the libgcrypt library [bnc#1167343]
+ * new patch: initgcrypt.diff
+
+-------------------------------------------------------------------
Tue Mar 24 22:16:22 CET 2020 - mls@suse.de
- Follow one level of symlink indirection when converting the rpm
@@ -11,6 +17,20 @@ Mon Mar 23 16:11:34 UTC 2020 - Sergio Lindo Mansilla
- Add macro for supported ARM 64bit processors
-------------------------------------------------------------------
+Fri Mar 13 08:26:58 UTC 2020 - Fabian Vogt
+
+- Replace rpmsort with rewrite using Lua (boo#1164553)
+
+-------------------------------------------------------------------
+Wed Feb 26 09:08:19 UTC 2020 - Fabian Vogt
+
+- Split out perl and python dep generators from rpm-build to avoid
+ pulling in perl and python in all RPM builds
+- Port rpmconfigcheck to pure shell
+- Refactor %files list of main package to not require %excludes
+ as those might lead to missing files in the package
+
+-------------------------------------------------------------------
Fri Jan 17 11:27:17 CET 2020 - mls@suse.de
- Use libgcrypt as crypto library instead of beecrypt
diff --git a/rpm.spec b/rpm.spec
index da1f9e8..eb31d89 100644
--- a/rpm.spec
+++ b/rpm.spec
@@ -131,6 +131,7 @@ Patch119: bdb_ro.diff
Patch120: disable_bdb.diff
Patch121: ndb_backport.diff
Patch122: db_conversion.diff
+Patch123: initgcrypt.diff
Patch6464: auto-config-update-aarch64-ppc64le.diff
BuildRoot: %{_tmppath}/%{name}-%{version}-build
#
@@ -194,7 +195,6 @@ Requires: grep
Requires: gzip
Requires: make
Requires: patch
-Requires: perl-base
Requires: sed
Requires: systemd-rpm-macros
Requires: tar
@@ -204,8 +204,9 @@ Requires: xz
# drop candidates
Requires: cpio
Requires: file
-# for pythondistdeps generator
-Requires: python3-base
+# Mandatory generators
+Requires: (%{name}-build-perl if perl-base)
+Requires: (%{name}-build-python if python3-base)
# The point of the split
Conflicts: rpm < 4.15.0
@@ -213,6 +214,22 @@ Conflicts: rpm < 4.15.0
If you want to build a rpm, you need this package. It provides rpmbuild
and requires some packages that are usually required.
+%package build-python
+Summary: RPM dependency generator for Python
+Group: Development/Languages/Python
+Requires: python3-base
+
+%description build-python
+Provides and requires generator for .py files and modules.
+
+%package build-perl
+Summary: RPM dependency generator for Perl
+Group: Development/Languages/Perl
+Requires: perl-base
+
+%description build-perl
+Provides and requires generator for .pl files and modules.
+
%prep
%setup -q -n rpm-%{version}
rm -rf sqlite
@@ -239,7 +256,7 @@ cp config.guess config.sub db/dist/
%patch -P 93 -P 94 -P 99
%patch -P 100 -P 102 -P 103
%patch -P 109 -P 117
-%patch -P 118 -P 119 -P 120 -P 121 -P 122
+%patch -P 118 -P 119 -P 120 -P 121 -P 122 -P 123
%ifarch aarch64 ppc64le riscv64
%patch6464
@@ -412,24 +429,29 @@ fi
%doc RPM-HOWTO
/etc/rpm
/bin/rpm
- /usr/bin/*
- %exclude /usr/bin/rpmbuild
- %exclude %{_libdir}/librpmbuild.so.*
- %exclude /usr/lib/rpm/elfdeps
- %exclude /usr/lib/rpm/rpmdeps
- %exclude /usr/lib/rpm/debugedit
- %exclude /usr/lib/rpm/sepdebugcrcfix
- %exclude /usr/bin/rpmspec
- %exclude /usr/lib/rpm/*.prov
- %exclude /usr/lib/rpm/*.req
- %exclude /usr/lib/rpm/brp-*
- %exclude /usr/lib/rpm/check-*
- %exclude /usr/lib/rpm/*find*
- %exclude /usr/lib/rpm/fileattrs/pythondist.attr
- %exclude /usr/lib/rpm/pythondistdeps.py
+ %{_bindir}/gendiff
+ %{_bindir}/rpm
+ %{_bindir}/rpm2cpio
+ %{_bindir}/rpmdb
+ %{_bindir}/rpmgraph
+ %{_bindir}/rpmkeys
+ %{_bindir}/rpmqpack
+ %{_bindir}/rpmquery
+ %{_bindir}/rpmsign
+ %{_bindir}/rpmverify
/usr/sbin/rpmconfigcheck
/usr/lib/systemd/system/rpmconfigcheck.service
- /usr/lib/rpm
+ %dir /usr/lib/rpm
+ /usr/lib/rpm/macros
+ /usr/lib/rpm/macros.d/
+ /usr/lib/rpm/platform/
+ /usr/lib/rpm/rpm.supp
+ /usr/lib/rpm/rpmdb_*
+ /usr/lib/rpm/rpmpopt-*
+ /usr/lib/rpm/rpmrc
+ /usr/lib/rpm/rpmsort
+ /usr/lib/rpm/suse
+ /usr/lib/rpm/tgpg
%{_libdir}/rpm-plugins
%{_libdir}/librpm.so.*
%{_libdir}/librpmio.so.*
@@ -454,26 +476,47 @@ fi
%files build
%defattr(-,root,root)
/usr/bin/rpmbuild
+/usr/lib/rpm/libtooldeps.sh
+/usr/lib/rpm/pkgconfigdeps.sh
+/usr/lib/rpm/pythondeps.sh
/usr/lib/rpm/elfdeps
/usr/lib/rpm/rpmdeps
/usr/lib/rpm/debugedit
/usr/lib/rpm/sepdebugcrcfix
/usr/bin/rpmspec
-/usr/lib/rpm/*.prov
-/usr/lib/rpm/*.req
/usr/lib/rpm/brp-*
/usr/lib/rpm/check-*
/usr/lib/rpm/*find*
+/usr/lib/rpm/fileattrs/
+%exclude /usr/lib/rpm/fileattrs/pythondist.attr
+%exclude /usr/lib/rpm/fileattrs/perl*.attr
+/usr/lib/rpm/*.prov
+%exclude /usr/lib/rpm/perl.prov
+/usr/lib/rpm/*.req
+%exclude /usr/lib/rpm/perl.req
+%ifarch aarch64 ppc64le riscv64
+/usr/lib/rpm/config.guess
+/usr/lib/rpm/config.sub
+%endif
+
+%files build-python
+%defattr(-,root,root)
/usr/lib/rpm/fileattrs/pythondist.attr
/usr/lib/rpm/pythondistdeps.py
+%files build-perl
+%defattr(-,root,root)
+/usr/lib/rpm/fileattrs/perl*.attr
+/usr/lib/rpm/perl.prov
+/usr/lib/rpm/perl.req
+
%files devel
%defattr(644,root,root,755)
- /usr/include/rpm
- %{_libdir}/librpm.so
- %{_libdir}/librpmbuild.so
- %{_libdir}/librpmio.so
- %{_libdir}/librpmsign.so
- %{_libdir}/pkgconfig/rpm.pc
+/usr/include/rpm
+%{_libdir}/librpm.so
+%{_libdir}/librpmbuild.so
+%{_libdir}/librpmio.so
+%{_libdir}/librpmsign.so
+%{_libdir}/pkgconfig/rpm.pc
%changelog
diff --git a/rpmconfigcheck b/rpmconfigcheck
index 62a327a..7e668d6 100644
--- a/rpmconfigcheck
+++ b/rpmconfigcheck
@@ -13,7 +13,11 @@ if test -s $packages -a \( ! -e $configcheckfile -o -s $configcheckfile -o ! $pa
echo "Searching for unresolved configuration files"
if test ! -e $configcheckfile -o ! $packages -ot $configcheckfile ; then
test -e $configcheckfile && mv -f $configcheckfile $configcheckfile.old
- rpm -qalc | sort | perl -lne '-e "$_.rpmnew" and print "$_.rpmnew"; -e "$_.rpmorig" and print "$_.rpmorig"; -e "$_.rpmsave" and print "$_.rpmsave"' > $configcheckfile
+ rpm -qalc | sort | while read line; do
+ for suffix in new orig save; do
+ [[ -e "${line}.rpm${suffix}" ]] && echo "${line}.rpm${suffix}"
+ done
+ done > $configcheckfile
else
mv -f $configcheckfile $configcheckfile.old
while read l; do
diff --git a/rpmsort b/rpmsort
index 75629fc..19d5614 100644
--- a/rpmsort
+++ b/rpmsort
@@ -1,102 +1,76 @@
-#! /usr/bin/perl -w
+#!/bin/sh
+# rpmsort implemented mostly in Lua
+# Copyright (c) 2020 SUSE LLC
+# SPDX-License-Identifier: GPL-2.0-or-later
+# Author: fvogt@suse.de
+# Enhanced by: mwilck@suse.com
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-# USA.
+rpmsort() {
+ direction=$1
+ script='
+function parse(ver)
+ local epoch, version, release = 0, ver, 0
+ _, eend, e = ver:find("^(%d+):")
+ if eend then
+ ver = ver:sub(eend + 1)
+ version = ver
+ epoch = e
+ end
+ _, _, v, r = ver:find("(.+)%-(.+)$")
+ if v then
+ version = v
+ release = r
+ end
+ return epoch, version, release
+end
-use Getopt::Long qw(:config gnu_getopt);
+function pkgvercmp(a, b)
+ local ae, av, ar = parse(a)
+ local be, bv, br = parse(b)
-sub do_rpm_cmp_versions {
- my ($evr1, $evr2) = @_;
+ local ecmp = rpm.vercmp(ae, be)
+ if ecmp ~= 0 then return ecmp end
- sub _rpm_cmp {
- my ($s1, $s2) = @_;
+ local vcmp = rpm.vercmp(av, bv)
+ if vcmp ~= 0 then return vcmp end
- return defined $s1 <=> defined $s2
- unless defined $s1 && defined $s2;
+ return rpm.vercmp(ar, br)
+end
- my ($r, $x1, $x2);
- do {
- $s1 =~ s/^[^a-zA-Z0-9]+//;
- $s2 =~ s/^[^a-zA-Z0-9]+//;
- if ($s1 =~ /^\d/ || $s2 =~ /^\d/) {
- $s1 =~ s/^(0*(\d*))//; $x1 = $2;
- return -1 if $1 eq '';
- $s2 =~ s/^(0*(\d*))//; $x2 = $2;
- return 1 if $1 eq '';
- $r = length $x1 <=> length $x2 || $x1 cmp $x2;
- } else {
- $s1 =~ s/^([a-zA-Z]*)//; $x1 = $1;
- $s2 =~ s/^([a-zA-Z]*)//; $x2 = $1;
- return 0
- if $x1 eq '' && $x2 eq '';
- $r = $x1 cmp $x2;
- }
- } until $r;
- return $r;
- }
+vers = {}
+for line in io.stdin:lines() do
+ table.insert(vers, line)
+end
+table.sort(vers, function(a, b) return pkgvercmp(a, b) == '"$direction"' end)
+print(table.concat(vers, "\n"))
+'
- my ($e1, $v1, $r1) = $evr1 =~ /^(?:(\d*):)?(.*?)(?:-([^-]*))?$/;
- my ($e2, $v2, $r2) = $evr2 =~ /^(?:(\d*):)?(.*?)(?:-([^-]*))?$/;
- my $r = _rpm_cmp($e1 || 0, $e2 || 0);
- $r = _rpm_cmp($v1, $v2)
- unless $r;
- $r = _rpm_cmp($r1, $r2)
- unless $r;
- return $r;
+ rpm --eval "%{lua: ${script}}"
}
-my $reorder = sub { return @_ };
-my $key = 0;
-my $test = 0;
+usage() {
+ cat >&2 <;
- close($fd) or die "zypper: $!\n";
- chomp $res2;
- if ($res1 != $res2) {
- my @operators = qw(< == >);
- my $op1 = $operators[$res1 + 1];
- my $op2 = $operators[$res2 + 1];
-
- print STDERR "BUG: $evr1 $op1 $evr2 vs. zypper: $evr1 $op2 $evr2\n";
- }
- }
- return $res1;
+Options:
+ -r|--reverse sort backwards
+ -h|--help print this help
+EOF
+ exit 0
}
-GetOptions ("r|reverse" => sub { $reorder = sub { return reverse @_ } },
- "k|key=i" => \$key,
- "test" => \$test)
-or do {
- print STDERR "Usage $0 [-r, --reverse] [-k N, --key=N] [--test]\n";
- exit 1;
-};
+DIRECTION=-1
+while [ $# -gt 0 ]; do
+ case $1 in
+ -r|--reverse) DIRECTION=1;;
+ -h|--help) usage;;
+ *) echo "$0: invalid parameter $1 ignored" >&2;;
+ esac
+ shift
+done
-if ($key == 0) {
- # Sort by entire lines
- map { print } &$reorder(sort { rpm_cmp_versions($a, $b) } <>);
-} else {
- # Sort by field $key
- my @data = map { [(split)[$key-1], $_] } <>;
- map { print } &$reorder(map { $_->[1] }
- sort { rpm_cmp_versions($a->[0], $b->[0]) } @data);
-}
+rpmsort "$DIRECTION"