[pacman-dev] [PATCH] makepkg: handle multiple install and changelog files

Allan McRae allan at archlinux.org
Mon Apr 26 07:12:59 CEST 2010


The presence of all install and changelog files (multiple files may
be used with package splitting) is checked for in check_sanity().

All install and changelog files are copied to the source location
when using --source.  The check for install and changelog file presence
is removed in create_srcpackage() as this is redundant to the checks
performed in check_sanity().

Moved install and changelog handling in create_srcpackage() to after
source array files, as this is more logical and readily allows for the
following.

A check is made when creating a source package that a symlink to an
install file has not already been added.  This can occur if the
install file is used multiple times or if it is listed in the source
array.

Fixes FS#18831, FS#18394 and partially fixes FS#16004

Signed-off-by: Allan McRae <allan at archlinux.org>
---

I could split these into a set of smaller changes but they overlap to 
such a great extent it seems redundant.  Also, the patch remains
fairly small.

 scripts/makepkg.sh.in |   71 ++++++++++++++++++++++++++++++++----------------
 1 files changed, 47 insertions(+), 24 deletions(-)

diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index b306620..8ae41ea 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -1095,24 +1095,6 @@ create_srcpackage() {
 	msg2 "$(gettext "Adding %s...")" "$BUILDSCRIPT"
 	ln -s "${BUILDFILE}" "${srclinks}/${pkgbase}/${BUILDSCRIPT}"
 
-	if [[ -n $install ]]; then
-		if [[ -f $install ]]; then
-			msg2 "$(gettext "Adding install script...")"
-			ln -s "${startdir}/$install" "${srclinks}/${pkgbase}/"
-		else
-			error "$(gettext "Install scriptlet (%s) does not exist.")" "$install"
-		fi
-	fi
-
-	if [[ -n $changelog ]]; then
-		if [[ -f $changelog ]]; then
-			msg2 "$(gettext "Adding package changelog...")"
-			ln -s "${startdir}/$changelog" "${srclinks}/${pkgbase}/"
-		else
-			error "$(gettext "Changelog file (%s) does not exist.")" "$changelog"
-		fi
-	fi
-
 	local netfile
 	for netfile in "${source[@]}"; do
 		local file=$(get_filename "$netfile")
@@ -1125,6 +1107,32 @@ create_srcpackage() {
 		fi
 	done
 
+	local install_files=( $(grep "^[[:space:]]*install=" "$BUILDSCRIPT" | sed "s/install=//") )
+	if [[ -n $install_files ]]; then
+		local file
+		for file in ${install_files[@]}; do
+		# evaluate any bash variables used
+		eval file=${file}
+			if [[ ! -f "${srclinks}/${pkgbase}/$file" ]]; then
+				msg2 "$(gettext "Adding install script (%s)...")" "$file"
+				ln -s "${startdir}/$file" "${srclinks}/${pkgbase}/"
+			fi
+		done
+	fi
+
+	local changelog_files=( $(grep "^[[:space:]]*changelog=" "$BUILDSCRIPT" | sed "s/changelog=//") )
+	if [[ -n $changelog_files ]]; then
+		local file
+		for file in ${changelog_files[@]}; do
+			# evaluate any bash variables used
+			eval file=${file}
+			if [[ ! -f "${srclinks}/${pkgbase}/$file" ]]; then
+				msg2 "$(gettext "Adding package changelog (%s)...")" "$file"
+				ln -s "${startdir}/$file" "${srclinks}/${pkgbase}/"
+			fi
+		done
+	fi
+
 	local TAR_OPT
 	case "$SRCEXT" in
 		*tar.gz)  TAR_OPT="z" ;;
@@ -1242,14 +1250,29 @@ check_sanity() {
 		fi
 	done
 
-	if [[ $install && ! -f $install ]]; then
-		error "$(gettext "Install scriptlet (%s) does not exist.")" "$install"
-		return 1
+	local install_files=( $(grep "^[[:space:]]*install=" "$BUILDSCRIPT" | sed "s/install=//") )
+	if [[ -n $install_files ]]; then
+		local file
+		for file in ${install_files[@]}; do
+		# evaluate any bash variables used
+		eval file=${file}
+			if [[ ! -f $file ]]; then
+				error "$(gettext "Install scriptlet (%s) does not exist.")" "$file"
+				return 1
+			fi
+		done
 	fi
 
-	if [[ -n $changelog && ! -f $changelog ]]; then
-		error "$(gettext "Changelog file (%s) does not exist.")" "$changelog"
-		return 1
+	local changelog_files=( $(grep "^[[:space:]]*changelog=" "$BUILDSCRIPT" | sed "s/changelog=//") )
+	if [[ -n $changelog_files ]]; then
+		for file in ${changelog_files[@]}; do
+			# evaluate any bash variables used
+			eval file=${file}
+			if [[ ! -f $file ]]; then
+				error "$(gettext "Changelog file (%s) does not exist.")" "$file"
+				return 1
+			fi
+		done
 	fi
 
 	local valid_options=1
-- 
1.7.0.6



More information about the pacman-dev mailing list