diff --git a/kiss b/kiss index 94b876c..77a33fd 100755 --- a/kiss +++ b/kiss @@ -401,8 +401,16 @@ pkg_depends() { while read -r dep _ || [ "$dep" ]; do case $dep in [!#]*) - pkg_list "$dep" >/dev/null 2>&1 || - pkg_depends "$dep" + case $2 in + filter) + pkg_depends "$dep" "$2" + ;; + + *) + pkg_list "$dep" >/dev/null 2>&1 || + pkg_depends "$dep" + ;; + esac ;; esac done < "$repo_dir/depends" @@ -413,6 +421,20 @@ pkg_depends() { } } +pkg_order() { + # Sort a list of packages based on dependence. + for _pkg do + pkg_depends "$_pkg" filter + done + + for _pkg in $deps; do + contains "$*" "$_pkg" && + order="$order $_pkg" redro="$_pkg $redro" + done + + deps= +} + pkg_strip() { # Strip package binaries and libraries. This saves space on the system as # well as on the tarballs we ship for installation. @@ -1425,7 +1447,9 @@ args() { ;; i|install) - for pkg do + pkg_order "$@" + + for pkg in $order; do pkg_install "$pkg" done ;; @@ -1443,7 +1467,9 @@ args() { ;; r|remove) - for pkg do + pkg_order "$@" + + for pkg in $redro; do pkg_remove "$pkg" done ;;