From c0f58ea9a22c64e42b6784663ceb7272565428f5 Mon Sep 17 00:00:00 2001
From: Allan McRae <allan@archlinux.org>
Date: Wed, 29 Sep 2010 22:24:07 +1000
Subject: makepkg: canonicalize paths from environmental variables

This prevents circular symlinks and weird final package locations
when using commands like  'PKGDEST="." makepkg'.

Fixes FS#20922.

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
---
 scripts/makepkg.sh.in | 22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)

(limited to 'scripts')

diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 2f1c747b..3a7a4d1c 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -1410,6 +1410,20 @@ run_split_packaging() {
 	done
 }
 
+# Canonicalize a directory path if it exists
+canonicalize_path() {
+	local path="$1";
+
+	if [[ -d $path ]]; then
+		(
+			cd "$path"
+			pwd -P
+		)
+	else
+		echo "$path"
+	fi
+}
+
 # getopt like parser
 parse_options() {
 	local short_options=$1; shift;
@@ -1615,10 +1629,10 @@ while true; do
 	shift
 done
 
-#preserve environment variables
-_PKGDEST=${PKGDEST}
-_SRCDEST=${SRCDEST}
-_SRCPKGDEST=${SRCPKGDEST}
+# preserve environment variables and canonicalize path
+[[ -n ${PKGDEST} ]] && _PKGDEST=$(canonicalize_path ${PKGDEST})
+[[ -n ${SRCDEST} ]] && _SRCDEST=$(canonicalize_path ${SRCDEST})
+[[ -n ${SRCPKGDEST} ]] && _SRCPKGDEST=$(canonicalize_path ${SRCPKGDEST})
 
 # default config is makepkg.conf
 MAKEPKG_CONF=${MAKEPKG_CONF:-$confdir/makepkg.conf}
-- 
cgit v1.2.3-2-g168b