[pacman-dev] [PATCH] makepkg: save path to PACMAN and test availability

Allan McRae allan at archlinux.org
Mon Nov 12 22:14:49 EST 2012


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.

Signed-off-by: Allan McRae <allan at archlinux.org>
---

This is a replacement for the patch provided by Martin Panter.  While dealing
with patches today, I decided that the check for the full pacman path was 
being done in the wrong place and we should do the usual check of software
availability if "pacman" is needed.


 scripts/makepkg.sh.in | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index f650b1b..16e421b 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -875,9 +875,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
@@ -2191,6 +2191,14 @@ check_software() {
 	# check for needed software
 	local ret=0
 
+	# check for PACMAN if we need it
+	if (( ! 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
@@ -2548,6 +2556,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
@@ -2825,7 +2835,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
@@ -2853,8 +2863,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
-- 
1.8.0



More information about the pacman-dev mailing list