Well, one way to avoid all this is to add something like:
[[ $PKGDIR == "." ]] && $PKGDIR="$startdir"
before we preserve the environmental variables. But that is bad as things like PKGDIR="../" would still cause issues.
I rather meant a way to remove any assumption of PKGDEST being absolute. This is the only broken code, isn't it : if (( ! ret )) && [[ "$PKGDEST" != "${startdir}" ]]; then ln -sf "${pkg_file}" "${pkg_file/$PKGDEST/$startdir}" ret=$? fi Why not do something like : local link_file="$startdir/${nameofpkg}-${pkgver}-${pkgrel}-${PKGARCH}${PKGEXT}" if [[ ! -f "$link_file" ]]; then ln -sf $pkg_file $link_file fi I don't know if there are cases where a regular file exists but is not the package we just built. If it can happen and we care, we could try to test whether pkg_file and link_file are not actually the same regular file.
So I think we should just add the bash implementation of realpath as a function inside makepkg. The one at stackoverflow is very simplistic so I will take another look at the one posted to the mailing list. We should really look at libifying some/all of this sort of stuff out of makepkg...
Allan
Btw there are actually several bash impl in that link, the last one is more complex : http://stackoverflow.com/questions/1055671/how-can-i-get-the-behavior-of-gnu...