Multiple items like
    Class: foo
    Class: bar
was the already implemented intent.

(hysterical) The comma is treated as white space
almost (just in case there is some weird corner
case I fergit) everwhere identical to the more usual
white space characters \0x20 \t \n through rpmbuild.

Very b0rken and awkward when everyone's primary
MUSTHAVE demand is "legacy compatibility".

I dinna have the luxury of design wrto *.spec, feel free
to add whatever additional hackery as you see fit. I'm
all about bulldozing existing spec files by adding
sparkly and glittery suger loaded syntax until everyone
cries "Uncle!" many years now.

73 de Jeff

On Dec 27, 2007, at 10:32 AM, Ralf S. Engelschall wrote:

  RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
______________________________________________________________________ ______

  Server: rpm5.org                         Name:   Ralf S. Engelschall
  Root:   /v/rpm/cvs                       Email:  [EMAIL PROTECTED]
Module: rpm Date: 27-Dec-2007 16:32:32
  Branch: HEAD                             Handle: 2007122715323101

  Modified files:
    rpm                     VENDOR
    rpm/build               parsePreamble.c

  Log:
    - OpenPKG-specific change "make-class-available-as-macro":
Do not treat "Class" tag as a fully arbitrary tag. In OpenPKG some
      .spec processing depends on the macro %{class} to be filled from
      the value of the "Class" tag, hence make sure it is not treated
      fully arbitrary (or else the macro would be not available). As
%_arbitrary_tags restricts the allowed tags anyway, best would be to
      export also arbitrary tags as macros!

    - OpenPKG-specific change "append-tag-value-to-macro"
Instead of overwriting macro "foo" with the latest value "quux" in case of tag "Foo: bar" followed by tag "Foo: quux", set the macro "foo" to the comma-separated list "bar, quux". This allows one to get the values of all(!) tags instead of just the last one. In OpenPKG we use this to fetch the value of tags like BuildPreReq or NoSource.

  Summary:
    Revision    Changes     Path
    2.20        +20 -0      rpm/VENDOR
    2.166       +17 -0      rpm/build/parsePreamble.c
______________________________________________________________________ ______

  patch -p0 <<'@@ .'
  Index: rpm/VENDOR
====================================================================== ======
  $ cvs diff -u -r2.19 -r2.20 VENDOR
  --- rpm/VENDOR        25 Dec 2007 19:22:34 -0000      2.19
  +++ rpm/VENDOR        27 Dec 2007 15:32:31 -0000      2.20
  @@ -328,4 +328,24 @@
expanded macro text already terminates with a newline Reason: Using e.g. rpm --eval "%{lua: print('foo\ \n') }" should
                        not lead to an extra trailing blank line.
+ ______________________________________________________________________ __
  +
  +     Change:         make-class-available-as-macro
+ Purpose: Do not treat "Class" tag as a fully arbitrary tag. + Reason: In OpenPKG some .spec processing depends on the + macro %{class} to be filled from the value of the + "Class" tag, hence make sure it is not treated fully + arbitrary (or else the macro would be not available). + Hint: As %_arbitrary_tags restricts the allowed tags anyway, + best would be to export also arbitrary tags as macros! + ______________________________________________________________________ __
  +
  +     Change:         append-tag-value-to-macro
+ Purpose: Instead of overwriting macro "foo" with the latest + value "quux" in case of tag "Foo: bar" followed
  +                     by tag "Foo: quux", set the macro "foo" to the
  +                     comma-separated list "bar, quux".
+ Reason: This allows one to get the values of all(!) tags + instead of just the last one. In OpenPKG we use this + to fetch the value of tags like BuildPreReq or NoSource.

  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/build/parsePreamble.c
====================================================================== ======
  $ cvs diff -u -r2.165 -r2.166 parsePreamble.c
  --- rpm/build/parsePreamble.c 26 Dec 2007 09:36:35 -0000      2.165
  +++ rpm/build/parsePreamble.c 27 Dec 2007 15:32:32 -0000      2.166
  @@ -608,6 +608,9 @@
        break;
       case RPMTAG_GROUP:
       case RPMTAG_SUMMARY:
  +#if defined(RPM_VENDOR_OPENPKG) /* make-class-available-as-macro */
  +    case RPMTAG_CLASS:
  +#endif
        (void) stashSt(spec, pkg->header, tag, lang);
        /[EMAIL PROTECTED]@*/
       case RPMTAG_DISTRIBUTION:
  @@ -807,7 +810,18 @@
       }

       if (macro)
  +#if defined(RPM_VENDOR_OPENPKG) /* append-tag-value-to-macro */
  +    {
+ char *value = rpmExpand("%{?", macro, ":%{", macro, "}, }", NULL);
  +        size_t value_len = strlen(value);
  +        value = xrealloc(value, value_len + strlen(field) + 1);
  +        strcpy(value+value_len, field);
  +        addMacro(spec->macros, macro, NULL, value, RMIL_SPEC);
  +        value = _free(value);
  +    }
  +#else
        addMacro(spec->macros, macro, NULL, field, RMIL_SPEC);
  +#endif

       return RPMRC_OK;
   }
  @@ -884,6 +898,9 @@
       {RPMTAG_KEYWORDS,                0, 0, "keywords"},
       {RPMTAG_KEYWORDS,                0, 0, "keyword"},
       {RPMTAG_BUILDPLATFORMS,  0, 0, "buildplatforms"},
  +#if defined(RPM_VENDOR_OPENPKG) /* make-class-available-as-macro */
  +    {RPMTAG_CLASS,           0, 0, "class"},
  +#endif
       /[EMAIL PROTECTED]@*/    /* LCL: can't add null annotation */
       {0, 0, 0, 0}
       /[EMAIL PROTECTED]@*/
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                [EMAIL PROTECTED]

______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
Developer Communication List                        [email protected]

Reply via email to