about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--README2
-rwxr-xr-xxgensum236
-rw-r--r--xtools.12
3 files changed, 127 insertions, 113 deletions
diff --git a/README b/README
index d481f27..dff0baa 100644
--- a/README
+++ b/README
@@ -51,7 +51,7 @@ COMMANDS
      xetcchanges
         – show diff of /etc against binary packages
 
-     xgensum [-f] [-c] [-i] [-H hostdir] template
+     xgensum [-f] [-c] [-i] [-H hostdir] templates ...
         – update SHA256 sum in templates
           -f  force (re-)download of distfiles
           -c  use content checksum
diff --git a/xgensum b/xgensum
index f556967..58829cb 100755
--- a/xgensum
+++ b/xgensum
@@ -1,11 +1,119 @@
 #!/bin/bash
-# xgensum [-f] [-c] [-i] [-H hostdir] TEMPLATE - update SHA256 sums in templates
+# xgensum [-f] [-c] [-i] [-H hostdir] TEMPLATES ... - update SHA256 sums in templates
 
 usage() {
-	echo 'Usage: xgensum [-f] [-c] [-i] [-H hostdir] TEMPLATE' >&2
+	echo 'Usage: xgensum [-f] [-c] [-i] [-H hostdir] TEMPLATES ...' >&2
 	exit 1
 }
 
+gensum_template() {
+	local template="$1"
+
+	. "$template"
+
+	# pick the first supported arch. This is required for packages unavailable for
+	# the host arch
+	FLAG_a=
+	if ! "$XBPS_DISTDIR/xbps-src" show-avail "$pkgname" ; then
+		FLAG_a="-a $("$XBPS_DISTDIR/xbps-src" show "$pkgname" | sed -En -e 's/archs:[[:space:]]*([.*]*)/\1/p' | sed -e 's/\*$//' | grep -v -e '^~' | head -n1 )"
+	fi
+
+	# Try to source the build-style as well. This is required for R-cran packages.
+	if [ -f "${XBPS_DISTDIR}/common/environment/build-style/${build_style}.sh"  ]; then
+		. "${XBPS_DISTDIR}/common/environment/build-style/${build_style}.sh"
+	fi
+
+	XBPS_SRCDISTDIR=$("$XBPS_DISTDIR/xbps-src" $FLAG_h show-var XBPS_SRCDISTDIR | tail -1)
+	srcdir="$XBPS_SRCDISTDIR/$pkgname-$version"
+
+	if [ -n "$FLAG_f" ]; then
+		for f in $distfiles; do
+			curfile="${f#*>}"
+			curfile="${curfile##*/}"
+			distfile="$srcdir/$curfile"
+			rm -vf "$distfile"
+		done
+		"$XBPS_DISTDIR/xbps-src" $FLAG_h -I clean $pkgname
+	fi
+
+	"$XBPS_DISTDIR/xbps-src" $FLAG_h $FLAG_a -I fetch $pkgname
+
+	ret=0
+	sums=""
+	for f in $distfiles; do
+		curfile="${f#*>}"
+		curfile="${curfile##*/}"
+		distfile="$srcdir/$curfile"
+		if [ -n "$FLAG_c" ];then
+			sum="@"
+			case ${distfile} in
+			*tar.lzma|*.tar|*.txz|*.tar.xz|*.tbz|*.tar.gz)
+				sum+=$(xbps-uhelper digest <(tar xf "$distfile" --to-stdout)) || ret=1
+				;;
+			*.gz)
+				sum+=$(xbps-uhelper digest <(gunzip -c "$distfile")) || ret=1
+				;;
+			*.tar.bz2|*.bz2)
+				sum+=$(xbps-uhelper digest <(bunzip2 -c "$distfile")) || ret=1
+				;;
+			*.zip)
+				if command -v unzip &>/dev/null; then
+					sum+=$(xbps-uhelper digest <(unzip -p "$distfile"))
+					if [ $? -ne 0 ]; then
+						echo "$pkgver: extracting $curfile to pipe."
+						ret=1
+					fi
+				else
+					echo "$pkgver: cannot find unzip bin for extraction."
+					ret=1
+				fi
+				;;
+			*.rpm)
+				if command -v rpmextract &>/dev/null; then
+					sum+=$(xbps-uhelper digest <(rpm2cpio "$distfile" | bsdtar xf - --to-stdout))
+					if [ $? -ne 0 ]; then
+						echo "$pkgver: extracting $curfile to pipe."
+						ret=1
+					fi
+				else
+					echo "$pkgver: cannot find rpmextract for extraction."
+					ret=1
+				fi
+				;;
+			*.7z)
+				if command -v 7z &>/dev/null; then
+					sum+=$(xbps-uhelper digest <(7z x -o "$distfile"))
+					if [ $? -ne 0 ]; then
+						echo "$pkgver: extracting $curfile to pipe."
+						ret=1
+					fi
+				else
+					echo "$pkgver: cannot find 7z bin for extraction."
+					ret=1
+				fi
+				;;
+			*.txt|*.patch|*.diff)
+				sum+=$(xbps-uhelper digest "$distfile") || ret=1
+				;;
+			*)
+				sum=$(xbps-uhelper digest "$distfile") || ret=1
+
+			esac
+		else
+			sum=$(xbps-uhelper digest "$distfile") || ret=1
+		fi
+		sums+="${sum%  *}\n "
+	done
+
+	sed $FLAG_i -e "/^checksum=/,/^[^ \t]/{
+			/^[ \t]/d
+			s/^checksum=.*/checksum=\"${sums%\n }\"/
+			/^checksum=\"[^ ]*\"/s/\"//g
+		}" "$template" || ret=1
+
+	return $ret
+}
+
 while getopts fciH:h flag; do
 	case $flag in
 		f) FLAG_f=1 ;;
@@ -20,116 +128,22 @@ shift $(( OPTIND - 1 ))
 
 XBPS_DISTDIR=$(xdistdir) || exit 1
 
-if [ -f "$1" ]; then
-	template="$1"
-elif [ -f "$1/template" ]; then
-	template="$1/template"
-elif [ -f "$XBPS_DISTDIR/srcpkgs/$1/template" ]; then
-	template="$XBPS_DISTDIR/srcpkgs/$1/template"
-else
-	usage
-fi
-
-. "$template"
-
-# pick the first supported arch. This is required for packages unavailable for
-# the host arch
-FLAG_a=
-if ! "$XBPS_DISTDIR/xbps-src" show-avail $pkgname ; then
-	FLAG_a="-a $("$XBPS_DISTDIR/xbps-src" show $pkgname | sed -En -e 's/archs:[[:space:]]*([.*]*)/\1/p' | sed -e 's/\*$//' | grep -v -e '^~' | head -n1 )"
-fi
-
-# Try to source the build-style as well. This is required for R-cran packages.
-if [ -f "${XBPS_DISTDIR}/common/environment/build-style/${build_style}.sh"  ]; then
-	. "${XBPS_DISTDIR}/common/environment/build-style/${build_style}.sh"
-fi
-
-XBPS_SRCDISTDIR=$("$XBPS_DISTDIR/xbps-src" $FLAG_h show-var XBPS_SRCDISTDIR | tail -1)
-srcdir="$XBPS_SRCDISTDIR/$pkgname-$version"
-
-if [ -n "$FLAG_f" ]; then
-	for f in $distfiles; do
-		curfile="${f#*>}"
-		curfile="${curfile##*/}"
-		distfile="$srcdir/$curfile"
-		rm -vf "$distfile"
-	done
-	"$XBPS_DISTDIR/xbps-src" $FLAG_h -I clean $pkgname
-fi
-
-"$XBPS_DISTDIR/xbps-src" $FLAG_h $FLAG_a -I fetch $pkgname
-
-ret=0
-sums=""
-for f in $distfiles; do
-	curfile="${f#*>}"
-	curfile="${curfile##*/}"
-	distfile="$srcdir/$curfile"
-	if [ -n "$FLAG_c" ];then
-		sum="@"
-		case ${distfile} in
-		*tar.lzma|*.tar|*.txz|*.tar.xz|*.tbz|*.tar.gz)
-			sum+=$(xbps-uhelper digest <(tar xf "$distfile" --to-stdout)) || ret=1
-			;;
-		*.gz)
-			sum+=$(xbps-uhelper digest <(gunzip -c "$distfile")) || ret=1
-			;;
-		*.tar.bz2|*.bz2)
-			sum+=$(xbps-uhelper digest <(bunzip2 -c "$distfile")) || ret=1
-			;;
-		*.zip)
-			if command -v unzip &>/dev/null; then
-				sum+=$(xbps-uhelper digest <(unzip -p "$distfile"))
-				if [ $? -ne 0 ]; then
-					echo "$pkgver: extracting $curfile to pipe."
-					ret=1
-				fi
-			else
-				echo "$pkgver: cannot find unzip bin for extraction."
-				ret=1
-			fi
-			;;
-		*.rpm)
-			if command -v rpmextract &>/dev/null; then
-				sum+=$(xbps-uhelper digest <(rpm2cpio "$distfile" | bsdtar xf - --to-stdout))
-				if [ $? -ne 0 ]; then
-					echo "$pkgver: extracting $curfile to pipe."
-					ret=1
-				fi
-			else
-				echo "$pkgver: cannot find rpmextract for extraction."
-				ret=1
-			fi
-			;;
-		*.7z)
-			if command -v 7z &>/dev/null; then
-				sum+=$(xbps-uhelper digest <(7z x -o "$distfile"))
-				if [ $? -ne 0 ]; then
-					echo "$pkgver: extracting $curfile to pipe."
-					ret=1
-				fi
-			else
-				echo "$pkgver: cannot find 7z bin for extraction."
-				ret=1
-			fi
-			;;
-		*.txt|*.patch|*.diff)
-			sum+=$(xbps-uhelper digest "$distfile") || ret=1
-			;;
-		*)
-			sum=$(xbps-uhelper digest $distfile) || ret=1
-
-		esac
+rv=0
+
+for template; do
+	if [ -f "$template" ]; then
+		:
+	elif [ -f "$template/template" ]; then
+		template="$template/template"
+	elif [ -f "$XBPS_DISTDIR/srcpkgs/$template/template" ]; then
+		template="$XBPS_DISTDIR/srcpkgs/$template/template"
 	else
-		sum=$(xbps-uhelper digest $distfile) || ret=1
+		echo "xgensum: could not find template: $template" >&2
+		rv=$(( rv + 1 ))
+		continue
 	fi
-	sums+="${sum%  *}\n "
-done
 
-sed $FLAG_i -e "/^checksum=/,/^[^ \t]/{
-		/^[ \t]/d
-		s/^checksum=.*/checksum=\"${sums%\n }\"/
-		/^checksum=\"[^ ]*\"/s/\"//g
-	}" "$template" || ret=1
+	( gensum_template "$template" ) || rv=$(( rv + 1 ))
+done
 
-exit $ret
+exit $rv
diff --git a/xtools.1 b/xtools.1
index 8aa5b1f..4f5eeac 100644
--- a/xtools.1
+++ b/xtools.1
@@ -64,7 +64,7 @@ Oo Fl f Oc \
 Oo Fl c Oc \
 Oo Fl i Oc \
 Oo Fl H Ar hostdir Oc \
-Ar template
+Ar templates\ ...
 .Nd update SHA256 sum in templates
 .Bl -tag -offset 2n -width 2n -compact
 .It Fl f