[pacman-dev] [PATCH] handle arch specific attributes

Dave Reisner dreisner at archlinux.org
Sat Jul 26 12:11:50 EDT 2014


This introduces support for architecutre-specific conflicts, depends,
and optdepends by appending "_$CARCH" to the array name. For example,
in the global section:

  arch=('i686' 'x86_64')
  depends=('foo')
  depends_x86_64=('bar')

This will generate depends of 'foo' and 'bar' on x86_64, but only 'foo'
on i686. Moreover, this is supported in the package functions with the
same heuristics as the generic names, e.g.

  ...
  arch=('i686' 'x86_64')
  depends=('foo')
  ...

  package_somepkg() {
    depends_x86_64=('bar')

    ...
  }

Again, will cause x86_64 to have depends of 'foo' and 'bar', but only
'foo' for i686.
---
So, what it *doesn't* yet support is arch-specific sources. This is strictly an
optimization and only applies to packaging of binary blobs so, personally, I'm
okay with this lingering for another patch.

If we're okay with the syntax and the way this operates, I can follow up with
the documentation side of things.

 scripts/makepkg.sh.in | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index e20b707..06c7374 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -1487,6 +1487,22 @@ source_safe() {
 	shopt -s extglob
 }
 
+merge_arch_attrs() {
+	local attr supported_attrs=(conflicts depends optdepends)
+
+	for attr in "${supported_attrs[@]}"; do
+		eval "$attr+=(\"\${${attr}_$CARCH[@]}\")"
+	done
+
+	# ensure that calling this function is idempotent.
+	unset -v "${supported_attrs[@]/%/_$CARCH}"
+}
+
+source_buildfile() {
+	source_safe "$@"
+	merge_arch_attrs
+}
+
 run_function_safe() {
 	local restoretrap
 
@@ -1905,6 +1921,8 @@ write_pkginfo() {
 	local size="$(@DUPATH@ @DUFLAGS@)"
 	size="$(( ${size%%[^0-9]*} * 1024 ))"
 
+	merge_arch_attrs
+
 	msg2 "$(gettext "Generating %s file...")" ".PKGINFO"
 	printf "# Generated by makepkg %s\n" "$makepkg_version"
 	printf "# using %s\n" "$(fakeroot -v)"
@@ -2914,7 +2932,7 @@ else
 	if [[ ${BUILDFILE:0:1} != "/" ]]; then
 		BUILDFILE="$startdir/$BUILDFILE"
 	fi
-	source_safe "$BUILDFILE"
+	source_buildfile "$BUILDFILE"
 fi
 
 # set defaults if they weren't specified in buildfile
-- 
2.0.3


More information about the pacman-dev mailing list