X-Git-Url: https://git.tld-linux.org/?a=blobdiff_plain;f=rpm-noarch-subpackages.patch;fp=rpm-noarch-subpackages.patch;h=a9d0b0e9335afb19d2e9265f704660d302af7877;hb=92959858e09949b2b69d5da023f08053e21c3557;hp=0000000000000000000000000000000000000000;hpb=c76b6a7f0079d59637e75b226ed8b43b6bc705a0;p=packages%2Frpm.git diff --git a/rpm-noarch-subpackages.patch b/rpm-noarch-subpackages.patch new file mode 100644 index 0000000..a9d0b0e --- /dev/null +++ b/rpm-noarch-subpackages.patch @@ -0,0 +1,59 @@ +diff -urpa rpm-4.5.orig/build/parsePreamble.c rpm-4.5/build/parsePreamble.c +--- rpm-4.5.orig/build/parsePreamble.c 2019-06-01 18:55:39.351000000 +0200 ++++ rpm-4.5/build/parsePreamble.c 2019-06-01 19:24:30.398000000 +0200 +@@ -730,19 +730,32 @@ static int handlePreambleTag(Spec spec, + case RPMTAG_EXCLUSIVEOS: + addOrAppendListEntry(spec->sourceHeader, 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))) { + rpmError(RPMERR_BADSPEC, + _("line %d: Bad BuildArchitecture format: %s\n"), + spec->lineNum, spec->line); + return RPMERR_BADSPEC; + } +- if (!spec->BACount) ++ if (spec->packages == pkg) { ++ spec->BACount = BACount; ++ spec->BANames = BANames; ++ } else { ++ if (BACount != 1 || strcmp(BANames[0], "noarch")) { ++ rpmError(RPMERR_BADSPEC, ++ _("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: + rpmError(RPMERR_INTERNAL, _("Internal error: Bogus tag %d\n"), tag); + return RPMERR_INTERNAL; +diff -urpa rpm-4.5.orig/build/parseSpec.c rpm-4.5/build/parseSpec.c +--- rpm-4.5.orig/build/parseSpec.c 2019-06-01 18:55:39.226000000 +0200 ++++ rpm-4.5/build/parseSpec.c 2019-06-01 19:27:44.338000000 +0200 +@@ -627,8 +627,11 @@ int parseSpec(rpmts ts, const char *spec + } + + (void) headerAddEntry(pkg->header, RPMTAG_OS, RPM_STRING_TYPE, os, 1); +- (void) headerAddEntry(pkg->header, RPMTAG_ARCH, +- RPM_STRING_TYPE, arch, 1); ++ /* noarch subpackages already have arch set here, leave it alone */ ++ if (!headerIsEntry(pkg->header, RPMTAG_ARCH)) { ++ (void) headerAddEntry(pkg->header, RPMTAG_ARCH, ++ RPM_STRING_TYPE, arch, 1); ++ } + (void) headerAddEntry(pkg->header, RPMTAG_PLATFORM, + RPM_STRING_TYPE, platform, 1); +