teknoraver / rpms / rpm

Forked from rpms/rpm 4 months ago
Clone
Blob Blame History Raw
diff --git a/build/parsePreamble.c b/build/parsePreamble.c
index d168978..988b615 100644
--- a/build/parsePreamble.c
+++ b/build/parsePreamble.c
@@ -632,19 +632,32 @@ static int handlePreambleTag(rpmSpec spec, Package pkg, rpmTag tag,
     case RPMTAG_EXCLUSIVEOS:
 	addOrAppendListEntry(spec->buildRestrictions, tag, field);
 	break;
-    case RPMTAG_BUILDARCHS:
-	if ((rc = poptParseArgvString(field,
-				      &(spec->BACount),
-				      &(spec->BANames)))) {
+    case RPMTAG_BUILDARCHS: {
+	int BACount;
+	const char **BANames = NULL;
+	if ((rc = poptParseArgvString(field, &BACount, &BANames))) {
 	    rpmlog(RPMLOG_ERR,
 		     _("line %d: Bad BuildArchitecture format: %s\n"),
 		     spec->lineNum, spec->line);
 	    return RPMRC_FAIL;
 	}
-	if (!spec->BACount)
+	if (spec->packages == pkg) {
+	    spec->BACount = BACount;
+	    spec->BANames = BANames;
+	} else {
+	    if (BACount != 1 || strcmp(BANames[0], "noarch")) {
+		rpmlog(RPMLOG_ERR,
+			 _("line %d: Only noarch subpackages are supported: %s\n"),
+			spec->lineNum, spec->line);
+		BANames = _free(BANames);
+		return RPMRC_FAIL;
+	    }
+	    headerAddEntry(pkg->header, RPMTAG_ARCH, RPM_STRING_TYPE, "noarch", 1);
+	}
+	if (!BACount)
 	    spec->BANames = _free(spec->BANames);
 	break;
-
+    }
     default:
 	rpmlog(RPMLOG_ERR, _("Internal error: Bogus tag %d\n"), tag);
 	return RPMRC_FAIL;