kiss: fix dependency issues

Should fix #29, #30, circular dependencies

Note: This is a draft. Please try it and let me know if there are any
issues. I plan to make additional changes. Will make it known once
it's ready.
This commit is contained in:
Dylan Araps 2021-06-28 16:14:12 +00:00
parent 95919dd875
commit 104ace0522

40
kiss
View File

@ -369,12 +369,34 @@ pkg_depends() {
# dependencies are listed first and then the parents in reverse order.
contains "$deps" "$1" || {
# Filter out non-explicit, aleady installed dependencies.
[ "$3" ] && [ -z "$2" ] && (pkg_list "$1" >/dev/null) && return
[ "$3" ] && [ -z "$2" ] && (pkg_list "$1" >/dev/null 2>&1) && return
# Detect circular dependencies and bail out.
# Looks for multiple repeating patterns of (dep dep_parent) (5 is max).
case " $4 " in
*" ${4##* } "*" $1 "\
*" ${4##* } "*" $1 "\
*" ${4##* } "*" $1 "\
*" ${4##* } "*" $1 "\
*" ${4##* } "*" $1 "\
*)
die "Circular dependency detected $1 <> ${4##* }"
esac
_f=$(pkg_find "$1" 2>/dev/null)/depends ||:
# Recurse through the dependencies of the child packages.
while read -r dep _ || [ "$dep" ]; do
[ "${dep##\#*}" ] && pkg_depends "$dep" '' "$3"
done 2>/dev/null < "$(pkg_find "$1")/depends" ||:
! [ -e "$_f" ] || while read -r dep dep_type || [ "$dep" ]; do
# Skip comments.
[ "${dep##\#*}" ] || continue
# Skip make depends if unneeded.
case $dep_type in make)
! pkg_cache "$1" || continue
esac
pkg_depends "$dep" '' "$3" "$4 $1"
done < "$_f" ||:
# After child dependencies are added to the list,
# add the package which depends on them.
@ -721,12 +743,10 @@ pkg_build() {
pkg_etcsums "$pkg"
pkg_tar "$pkg"
# Install only dependencies of passed packages. If this is an update,
# install the built package regardless.
contains "$explicit" "$pkg" && [ -z "$pkg_update" ] && continue
log "$pkg" "Needed as a dependency or has an update, installing"
(KISS_FORCE=1 args i "$pkg")
if [ "$pkg_update" ] || ! contains "$explicit" "$pkg"; then
log "$pkg" "Needed as a dependency or has an update, installing"
(KISS_FORCE=1 args i "$pkg")
fi
done
# Turn the explicit packages into a 'list'. See [1] at top of script.