]> TLD Linux GIT Repositories - packages/rpm.git/blobdiff - rpm-noarch-subpackages.patch
- backported support for noarch subpackages
[packages/rpm.git] / rpm-noarch-subpackages.patch
diff --git a/rpm-noarch-subpackages.patch b/rpm-noarch-subpackages.patch
new file mode 100644 (file)
index 0000000..a9d0b0e
--- /dev/null
@@ -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);