From d5a0effe3be01ef40125d98b12b4eade530db745 Mon Sep 17 00:00:00 2001 From: Ludwig Nussel Date: Tue, 3 Aug 2010 16:28:54 +0200 Subject: [PATCH] introduce dist_canon() in Build.pm --- Build.pm | 43 ++++++++++++++++++++++++++++++++++++++++++- expanddeps | 29 ++--------------------------- spectool | 9 ++++++--- t/dist | 19 +++++++++++++++++++ 4 files changed, 69 insertions(+), 31 deletions(-) create mode 100755 t/dist diff --git a/Build.pm b/Build.pm index 7c20152..3cfa5e5 100644 --- a/Build.pm +++ b/Build.pm @@ -77,6 +77,38 @@ sub init_helper_hashes { $config->{'conflicth'} = \%conflicts; } +# 'canonicalize' dist string as found in rpm dist tags +sub dist_canon($$) { + my ($rpmdist, $arch) = @_; + $rpmdist = lc($rpmdist); + $rpmdist =~ s/-/_/g; + $rpmdist =~ s/opensuse/suse linux/; + my $rpmdista; + if ($rpmdist =~ /\(/) { + $rpmdista = $rpmdist; + $rpmdista =~ s/.*\(//; + $rpmdista =~ s/\).*//; + } else { + $rpmdista = $arch; + } + $rpmdista =~ s/i[456]86/i386/; + $rpmdist = '' unless $rpmdista =~ /^(i386|x86_64|ia64|ppc|ppc64|s390|s390x)$/; + my $dist = 'default'; + if ($rpmdist =~ /unitedlinux 1\.0.*/) { + $dist = "ul1-$rpmdista"; + } elsif ($rpmdist =~ /suse sles_(\d+)/) { + $dist = "sles$1-$rpmdista"; + } elsif ($rpmdist =~ /suse linux enterprise (\d+)/) { + $dist = "sles$1-$rpmdista"; + } elsif ($rpmdist =~ /suse linux (\d+)\.(\d+)\.[4-9]\d/) { + # alpha version + $dist = "$1.".($2 + 1)."-$rpmdista"; + } elsif ($rpmdist =~ /suse linux (\d+\.\d+)/) { + $dist = "$1-$rpmdista"; + } + return $dist; +} + sub read_config_dist { my ($dist, $archpath, $configdir) = @_; @@ -86,11 +118,20 @@ sub read_config_dist { $arch = 'noarch' if $arch eq ''; die("Please specify a distribution!\n") unless defined $dist; if ($dist !~ /\//) { + my $saved = $dist; $configdir = '.' unless defined $configdir; $dist =~ s/-.*//; $dist = "sl$dist" if $dist =~ /^\d/; $dist = "$configdir/$dist.conf"; - $dist = "$configdir/default.conf" unless -e $dist; + if (! -e $dist) { + $dist =~ s/-.*//; + $dist = "sl$dist" if $dist =~ /^\d/; + $dist = "$configdir/$dist.conf"; + } + if (! -e $dist) { + warn "$saved.conf not found, using default.conf\n" unless $saved eq 'default'; + $dist = "$configdir/default.conf"; + } } die("$dist: $!\n") unless -e $dist; my $cf = read_config($arch, $dist); diff --git a/expanddeps b/expanddeps index 5225039..f2929c1 100755 --- a/expanddeps +++ b/expanddeps @@ -101,6 +101,7 @@ for my $arch (@archs) { $packs{$_} ||= "$_.$arch" for @{$packs_arch{$arch} || []}; } +# XXX: move to separate tool if (!defined($dist) || $dist eq '') { my $rpmarch = (grep {$fn{"rpm.$_"}} @archs)[0]; if (!$rpmarch) { @@ -117,33 +118,7 @@ if (!defined($dist) || $dist eq '') { my %res = Build::Rpm::rpmq($rpmfn, 1010); $rpmdist = $res{1010}->[0] || ''; } - $rpmdist = lc($rpmdist); - $rpmdist =~ s/-/_/g; - $rpmdist =~ s/opensuse/suse linux/; - my $rpmdista; - if ($rpmdist =~ /\(/) { - $rpmdista = $rpmdist; - $rpmdista =~ s/.*\(//; - $rpmdista =~ s/\).*//; - } else { - $rpmdista = $archs[0]; - } - $rpmdista =~ s/i[456]86/i386/; - $rpmdist = '' unless $rpmdista =~ /^(i386|x86_64|ia64|ppc|ppc64|s390|s390x)$/; - if ($rpmdist =~ /unitedlinux 1\.0.*/) { - $dist = "ul1-$rpmdista"; - } elsif ($rpmdist =~ /suse sles_(\d+)/) { - $dist = "sles$1-$rpmdista"; - } elsif ($rpmdist =~ /suse linux enterprise (\d+)/) { - $dist = "sles$1-$rpmdista"; - } elsif ($rpmdist =~ /suse linux (\d+)\.(\d+)\.[4-9]\d/) { - # alpha version - $dist = "$1.".($2 + 1)."-$rpmdista"; - } elsif ($rpmdist =~ /suse linux (\d+\.\d+)/) { - $dist = "$1-$rpmdista"; - } else { - $dist = 'default'; - } + $dist = Build::dist_canon($rpmdist, $archs[0]); } print STDERR "Warning: distribution not specified, assuming '$dist' (see $configdir).\n"; } diff --git a/spectool b/spectool index 8c24086..c1b6cdb 100755 --- a/spectool +++ b/spectool @@ -170,16 +170,19 @@ if (!defined $archs) { } push @archs, 'noarch' unless grep {$_ eq 'noarch'} @archs; -$dist = 'default' unless $dist; +unless ($dist) { + $dist = `rpm -q --qf '%{DISTRIBUTION}' rpm 2>/dev/null`; + $dist = Build::dist_canon($dist||'', $archs[0]); +} if($dist !~ /\// && !defined $configdir) { if($0 =~ /^\//) { use File::Basename qw/dirname/; $configdir = dirname($0).'/configs'; - undef $configdir unless -e $configdir.'/default.conf'; + undef $configdir unless -e $configdir.'/sl11.3.conf'; } else { $configdir = $builddir.'/configs'; - undef $configdir unless -e $configdir.'/default.conf'; + undef $configdir unless -e $configdir.'/sl11.3.conf'; } if(!defined $configdir) { print STDERR "please specify config dir\n"; diff --git a/t/dist b/t/dist new file mode 100755 index 0000000..889d182 --- /dev/null +++ b/t/dist @@ -0,0 +1,19 @@ +#!/usr/bin/perl -w + +use strict; +use Test::More tests => 9; +use Build; + +sub d { + Build::dist_canon($_[0], $_[1]||'i586'); +} + +is(d("UnitedLinux 1.0 (x86-64)"), "ul1-x86_64"); +is(d("SuSE SLES-8 (ia64)"), "sles8-ia64"); +is(d("SuSE Linux 8.2 (x86-64)"), "8.2-x86_64"); +is(d("SuSE SLES-9 (x86-64)"), "sles9-x86_64"); +is(d("SUSE Linux 10.1 (PPC64)"), "10.1-ppc64"); +is(d("SUSE Linux Enterprise 10 (PPC)"), "sles10-ppc"); +is(d("openSUSE 10.3 (X86-64)"), "10.3-x86_64"); +is(d("SUSE Linux Enterprise 11"), "sles11-i386"); +is(d("openSUSE 11.3"), "11.3-i386"); -- 2.7.4