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.

128 lines
2.5 KiB

  1. #!/bin/sh
  2. #
  3. # [A] Tobias Hintze <th@rocklinux.org>
  4. # [A] Thomas "fake" Jakobi <fake@rapidnetworks.de>
  5. #
  6. # todo: support multiple packages as arguments and
  7. # combine common uses/usedby's
  8. [ -z "$1" -o "$1" == "-help" ] && {
  9. cat <<EOF
  10. usage: $0 [ -usedby | -uses ] PKG [ SOURCE_TREE ]
  11. check \$SOURCE_TREE/scripts/dep_db.txt and print
  12. dependencies and dependants of given package.
  13. -usedby : show only packages that depend on this package
  14. -uses : show only packages this package depends on
  15. -missing: show only packages missing for this package
  16. EOF
  17. exit 1
  18. }
  19. uses=1
  20. usedby=1
  21. missing=1
  22. while [ ${1:0:1} == "-" ] ; do
  23. case $1 in
  24. -usedby)
  25. uses=0
  26. missing=0
  27. shift
  28. ;;
  29. -uses)
  30. usedby=0
  31. missing=0
  32. shift
  33. ;;
  34. -missing)
  35. usedby=0
  36. uses=0
  37. shift
  38. ;;
  39. esac
  40. done
  41. if [ $usedby == 0 -a $uses == 0 -a $missing == 0 ] ; then usedby=1 ; uses=1 ; missing=0 ; fi
  42. # auto-find sourcetree if none was given
  43. if [ -n "$2" ] ; then
  44. SOURCE_TREE=$2
  45. if [ ! -f $SOURCE_TREE/scripts/dep_db.txt ] ; then
  46. echo "no $SOURCE_TREE/scripts/dep_db.txt found."
  47. exit 1
  48. fi
  49. else
  50. if [ -f ./scripts/dep_db.txt ] ; then
  51. SOURCE_TREE=.
  52. else
  53. if [ -f /usr/src/rock-src/scripts/dep_db.txt ] ; then
  54. echo "using /usr/src/rock-src/scripts/dep_db.txt instead."
  55. SOURCE_TREE=/usr/src/rock-src
  56. else
  57. echo "no ./scripts/dep_db.txt found."
  58. exit 1
  59. fi
  60. fi
  61. fi
  62. cd $SOURCE_TREE
  63. function print_nice() {
  64. CNT=0
  65. for pkg in $*
  66. do
  67. CNT=$(( $CNT+1 ));
  68. printf "%-15s" ${pkg:0:14}
  69. if [ $CNT -gt 3 ] ; then printf "\n" ; CNT=0 ; fi
  70. done
  71. echo
  72. }
  73. if [ $uses == 1 ] ; then
  74. echo
  75. echo "$1 depends on:"
  76. print_nice `grep "^$1: " ./scripts/dep_db.txt | cut -d" " -f4-`
  77. fi
  78. if [ $usedby == 1 ] ; then
  79. echo
  80. echo "packages depending on $1:"
  81. print_nice `grep "\<$1\>" ./scripts/dep_db.txt | cut -d: -f1`
  82. fi
  83. list_missing_pkgs() {
  84. MISSING_PKGS="";
  85. for i in `grep "^$1: " ./scripts/dep_db.txt | cut -d" " -f4-` ; do
  86. [ $i == $1 -o $i == "x11" -o $i == "xfree86" ] && continue
  87. if [ ! -f "/var/adm/packages/$i" -a ! -f "/var/adm/packages/$i:dev" ] ; then
  88. MISSING_PKGS="$MISSING_PKGS $i"
  89. fi
  90. done
  91. echo $MISSING_PKGS
  92. }
  93. # recursive function
  94. show_missing_pkgs() {
  95. MISSING_I=`list_missing_pkgs $1`;
  96. [ -z "$MISSING_I" ] && return ;
  97. # already shown ?
  98. [ "${SHOWNLIST/ $1 /}" != "$SHOWNLIST" ] && continue;
  99. SHOWNLIST="${SHOWNLIST}$1 "
  100. echo
  101. echo "packages missing for $1:"
  102. print_nice $MISSING_I
  103. for i in $MISSING_I ; do
  104. [ -z "$i" ] && continue ;
  105. show_missing_pkgs $i
  106. done
  107. }
  108. if [ $missing == 1 ] ; then
  109. SHOWNLIST=" "
  110. show_missing_pkgs $1
  111. fi
  112. echo