Support retrieving the spec contents in parsed format
authorPanu Matilainen <pmatilai@redhat.com>
Fri, 17 Jun 2011 10:44:39 +0000 (13:44 +0300)
committerPanu Matilainen <pmatilai@redhat.com>
Fri, 17 Jun 2011 10:52:27 +0000 (13:52 +0300)
- Collect the preprocessed (conditionals, macros etc evaluated)
  lines to a separate stringbuf, make rpmSpecGetSection() return
  that on RPMBUILD_NONE "section" (hack, but so is abusing RPMBUILD_FOO
  for the section here so shrug)

build/parseSpec.c
build/rpmbuild_internal.h
build/rpmspec.h
build/spec.c

index a1a43d9..c9e011a 100644 (file)
@@ -412,6 +412,11 @@ int readLine(rpmSpec spec, int strip)
        spec->line[0] = '\0';
     }
 
+    /* Collect parsed line */
+    if (spec->parsed == NULL)
+       spec->parsed = newStringBuf();
+    appendLineStringBuf(spec->parsed, spec->line);
+
     /* FIX: spec->readStack->next should be dependent */
     return 0;
 }
index 5654481..5f963a3 100644 (file)
@@ -75,6 +75,8 @@ struct rpmSpec_s {
     StringBuf check;           /*!< %check scriptlet. */
     StringBuf clean;           /*!< %clean scriptlet. */
 
+    StringBuf parsed;          /*!< parsed spec contents */
+
     Package packages;          /*!< Package list. */
 };
 
index 8a389ed..195fc72 100644 (file)
@@ -65,7 +65,11 @@ rpmSourceFlags rpmSpecSrcFlags(rpmSpecSrc src);
 int rpmSpecSrcNum(rpmSpecSrc src);
 const char * rpmSpecSrcFilename(rpmSpecSrc src, int full);
 
-/* Retrieve parsed spec script section (RPMBUILD_PREP, RPMBUILD_BUILD etc) */
+/*
+ * Retrieve parsed spec script section (RPMBUILD_PREP, RPMBUILD_BUILD etc).
+ * As a special case, RPMBUILD_NONE as section returns the entire spec in
+ * preprocessed (macros expanded etc) format.
+ */
 const char * rpmSpecGetSection(rpmSpec spec, int section);
 
 /** \ingroup rpmbuild
index abbd228..d0bf9ff 100644 (file)
@@ -177,6 +177,7 @@ rpmSpec newSpec(void)
     spec->install = NULL;
     spec->check = NULL;
     spec->clean = NULL;
+    spec->parsed = NULL;
 
     spec->sources = NULL;
     spec->packages = NULL;
@@ -224,6 +225,7 @@ rpmSpec rpmSpecFree(rpmSpec spec)
     spec->install = freeStringBuf(spec->install);
     spec->check = freeStringBuf(spec->check);
     spec->clean = freeStringBuf(spec->clean);
+    spec->parsed = freeStringBuf(spec->parsed);
 
     spec->buildRoot = _free(spec->buildRoot);
     spec->buildSubdir = _free(spec->buildSubdir);
@@ -376,6 +378,7 @@ const char * rpmSpecGetSection(rpmSpec spec, int section)
 {
     if (spec) {
        switch (section) {
+       case RPMBUILD_NONE:     return getStringBuf(spec->parsed);
        case RPMBUILD_PREP:     return getStringBuf(spec->prep);
        case RPMBUILD_BUILD:    return getStringBuf(spec->build);
        case RPMBUILD_INSTALL:  return getStringBuf(spec->install);