1 diff -urpa rpm-4.5.orig/build/parsePreamble.c rpm-4.5/build/parsePreamble.c
2 --- rpm-4.5.orig/build/parsePreamble.c 2019-06-01 18:55:39.351000000 +0200
3 +++ rpm-4.5/build/parsePreamble.c 2019-06-01 19:24:30.398000000 +0200
4 @@ -730,19 +730,32 @@ static int handlePreambleTag(Spec spec,
5 case RPMTAG_EXCLUSIVEOS:
6 addOrAppendListEntry(spec->sourceHeader, tag, field);
8 - case RPMTAG_BUILDARCHS:
9 - if ((rc = poptParseArgvString(field,
11 - &(spec->BANames)))) {
12 + case RPMTAG_BUILDARCHS: {
14 + const char **BANames = NULL;
15 + if ((rc = poptParseArgvString(field, &BACount, &BANames))) {
16 rpmError(RPMERR_BADSPEC,
17 _("line %d: Bad BuildArchitecture format: %s\n"),
18 spec->lineNum, spec->line);
19 return RPMERR_BADSPEC;
22 + if (spec->packages == pkg) {
23 + spec->BACount = BACount;
24 + spec->BANames = BANames;
26 + if (BACount != 1 || strcmp(BANames[0], "noarch")) {
27 + rpmError(RPMERR_BADSPEC,
28 + _("line %d: Only noarch subpackages are supported: %s\n"),
29 + spec->lineNum, spec->line);
30 + BANames = _free(BANames);
33 + headerAddEntry(pkg->header, RPMTAG_ARCH, RPM_STRING_TYPE, "noarch", 1);
36 spec->BANames = _free(spec->BANames);
41 rpmError(RPMERR_INTERNAL, _("Internal error: Bogus tag %d\n"), tag);
42 return RPMERR_INTERNAL;
43 diff -urpa rpm-4.5.orig/build/parseSpec.c rpm-4.5/build/parseSpec.c
44 --- rpm-4.5.orig/build/parseSpec.c 2019-06-01 18:55:39.226000000 +0200
45 +++ rpm-4.5/build/parseSpec.c 2019-06-01 19:27:44.338000000 +0200
46 @@ -627,8 +627,11 @@ int parseSpec(rpmts ts, const char *spec
49 (void) headerAddEntry(pkg->header, RPMTAG_OS, RPM_STRING_TYPE, os, 1);
50 - (void) headerAddEntry(pkg->header, RPMTAG_ARCH,
51 - RPM_STRING_TYPE, arch, 1);
52 + /* noarch subpackages already have arch set here, leave it alone */
53 + if (!headerIsEntry(pkg->header, RPMTAG_ARCH)) {
54 + (void) headerAddEntry(pkg->header, RPMTAG_ARCH,
55 + RPM_STRING_TYPE, arch, 1);
57 (void) headerAddEntry(pkg->header, RPMTAG_PLATFORM,
58 RPM_STRING_TYPE, platform, 1);