Fixed a problem with the second patch. I forgot the case where only arch 'all' 
packages were being built.

I've attached both patches again. I've tested these and they match the 
implementation used in sbuild.

-- 
Regards,
Andres
diff --git a/pbuilder-satisfydepends-funcs b/pbuilder-satisfydepends-funcs
index 5c16269..8d86c81 100755
--- a/pbuilder-satisfydepends-funcs
+++ b/pbuilder-satisfydepends-funcs
@@ -85,19 +85,32 @@ function checkbuilddep_archdeps () {
     local ARCH="$2"
     # architectures listed between [ and ] for this dep
     local DEP_ARCHES="$(echo "$INSTALLPKG" | sed 's/.*\[\(.*\)\].*/\1/')"
-    # check for !$ARCH in DEP_ARCHES
-    if echo "$DEP_ARCHES" | egrep -q "(^|[[:space:]/]+)\![[:space:]/]*$ARCH($|[[:space:]/]+)"; then
-	return 0;
+    local PKG="$(echo "$INSTALLPKG" | cut -d ' ' -f 1)"
+    local USE_IT
+    local IGNORE_IT
+    local INCLUDE
+    # Use 'dpkg-architecture' to support architecture wildcards.
+    for d in $DEP_ARCHES; do
+        if echo "$d" | grep -q '!'; then
+            d="$(echo $d | sed 's/!//')"
+            if dpkg-architecture -a$ARCH -i$d; then
+                IGNORE_IT="yes"
+            fi
+        else
+            if dpkg-architecture -a$ARCH -i$d; then
+                USE_IT="yes"
+            fi
+            INCLUDE="yes"
+        fi
+    done
+    if [ $IGNORE_IT ] && [ $USE_IT ]; then
+        printf "W: inconsistent arch restriction on $PKG: " >&2
+        printf "$DEP_ARCHES depedency\n" >&2
     fi
-    # check for a "!" which would mean there's a !<otherarch> and hence $ARCH
-    # is included
-    if ! echo "$DEP_ARCHES" | grep -q '!'; then
-        # check for $ARCH in DEP_ARCHES
-	if ! echo "$DEP_ARCHES" | egrep -q "(^|[[:space:]/]+)$ARCH($|[[:space:]/]+)"; then
-	    return 0;
-	fi
+    if [ $IGNORE_IT ] || ( [ $INCLUDE ] && [ ! $USE_IT ] ); then
+        return 0
     fi
-    return 1;
+    return 1
 }
 
 function checkbuilddep_provides () {
diff --git a/pbuilder-buildpackage b/pbuilder-buildpackage
index 0fbaf2e..cde3551 100755
--- a/pbuilder-buildpackage
+++ b/pbuilder-buildpackage
@@ -31,6 +31,9 @@ if [ ! -f "$PACKAGENAME" ]; then
     exit 1;
 fi;
 
+# check if this package should be built at all
+checkarchitecture "$PACKAGENAME"
+
 if [ -n "$BUILDUSERNAME" -a -n "$BUILDUSERID" ]; then
     SUTOUSER="env LOGNAME=$BUILDUSERNAME su -p $BUILDUSERNAME"
     DEBBUILDOPTS="$DEBBUILDOPTS -rfakeroot"
diff --git a/pbuilder-buildpackage-funcs b/pbuilder-buildpackage-funcs
index 370c799..d573dbf 100644
--- a/pbuilder-buildpackage-funcs
+++ b/pbuilder-buildpackage-funcs
@@ -30,6 +30,25 @@ function copydsc () {
     done
 }
 
+function checkarchitecture () {
+    local DSCFILE="$1"
+    local ARCHES="$(cat $DSCFILE | grep Architecture | sed 's/^[^:]\+:\s*//')"
+    local ARCH=$(dpkg-architecture -qDEB_HOST_ARCH)
+    local VALID_ARCH
+    for d in $ARCHES; do
+        if dpkg-architecture -a$ARCH -i$d; then
+            VALID_ARCH="yes"
+            break
+        fi
+    done
+    if [ ! $VALID_ARCH ] && [ ! "$ARCHES" = "all" ]; then
+        local msg="E: $ARCH not in arch list or does not match any "
+        msg="$msg arch wildcards: $ARCHES"
+        log $msg
+        exit 2
+    fi
+}
+
 function checkbuilddep () {
     # call satisfydepends
     local BUILDOPT="--binary-all"

Reply via email to