#! /usr/bin/perl -w

sub rpm_cmp_versions {
    my ($evr1, $evr2) = @_;

    sub _rpm_cmp {
	my ($s1, $s2) = @_;

	return defined $s1 <=> defined $s2
	    unless defined $s1 && defined $s2;

	my ($r, $x1, $x2);
	do {
	    $s1 =~ s/^[^a-zA-Z0-9]+//;
	    $s2 =~ s/^[^a-zA-Z0-9]+//;
	    if ($s1 =~ /^[0-9]/ || $s2 =~ /^[0-9]/) {
		$s1 =~ s/^0*([0-9]*)//;  $x1 = $1;
		$s2 =~ s/^0*([0-9]*)//;  $x2 = $1;
		$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;
    }

    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;
}

if (@ARGV == 2) {
    my $cmp = rpm_cmp_versions($ARGV[0], $ARGV[1]);
    print $cmp < 0 ? "<\n" : $cmp > 0 ? ">\n" : "=\n";
} elsif (@ARGV == 0) {
    map { print } sort { rpm_cmp_versions($a, $b) } <>;
} else {
    print STDERR "SYNOPSIS: $0 [<ver1> <ver2>]\n";
    exit 1
}
