summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan McRae <allan@archlinux.org>2012-11-13 13:04:21 +1000
committerAllan McRae <allan@archlinux.org>2012-11-27 15:16:15 +1000
commit3531533c2f703693b87e074dfbe8951b9bef910f (patch)
tree52268353fb8c71b54a92146f30f4292ce1d6f993
parent86233476b0eff3d9569978350a7bb5e4eff07362 (diff)
downloadpacman-3531533c2f703693b87e074dfbe8951b9bef910f.tar.xz
makepkg: save path to PACMAN and test availability
After we install dependencies, we source /etc/profile so that new elements get added to the path. As this can override any local setting of PATH, we store the full path of the PACMAN variable passed to makepkg. Also, add a check for PACMAN availability if it is needed to deal with any dependency operations. Reported-by: Martin Panter <vadmium à gmail·com> Signed-off-by: Allan McRae <allan@archlinux.org>
-rw-r--r--scripts/makepkg.sh.in18
1 files changed, 13 insertions, 5 deletions
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 6b29bea8..3556cab0 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -874,9 +874,9 @@ source_has_signatures() {
run_pacman() {
local cmd
if [[ ! $1 = -@(T|Qq) ]]; then
- cmd=("$PACMAN" $PACMAN_OPTS "$@")
+ cmd=("$PACMAN_PATH" $PACMAN_OPTS "$@")
else
- cmd=("$PACMAN" "$@")
+ cmd=("$PACMAN_PATH" "$@")
fi
if (( ! ASROOT )) && [[ ! $1 = -@(T|Qq) ]]; then
if type -p sudo >/dev/null; then
@@ -2108,6 +2108,14 @@ check_software() {
# check for needed software
local ret=0
+ # check for PACMAN if we need it
+ if (( ! INFAKEROOT && ( ! NODEPS || DEP_BIN || RMDEPS || INSTALL ) )); then
+ if [[ -z $PACMAN_PATH ]]; then
+ error "$(gettext "Cannot find the %s binary required for dependency operations.")" "$PACMAN"
+ ret=1
+ fi
+ fi
+
# check for sudo if we will need it during makepkg execution
if (( ! ( ASROOT || INFAKEROOT ) && ( DEP_BIN || RMDEPS || INSTALL ) )); then
if ! type -p sudo >/dev/null; then
@@ -2464,6 +2472,8 @@ fi
# set pacman command if not already defined
PACMAN=${PACMAN:-pacman}
+# save full path to command as PATH may change when sourcing /etc/profile
+PACMAN_PATH=$(type -P $PACMAN) || true
# check if messages are to be printed using color
unset ALL_OFF BOLD BLUE GREEN RED YELLOW
@@ -2738,7 +2748,7 @@ if (( NODEPS || (NOBUILD && !DEP_BIN ) )); then
if (( NODEPS )); then
warning "$(gettext "Skipping dependency checks.")"
fi
-elif type -p "$PACMAN" >/dev/null; then
+else
if (( RMDEPS && ! INSTALL )); then
original_pkglist=($(run_pacman -Qq)) # required by remove_dep
fi
@@ -2766,8 +2776,6 @@ elif type -p "$PACMAN" >/dev/null; then
error "$(gettext "Could not resolve all dependencies.")"
exit 1
fi
-else
- warning "$(gettext "%s was not found in %s; skipping dependency checks.")" "$PACMAN" "PATH"
fi
# ensure we have a sane umask set