summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scripts/makepkg.in198
1 files changed, 94 insertions, 104 deletions
diff --git a/scripts/makepkg.in b/scripts/makepkg.in
index 553221be..2eccbba7 100644
--- a/scripts/makepkg.in
+++ b/scripts/makepkg.in
@@ -239,141 +239,131 @@ checkdeps() {
}
handledeps() {
- local missingdeps=0
- local deplist="$*"
- local depstrip=""
- local striplist=""
- local haveperm=0
- if [ "$EUID" = "0" -o "$SUDO" = 1 ]; then
- haveperm=1
- fi
+ local R_DEPS_SATISFIED=0
+ local R_DEPS_MISSING=1
+
+ [ $# -eq 0 ] && return $R_DEPS_SATISFIED
+ local deplist="$*"
+ local striplist dep depstrip
for dep in $deplist; do
- depstrip=$(echo $dep | sed 's|=.*$||' | sed 's|>.*$||' | sed 's|<.*$||')
+ depstrip="$(echo $dep | sed -e 's|=.*$||' -e 's|>.&$||' -e 's|<.*$||')"
striplist="$striplist $depstrip"
done
- if [ "$deplist" != "" -a $haveperm -eq 1 ]; then
- if [ "$DEP_BIN" = "1" -a "$SUDO" = "1" ]; then
- # install missing deps from binary packages (using pacman -S and sudo)
- msg "$(gettext "Installing missing dependencies...")"
- sudo pacman $PACMAN_OPTS -S $striplist
- if [ $? -eq 1 ]; then
- error "$(gettext "Pacman failed to install missing dependencies.")"
- exit 1
- fi
- elif [ "$DEP_BIN" = "1" ]; then
- # install missing deps from binary packages (using pacman -S)
- msg "$(gettext "Installing missing dependencies...")"
- pacman $PACMAN_OPTS -S $striplist
- if [ $? -eq 1 ]; then
- error "$(gettext "Pacman failed to install missing dependencies.")"
- exit 1
- fi
- elif [ "$DEP_SRC" = "1" ]; then
- # install missing deps by building them from source.
- # we look for each package name in $SRCROOT and build it.
- if [ "$SRCROOT" = "" ]; then
- error "$(gettext "Source root cannot be found - ensure it is specified in makepkg.conf.")"
- exit 1
- fi
- # TODO: handle version comparators (eg, glibc>=2.2.5)
- msg "$(gettext "Building missing dependencies...")"
- for dep in $striplist; do
- candidates=$(find $SRCROOT -type d -name "$dep")
- if [ "$candidates" = "" ]; then
- error "$(gettext "Could not find \"%s\" under %s")" "$dep" "$SRCROOT"
- exit 1
- fi
- success=0
- for packagedir in $candidates; do
- if [ -f "$packagedir/$BUILDSCRIPT" ]; then
- cd "$packagedir"
- if [ "$RMDEPS" = "1" ]; then
- PKGDEST="$PKGDEST" makepkg -i -c -b -r
- else
- PKGDEST="$PKGDEST" makepkg -i -c -b
- fi
- if [ $? -eq 0 ]; then
- success=1
- break
- fi
- fi
- done
- if [ "$success" = "0" ]; then
- error "$(gettext "Failed to build \"%s\"")" "$dep"
- exit 1
- fi
- done
+ if [ "$DEP_SRC" = "0" -a "$DEP_BIN" = "0" ]; then
+ return $R_DEPS_MISSING
+ elif [ "$SUDO" = 0 -a $EUID -gt 0 ]; then
+ warning "$(gettext "Cannot auto-install missing dependencies as a normal user without sudo!")"
+ plain "$(gettext "Run makepkg as root or with -S to resolve dependencies automatically.")"
+ return $R_DEPS_MISSING
+ fi
+
+ if [ "$DEP_BIN" = "1" ]; then
+ # install missing deps from binary packages (using pacman -S)
+ msg "$(gettext "Installing missing dependencies...")"
+ local ret=0
+
+ if [ "$SUDO" = 1 ]; then
+ sudo pacman $PACMAN_OPTS -S $striplist || ret=$?
else
- missingdeps=1
+ pacman $PACMAN_OPTS -S $striplist || ret=$?
fi
- elif [ "$deplist" != "" -a $haveperm -eq 0 ]; then
- if [ "$DEP_SRC" = "1" -o "$DEP_BIN" = "1" ]; then
- warning "$(gettext "Cannot auto-install missing dependencies as a normal user without sudo!")"
- plain "$(gettext "Run makepkg as root or with -S to resolve dependencies automatically.")"
+
+ if [ $ret -ne 0 ]; then
+ error "$(gettext "Pacman failed to install missing dependencies.")"
+ exit 1 # TODO: error code
fi
- missingdeps=1
+ elif [ "$DEP_SRC" = "1" ]; then
+ msg "$(gettext "Building missing dependencies...")"
+
+ # install missing deps by building them from source.
+ # we look for each package name in $SRCROOT and build it.
+ if [ "$SRCROOT" = "" ]; then
+ error "$(gettext "Source root cannot be found - please make sure it is specified in makepkg.conf")"
+ exit 1 # TODO: error code
+ fi
+
+ # TODO: handle version comparators (eg, glibc>=2.2.5)
+ for dep in $striplist; do
+ local candidates="$(find "$SRCROOT" -type d -name "$dep")"
+ if [ "$candidates" = "" ]; then
+ error "$(gettext "Could not find '%s' under %s")" "$dep" "$SRCROOT"
+ exit 1 # TODO: error code
+ fi
+
+ local makepkg_opts='-i -c -b'
+ [ "$RMDEPS" = "1" ] && makepkg_opts="$makepkg_opts -r"
+ local ret packagedir
+ for packagedir in $candidates; do
+ if [ -f "$packagedir/$BUILDSCRIPT" ]; then
+ cd "$packagedir"
+ ret=0
+ PKGDEST="$PKGDEST" makepkg $makepkg_opts || ret=$?
+ [ $ret -eq 0 ] && continue 2
+ fi
+ done
+
+ error "$(gettext "Failed to build '%s'")" "$dep"
+ exit 1 # TODO: error code
+ done
fi
# rerun any additional sh scripts found in /etc/profile.d/
- for i in /etc/profile.d/*.sh
- do
- if [ -x $i ]; then
- . $i &>/dev/null
+ local script
+ for script in /etc/profile.d/*.sh; do
+ if [ -x $script ]; then
+ source $script &>/dev/null
fi
done
- return $missingdeps
+ return $R_DEPS_SATISFIED
}
resolvedeps() {
- deplist=""
- newdeplist=""
-
- deplist=$(checkdeps $*)
- if [ -n "${deplist}" ]; then
- handledeps $deplist
- if [ $? -eq 0 ]; then
- # check deps again to make sure they were resolved
- newdeplist=$(checkdeps $*)
- if [ -n "${newdeplist}" ]; then
- error "$(gettext "Failed to install all missing dependencies.")"
- fi
- else
- newdeplist="$deplist"
- fi
+ local R_DEPS_SATISFIED=0
+ local R_DEPS_MISSING=0
+
+ deplist="$(checkdeps $*)"
+ [ "$deplist" = "" ] && return $R_DEPS_SATISFIED
+
+ if handledeps $deplist; then
+ # check deps again to make sure they were resolved
+ deplist="$(checkdeps $*)"
+ [ "$deplist" = "" ] && return $R_DEPS_SATISFIED
+ elif [ "$DEP_BIN" = "1" -o "$DEP_SRC" = "1" ]; then
+ error "$(gettext "Failed to install all missing dependencies.")"
fi
- # if new dep list is not empty, print the list
- if [ -n "${newdeplist}" ]; then
- msg "$(gettext "Missing Dependencies:")"
- for dep in ${newdeplist}; do
- msg2 "${dep}"
- done
- return 1
- else
- return 0
- fi
+ msg "$(gettext "Missing Dependencies:")"
+ local dep
+ for dep in $deplist; do
+ msg2 "$dep"
+ done
+
+ return $R_DEPS_MISSING
}
# fix flyspray bug #5923
removedeps() {
+ [ "$RMDEPS" = "0" ] && return
+ [ "$SUDO" = "0" -a $EUID -gt 0 ] && return
+
# runtimedeps and buildtimedeps are set when resolving deps
local deplist="$runtimedeps $buildtimedeps"
- local depstrip=""
- local striplist=""
+ [ "$deplist" = "" ] && return
+
+ local striplist dep depstrip
for dep in $deplist; do
- depstrip=$(echo $dep | sed 's|=.*$||' | sed 's|>.*$||' | sed 's|<.*$||')
+ depstrip="$(echo $dep | sed -e 's|=.*$||' -e 's|>.&$||' -e 's|<.*$||')"
striplist="$striplist $depstrip"
done
- if [ "$RMDEPS" = "1" -a "$SUDO" = "1" -a -n "$deplist" ]; then
- msg "$(gettext "Removing installed dependencies...")"
+ msg "Removing installed dependencies..."
+ if [ "$SUDO" = "1" ]; then
sudo pacman $PACMAN_OPTS -Rs $striplist
- elif [ "$RMDEPS" = "1" -a "$EUID" = "0" -a "$INFAKEROOT" != "1" -a -n "$deplist" ]; then
- msg "$(gettext "Removing installed dependencies...")"
+ else
pacman $PACMAN_OPTS -Rs $striplist
fi
}