|
@ -4,6 +4,8 @@ use strict; |
|
|
use English; |
|
|
use English; |
|
|
|
|
|
|
|
|
my (@pkg, %opr, %pri, %dep, %rep, %rdp, %ign, %lop); |
|
|
my (@pkg, %opr, %pri, %dep, %rep, %rdp, %ign, %lop); |
|
|
|
|
|
my @useddeps; # deps used for visualization of cross dependencies |
|
|
|
|
|
my %pkg_redone; # packages built in stages 6-8 |
|
|
|
|
|
|
|
|
foreach (@ARGV) { $ign{$_} = 1; } |
|
|
foreach (@ARGV) { $ign{$_} = 1; } |
|
|
|
|
|
|
|
@ -11,7 +13,8 @@ print "Reading package priorities ...\n"; |
|
|
open(F, "./scripts/Create-PkgList |") || die $!; |
|
|
open(F, "./scripts/Create-PkgList |") || die $!; |
|
|
while (<F>) { |
|
|
while (<F>) { |
|
|
@_ = split /\s+/; |
|
|
@_ = split /\s+/; |
|
|
next unless $_[1] eq "-----5---9"; |
|
|
|
|
|
|
|
|
next if $_[1] =~ /[1234]/ or $_[1] !~ /5/; |
|
|
|
|
|
$pkg_redone{$_[4]} = 1 if $_[1] =~ /[678]/; |
|
|
next if defined $ign{$_[3]} || defined $ign{$_[4]}; |
|
|
next if defined $ign{$_[3]} || defined $ign{$_[4]}; |
|
|
$opr{$_[4]} = $_[2]; |
|
|
$opr{$_[4]} = $_[2]; |
|
|
$pri{$_[4]} = $_[2]; |
|
|
$pri{$_[4]} = $_[2]; |
|
@ -28,6 +31,7 @@ while () { |
|
|
print "Format Error: $_\n"; |
|
|
print "Format Error: $_\n"; |
|
|
exit 1; |
|
|
exit 1; |
|
|
} |
|
|
} |
|
|
|
|
|
next if defined $pkg_redone{$1}; |
|
|
@{$dep{$1}} = split /\s+/, $2; |
|
|
@{$dep{$1}} = split /\s+/, $2; |
|
|
foreach ( @{$dep{$1}} ) { |
|
|
foreach ( @{$dep{$1}} ) { |
|
|
$rdp{$_} = () unless defined $rdp{$_}; |
|
|
$rdp{$_} = () unless defined $rdp{$_}; |
|
@ -53,13 +57,13 @@ sub count_errs($) { |
|
|
return $errors; |
|
|
return $errors; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
my ($interation, $package, $dependency, $a, $b); |
|
|
|
|
|
|
|
|
my ($iteration, $package, $dependency, $a, $b); |
|
|
my $did_something=0; |
|
|
my $did_something=0; |
|
|
|
|
|
|
|
|
print "\nLoop Old/New Errors Package Dependency\n". |
|
|
print "\nLoop Old/New Errors Package Dependency\n". |
|
|
"------------------------------------------------------------------------\n"; |
|
|
"------------------------------------------------------------------------\n"; |
|
|
|
|
|
|
|
|
for $interation (1..99) { |
|
|
|
|
|
|
|
|
for $iteration (1..99) { |
|
|
my $looplog = ''; |
|
|
my $looplog = ''; |
|
|
foreach $package (@pkg) { |
|
|
foreach $package (@pkg) { |
|
|
foreach $dependency (@{$dep{$package}}) { |
|
|
foreach $dependency (@{$dep{$package}}) { |
|
@ -74,8 +78,9 @@ for $interation (1..99) { |
|
|
$looplog.="[$package,$dependency]"; |
|
|
$looplog.="[$package,$dependency]"; |
|
|
|
|
|
|
|
|
$_ = sprintf "[%02d] %-7d %-7d %-25s %s\n", |
|
|
$_ = sprintf "[%02d] %-7d %-7d %-25s %s\n", |
|
|
$interation, $a, $b, $pri{$dependency}." ".$package, |
|
|
|
|
|
|
|
|
$iteration, $a, $b, $pri{$dependency}." ".$package, |
|
|
$pri{$package}." ".$dependency; |
|
|
$pri{$package}." ".$dependency; |
|
|
|
|
|
$useddeps[$iteration]{$package}{$dependency} = 1; |
|
|
s/ / . /g; s/\. /.. /g; s/\. /.. /g; |
|
|
s/ / . /g; s/\. /.. /g; s/\. /.. /g; |
|
|
s/\. (\s*)\./..$1./g; s/\. (\s*)\./..$1./g; |
|
|
s/\. (\s*)\./..$1./g; s/\. (\s*)\./..$1./g; |
|
|
print; $did_something=1; |
|
|
print; $did_something=1; |
|
@ -84,11 +89,35 @@ for $interation (1..99) { |
|
|
} |
|
|
} |
|
|
last if $looplog eq ""; |
|
|
last if $looplog eq ""; |
|
|
if (defined $lop{$looplog}) { |
|
|
if (defined $lop{$looplog}) { |
|
|
|
|
|
my %crossdeps; |
|
|
|
|
|
|
|
|
print "[XX] Detected endless-loop ". |
|
|
print "[XX] Detected endless-loop ". |
|
|
"(cross-dependency) -> Aborting now.\n"; |
|
|
"(cross-dependency) -> Aborting now.\n"; |
|
|
|
|
|
print "[XX] Debug graph printed to dependencies.dot.\n"; |
|
|
|
|
|
|
|
|
|
|
|
foreach my $i ($lop{$looplog} .. $iteration) { |
|
|
|
|
|
foreach my $p (keys %{$useddeps[$i]}) { |
|
|
|
|
|
foreach my $d (keys %{$useddeps[$i]{$p}}) { |
|
|
|
|
|
$crossdeps{$d}{$p} = 1; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
open(F, ">dependencies.dot") || die $!; |
|
|
|
|
|
print F "# run this thru e.g. 'dot -Tps dependencies.dot -o dependencies.ps'\n"; |
|
|
|
|
|
print F "digraph \"Cross-Dependencies Graph\" {\n"; |
|
|
|
|
|
foreach my $p (sort keys %crossdeps) { |
|
|
|
|
|
foreach my $d (sort keys %{$crossdeps{$p}}) { |
|
|
|
|
|
my $p_ = $p; $p_ =~ s/[^a-z0-9]/_/g; |
|
|
|
|
|
my $d_ = $d; $d_ =~ s/[^a-z0-9]/_/g; |
|
|
|
|
|
print F "\t$p_ -> $d_;\n"; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
print F "}\n"; |
|
|
|
|
|
close F; |
|
|
last; |
|
|
last; |
|
|
} |
|
|
} |
|
|
$lop{$looplog} = 1; |
|
|
|
|
|
|
|
|
$lop{$looplog} = $iteration; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if ( $did_something ) { |
|
|
if ( $did_something ) { |
|
|