#!/usr/bin/perl
+# $Id$
#
# USAGE: specparser.pl file.spec
#
sub next_spec($)
{
$spec = shift;
- %macro = ();
+ $base_spec = $spec;
+ $base_spec =~ s|.*/||;
+ %macro = ( "nil" => "" );
$err_cnt = 0;
}
sub error($)
{
$err_cnt++;
- print "ERROR: $spec: $_[0]\n";
+ print "ERROR: $base_spec: $_[0]\n";
}
sub warning($)
{
- print "ERROR: $spec: $_[0]\n";
+ print "ERROR: $base_spec: $_[0]\n";
}
sub trim_spaces($)
my $v = trim_spaces(shift);
my $cnt = 20;
- while ($v =~ /\%\{([^\{]+)\}/) {
+ while ($v =~ /\%\{([^\}]+)\}/) {
my $value;
if (defined $macro{$1}) {
$value = $macro{$1};
error("undefined macro $1");
$value = "UNDEFINED";
}
- $v =~ s/\%\{([^\{]+)\}/$value/;
+ $v =~ s/\%\{([^\}]+)\}/$value/;
return $v if (length $v > 1000 or $cnt-- <= 0)
}
while (<F>) {
chomp;
if (/^\s*\%(define|global)\s+([^\s]+)\s+([^\s].*)$/) {
- define($2, $3);
+ define($2, $3);
} elsif (/^Version\s*:\s*(.*)/i) {
define("version", $1);
} elsif (/^Name\s*:\s*(.*)/i) {
define("name", $1);
- } elsif (/^Source(\d+)\s*:\s*(.*)/i) {
- define("source_$1", expand($2));
+ #} elsif (/^Source(\d+)\s*:\s*(.*)/i) {
+ # define("source_$1", expand($2));
} elsif (/^Patch(\d+)\s*:\s*(.*)/i) {
define("patch_$1", expand($2));
+ } elsif (/^NoSource\s*:\s*(\d+)\s*$/i) {
+ define("no_source_$1", "1");
}
}
close(F);
sub print_md5($)
{
open(F, "< $_[0]") or die;
+ my $sourceno = undef;
+ my $source = undef;
while (<F>) {
chomp;
- if (/^\s*#\s*source(\d+)-md5\s*:\s*([a-f0-9]{32})/i) {
+ if (/^Source(\d+)\s*:\s*(.*)/i) {
+ $sourceno = $1;
+ $source = expand($2);
+ } elsif (/^\s*#\s*source(\d+)-md5\s*:\s*([a-f0-9]{32})/i) {
my $no = $1;
my $md5 = $2;
- if (defined $macro{"source_$1"}) {
- my $s = $macro{"source_$1"};
+ if (defined $macro{"no_source_$no"}) {
+ error("both NoSource: $no and md5 given");
+ } elsif (defined $sourceno and ($sourceno == $no)) {
+ my $s = $source;
if ($s =~ /^([a-z0-9A-Z:\=\?\@\+\~\.\-\/_]|\%[0-9])+$/) {
- if ($s =~ /^(ftp|http):\/\//) {
+ if ($s =~ /^(ftp|http|https):\/\//) {
if ($s =~ /\/$/) {
error("source $no ($s) is directory");
} else {
} else {
error("source $no url $s is ill-formatted");
}
+ } elsif (defined $sourceno) {
+ error("found md5 for source $no, but last defined source is $sourceno");
} else {
error("source $no not defined");
}
+ $sourceno = undef;
+ $source = undef;
}
}
close(F);