summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/makepkg.8.txt6
-rw-r--r--scripts/makepkg.sh.in36
2 files changed, 23 insertions, 19 deletions
diff --git a/doc/makepkg.8.txt b/doc/makepkg.8.txt
index 0432cd22..3fbd4062 100644
--- a/doc/makepkg.8.txt
+++ b/doc/makepkg.8.txt
@@ -174,9 +174,9 @@ Environment Variables
---------------------
*PACMAN*::
The command that will be used to check for missing dependencies and to
- install and remove packages. Pacman's -U, -T, -S and -Rns operations
- must be supported by this command. If the variable is not set or
- empty, makepkg will fall back to `pacman'.
+ install and remove packages. Pacman's -Qq, -Rns, -S, -T, and -U
+ operations must be supported by this command. If the variable is not
+ set or empty, makepkg will fall back to `pacman'.
**PKGDEST=**"/path/to/folder"::
Folder where the resulting packages will be stored. Overrides the
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index a2db90b3..baf47032 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -344,7 +344,7 @@ download_file() {
run_pacman() {
local ret=0
- if (( ! ASROOT )) && [[ $1 != "-T" ]] && sudo -l $PACMAN &>/dev/null; then
+ if (( ! ASROOT )) && [[ $1 != "-T" && $1 != "-Qq" ]] && sudo -l $PACMAN &>/dev/null; then
sudo $PACMAN $PACMAN_OPTS "$@" || ret=$?
else
$PACMAN $PACMAN_OPTS "$@" || ret=$?
@@ -399,7 +399,6 @@ handle_deps() {
}
resolve_deps() {
- # $pkgdeps is a GLOBAL variable, used by remove_deps()
local R_DEPS_SATISFIED=0
local R_DEPS_MISSING=1
@@ -409,7 +408,6 @@ resolve_deps() {
fi
if handle_deps $deplist; then
- pkgdeps="$pkgdeps $deplist"
# check deps again to make sure they were resolved
deplist="$(check_deps $*)"
[[ -z $deplist ]] && return $R_DEPS_SATISFIED
@@ -426,23 +424,24 @@ resolve_deps() {
return $R_DEPS_MISSING
}
-# fix flyspray bug #5923
remove_deps() {
- # $pkgdeps is a GLOBAL variable, set by resolve_deps()
(( ! RMDEPS )) && return
- [[ -z $pkgdeps ]] && return
- local dep depstrip deplist
- deplist=""
- for dep in $pkgdeps; do
- depstrip="${dep%%[<=>]*}"
- deplist="$deplist $depstrip"
- done
+ # check for packages removed during dependency install (e.g. due to conflicts)
+ # removing all installed packages is risky in this case
+ if [[ -n $(comm -23 <(printf "%s\n" "${original_pkglist[@]}") \
+ <(printf "%s\n" "${current_pkglist[@]}")) ]]; then
+ warning "$(gettext "Failed to remove installed dependencies.")"
+ return 0
+ fi
- msg "Removing installed dependencies..."
+ local deplist=($(comm -13 <(printf "%s\n" "${original_pkglist[@]}") \
+ <(printf "%s\n" "${current_pkglist[@]}")))
+ (( ${#deplist[@]} == 0 )) && return
+ msg "Removing installed dependencies..."
# exit cleanly on failure to remove deps as package has been built successfully
- if ! run_pacman -Rns $deplist; then
+ if ! run_pacman -Rn ${deplist[@]}; then
warning "$(gettext "Failed to remove installed dependencies.")"
return 0
fi
@@ -1866,14 +1865,15 @@ if (( SOURCEONLY )); then
exit 0
fi
-# fix flyspray bug #5973
if (( NODEPS || NOBUILD || REPKG )); then
# no warning message needed for nobuild, repkg
if (( NODEPS )); then
warning "$(gettext "Skipping dependency checks.")"
fi
elif [ $(type -p "${PACMAN%% *}") ]; then
- unset pkgdeps # Set by resolve_deps() and used by remove_deps()
+ if (( RMDEPS )); then
+ original_pkglist=($(run_pacman -Qq | sort)) # required by remove_dep
+ fi
deperr=0
msg "$(gettext "Checking Runtime Dependencies...")"
@@ -1882,6 +1882,10 @@ elif [ $(type -p "${PACMAN%% *}") ]; then
msg "$(gettext "Checking Buildtime Dependencies...")"
resolve_deps ${makedepends[@]} || deperr=1
+ if (( RMDEPS )); then
+ current_pkglist=($(run_pacman -Qq | sort)) # required by remove_deps
+ fi
+
if (( deperr )); then
error "$(gettext "Could not resolve all dependencies.")"
exit 1