From 69c8599a3814aab0b98e1d65cbe5f869fe38f3a1 Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Wed, 7 Jul 2004 12:28:17 +0000 Subject: [PATCH] Clifford Wolf: Added scripts/dep_fixes.txt - used by Check-Deps-2 to fix build order - used by Build-Pkg to create additional debug info in $root/var/adm/rock-debug/falsedeps.txt Added info about '[E] {add,del}' to PKG-DESC-FORMAT [2004062913454531013] (https://www.rocklinux.net/submaster) git-svn-id: http://www.rocklinux.org/svn/rock-linux/trunk@3523 c5f82cb5-29bc-0310-9cd0-bff59a50e3bc --- Documentation/Developers/PKG-DESC-FORMAT | 6 ++ scripts/Build-Pkg | 12 +++ scripts/Check-Deps-2 | 37 +++++++-- scripts/Create-DepDB | 97 ++++++++++++++++-------- scripts/dep_fixes.txt | 6 ++ 5 files changed, 120 insertions(+), 38 deletions(-) create mode 100644 scripts/dep_fixes.txt diff --git a/Documentation/Developers/PKG-DESC-FORMAT b/Documentation/Developers/PKG-DESC-FORMAT index b4d435a5c..8840298eb 100644 --- a/Documentation/Developers/PKG-DESC-FORMAT +++ b/Documentation/Developers/PKG-DESC-FORMAT @@ -80,6 +80,12 @@ file. All dependencies to a package in this group (compiler) will get expanded to 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] (*) diff --git a/scripts/Build-Pkg b/scripts/Build-Pkg index 994b16ea9..9498b6938 100755 --- a/scripts/Build-Pkg +++ b/scripts/Build-Pkg @@ -786,6 +786,18 @@ abort() { fi 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 for x in `echo "$desc_E" | egrep '^add ' | sed 's/^add //' ` ; do echo "Adding dependency: $x ..." diff --git a/scripts/Check-Deps-2 b/scripts/Check-Deps-2 index 609f30eb7..9887d64fb 100755 --- a/scripts/Check-Deps-2 +++ b/scripts/Check-Deps-2 @@ -3,7 +3,7 @@ use strict; 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 %pkg_redone; # packages built in stages 6-8 @@ -14,7 +14,7 @@ open(F, "./scripts/Create-PkgList |") || die $!; while () { @_ = split /\s+/; 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]}; $opr{$_[4]} = $_[2]; $pri{$_[4]} = $_[2]; @@ -23,6 +23,26 @@ while () { } close F; +print "Reading dependency fixes ...\n"; +open(F, "scripts/dep_fixes.txt") or die $!; +while () { + 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"; open(F, "scripts/dep_db.txt") || die $!; while () { @@ -31,11 +51,13 @@ while () { print "Format Error: $_\n"; 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; @@ -106,6 +128,7 @@ for $iteration (1..99) { 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"; + print F " Package_X -> Has_X_in_Dep_List;\n"; foreach my $p (sort keys %crossdeps) { foreach my $d (sort keys %{$crossdeps{$p}}) { my $p_ = $p; $p_ =~ s/[^a-z0-9]/_/g; diff --git a/scripts/Create-DepDB b/scripts/Create-DepDB index 8edd07df7..42cfc8a94 100755 --- a/scripts/Create-DepDB +++ b/scripts/Create-DepDB @@ -43,40 +43,78 @@ done 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##*/} ; 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 () { +# 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 () { + 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 () { + 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) { datafile="'$tmp1'"; @@ -171,6 +209,3 @@ END { } ' | if [ "$debug" ] ; then cat ; else sort ; fi -rm -f $sedscript1 -rm -f $sedscript2 - diff --git a/scripts/dep_fixes.txt b/scripts/dep_fixes.txt new file mode 100644 index 000000000..c067218b7 --- /dev/null +++ b/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. +