#!/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
|
|
|