mirror of the now-defunct rocklinux.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

176 lines
4.3 KiB

#!/bin/bash
#
# --- ROCK-COPYRIGHT-NOTE-BEGIN ---
#
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
# Please add additional copyright information _after_ the line containing
# the ROCK-COPYRIGHT-NOTE-END tag. Otherwise it might get removed by
# the ./scripts/Create-CopyPatch script. Do not edit this copyright text!
#
# ROCK Linux: rock-src/scripts/Create-DepDB
# ROCK Linux is Copyright (C) 1998 - 2003 Clifford Wolf
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version. A copy of the GNU General Public
# License can be found at Documentation/COPYING.
#
# Many people helped and are helping developing ROCK Linux. Please
# have a look at http://www.rocklinux.org/ and the Documentation/TEAM
# file for details.
#
# --- ROCK-COPYRIGHT-NOTE-END ---
cachedir="package"
descdir="package"
debug=''
while [ "$1" ] ; do
case "$1" in
-cachedir)
cachedir=$2 ; shift ; shift ;;
-descdir)
descdir=$2 ; shift ; shift ;;
-debug)
debug=$2 ; shift ; shift ;;
*)
echo "Usage: $0 [ -cachedir cachedir ] [ -descdir descdir ] \\"
echo " ${0//?/ } [ -debug pkg ] > filename"
exit 1 ;;
esac
done
echo -n "Creating dependency database ..." >&2
sedscript1=`mktemp` ; sedscript2=`mktemp`
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
deps=$( grep '^\[DEP\] ' $x | cut -f2- -d' ' | tr ' ' '\n' | \
sed -f $sedscript1 | sed -f $sedscript2 | \
sort -u | grep -vx $y )
echo $y $buildtime $priority $deps $y
done | if [ "$debug" ] ; then tee create_depdb.cache ; else cat ; fi
fi | gawk '
function getpri(package) {
datafile="'$tmp1'";
delete todo;
delete done;
todo[ package ] = 1;
returncode=0;
endloop=0;
level=0;
if (debug != "") {
print "";
print "Creating priority for " package " ...";
}
while ( ! endloop ) {
endloop=1; level++;
for (pkg in todo) {
endloop=0;
delete todo[pkg];
done[pkg] = 1;
firstdebug=1;
for (nextpkg in database) {
if ( index(database[nextpkg], " " pkg " ") ) {
if ( ! (nextpkg in done) &&
! (nextpkg in todo) &&
! (nextpkg in ignore) ) {
if ("x" orderdb[nextpkg] < "x" orderdb[pkg]) {
if (debug != "") {
if (firstdebug)
print "\n\t(" level ") Found " \
"dependencies for " pkg ":";
print "\t\t" pkg ": " \
"required by " nextpkg \
" (ignore reverse dep)";
firstdebug=0;
}
} else {
if (debug != "") {
if (firstdebug)
print "\n\t(" level ") Found " \
"dependencies for " pkg ":";
print "\t\t" pkg ": " \
"required by " nextpkg;
firstdebug=0;
}
todo[nextpkg] = 1;
returncode++;
}
}
}
}
}
}
return returncode;
}
BEGIN {
counter=0;
debug="'$debug'";
}
{
orderdb[$1]=$3; $3=0;
database[$1]=$0;
if (NF > 102) {
printf "\rPackage %s has %d dependencies. I don'\''t " \
"believe this.\n", $1, NF - 3 > "/dev/stderr";
ignore[$1] = 1;
}
counter++;
}
END {
if (debug != "") {
pri=getpri(debug);
print "\nResulting Priority: " pri;
} else {
for (package in database) {
printf "\rCreating dependency database (" \
counter ") ... \b" > "/dev/stderr";
$0 = database[package]; $3 = getpri(package);
$1 = $1 ":"; print; counter--;
}
print "\rCreating dependency database ... " \
"done." > "/dev/stderr";
}
}
' | if [ "$debug" ] ; then cat ; else sort ; fi
rm -f $sedscript1
rm -f $sedscript2