forked from kiss-community/kiss
kiss-new: Full dependency resolvers.
This commit is contained in:
parent
4a84fe78f5
commit
f6d7a387ea
39
kiss-new
39
kiss-new
@ -103,7 +103,7 @@ pkg_list() {
|
|||||||
# Also warn if a package is missing its version file.
|
# Also warn if a package is missing its version file.
|
||||||
for pkg; do
|
for pkg; do
|
||||||
[ -d "$pkg" ] || {
|
[ -d "$pkg" ] || {
|
||||||
log "Package '$pkg' is not installed." >&2
|
log "Package '$pkg' is not installed."
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,28 +161,27 @@ pkg_sources() {
|
|||||||
|
|
||||||
pkg_depends() {
|
pkg_depends() {
|
||||||
# Resolve all dependencies and install them in the right order.
|
# Resolve all dependencies and install them in the right order.
|
||||||
for pkg; do
|
|
||||||
# Find the package's repository files. This needs to keep
|
# Find the package's repository files. This needs to keep
|
||||||
# happening as we can't store this data in any kind of data
|
# happening as we can't store this data in any kind of data
|
||||||
# structure.
|
# structure.
|
||||||
repo_dir=$(pkg_search "$pkg")
|
repo_dir=$(pkg_search "$1")
|
||||||
|
|
||||||
# Package doesn't depend on anything, skip it.
|
pkg_list "$1" >/dev/null || {
|
||||||
[ -f "$repo_dir/depends" ] || continue
|
|
||||||
|
|
||||||
while read -r dep _; do
|
|
||||||
pkg_list "$dep" >/dev/null || {
|
|
||||||
case $missing_deps in
|
case $missing_deps in
|
||||||
# Dependency is already in list, skip it.
|
# Dependency is already in list, skip it.
|
||||||
*" $dep "*) ;;
|
*" $1 "*) ;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
missing_deps="$missing_deps $dep "
|
[ -f "$repo_dir/depends" ] &&
|
||||||
|
while read -r dep _; do
|
||||||
|
pkg_depends "$dep"
|
||||||
|
done < "$repo_dir/depends"
|
||||||
|
|
||||||
|
missing_deps="$missing_deps $1 "
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
done < "$repo_dir/depends"
|
|
||||||
done
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pkg_build() {
|
pkg_build() {
|
||||||
@ -190,6 +189,20 @@ pkg_build() {
|
|||||||
# also checks checksums, downloads sources and ensure all dependencies
|
# also checks checksums, downloads sources and ensure all dependencies
|
||||||
# are installed.
|
# are installed.
|
||||||
|
|
||||||
|
# Resolve dependencies and generate a list.
|
||||||
|
log "Resolving dependencies..."
|
||||||
|
for pkg; do pkg_depends "$pkg"; done
|
||||||
|
|
||||||
|
# Disable globbing with 'set -f' to ensure that the unquoted
|
||||||
|
# variable doesn't expand into anything nasty.
|
||||||
|
# shellcheck disable=2086,2046
|
||||||
|
{
|
||||||
|
# Set the resolved dependency list as the function's arguments.
|
||||||
|
set -f
|
||||||
|
set -- $missing_deps
|
||||||
|
set +f
|
||||||
|
}
|
||||||
|
|
||||||
for pkg; do
|
for pkg; do
|
||||||
# Find the package's repository files. This needs to keep
|
# Find the package's repository files. This needs to keep
|
||||||
# happening as we can't store this data in any kind of data
|
# happening as we can't store this data in any kind of data
|
||||||
@ -210,8 +223,6 @@ pkg_build() {
|
|||||||
# Die here as packages without checksums were found above.
|
# Die here as packages without checksums were found above.
|
||||||
[ "$no_checkums" ] &&
|
[ "$no_checkums" ] &&
|
||||||
die "Run '$kiss checksum ${no_checkums% }' to generate checksums."
|
die "Run '$kiss checksum ${no_checkums% }' to generate checksums."
|
||||||
|
|
||||||
pkg_depends "$@"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pkg_checksums() {
|
pkg_checksums() {
|
||||||
|
Loading…
Reference in New Issue
Block a user