#!/bin/sh
|
|
#
|
|
# [A] Tobias Hintze <th@rocklinux.org>
|
|
# [A] Thomas "fake" Jakobi <fake@rapidnetworks.de>
|
|
#
|
|
# todo: support multiple packages as arguments and
|
|
# combine common uses/usedby's
|
|
|
|
[ -z "$1" -o "$1" == "-help" ] && {
|
|
cat <<EOF
|
|
usage: $0 [ -usedby | -uses ] PKG [ SOURCE_TREE ]
|
|
|
|
check \$SOURCE_TREE/scripts/dep_db.txt and print
|
|
dependencies and dependants of given package.
|
|
|
|
-usedby : show only packages that depend on this package
|
|
-uses : show only packages this package depends on
|
|
-missing: show only packages missing for this package
|
|
|
|
EOF
|
|
exit 1
|
|
}
|
|
|
|
uses=1
|
|
usedby=1
|
|
missing=1
|
|
|
|
while [ ${1:0:1} == "-" ] ; do
|
|
case $1 in
|
|
-usedby)
|
|
uses=0
|
|
missing=0
|
|
shift
|
|
;;
|
|
-uses)
|
|
usedby=0
|
|
missing=0
|
|
shift
|
|
;;
|
|
-missing)
|
|
usedby=0
|
|
uses=0
|
|
shift
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ $usedby == 0 -a $uses == 0 -a $missing == 0 ] ; then usedby=1 ; uses=1 ; missing=0 ; fi
|
|
|
|
# auto-find sourcetree if none was given
|
|
if [ -n "$2" ] ; then
|
|
SOURCE_TREE=$2
|
|
if [ ! -f $SOURCE_TREE/scripts/dep_db.txt ] ; then
|
|
echo "no $SOURCE_TREE/scripts/dep_db.txt found."
|
|
exit 1
|
|
fi
|
|
else
|
|
if [ -f ./scripts/dep_db.txt ] ; then
|
|
SOURCE_TREE=.
|
|
else
|
|
if [ -f /usr/src/rock-src/scripts/dep_db.txt ] ; then
|
|
echo "using /usr/src/rock-src/scripts/dep_db.txt instead."
|
|
SOURCE_TREE=/usr/src/rock-src
|
|
else
|
|
echo "no ./scripts/dep_db.txt found."
|
|
exit 1
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
cd $SOURCE_TREE
|
|
|
|
function print_nice() {
|
|
CNT=0
|
|
for pkg in $*
|
|
do
|
|
CNT=$(( $CNT+1 ));
|
|
printf "%-15s" ${pkg:0:14}
|
|
if [ $CNT -gt 3 ] ; then printf "\n" ; CNT=0 ; fi
|
|
done
|
|
echo
|
|
}
|
|
|
|
if [ $uses == 1 ] ; then
|
|
echo
|
|
echo "$1 depends on:"
|
|
print_nice `grep "^$1: " ./scripts/dep_db.txt | cut -d" " -f4-`
|
|
fi
|
|
|
|
if [ $usedby == 1 ] ; then
|
|
echo
|
|
echo "packages depending on $1:"
|
|
print_nice `grep "\<$1\>" ./scripts/dep_db.txt | cut -d: -f1`
|
|
fi
|
|
|
|
list_missing_pkgs() {
|
|
MISSING_PKGS="";
|
|
for i in `grep "^$1: " ./scripts/dep_db.txt | cut -d" " -f4-` ; do
|
|
[ $i == $1 -o $i == "x11" -o $i == "xfree86" ] && continue
|
|
if [ ! -f "/var/adm/packages/$i" -a ! -f "/var/adm/packages/$i:dev" ] ; then
|
|
MISSING_PKGS="$MISSING_PKGS $i"
|
|
fi
|
|
done
|
|
echo $MISSING_PKGS
|
|
}
|
|
|
|
# recursive function
|
|
show_missing_pkgs() {
|
|
MISSING_I=`list_missing_pkgs $1`;
|
|
[ -z "$MISSING_I" ] && return ;
|
|
# already shown ?
|
|
[ "${SHOWNLIST/ $1 /}" != "$SHOWNLIST" ] && continue;
|
|
SHOWNLIST="${SHOWNLIST}$1 "
|
|
echo
|
|
echo "packages missing for $1:"
|
|
print_nice $MISSING_I
|
|
for i in $MISSING_I ; do
|
|
[ -z "$i" ] && continue ;
|
|
show_missing_pkgs $i
|
|
done
|
|
}
|
|
|
|
if [ $missing == 1 ] ; then
|
|
SHOWNLIST=" "
|
|
show_missing_pkgs $1
|
|
fi
|
|
echo
|
|
|