Skip to content

Commit

Permalink
Split tag values of certain tags
Browse files Browse the repository at this point in the history
  • Loading branch information
coolo committed Jan 28, 2021
1 parent 19c0846 commit a250c93
Show file tree
Hide file tree
Showing 7 changed files with 94 additions and 15 deletions.
44 changes: 42 additions & 2 deletions prepare_spec
Expand Up @@ -1047,19 +1047,59 @@ EOF
}
}

sub split_tag {
my ($self, $section) = @_;
my %aa;
my $value = $section->value();

# support very special macros only
my %replacements = ('MACRO-VERSION' => '%{version}', 'MACRO-RELEASE' => '%{release}');
for my $replacement (keys %replacements) {
$value =~ s,\Q$replacements{$replacement}\E,$replacement,g;
}
if ($value =~ /%\(/ || $value =~ /%\{/ || $value =~ /^\(/) {

# do not touch lines with macros we don't know
return undef;
}
while ($value =~ m{([^,<=>\s]+(\s*[<=>]+\s*[^,\s]+)?)}g) {
$aa{$1} = 1;
}
if (scalar keys %aa > 1) {
my @newtags;
for my $key (keys %aa) {
for my $replacement (keys %replacements) {
$key =~ s,$replacement,$replacements{$replacement},g;
}
push(@newtags, Tag->new($section->name(), $key));
}
return \@newtags;
}
return undef;
}

# make sure two tags combined together are in proper sorting
sub reorder_tags {
my $self = shift;
for my $tag (qw(BuildRequires Requires Provides Obsoletes Supplements Recommends)) {

START:
for my $tag (qw(BuildRequires Requires Provides Obsoletes Supplements Recommends PreReq)) {
my $lastsection;
for my $i (0 .. scalar(@{$self->{sections}}) - 1) {
my $section = $self->{sections}->[$i];
if ($section->name() eq $tag && !$section->{comment}) {
my $newtags = $self->split_tag($section);
if ($newtags) {
splice @{$self->{sections}}, $i, 1, @$newtags;
goto START;
}
if ($lastsection) {
if (($section->value() cmp $lastsection->value()) < 0) {
$self->{sections}->[$i] = $lastsection;
$self->{sections}->[$i - 1] = $section;
return $self->reorder_tags();

# perl dislikes deep recursion
goto START;
}
}
$lastsection = $section;
Expand Down
7 changes: 6 additions & 1 deletion testing/aaa_base.spec.out
Expand Up @@ -39,7 +39,12 @@ Requires: /usr/bin/tput
Requires: /usr/bin/xz
Requires: distribution-release
Requires: filesystem
Recommends: logrotate netcfg udev iputils iproute2 aaa_base-extras
Recommends: aaa_base-extras
Recommends: iproute2
Recommends: iputils
Recommends: logrotate
Recommends: netcfg
Recommends: udev
Requires(pre): /usr/bin/rm
Requires(pre): glibc >= 2.30
Requires(post): fillup /usr/bin/chmod /usr/bin/chown
Expand Down
3 changes: 2 additions & 1 deletion testing/nospacebuildrequires.spec.out
Expand Up @@ -17,6 +17,7 @@


BuildRequires: automake
BuildRequires: unzip,dos2unix
BuildRequires: dos2unix
BuildRequires: unzip

%changelog
3 changes: 3 additions & 0 deletions testing/onelinedeps.spec.out
Expand Up @@ -20,5 +20,8 @@ BuildRequires: aaa_base
BuildRequires: pkg1
BuildRequires: pkg2
BuildRequires: pkg3
Requires: gtk2
Requires: yast
Requires: zypper

%changelog
9 changes: 7 additions & 2 deletions testing/prereq.spec.out
Expand Up @@ -20,9 +20,14 @@ Name: prereq
Requires(post): something
Requires(pre): test1
Requires(post): asomething bsomething
PreReq: %fillup_prereq
PreReq: %insserv_prereq
PreReq: /bin/mkdir
PreReq: /bin/rm
PreReq: /usr/bin/chroot
PreReq: deprecatedrequires
PreReq: uglyline1 uglyline2
PreReq: /bin/rm /bin/mkdir /usr/bin/chroot %fillup_prereq %insserv_prereq
PreReq: uglyline1
PreReq: uglyline2
Requires(postun):somethingcrazy

%changelog
40 changes: 32 additions & 8 deletions testing/requires.spec.out
Expand Up @@ -17,18 +17,34 @@


BuildRequires: aaa<3.2.1
BuildRequires: iii <= 4.2.1 jjj> %{version} eee=%{version}-%{release} bbb
BuildRequires: rrr >= %{version} kkk
BuildRequires: bbb
BuildRequires: eee=%{version}-%{release}
BuildRequires: iii <= 4.2.1
BuildRequires: jjj> %{version}
BuildRequires: kkk
BuildRequires: rrr >= %{version}
BuildRequires: zzz

Requires: %{some_packagename} => %{some_version}
Requires: iii <= 4.2.1 jjj> %{version} eee=%{version}-%{release} bbb
Requires: rrr >= %{version} kkk
Requires: aaa<3.2.1 zzz pkgconfig(glib-2.0) perl(DBD::SQLite)
Requires: aaa<3.2.1
Requires: bbb
Requires: eee=%{version}-%{release}
Requires: iii <= 4.2.1
Requires: jjj> %{version}
Requires: kkk
Requires: perl(DBD::SQLite)
Requires: pkgconfig(glib-2.0)
Requires: rrr >= %{version}
Requires: zzz

PreReq: iii <= 4.2.1 jjj> %{version} eee=%{version}-%{release} aaa
PreReq: aaa<3.2.1 zzz
PreReq: rrr >= %{version} kkk
PreReq: aaa
PreReq: aaa<3.2.1
PreReq: eee=%{version}-%{release}
PreReq: iii <= 4.2.1
PreReq: jjj> %{version}
PreReq: kkk
PreReq: rrr >= %{version}
PreReq: zzz

BuildRequires: %{rubygem fast_gettext}
BuildRequires: %{rubygem rails >= 3.2}
Expand All @@ -42,4 +58,12 @@ Provides: %{name} = 0.3.0+gitbcaa
Obsoletes: %{name} = 0.3.0+gitbcaa
Requires: alsa%{dep_postfix} >= 1.0.23

BuildRequires: alsa < 3.0
BuildRequires: alsa >= 1.0
BuildRequires: alsa >= 1.3
BuildRequires: yast2-core-devel
BuildRequires: yast2-core-devel >= 2.16.37
BuildRequires: yast2-ycp-ui-bindings-devel
BuildRequires: yast2-ycp-ui-bindings-devel >= 2.16.37

%changelog
3 changes: 2 additions & 1 deletion testing/rpmcallpkg.spec.out
Expand Up @@ -17,9 +17,10 @@


%if %{with kde4}

%package -n %{name}-client-kde4
Summary: KDE 4 Backend for sflphone
Group: Productivity/Telephony/SIP/Clients
Summary: KDE 4 Backend for sflphone
Requires: %{name} = %{version}-%{release}
%kde4_runtime_requires
%kde4_pimlibs_requires
Expand Down

0 comments on commit a250c93

Please sign in to comment.