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 diff -urN rpm-5.4.13/tools/Makefile.am rpm-5.4.13-rpmspec/tools/Makefile.am
29 --- rpm-5.4.13/tools/Makefile.am 2013-10-22 20:18:34.426372530 +0200
30 +++ rpm-5.4.13-rpmspec/tools/Makefile.am 2013-10-22 20:02:30.365350944 +0200
33 @WITH_AUGEAS_AUGTOOL@ chroot cp @WITH_CUDF_CUDFTOOL@ find mtree \
34 @WITH_SEMANAGE_SEMODULE@ wget \
35 - rpmcache rpmdigest rpmrepo rpmspecdump \
36 + rpmcache rpmdigest rpmrepo rpmspecdump rpmspec \
37 rpmcmp rpmdeps sqlite3 @WITH_KEYUTILS_RPMKEY@ @WITH_LIBELF_DEBUGEDIT@
39 pkgbin_PROGRAMS += dbconvert
41 rpmspecdump_SOURCES = rpmspecdump.c
42 rpmspecdump_LDADD = $(RPMBUILD_LDADD_COMMON)
44 +rpmspec_SOURCES = rpmspec.c
45 +rpmspec_LDADD = $(RPMBUILD_LDADD_COMMON)
47 semodule_SOURCES = semodule.c
48 semodule_LDADD = $(RPMIO_LDADD_COMMON)
50 diff -urN rpm-5.4.13/tools/rpmspec.c rpm-5.4.13-rpmspec/tools/rpmspec.c
51 --- rpm-5.4.13/tools/rpmspec.c 1970-01-01 01:00:00.000000000 +0100
52 +++ rpm-5.4.13-rpmspec/tools/rpmspec.c 2013-10-22 20:00:06.075242852 +0200
55 +const char *__progname;
59 +#if defined(IAM_RPM) || defined(__LCLINT__)
68 +#include <rpmiotypes.h>
71 +#include <rpmtypes.h>
75 +#include "rpmversion.h"
79 +#include <rpmbuild.h>
83 +#define GETOPT_REBUILD 1003
84 +#define GETOPT_RECOMPILE 1004
93 + MODE_QUERY = (1 << 0),
94 + MODE_PARSE = (1 << 1),
97 +static int mode = MODE_UNKNOWN;
98 +static rpmQVSources source = RPMQV_RPM;
99 +static const char *target = NULL;
100 +static char *queryformat = NULL;
102 +static struct poptOption specOptsTable[] = {
103 + { "parse", 'P', POPT_ARG_VAL, &mode, MODE_PARSE,
104 + N_("parse spec file(s) to stdout"), NULL },
105 + { "query", 'q', POPT_ARG_VAL, &mode, MODE_QUERY,
106 + N_("query spec file(s)"), NULL },
107 + { "rpms", 0, POPT_ARG_VAL, &source, RPMQV_RPM,
108 + N_("operate on binary rpms generated by spec (default)"), NULL },
109 + { "srpm", 0, POPT_ARG_VAL, &source, RPMQV_SPECSRPM,
110 + N_("operate on source rpm generated by spec"), NULL },
111 + { "target", 0, POPT_ARG_STRING, &target, 0,
112 + N_("override target platform"), NULL },
113 + { "queryformat", 0, POPT_ARG_STRING, &queryformat, 0,
114 + N_("use the following query format"), "QUERYFORMAT" },
115 + { "qf", 0, (POPT_ARG_STRING | POPT_ARGFLAG_DOC_HIDDEN), &queryformat, 0,
120 +/* the structure describing the options we take and the defaults */
121 +static struct poptOption optionsTable[] = {
122 + { NULL, '\0', POPT_ARG_INCLUDE_TABLE, specOptsTable, 0,
123 + N_("Spec options:"), NULL },
125 + { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmcliAllPoptTable, 0,
126 + N_("Common options for all rpm modes and executables:"), NULL },
133 +/*@exits@*/ static void argerror(const char * desc)
134 + /*@globals __assert_program_name, fileSystem @*/
135 + /*@modifies fileSystem @*/
137 + fprintf(stderr, _("%s: %s\n"), __progname, desc);
138 + exit(EXIT_FAILURE);
141 +#ifdef DYING /* XXX rpmIsVerbose alone stops usage spewage with every --eval */
142 +static void printVersion(FILE * fp)
143 + /*@globals rpmEVR, fileSystem @*/
144 + /*@modifies *fp, fileSystem @*/
146 + fprintf(fp, "%s (" RPM_NAME ") %s\n", __progname, rpmEVR);
147 + if (rpmIsVerbose())
148 + fprintf(fp, "rpmlib 0x%08x,0x%08x,0x%08x\n",
149 + rpmlibVersion(), rpmlibTimestamp(), rpmlibVendor());
152 +static void printUsage(poptContext con, FILE * fp, int flags)
153 + /*@globals rpmEVR, fileSystem, internalState @*/
154 + /*@modifies *fp, fileSystem, internalState @*/
159 + if (rpmIsVerbose())
160 + poptPrintHelp(con, fp, flags);
162 + poptPrintUsage(con, fp, flags);
166 +int main(int argc, char *argv[])
169 + QVA_t qva = &rpmQVKArgs;
171 + poptContext optCon;
174 + optCon = rpmcliInit(argc, argv, optionsTable);
177 + rpmFreeMacros(NULL);
179 + rpmcliConfigured();
182 + ts = rpmtsCreate();
186 + if (!poptPeekArg(optCon))
187 + argerror(_("no arguments given for query"));
189 + qva->qva_queryFormat = queryformat;
190 + qva->qva_source = source;
191 + qva->qva_specQuery = rpmspecQuery;
192 + ec = rpmcliQuery(ts, qva, (const char **) poptGetArgs(optCon));
196 + const char * spath;
197 + if (!poptPeekArg(optCon))
198 + argerror(_("no arguments given for parse"));
200 + while ((spath = poptGetArg(optCon)) != NULL) {
201 + int ret = parseSpec(ts, spath, "/", 0, NULL, NULL, 1, 1, 0);
206 + Spec spec = rpmtsSpec(ts);
207 + fprintf(stdout, "%s", rpmiobStr(spec->parsed));
213 +#ifdef DYING /* XXX rpmIsVerbose alone stops usage spewage with every --eval */
214 + if (poptPeekArg(optCon) != NULL || argc <= 1 || rpmIsVerbose()) {
215 + printUsage(optCon, stderr, 0);
224 + free(qva->qva_queryFormat);
226 + rpmcliFini(optCon);