From c38504c4ba539ccbfb37edccc0cc0ad3cdae58b3 Mon Sep 17 00:00:00 2001 From: Panu Matilainen Date: Fri, 17 Jun 2011 13:44:39 +0300 Subject: [PATCH] Support retrieving the spec contents in parsed format - 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 | 5 +++++ build/rpmbuild_internal.h | 2 ++ build/rpmspec.h | 6 +++++- build/spec.c | 3 +++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/build/parseSpec.c b/build/parseSpec.c index a1a43d9..c9e011a 100644 --- a/build/parseSpec.c +++ b/build/parseSpec.c @@ -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; } diff --git a/build/rpmbuild_internal.h b/build/rpmbuild_internal.h index 5654481..5f963a3 100644 --- a/build/rpmbuild_internal.h +++ b/build/rpmbuild_internal.h @@ -75,6 +75,8 @@ struct rpmSpec_s { StringBuf check; /*!< %check scriptlet. */ StringBuf clean; /*!< %clean scriptlet. */ + StringBuf parsed; /*!< parsed spec contents */ + Package packages; /*!< Package list. */ }; diff --git a/build/rpmspec.h b/build/rpmspec.h index 8a389ed..195fc72 100644 --- a/build/rpmspec.h +++ b/build/rpmspec.h @@ -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 diff --git a/build/spec.c b/build/spec.c index abbd228..d0bf9ff 100644 --- a/build/spec.c +++ b/build/spec.c @@ -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); -- 2.7.4