diff --git a/rpm.changes b/rpm.changes index de2a901..5ce872e 100644 --- a/rpm.changes +++ b/rpm.changes @@ -3,20 +3,6 @@ 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 diff --git a/rpm.spec b/rpm.spec index 17b4411..39890ba 100644 --- a/rpm.spec +++ b/rpm.spec @@ -194,6 +194,7 @@ Requires: grep Requires: gzip Requires: make Requires: patch +Requires: perl-base Requires: sed Requires: systemd-rpm-macros Requires: tar @@ -203,9 +204,8 @@ Requires: xz # drop candidates Requires: cpio Requires: file -# Mandatory generators -Requires: (%{name}-build-perl if perl-base) -Requires: (%{name}-build-python if python3-base) +# for pythondistdeps generator +Requires: python3-base # The point of the split Conflicts: rpm < 4.15.0 @@ -213,22 +213,6 @@ 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 @@ -428,29 +412,24 @@ fi %doc RPM-HOWTO /etc/rpm /bin/rpm - %{_bindir}/gendiff - %{_bindir}/rpm - %{_bindir}/rpm2cpio - %{_bindir}/rpmdb - %{_bindir}/rpmgraph - %{_bindir}/rpmkeys - %{_bindir}/rpmqpack - %{_bindir}/rpmquery - %{_bindir}/rpmsign - %{_bindir}/rpmverify + /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 /usr/sbin/rpmconfigcheck /usr/lib/systemd/system/rpmconfigcheck.service - %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 + /usr/lib/rpm %{_libdir}/rpm-plugins %{_libdir}/librpm.so.* %{_libdir}/librpmio.so.* @@ -475,47 +454,26 @@ 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 5e030d0..b6b4471 100644 --- a/rpmconfigcheck +++ b/rpmconfigcheck @@ -13,11 +13,7 @@ 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 | while read line; do - for suffix in new orig save; do - [[ -e "${line}.rpm${suffix}" ]] && echo "${line}.rpm${suffix}" - done - done > $configcheckfile + rpm -qalc | sort | perl -lne '-e "$_.rpmnew" and print "$_.rpmnew"; -e "$_.rpmorig" and print "$_.rpmorig"; -e "$_.rpmsave" and print "$_.rpmsave"' > $configcheckfile else mv -f $configcheckfile $configcheckfile.old while read l; do diff --git a/rpmsort b/rpmsort index e0a1c86..841c2d7 100644 --- a/rpmsort +++ b/rpmsort @@ -1,76 +1,102 @@ -#!/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 +#! /usr/bin/perl -w -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 +# 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. -function pkgvercmp(a, b) - local ae, av, ar = parse(a) - local be, bv, br = parse(b) +use Getopt::Long qw(:config gnu_getopt); - local ecmp = rpm.vercmp(ae, be) - if ecmp ~= 0 then return ecmp end +sub do_rpm_cmp_versions { + my ($evr1, $evr2) = @_; - local vcmp = rpm.vercmp(av, bv) - if vcmp ~= 0 then return vcmp end + sub _rpm_cmp { + my ($s1, $s2) = @_; - return rpm.vercmp(ar, br) -end + return defined $s1 <=> defined $s2 + unless defined $s1 && defined $s2; -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 ($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; + } - rpm --eval "%{lua: ${script}}" + 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; } -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; } -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 +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; +}; -rpmsort "$DIRECTION" +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); +}