diff --git a/NEWS b/NEWS
index 07aa028..b7298bf 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,22 @@
 VERSION         DESCRIPTION
 -----------------------------------------------------------------------------
+5.0.1         - fix alignment issues with wide character locales (FS#47980)
+              - fix removal of .pacnew files (FS#47993)
+              - fix triggering of Install hooks (FS#47996)
+              - fix handling of stdin scripts called by pacman
+              - hook activity is logged
+              - documentataion updates for alpm-hooks (FS#48080)
+              - makepkg:
+                - increase robustness of variable array checks
+                - makepkg -g does not perform current architecture checks
+                - do not run prepare() with --noextract
+                - all directories in the packaging directory are cleared
+                  before each build
+                - fix translations issues (FS#48057, FS#48298)
+              - repo-add:
+                - fix checking for non-existent database
+              - contrib:
+                - zsh_completion: updated makepkg options
 5.0.0         - pacman can run hooks pre- and post-transaction. See the
                 alpm-hooks(5) man page for details and an example hook (FS#2985)
               - pacman can now sync and read .files databases (-Fy) and do basic
diff --git a/doc/PKGBUILD.5.txt b/doc/PKGBUILD.5.txt
index e410481..4b4a22c 100644
--- a/doc/PKGBUILD.5.txt
+++ b/doc/PKGBUILD.5.txt
@@ -52,10 +52,10 @@ similar to `$_basekernver`.
 +
 The `pkgver` variable can be automatically updated by providing a `pkgver()`
 function in the PKGBUILD that outputs the new package version.
-This is run after downloading and extracting the sources so it can use those
-files in determining the new `pkgver`.
-This is most useful when used with sources from version control systems (see
-below).
+This is run after downloading and extracting the sources and running the
+`prepare()` function (if present), so it can use those files in determining the
+new `pkgver`.  This is most useful when used with sources from version control
+systems (see below).
 
 *pkgrel*::
 	This is the release number specific to the Arch Linux release. This
diff --git a/scripts/libmakepkg/tidy/emptydirs.sh.in b/scripts/libmakepkg/tidy/emptydirs.sh.in
index 32b8d8c..85ab39d 100644
--- a/scripts/libmakepkg/tidy/emptydirs.sh.in
+++ b/scripts/libmakepkg/tidy/emptydirs.sh.in
@@ -33,6 +33,7 @@ tidy_remove+=('tidy_emptydirs')
 tidy_emptydirs() {
 	if check_option "emptydirs" "n"; then
 		msg2 "$(gettext "Removing empty directories...")"
-		find . -depth -type d -exec rmdir '{}' + 2>/dev/null
+		# we are unable to use '-empty' as it is non-POSIX and not support by all find variants
+		find . -depth -type d -exec rmdir '{}' \; 2>/dev/null
 	fi
 }
diff --git a/scripts/libmakepkg/util/util.sh b/scripts/libmakepkg/util/util.sh
index 675e75d..f9f1c20 100644
--- a/scripts/libmakepkg/util/util.sh
+++ b/scripts/libmakepkg/util/util.sh
@@ -46,7 +46,7 @@ is_array() {
 	local shellopts=$(shopt -p)
 	shopt -s extglob
 
-	if [[ $(declare -p "$i") == declare\ -*([[:alnum:]])a*([[:alnum:]])\ * ]]; then
+	if [[ $(declare -p "$v") == declare\ -*([[:alnum:]])a*([[:alnum:]])\ * ]]; then
 		ret=0
 	fi
 
diff --git a/scripts/pacman-key.sh.in b/scripts/pacman-key.sh.in
index 30d2704..0db0952 100644
--- a/scripts/pacman-key.sh.in
+++ b/scripts/pacman-key.sh.in
@@ -483,7 +483,7 @@ verify_sig() {
 	local ret=0
 	for sig; do
 		msg "Checking %s..." "$sig"
-		if ! "${GPG_PACMAN[@]}" --status-fd 1 --verify "$sig" | grep -qE '^\[GNUPG:\] TRUST_(FULLY|ULTIMATE)$'; then
+		if ! "${GPG_PACMAN[@]}" --status-fd 1 --verify "$sig" | grep -qE '^\[GNUPG:\] TRUST_(FULLY|ULTIMATE).*$'; then
 			error "$(gettext "The signature identified by %s could not be verified.")" "$sig"
 			ret=1
 		fi
diff --git a/src/pacman/check.c b/src/pacman/check.c
index 0fe74e8..d282cc2 100644
--- a/src/pacman/check.c
+++ b/src/pacman/check.c
@@ -254,7 +254,6 @@ int check_pkg_full(alpm_pkg_t *pkg)
 	const char *root, *pkgname;
 	size_t errors = 0;
 	size_t rootlen;
-	char filepath[PATH_MAX];
 	struct archive *mtree;
 	struct archive_entry *entry = NULL;
 	size_t file_count = 0;
@@ -267,7 +266,6 @@ int check_pkg_full(alpm_pkg_t *pkg)
 		pm_printf(ALPM_LOG_ERROR, _("path too long: %s%s\n"), root, "");
 		return 1;
 	}
-	strcpy(filepath, root);
 
 	pkgname = alpm_pkg_get_name(pkg);
 	mtree = alpm_pkg_mtree_open(pkg);
@@ -282,6 +280,8 @@ int check_pkg_full(alpm_pkg_t *pkg)
 	while(alpm_pkg_mtree_next(pkg, mtree, &entry) == ARCHIVE_OK) {
 		struct stat st;
 		const char *path = archive_entry_pathname(entry);
+		char filepath[PATH_MAX];
+		int filepath_len;
 		mode_t type;
 		size_t file_errors = 0;
 		int backup = 0;
@@ -292,31 +292,37 @@ int check_pkg_full(alpm_pkg_t *pkg)
 			path += 2;
 		}
 
-		if(strcmp(path, ".INSTALL") == 0) {
-			char filename[PATH_MAX];
-			snprintf(filename, PATH_MAX, "%slocal/%s-%s/install",
-					alpm_option_get_dbpath(config->handle) + 1,
-					pkgname, alpm_pkg_get_version(pkg));
-			archive_entry_set_pathname(entry, filename);
-			path = archive_entry_pathname(entry);
-		} else if(strcmp(path, ".CHANGELOG") == 0) {
-			char filename[PATH_MAX];
-			snprintf(filename, PATH_MAX, "%slocal/%s-%s/changelog",
-					alpm_option_get_dbpath(config->handle) + 1,
-					pkgname, alpm_pkg_get_version(pkg));
-			archive_entry_set_pathname(entry, filename);
-			path = archive_entry_pathname(entry);
-		} else if(*path == '.') {
-			continue;
-		}
+		if(*path == '.') {
+			const char *dbfile = NULL;
 
-		file_count++;
+			if(strcmp(path, ".INSTALL") == 0) {
+				dbfile = "install";
+			} else if(strcmp(path, ".CHANGELOG") == 0) {
+				dbfile = "changelog";
+			} else {
+				continue;
+			}
 
-		if(rootlen + 1 + strlen(path) > PATH_MAX) {
-			pm_printf(ALPM_LOG_WARNING, _("path too long: %s%s\n"), root, path);
-			continue;
+			/* Do not append root directory as alpm_option_get_dbpath is already
+			 * an absoute path */
+			filepath_len = snprintf(filepath, PATH_MAX, "%slocal/%s-%s/%s",
+					alpm_option_get_dbpath(config->handle),
+					pkgname, alpm_pkg_get_version(pkg), dbfile);
+			if(filepath_len >= PATH_MAX) {
+				pm_printf(ALPM_LOG_WARNING, _("path too long: %slocal/%s-%s/%s\n"),
+						alpm_option_get_dbpath(config->handle),
+						pkgname, alpm_pkg_get_version(pkg), dbfile);
+				continue;
+			}
+		} else {
+			filepath_len = snprintf(filepath, PATH_MAX, "%s%s", root, path);
+			if(filepath_len >= PATH_MAX) {
+				pm_printf(ALPM_LOG_WARNING, _("path too long: %s%s\n"), root, path);
+				continue;
+			}
 		}
-		strcpy(filepath + rootlen, path);
+
+		file_count++;
 
 		exists = check_file_exists(pkgname, filepath, rootlen, &st);
 		if(exists == 1) {