Browse Source

Clifford Wolf:


			
			
				rocklinux
			
			
		
Clifford Wolf 20 years ago
parent
commit
69c8599a38
5 changed files with 120 additions and 38 deletions
  1. +6
    -0
      Documentation/Developers/PKG-DESC-FORMAT
  2. +12
    -0
      scripts/Build-Pkg
  3. +30
    -7
      scripts/Check-Deps-2
  4. +66
    -31
      scripts/Create-DepDB
  5. +6
    -0
      scripts/dep_fixes.txt

+ 6
- 0
Documentation/Developers/PKG-DESC-FORMAT

@ -80,6 +80,12 @@ file.
All dependencies to a package in this group (compiler) will get expanded to All dependencies to a package in this group (compiler) will get expanded to
dependencies to all packages in this group. dependencies to all packages in this group.
Format: [E] add xfree86
Add xfree86 to the auto-generated list of dependencies for this package.
Format: [E] del auctex
Delete auctex from the auto-generated list of dependencies for this package.
-- --
[L] [LICENSE] (*) [L] [LICENSE] (*)

+ 12
- 0
scripts/Build-Pkg

@ -786,6 +786,18 @@ abort() {
fi fi
sort -u $builddir/dependencies.debug > var/adm/dep-debug/$xpkg sort -u $builddir/dependencies.debug > var/adm/dep-debug/$xpkg
# add debug info for known false positives
if egrep -q "^[^#].*[ ]$xpkg([ ]|$)" $base/scripts/dep_fixes.txt; then
mkdir -p $root/var/adm/rock-debug
echo "--- $xpkg [$stagelevel] ---" >> $root/var/adm/rock-debug/falsedeps.txt
fi
while read x; do
mkdir -p $root/var/adm/rock-debug
grep "^$x: " $builddir/dependencies.debug | sort -u | \
sed "s,:, -> $xpkg [$stagelevel]:," >> $root/var/adm/rock-debug/falsedeps.txt
done < <( egrep "^$xpkg[ ]+del[ ]+" $base/scripts/dep_fixes.txt | \
tr ' ' '\t' | tr -s '\t' | cut -f3- | tr '\t' '\n' )
# merge the dependencies defined by the package # merge the dependencies defined by the package
for x in `echo "$desc_E" | egrep '^add ' | sed 's/^add //' ` ; do for x in `echo "$desc_E" | egrep '^add ' | sed 's/^add //' ` ; do
echo "Adding dependency: $x ..." echo "Adding dependency: $x ..."

+ 30
- 7
scripts/Check-Deps-2

@ -3,7 +3,7 @@
use strict; use strict;
use English; use English;
my (@pkg, %opr, %pri, %dep, %rep, %rdp, %ign, %lop);
my (@pkg, %opr, %pri, %dep, %rep, %rdp, %ign, %lop, %deldeps);
my @useddeps; # deps used for visualization of cross dependencies my @useddeps; # deps used for visualization of cross dependencies
my %pkg_redone; # packages built in stages 6-8 my %pkg_redone; # packages built in stages 6-8
@ -14,7 +14,7 @@ open(F, "./scripts/Create-PkgList |") || die $!;
while (<F>) { while (<F>) {
@_ = split /\s+/; @_ = split /\s+/;
next if $_[1] =~ /[1234]/ or $_[1] !~ /5/; next if $_[1] =~ /[1234]/ or $_[1] !~ /5/;
$pkg_redone{$_[4]} = 1 if $_[1] =~ /[678]/;
$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];
@ -23,6 +23,26 @@ while () {
} }
close F; close F;
print "Reading dependency fixes ...\n";
open(F, "scripts/dep_fixes.txt") or die $!;
while (<F>) {
chomp;
if (/^([^#\s]\S*)\s+del\s+(.*)$/) {
my ($p, $l) = ($1, $2);
$deldeps{$p}{$_} = 1 foreach (split /\s+/, $l);
next;
}
if (/^([^#\s]\S*)\s+add\s+(.*)$/) {
my ($p, $l) = ($1, $2);
foreach ( split /\s+/, $l ) {
push @{$dep{$p}}, $_;
push @{$rdp{$_}}, $p;
}
next;
}
}
close F;
print "Reading package dependencies ...\n"; print "Reading package dependencies ...\n";
open(F, "scripts/dep_db.txt") || die $!; open(F, "scripts/dep_db.txt") || die $!;
while (<F>) { while (<F>) {
@ -31,11 +51,13 @@ while () {
print "Format Error: $_\n"; print "Format Error: $_\n";
exit 1; exit 1;
} }
next if defined $pkg_redone{$1};
@{$dep{$1}} = split /\s+/, $2;
foreach ( @{$dep{$1}} ) {
$rdp{$_} = () unless defined $rdp{$_};
push @{$rdp{$_}}, $1;
my ($p, $l) = ($1, $2);
next if defined $pkg_redone{$p};
foreach ( split /\s+/, $l ) {
next if $deldeps{$p}{$_};
push @{$dep{$p}}, $_;
push @{$rdp{$_}}, $p;
} }
} }
close F; close F;
@ -106,6 +128,7 @@ for $iteration (1..99) {
open(F, ">dependencies.dot") || die $!; open(F, ">dependencies.dot") || die $!;
print F "# run this thru e.g. 'dot -Tps dependencies.dot -o dependencies.ps'\n"; print F "# run this thru e.g. 'dot -Tps dependencies.dot -o dependencies.ps'\n";
print F "digraph \"Cross-Dependencies Graph\" {\n"; print F "digraph \"Cross-Dependencies Graph\" {\n";
print F " Package_X -> Has_X_in_Dep_List;\n";
foreach my $p (sort keys %crossdeps) { foreach my $p (sort keys %crossdeps) {
foreach my $d (sort keys %{$crossdeps{$p}}) { foreach my $d (sort keys %{$crossdeps{$p}}) {
my $p_ = $p; $p_ =~ s/[^a-z0-9]/_/g; my $p_ = $p; $p_ =~ s/[^a-z0-9]/_/g;

+ 66
- 31
scripts/Create-DepDB

@ -43,40 +43,78 @@ done
echo -n "Creating dependency database ..." >&2 echo -n "Creating dependency database ..." >&2
sedscript1=`mktemp` ; sedscript2=`mktemp`
while read package command args
do
perl1="" perl2=""
while read package command args; do
package=${package%.desc:*} package=${package%.desc:*}
package=${package##*/} ; set -- $args package=${package##*/} ; set -- $args
case "$command" in
group)
echo -e "/^$package\$/ a \\\\\n$*" >> $sedscript1
echo -e "/^$*\$/ a \\\\\n$package" >> $sedscript2
esac
done < <( egrep '^\[(E|DEP|DEPENDENCY)\]' $descdir/*/*/*.desc )
if [ -f create_depdb.cache ] ; then
cat create_depdb.cache
else
for x in $cachedir/*/*/*.cache ; do
y=${x%/*.cache} ; y=${y##*/}
z=${x%/*/*.cache} ; z=${z##*/}
priority=$( egrep '^\[(P|PRI|PRIORITY)\] ' \
$descdir/$z/$y/$y.desc | \
tr '\t' ' ' | tr -s ' ' | cut -f3,4 -d' ' | \
sed 's,9 , ,; s,-,,g; s,.*\(.\) ,\1.,' )
buildtime=$( grep '^\[BUILDTIME\] ' $x | cut -f2 -d' ' )
[ "$buildtime" ] || continue
perl1="$perl1 if (defined \$deps{'$package'}) {"
for x; do perl1="$perl1 \$deps{$x} = 1;"; done
for x; do perl2="$perl2 \$deps{$package} = 1 if defined \$deps{$x};"; done
perl1="$perl1 }"
done < <( egrep '^\[(E|DEP|DEPENDENCY)\][ ]+group[ ]' $descdir/*/*/*.desc )
perl -e '
my %deldeps = ();
my %adddeps = ();
# open(F, "scripts/dep_fixes.txt") or die $!;
# while (<F>) {
# chomp;
# if (/^([^#\s]\S*)\s+del\s+(.*)$/) {
# my ($p, $l) = ($1, $2);
# $deldeps{$p}{$_} = 1 foreach (split /\s+/, $l);
# next;
# }
# if (/^([^#\s]\S*)\s+add\s+(.*)$/) {
# my ($p, $l) = ($1, $2);
# $adddeps{$p}{$_} = 1 foreach (split /\s+/, $l);
# next;
# }
# }
# close F;
foreach my $c (<'$cachedir'/*/*/*.cache>) {
my ($pri, $time) = (1, 1);
my $pkg = $c; $pkg=~s,^.*/([^/]*)/[^/]*$,$1,;
my %deps = ();
$deps{$_} = 1 foreach (keys %{$adddeps{$pkg}});
open(F, "$c") or die "$!: $c";
while (<F>) {
if (/^\[BUILDTIME\]/) {
@_ = split /\s+/;
$time = $_[1];
next;
}
if (/^\[DEP\]/) {
@_ = split /\s+/; shift @_;
foreach (@_) { $deps{$_} = 1 unless defined $deldeps{$pkg}{$_}; }
next;
}
}
close F;
$c =~ s/\.cache$/.desc/;
open(F, "$c") or die "$!: $c";
while (<F>) {
if (/^\[(P|PRI|PRIORITY)\]/) {
@_ = split /\s+/;
$_[2] =~ s/^.*([0-8]).*$/$1/;
$pri = $_[2].".".$_[3];
next;
}
}
close F;
deps=$( grep '^\[DEP\] ' $x | cut -f2- -d' ' | tr ' ' '\n' | \
sed -f $sedscript1 | sed -f $sedscript2 | \
sort -u | grep -vx $y )
'"$perl1 $perl2"'
echo $y $buildtime $priority $deps $y
print "$pkg $time $pri ", join(" ", sort keys %deps), " $pkg\n";
}
done | if [ "$debug" ] ; then tee create_depdb.cache ; else cat ; fi
fi | gawk '
' | gawk '
function getpri(package) { function getpri(package) {
datafile="'$tmp1'"; datafile="'$tmp1'";
@ -171,6 +209,3 @@ END {
} }
' | if [ "$debug" ] ; then cat ; else sort ; fi ' | if [ "$debug" ] ; then cat ; else sort ; fi
rm -f $sedscript1
rm -f $sedscript2

+ 6
- 0
scripts/dep_fixes.txt

@ -0,0 +1,6 @@
# This file contains a list of known false positives in the dependency
# auto-detection. It is used by scripts/Check-Deps-2 to resolve the cyclic
# dependencies and by scripts/Build-Pkg to dump additional debug info
# for this dependencies.

Loading…
Cancel
Save