From d8174e4f3a8fe1c133c15ccdac8be190190db1a1 Mon Sep 17 00:00:00 2001 From: Kaarle Ritvanen Date: Mon, 6 Mar 2017 17:23:31 +0200 Subject: abuild: fix dependency checking - versioned dependencies - dependencies on 'provides' tags or library names --- abuild.in | 48 +++++++++++++++++++++++------------------------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/abuild.in b/abuild.in index 22bd454..a7ff2e6 100644 --- a/abuild.in +++ b/abuild.in @@ -1855,10 +1855,27 @@ calcdeps() { fi } +get_missing_deps() { + local cmd="$APK info --quiet --installed $1" + shift + + while [ "$1" ]; do + local cp=${1#\!} + if [ $cp != $1 ]; then + if $cmd $cp; then + error "Conflicting package installed: $cp" + return 1 + fi + elif [ "$upgrade" ] || ! $cmd $1; then + echo $1 + fi + shift + done +} + # build and install dependencies builddeps() { - local pkg= i= missing= BUILD_BASE= - local installed_hostdeps= installed_builddeps= + local pkg= i= BUILD_BASE= [ -n "$nodeps" ] && return 0 msg "Analyzing dependencies..." @@ -1872,30 +1889,11 @@ builddeps() { esac calcdeps "$BUILD_BASE" - installed_builddeps=$($APK info --installed $builddeps) - [ -n "$CBUILDROOT" -a -n "$hostdeps" ] && installed_hostdeps=$($APK info --root "$CBUILDROOT" --arch "$CTARGET_ARCH" --installed $hostdeps) - # find which deps are missing - for i in $builddeps; do - if [ "${i#\!}" != "$i" ]; then - if $APK info --quiet --installed "${i#\!}"; then - error "Conflicting package installed: ${i#\!}" - return 1 - fi - elif ! deplist_has $i $installed_builddeps || [ -n "$upgrade" ]; then - missing="$missing $i" - fi - done - for i in $hostdeps; do - if [ "${i#\!}" != "$i" ]; then - if $APK info --quiet --installed --root "$CBUILDROOT" --arch "$CTARGET_ARCH" "${i#\!}"; then - error "Conflicting package installed: ${i#\!}" - return 1 - fi - elif ! deplist_has $i $installed_hostdeps || [ -n "$upgrade" ]; then - missing="$missing $i" - fi - done + local mbd mhd missing + mbd=$(get_missing_deps "" $builddeps) || return 1 + mhd=$(get_missing_deps "--root $CBUILDROOT --arch $CTARGET_ARCH" $hostdeps) || return 1 + missing=$(echo $mbd $mhd) if [ -z "$install_deps" ] && [ -z "$recursive" ]; then # if we dont have any missing deps we are done now -- cgit v1.2.3-60-g2f50