[pacman-dev] [PATCH 2/2] makepkg: allow to specify an alternative pacman command

Allan McRae allan at archlinux.org
Thu Nov 19 23:14:53 EST 2009


Cedric Staniewski wrote:
> If PACMAN environment variable is set, makepkg will try to use this
> command to check for installed dependencies and to install or remove
> packages. Otherwise, makepkg will fall back to pacman.
> 
> Implements FS#13028.
> 
> Signed-off-by: Cedric Staniewski <cedric at gmx.ca>


Looks good.  A couple of comments below.  We also need to document the 
behaviour of the PACMAN environmental variable in the makepkg man page.


> ---
>  scripts/makepkg.sh.in |   21 ++++++++++++---------
>  1 files changed, 12 insertions(+), 9 deletions(-)
> 
> diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
> index 3b7966e..d05b608 100644
> --- a/scripts/makepkg.sh.in
> +++ b/scripts/makepkg.sh.in
> @@ -333,10 +333,10 @@ download_file() {
>  
>  run_pacman() {
>  	local ret=0
> -	if (( ! ASROOT )) && [[ $1 != "-T" ]]; then
> -		sudo pacman $PACMAN_OPTS "$@" || ret=$?
> +	if (( ! ASROOT )) && [[ $1 != "-T" ]] && sudo -l $PACMAN &>/dev/null; then

This change is behaviour in checking for sudo privileges needs to be a 
separate patch.


> +		sudo $PACMAN $PACMAN_OPTS "$@" || ret=$?
>  	else
> -		pacman $PACMAN_OPTS "$@" || ret=$?
> +		$PACMAN $PACMAN_OPTS "$@" || ret=$?
>  	fi
>  	return $ret
>  }
> @@ -350,7 +350,7 @@ check_deps() {
>  	if (( ret == 127 )); then #unresolved deps
>  		echo "$pmout"
>  	elif (( ret )); then
> -		error "$(gettext "Pacman returned a fatal error (%i): %s")" "$ret" "$pmout"
> +		error "$(gettext "%s returned a fatal error (%i): %s")" "${PACMAN##*/}" "$ret" "$pmout"

Should we also strip any flags provided in the PACMAN variable?  e.g. I 
could set PACMAN="pacman -v" for verbose output.  I guess some wrappers 
might have flags that would be useful to specify.

>  		exit 1
>  	fi
>  }
> @@ -372,7 +372,7 @@ handle_deps() {
>  		msg "$(gettext "Installing missing dependencies...")"
>  
>  		if ! run_pacman -S --asdeps $deplist; then
> -			error "$(gettext "Pacman failed to install missing dependencies.")"
> +			error "$(gettext "%s failed to install missing dependencies.")" "${PACMAN##*/}"
>  			exit 1 # TODO: error code
>  		fi
>  	fi
> @@ -1100,9 +1100,9 @@ install_package() {
>  	(( ! INSTALL )) && return
>  
>  	if (( ! SPLITPKG )); then
> -		msg "$(gettext "Installing package ${pkgname} with pacman -U...")"
> +		msg "$(gettext "Installing package %s with %s -U...")" "$pkgname" "$PACMAN"
>  	else
> -		msg "$(gettext "Installing ${pkgbase} package group with pacman -U...")"
> +		msg "$(gettext "Installing %s package group with %s -U...")" "$pkgbase" "$PACMAN"
>  	fi
>  
>  	local pkglist
> @@ -1557,6 +1557,9 @@ if [[ -r ~/.makepkg.conf ]]; then
>  	source ~/.makepkg.conf
>  fi
>  
> +# set pacman command if not already defined
> +PACMAN=${PACMAN:-pacman}
> +
>  # check if messages are to be printed using color
>  unset ALL_OFF BOLD BLUE GREEN RED YELLOW
>  if [[ -t 2 && ! $USE_COLOR = "n" && $(check_buildenv color) = "y" ]]; then
> @@ -1810,7 +1813,7 @@ if (( NODEPS || NOBUILD || REPKG )); then
>  	if (( NODEPS )); then
>  		warning "$(gettext "Skipping dependency checks.")"
>  	fi
> -elif [ $(type -p pacman) ]; then
> +elif [ $(type -p "$PACMAN") ]; then
>  	unset pkgdeps # Set by resolve_deps() and used by remove_deps()
>  	deperr=0
>  
> @@ -1825,7 +1828,7 @@ elif [ $(type -p pacman) ]; then
>  		exit 1
>  	fi
>  else
> -	warning "$(gettext "pacman was not found in PATH; skipping dependency checks.")"
> +	warning "$(gettext "%s was not found in PATH; skipping dependency checks.")" "$PACMAN"
>  fi
>  
>  # ensure we have a sane umask set



More information about the pacman-dev mailing list