aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Iurt/RPM.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Iurt/RPM.pm')
-rw-r--r--lib/Iurt/RPM.pm55
1 files changed, 55 insertions, 0 deletions
diff --git a/lib/Iurt/RPM.pm b/lib/Iurt/RPM.pm
new file mode 100644
index 0000000..de09ba4
--- /dev/null
+++ b/lib/Iurt/RPM.pm
@@ -0,0 +1,55 @@
+package Iurt::RPM;
+
+use base qw(Exporter);
+use RPM4::Header;
+use MDK::Common;
+use strict;
+
+our @EXPORT = qw(
+ check_arch
+ check_noarch
+);
+
+sub check_noarch {
+ my ($rpm) = @_;
+ my $hdr = RPM4::Header->new($rpm);
+
+ # Stupid rpm doesn't return an empty list so we must check for (none)
+
+ my ($build_archs) = $hdr->queryformat('%{BUILDARCHS}');
+
+ if ($build_archs ne '(none)') {
+ ($build_archs) = $hdr->queryformat('[%{BUILDARCHS} ]');
+ my @list = split ' ', $build_archs;
+ return 1 if member('noarch', @list);
+ }
+
+ return 0;
+}
+
+sub check_arch {
+ my ($rpm, $arch) = @_;
+ my $hdr = RPM4::Header->new($rpm);
+
+ # Stupid rpm doesn't return an empty list so we must check for (none)
+
+ my ($exclusive_arch) = $hdr->queryformat('%{EXCLUSIVEARCH}');
+
+ if ($exclusive_arch ne '(none)') {
+ ($exclusive_arch) = $hdr->queryformat('[%{EXCLUSIVEARCH} ]');
+ my @list = split ' ', $exclusive_arch;
+ return 0 unless member($arch, @list);
+ }
+
+ my ($exclude_arch) = $hdr->queryformat('[%{EXCLUDEARCH} ]');
+
+ if ($exclude_arch ne '(none)') {
+ ($exclude_arch) = $hdr->queryformat('[%{EXCLUDEARCH} ]');
+ my @list = split ' ', $exclude_arch;
+ return 0 if member($arch, @list);
+ }
+
+ return 1;
+}
+
+1;