RPM Community Forums

Mailing List Message of <rpm-cvs>

[CVS] RPM: rpm/ CHANGES rpm/build/ parseBuildInstallClean.c parseSpec....

From: Jeff Johnson <jbj@rpm5.org>
Date: Mon 17 Dec 2007 - 20:44:13 CET
Message-Id: <20071217194413.4D194348460@rpm5.org>
  RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  jbj@rpm5.org
  Module: rpm                              Date:   17-Dec-2007 20:44:13
  Branch: HEAD                             Handle: 2007121719441200

  Modified files:
    rpm                     CHANGES
    rpm/build               parseBuildInstallClean.c parseSpec.c rpmbuild.h
                            rpmspec.h spec.c

  Log:
    - jbj: preliminaries for %foo arbitrary section parsing (not added
    yet).

  Summary:
    Revision    Changes     Path
    1.1996      +1  -0      rpm/CHANGES
    2.30        +5  -0      rpm/build/parseBuildInstallClean.c
    2.127       +29 -2      rpm/build/parseSpec.c
    2.89        +2  -1      rpm/build/rpmbuild.h
    2.68        +4  -0      rpm/build/rpmspec.h
    2.172       +9  -0      rpm/build/spec.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.1995 -r1.1996 CHANGES
  --- rpm/CHANGES	17 Dec 2007 17:44:52 -0000	1.1995
  +++ rpm/CHANGES	17 Dec 2007 19:44:12 -0000	1.1996
  @@ -1,4 +1,5 @@
   5.0b2 -> 5.0b3:
  +    - jbj: preliminaries for %foo arbitrary section parsing (not added yet).
       - jbj: start using rpmParseState typedef rather than int.
       - jbj: fix: explicitly add mkdir -p to spec_install_pre.
       - jbj: explicitly compare against PART_NONE, avoid RPMRC_FOO collisions.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/build/parseBuildInstallClean.c
  ============================================================================
  $ cvs diff -u -r2.29 -r2.30 parseBuildInstallClean.c
  --- rpm/build/parseBuildInstallClean.c	17 Dec 2007 17:44:52 -0000	2.29
  +++ rpm/build/parseBuildInstallClean.c	17 Dec 2007 19:44:12 -0000	2.30
  @@ -32,6 +32,11 @@
       } else if (parsePart == PART_TRACK) { /* support "%track" scriptlet */
          sbp = &spec->track;
          name = "%track";
  +    } else if (parsePart == PART_ARBITRARY) {
  +	spec->foo = xrealloc(spec->foo, (spec->nfoo + 1) * sizeof(*spec->foo));
  +	sbp = &spec->foo[spec->nfoo++];
  +	*sbp = NULL;
  +	name = "%arbitrary";
       }
       
       if (*sbp != NULL) {
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/build/parseSpec.c
  ============================================================================
  $ cvs diff -u -r2.126 -r2.127 parseSpec.c
  --- rpm/build/parseSpec.c	17 Dec 2007 17:13:52 -0000	2.126
  +++ rpm/build/parseSpec.c	17 Dec 2007 19:44:12 -0000	2.127
  @@ -6,6 +6,7 @@
   #include "system.h"
   
   #include <rpmio_internal.h>	/* XXX fdGetFp */
  +#define	_RPMTAG_INTERNAL	/* XXX rpmTags->aTags */
   #include <rpmbuild.h>
   #include "rpmds.h"
   #include "rpmts.h"
  @@ -60,6 +61,7 @@
   rpmParseState isPart(const char *line)
   {
       struct PartRec *p;
  +    rpmParseState nextPart = PART_NONE;	/* assume failure */
   
       if (partList[0].len == 0)
   	initParts(partList);
  @@ -69,11 +71,35 @@
   	if (xstrncasecmp(line, p->token, p->len))
   	    continue;
   	c = *(line + p->len);
  -	if (c == '\0' || xisspace(c))
  +	if (c == '\0' || xisspace(c)) {
  +	    nextPart = p->part;
   	    break;
  +	}
  +    }
  +
  +    /* If %foo is not found explictly, check for an arbitrary %foo tag. */
  +    if (nextPart == PART_NONE) {
  +	ARGV_t aTags = NULL;
  +	const char * s;
  +/*@-noeffect@*/
  +        (void) tagName(0); /* XXX force arbitrary tags to be initialized. */
  +/*@=noeffect@*/
  +        aTags = rpmTags->aTags;
  +        if (aTags != NULL && aTags[0] != NULL) {
  +            ARGV_t av;
  +            s = tagCanonicalize(line+1);	/* XXX +1 to skip leading '%' */
  +#if defined(RPM_VENDOR_OPENPKG) /* wildcard-matching-arbitrary-tagnames */
  +            av = argvSearchLinear(aTags, s, argvFnmatchCasefold);
  +#else
  +            av = argvSearch(aTags, s, argvStrcasecmp);
  +#endif
  +            if (av != NULL)
  +                nextPart = PART_ARBITRARY;
  +            s = _free(s);
  +        }
       }
   
  -    return (p->token ? p->part : PART_NONE);
  +    return nextPart;
   }
   
   /**
  @@ -481,6 +507,7 @@
   	case PART_CHECK:
   	case PART_TRACK:	/* support "%track" scriptlet */
   	case PART_CLEAN:
  +	case PART_ARBITRARY:
   	    parsePart = parseBuildInstallClean(spec, parsePart);
   	    /*@switchbreak@*/ break;
   	case PART_CHANGELOG:
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/build/rpmbuild.h
  ============================================================================
  $ cvs diff -u -r2.88 -r2.89 rpmbuild.h
  --- rpm/build/rpmbuild.h	17 Dec 2007 17:13:52 -0000	2.88
  +++ rpm/build/rpmbuild.h	17 Dec 2007 19:44:12 -0000	2.89
  @@ -76,7 +76,8 @@
       /* support "%track" and "%sanitycheck" scripts/sections */
       PART_TRACK		= 32+PART_BASE, /*!< */
       PART_SANITYCHECK	= 33+PART_BASE, /*!< */
  -    PART_LAST		= 34+PART_BASE  /*!< */
  +    PART_ARBITRARY	= 34+PART_BASE, /*!< */
  +    PART_LAST		= 35+PART_BASE  /*!< */
   } rpmParseState;
   
   #define STRIP_NOTHING             0
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/build/rpmspec.h
  ============================================================================
  $ cvs diff -u -r2.67 -r2.68 rpmspec.h
  --- rpm/build/rpmspec.h	17 Dec 2007 07:07:41 -0000	2.67
  +++ rpm/build/rpmspec.h	17 Dec 2007 19:44:12 -0000	2.68
  @@ -180,6 +180,10 @@
   /*@only@*/
       StringBuf track;		/*!< %track scriptlet. */
   
  +    int nfoo;
  +/*@only@*/ /*@null@*/
  +    StringBuf *foo;
  +
   /*@owned@*/
       Package packages;		/*!< Package list. */
   };
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/build/spec.c
  ============================================================================
  $ cvs diff -u -r2.171 -r2.172 spec.c
  --- rpm/build/spec.c	17 Dec 2007 15:45:48 -0000	2.171
  +++ rpm/build/spec.c	17 Dec 2007 19:44:12 -0000	2.172
  @@ -488,6 +488,8 @@
       spec->check = NULL;
       spec->clean = NULL;
       spec->track = NULL;		/* support "%track" script/section */
  +    spec->foo = NULL;
  +    spec->nfoo = 0;
   
       spec->sources = NULL;
       spec->packages = NULL;
  @@ -535,6 +537,13 @@
       spec->check = freeStringBuf(spec->check);
       spec->clean = freeStringBuf(spec->clean);
       spec->track = freeStringBuf(spec->track);	/* support "%track" script/section */
  +    if (spec->foo) {
  +	int i;
  +	for (i = 0; i < spec->nfoo; i++)
  +	    spec->foo[i] = freeStringBuf(spec->foo[i]);
  +	spec->foo = _free(spec->foo);
  +    }
  +    spec->nfoo = 0;
   
       spec->buildSubdir = _free(spec->buildSubdir);
       spec->rootURL = _free(spec->rootURL);
  @@ .
Received on Mon Dec 17 20:44:13 2007
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.