]> TLD Linux GIT Repositories - packages/rpm.git/blob - rpm-noarch-subpackages.patch
- package /usr/lib/rpm/macros.d dir
[packages/rpm.git] / rpm-noarch-subpackages.patch
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);
7         break;
8 -    case RPMTAG_BUILDARCHS:
9 -       if ((rc = poptParseArgvString(field,
10 -                                     &(spec->BACount),
11 -                                     &(spec->BANames)))) {
12 +    case RPMTAG_BUILDARCHS: {
13 +       int BACount;
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;
20         }
21 -       if (!spec->BACount)
22 +       if (spec->packages == pkg) {
23 +           spec->BACount = BACount;
24 +           spec->BANames = BANames;
25 +       } else {
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);
31 +               return RPMRC_FAIL;
32 +           }
33 +           headerAddEntry(pkg->header, RPMTAG_ARCH, RPM_STRING_TYPE, "noarch", 1);
34 +       }
35 +       if (!BACount)
36             spec->BANames = _free(spec->BANames);
37         break;
38 -
39 +    }
40      default:
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
47         }
48  
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);
56 +       }
57         (void) headerAddEntry(pkg->header, RPMTAG_PLATFORM,
58                 RPM_STRING_TYPE, platform, 1);
59