Skip to content

Commit

Permalink
introduce dist_canon() in Build.pm
Browse files Browse the repository at this point in the history
  • Loading branch information
lnussel committed Sep 20, 2010
1 parent 98cfe31 commit d5a0eff
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 31 deletions.
43 changes: 42 additions & 1 deletion Build.pm
Original file line number Diff line number Diff line change
Expand Up @@ -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) = @_;

Expand All @@ -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);
Expand Down
29 changes: 2 additions & 27 deletions expanddeps
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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";
}
Expand Down
9 changes: 6 additions & 3 deletions spectool
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down
19 changes: 19 additions & 0 deletions t/dist
Original file line number Diff line number Diff line change
@@ -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");

0 comments on commit d5a0eff

Please sign in to comment.