1 diff -urN rpm-5.4.13/build/parseSpec.c rpm-5.4.13-rpmspec/build/parseSpec.c
2 --- rpm-5.4.13/build/parseSpec.c 2013-10-22 20:18:34.483039876 +0200
3 +++ rpm-5.4.13-rpmspec/build/parseSpec.c 2013-10-22 18:52:02.550664732 +0200
8 + /* Collect parsed line */
9 + if (spec->parsed == NULL)
10 + spec->parsed = rpmiobNew(0);
11 + spec->parsed = rpmiobAppend(spec->parsed, spec->line, 1);
13 /*@-compmempass@*/ /* FIX: spec->readStack->next should be dependent */
16 diff -urN rpm-5.4.13/build/rpmspec.h rpm-5.4.13-rpmspec/build/rpmspec.h
17 --- rpm-5.4.13/build/rpmspec.h 2013-10-22 20:18:34.449706143 +0200
18 +++ rpm-5.4.13-rpmspec/build/rpmspec.h 2013-10-22 18:44:37.729692113 +0200
21 rpmiob clean; /*!< %clean scriptlet. */
26 /*@only@*/ /*@relnull@*/
28 --- rpm-5.4.13/build/spec.c~ 2013-07-27 02:16:06.000000000 +0200
29 +++ rpm-5.4.13/build/spec.c 2013-10-23 13:01:36.596670702 +0200
31 spec->install = rpmiobFree(spec->install);
32 spec->check = rpmiobFree(spec->check);
33 spec->clean = rpmiobFree(spec->clean);
34 + spec->parsed = rpmiobFree(spec->parsed);
35 spec->foo = tagStoreFree(spec->foo, spec->nfoo);
38 diff -urN rpm-5.4.13/tools/Makefile.am rpm-5.4.13-rpmspec/tools/Makefile.am
39 --- rpm-5.4.13/tools/Makefile.am 2013-10-22 20:18:34.426372530 +0200
40 +++ rpm-5.4.13-rpmspec/tools/Makefile.am 2013-10-22 20:02:30.365350944 +0200
43 @WITH_AUGEAS_AUGTOOL@ chroot cp @WITH_CUDF_CUDFTOOL@ find mtree \
44 @WITH_SEMANAGE_SEMODULE@ wget \
45 - rpmcache rpmdigest rpmrepo rpmspecdump \
46 + rpmcache rpmdigest rpmrepo rpmspecdump rpmspec \
47 rpmcmp rpmdeps sqlite3 @WITH_KEYUTILS_RPMKEY@ @WITH_LIBELF_DEBUGEDIT@
49 pkgbin_PROGRAMS += dbconvert
51 rpmspecdump_SOURCES = rpmspecdump.c
52 rpmspecdump_LDADD = $(RPMBUILD_LDADD_COMMON)
54 +rpmspec_SOURCES = rpmspec.c
55 +rpmspec_LDADD = $(RPMBUILD_LDADD_COMMON)
57 semodule_SOURCES = semodule.c
58 semodule_LDADD = $(RPMIO_LDADD_COMMON)
60 diff -urN rpm-5.4.13/tools/rpmspec.c rpm-5.4.13-rpmspec/tools/rpmspec.c
61 --- rpm-5.4.13/tools/rpmspec.c 1970-01-01 01:00:00.000000000 +0100
62 +++ rpm-5.4.13-rpmspec/tools/rpmspec.c 2013-10-22 20:00:06.075242852 +0200
65 +const char *__progname;
69 +#if defined(IAM_RPM) || defined(__LCLINT__)
78 +#include <rpmiotypes.h>
81 +#include <rpmtypes.h>
85 +#include "rpmversion.h"
89 +#include <rpmbuild.h>
93 +#define GETOPT_REBUILD 1003
94 +#define GETOPT_RECOMPILE 1004
103 + MODE_QUERY = (1 << 0),
104 + MODE_PARSE = (1 << 1),
107 +static int mode = MODE_UNKNOWN;
108 +static rpmQVSources source = RPMQV_RPM;
109 +static const char *target = NULL;
110 +static char *queryformat = NULL;
112 +static struct poptOption specOptsTable[] = {
113 + { "parse", 'P', POPT_ARG_VAL, &mode, MODE_PARSE,
114 + N_("parse spec file(s) to stdout"), NULL },
115 + { "query", 'q', POPT_ARG_VAL, &mode, MODE_QUERY,
116 + N_("query spec file(s)"), NULL },
117 + { "rpms", 0, POPT_ARG_VAL, &source, RPMQV_RPM,
118 + N_("operate on binary rpms generated by spec (default)"), NULL },
119 + { "srpm", 0, POPT_ARG_VAL, &source, RPMQV_SPECSRPM,
120 + N_("operate on source rpm generated by spec"), NULL },
121 + { "target", 0, POPT_ARG_STRING, &target, 0,
122 + N_("override target platform"), NULL },
123 + { "queryformat", 0, POPT_ARG_STRING, &queryformat, 0,
124 + N_("use the following query format"), "QUERYFORMAT" },
125 + { "qf", 0, (POPT_ARG_STRING | POPT_ARGFLAG_DOC_HIDDEN), &queryformat, 0,
130 +/* the structure describing the options we take and the defaults */
131 +static struct poptOption optionsTable[] = {
132 + { NULL, '\0', POPT_ARG_INCLUDE_TABLE, specOptsTable, 0,
133 + N_("Spec options:"), NULL },
135 + { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmcliAllPoptTable, 0,
136 + N_("Common options for all rpm modes and executables:"), NULL },
143 +/*@exits@*/ static void argerror(const char * desc)
144 + /*@globals __assert_program_name, fileSystem @*/
145 + /*@modifies fileSystem @*/
147 + fprintf(stderr, _("%s: %s\n"), __progname, desc);
148 + exit(EXIT_FAILURE);
151 +#ifdef DYING /* XXX rpmIsVerbose alone stops usage spewage with every --eval */
152 +static void printVersion(FILE * fp)
153 + /*@globals rpmEVR, fileSystem @*/
154 + /*@modifies *fp, fileSystem @*/
156 + fprintf(fp, "%s (" RPM_NAME ") %s\n", __progname, rpmEVR);
157 + if (rpmIsVerbose())
158 + fprintf(fp, "rpmlib 0x%08x,0x%08x,0x%08x\n",
159 + rpmlibVersion(), rpmlibTimestamp(), rpmlibVendor());
162 +static void printUsage(poptContext con, FILE * fp, int flags)
163 + /*@globals rpmEVR, fileSystem, internalState @*/
164 + /*@modifies *fp, fileSystem, internalState @*/
169 + if (rpmIsVerbose())
170 + poptPrintHelp(con, fp, flags);
172 + poptPrintUsage(con, fp, flags);
176 +int main(int argc, char *argv[])
179 + QVA_t qva = &rpmQVKArgs;
181 + poptContext optCon;
184 + optCon = rpmcliInit(argc, argv, optionsTable);
187 + rpmFreeMacros(NULL);
189 + rpmcliConfigured();
192 + ts = rpmtsCreate();
196 + if (!poptPeekArg(optCon))
197 + argerror(_("no arguments given for query"));
199 + qva->qva_queryFormat = queryformat;
200 + qva->qva_source = source;
201 + qva->qva_specQuery = rpmspecQuery;
202 + ec = rpmcliQuery(ts, qva, (const char **) poptGetArgs(optCon));
206 + const char * spath;
207 + if (!poptPeekArg(optCon))
208 + argerror(_("no arguments given for parse"));
210 + while ((spath = poptGetArg(optCon)) != NULL) {
211 + int ret = parseSpec(ts, spath, "/", 0, NULL, NULL, 1, 1, 0);
216 + Spec spec = rpmtsSpec(ts);
217 + fprintf(stdout, "%s", rpmiobStr(spec->parsed));
223 +#ifdef DYING /* XXX rpmIsVerbose alone stops usage spewage with every --eval */
224 + if (poptPeekArg(optCon) != NULL || argc <= 1 || rpmIsVerbose()) {
225 + printUsage(optCon, stderr, 0);
234 + free(qva->qva_queryFormat);
236 + rpmcliFini(optCon);