From c17cf8e42a726e18a83a12db7e1cfad4736988db Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Fri, 25 Feb 2005 19:21:05 +0000 Subject: [PATCH] Clifford Wolf: Some scripts/Create-DepDB fixes Added scripts/Create-DepList [2005022313590405103] (https://www.rocklinux.net/submaster) git-svn-id: http://www.rocklinux.org/svn/rock-linux/trunk@5664 c5f82cb5-29bc-0310-9cd0-bff59a50e3bc --- package/base/gcc/gcc.desc | 2 +- package/base/glibc/glibc.desc | 2 +- package/base/linux/linux.desc | 4 +- scripts/Create-DepDB | 21 +++--- scripts/Create-DepList | 137 ++++++++++++++++++++++++++++++++++ 5 files changed, 154 insertions(+), 12 deletions(-) create mode 100644 scripts/Create-DepList diff --git a/package/base/gcc/gcc.desc b/package/base/gcc/gcc.desc index b0594ca1f..d3c2858aa 100644 --- a/package/base/gcc/gcc.desc +++ b/package/base/gcc/gcc.desc @@ -39,7 +39,7 @@ [F] DIETLIBC CC KCC CXX F77 [F] CORE -[E] group compiler +[E] group compiler gcc2 gcc32 gcc33 gcc34 [L] GPL [S] Stable diff --git a/package/base/glibc/glibc.desc b/package/base/glibc/glibc.desc index 56c5e023f..d0c5f8c7f 100644 --- a/package/base/glibc/glibc.desc +++ b/package/base/glibc/glibc.desc @@ -35,7 +35,7 @@ [C] base/library [F] CORE -[E] group libc +[E] group libc glibc22 glibc23 [E] del libgd [L] GPL diff --git a/package/base/linux/linux.desc b/package/base/linux/linux.desc index dc2cef31e..d6d9d0cd0 100644 --- a/package/base/linux/linux.desc +++ b/package/base/linux/linux.desc @@ -34,7 +34,9 @@ [F] DIETLIBC KERNEL [F] CORE -[E] group kernel +[E] group kernel-image linux24 linux26 +[E] group kernel-header linux24-header linux26-header +[E] group kernel-source linux24-source linux26-source [L] GPL [S] Stable diff --git a/scripts/Create-DepDB b/scripts/Create-DepDB index f67174e90..371d4ce42 100755 --- a/scripts/Create-DepDB +++ b/scripts/Create-DepDB @@ -44,14 +44,15 @@ done echo "Reading *.cache and *.desc files ..." >&2 perl1="" perl2="" -while read package command args; do +while read package command group packages +do package=${package%.desc:*} - package=${package##*/} ; set -- $args + package=${package##*/} - 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 }" + for p in $package $packages; do + perl1="$perl1 \$deps{'$group'} = 1 if defined \$deps{'$p'};" + perl2="$perl2 \$deps{'$p'} = 1 if defined \$deps{'$group'};" + done done < <( egrep '^\[(E|DEP|DEPENDENCY)\][ ]+group[ ]' $descdir/*/*/*.desc ) perl -e ' @@ -195,7 +196,7 @@ BEGIN { { orderdb[$1]=$3; $3=0; database[$1]=$0; - if (NF > 120) { + if (NF > 150) { printf "\rPackage %s has %d dependencies. I don'\''t " \ "believe this.\n", $1, NF - 3 > "/dev/stderr"; ignore[$1] = 1; @@ -211,8 +212,10 @@ END { for (package in database) { printf "\rCreating dependency database (" \ counter ") ... \b" > "/dev/stderr"; - $0 = database[package]; $3 = getpri(package); - $1 = $1 ":"; print; counter--; + $0 = database[package]; + $3 = getpri(package); + $1 = $1 ":"; print; + counter--; } print "\rCreating dependency database ... " \ diff --git a/scripts/Create-DepList b/scripts/Create-DepList new file mode 100644 index 000000000..a262cb63b --- /dev/null +++ b/scripts/Create-DepList @@ -0,0 +1,137 @@ +#!/usr/bin/perl -w + +use strict; + +my $depdb = "scripts/dep_db.txt"; +my $pkgfile = "config/default/packages"; +my $rootdir = ""; + +my $showinst = 0; +my $showdups = 0; + +sub help() +{ + print "\n"; + print "Usage $0 [ ] [ [ .. ] ]\n"; + print "\n"; + print "Options:\n"; + print "\n"; + print " -cfg Use package list from config\n"; + print " -root Use dir as root directory\n"; + print " -depdb Use file as dependency database\n"; + print "\n"; + print " -chroot Use 'build/../' as root\n"; + print "\n"; + print " -showinst Also show already installed deps\n"; + print " -showdups Also show already printed deps\n"; + print "\n"; + + exit 1; +} + +while ( $#ARGV >= 0 and $ARGV[0] =~ /^-/ ) +{ + my $opt = shift @ARGV; + if ( $opt eq "-cfg" ) { + $pkgfile = "config/".(shift @ARGV)."/packages"; + next; + } + if ( $opt eq "-root" ) { + $rootdir = shift @ARGV; + next; + } + if ( $opt eq "-depdb" ) { + $depdb = shift @ARGV; + next; + } + if ( $opt eq "-chroot" ) { + my $cfgfile = $pkgfile; + $cfgfile =~ s/packages$/config/; + $rootdir = "build/".`source $cfgfile; echo \$ROCKCFG_ID;`; + chomp $rootdir; + next; + } + if ( $opt eq "-showinst" ) { + $showinst = 1; + next; + } + if ( $opt eq "-showdups" ) { + $showdups = 1; + next; + } + help; +} + +help if $#ARGV < 0; + +my %pkgs; +my %pkgs_reverse; + +open(F, "<$pkgfile") or die "Can't open $pkgfile: $!"; +while () { + next unless /^X/; + my @f = split /\s+/; + if ( $f[4] =~ /(.*)=(.*)/ ) { + $pkgs{$2} = $1; + push @{$pkgs_reverse{$1}}, $2; + } else { + $pkgs{$f[4]} = $f[4]; + push @{$pkgs_reverse{$f[4]}}, $f[4]; + } + +} +close F; + +my %deps; + +open(F, "<$depdb") or die "Can't open $depdb: $!"; +while () { + chomp; + die "DepDB syntax error" unless /^(\S+): \d+ \d+ (.*)\s+\1$/; + next unless defined $pkgs_reverse{$1}; + my @deplist = split /\s+/, $2; + foreach (@{$pkgs_reverse{$1}}) { + $deps{$_} = \@deplist; + } +} +close F; + +my %duptags; + +sub showdeps($$); +sub showdeps($$) +{ + my $sp = " " x $_[0]; + my $p = $_[1]; + + my $is_dup = defined $duptags{$p}; + $duptags{$p} = 1; + + my $is_inst = -f "$rootdir/var/adm/packages/$p"; + while (<$rootdir/var/adm/packages/$p:*>) { + $is_inst = 1 if -f "$_"; + } + + if ( $_[0] > 0 ) { + return if $is_dup and not $showdups; + return if $is_inst and not $showinst; + } + + print "${sp}$p"; + print " (already_installed)" if $is_inst; + print " (duplicate)" if $is_dup; + print "\n"; + + return if $is_dup; + return if $is_inst; + + foreach (@{$deps{$p}}) { + showdeps($_[0]+1, $_) + if defined $deps{$_}; + } +} + +foreach my $p (@ARGV) { + showdeps(0, $p); +} +