[packages/rpm] - port rpmspec tool from rpm.org, usefull to see how spec will look like after parsing - rel 4
baggins
baggins at pld-linux.org
Tue Oct 22 21:09:29 CEST 2013
commit 5131d1d1775df9cf255cbf2cf41a800f88270fe4
Author: Jan Rękorajski <baggins at pld-linux.org>
Date: Tue Oct 22 21:08:12 2013 +0200
- port rpmspec tool from rpm.org, usefull to see how spec will look like after parsing
- rel 4
rpm-rpmspec.patch | 229 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
rpm.spec | 5 +-
2 files changed, 233 insertions(+), 1 deletion(-)
---
diff --git a/rpm.spec b/rpm.spec
index 2469792..70ce5fe 100644
--- a/rpm.spec
+++ b/rpm.spec
@@ -50,7 +50,7 @@ Summary(ru.UTF-8): Менеджер пакетов от RPM
Summary(uk.UTF-8): Менеджер пакетів від RPM
Name: rpm
Version: 5.4.13
-Release: 3
+Release: 4
License: LGPL v2.1
Group: Base
# http://rpm5.org/files/rpm/rpm-5.4/rpm-5.4.13-0.20130819.src.rpm
@@ -165,6 +165,7 @@ Patch75: %{name}-double_check_file_deps.patch
Patch76: %{name}-revert-debugedit-breakage.patch
Patch77: %{name}-lua-expat.patch
Patch78: %{name}-double_check_unpackaged_subdirs.patch
+Patch79: %{name}-rpmspec.patch
# Patches imported from Mandriva
@@ -912,6 +913,7 @@ Dokumentacja API RPM-a oraz przewodniki w formacie HTML generowane ze
%patch76 -p0
%patch77 -p0
%patch78 -p1
+%patch79 -p1
%patch1000 -p1
%patch1001 -p1
@@ -1495,6 +1497,7 @@ find %{_rpmlibdir} -name '*-linux' -type l | xargs rm -f
%attr(755,root,root) %{_rpmlibdir}/bin/install-sh
%attr(755,root,root) %{_rpmlibdir}/bin/mkinstalldirs
%attr(755,root,root) %{_rpmlibdir}/bin/pom2spec
+%attr(755,root,root) %{_rpmlibdir}/bin/rpmspec
%attr(755,root,root) %{_rpmlibdir}/bin/rpmspecdump
%attr(755,root,root) %{_rpmlibdir}/bin/sqlite3
%attr(755,root,root) %{_rpmlibdir}/bin/wget
diff --git a/rpm-rpmspec.patch b/rpm-rpmspec.patch
new file mode 100644
index 0000000..e4d4252
--- /dev/null
+++ b/rpm-rpmspec.patch
@@ -0,0 +1,229 @@
+diff -urN rpm-5.4.13/build/parseSpec.c rpm-5.4.13-rpmspec/build/parseSpec.c
+--- rpm-5.4.13/build/parseSpec.c 2013-10-22 20:18:34.483039876 +0200
++++ rpm-5.4.13-rpmspec/build/parseSpec.c 2013-10-22 18:52:02.550664732 +0200
+@@ -474,6 +474,11 @@
+ spec->line[0] = '\0';
+ }
+
++ /* Collect parsed line */
++ if (spec->parsed == NULL)
++ spec->parsed = rpmiobNew(0);
++ spec->parsed = rpmiobAppend(spec->parsed, spec->line, 1);
++
+ /*@-compmempass@*/ /* FIX: spec->readStack->next should be dependent */
+ return 0;
+ /*@=compmempass@*/
+diff -urN rpm-5.4.13/build/rpmspec.h rpm-5.4.13-rpmspec/build/rpmspec.h
+--- rpm-5.4.13/build/rpmspec.h 2013-10-22 20:18:34.449706143 +0200
++++ rpm-5.4.13-rpmspec/build/rpmspec.h 2013-10-22 18:44:37.729692113 +0200
+@@ -193,6 +193,8 @@
+ /*@only@*/
+ rpmiob clean; /*!< %clean scriptlet. */
+
++ rpmiob parsed;
++
+ size_t nfoo;
+ /*@only@*/ /*@relnull@*/
+ tagStore_t foo;
+diff -urN rpm-5.4.13/tools/Makefile.am rpm-5.4.13-rpmspec/tools/Makefile.am
+--- rpm-5.4.13/tools/Makefile.am 2013-10-22 20:18:34.426372530 +0200
++++ rpm-5.4.13-rpmspec/tools/Makefile.am 2013-10-22 20:02:30.365350944 +0200
+@@ -61,7 +61,7 @@
+ pkgbin_PROGRAMS = \
+ @WITH_AUGEAS_AUGTOOL@ chroot cp @WITH_CUDF_CUDFTOOL@ find mtree \
+ @WITH_SEMANAGE_SEMODULE@ wget \
+- rpmcache rpmdigest rpmrepo rpmspecdump \
++ rpmcache rpmdigest rpmrepo rpmspecdump rpmspec \
+ rpmcmp rpmdeps sqlite3 @WITH_KEYUTILS_RPMKEY@ @WITH_LIBELF_DEBUGEDIT@
+ if WITH_DB
+ pkgbin_PROGRAMS += dbconvert
+@@ -195,6 +195,9 @@
+ rpmspecdump_SOURCES = rpmspecdump.c
+ rpmspecdump_LDADD = $(RPMBUILD_LDADD_COMMON)
+
++rpmspec_SOURCES = rpmspec.c
++rpmspec_LDADD = $(RPMBUILD_LDADD_COMMON)
++
+ semodule_SOURCES = semodule.c
+ semodule_LDADD = $(RPMIO_LDADD_COMMON)
+
+diff -urN rpm-5.4.13/tools/rpmspec.c rpm-5.4.13-rpmspec/tools/rpmspec.c
+--- rpm-5.4.13/tools/rpmspec.c 1970-01-01 01:00:00.000000000 +0100
++++ rpm-5.4.13-rpmspec/tools/rpmspec.c 2013-10-22 20:00:06.075242852 +0200
+@@ -0,0 +1,176 @@
++#include "system.h"
++const char *__progname;
++
++#define _AUTOHELP
++
++#if defined(IAM_RPM) || defined(__LCLINT__)
++#define IAM_RPMBT
++#define IAM_RPMDB
++#define IAM_RPMEIU
++#define IAM_RPMQV
++#define IAM_RPMK
++#endif
++
++#include <rpmio.h>
++#include <rpmiotypes.h>
++#include <poptIO.h>
++
++#include <rpmtypes.h>
++#include <rpmtag.h>
++#include "rpmdb.h"
++
++#include "rpmversion.h"
++#include "rpmps.h"
++#include "rpmts.h"
++
++#include <rpmbuild.h>
++
++#ifdef IAM_RPMBT
++#include "build.h"
++#define GETOPT_REBUILD 1003
++#define GETOPT_RECOMPILE 1004
++#endif
++
++#include <rpmcli.h>
++
++#include "debug.h"
++
++enum modes {
++ MODE_UNKNOWN = 0,
++ MODE_QUERY = (1 << 0),
++ MODE_PARSE = (1 << 1),
++};
++
++static int mode = MODE_UNKNOWN;
++static rpmQVSources source = RPMQV_RPM;
++static const char *target = NULL;
++static char *queryformat = NULL;
++
++static struct poptOption specOptsTable[] = {
++ { "parse", 'P', POPT_ARG_VAL, &mode, MODE_PARSE,
++ N_("parse spec file(s) to stdout"), NULL },
++ { "query", 'q', POPT_ARG_VAL, &mode, MODE_QUERY,
++ N_("query spec file(s)"), NULL },
++ { "rpms", 0, POPT_ARG_VAL, &source, RPMQV_RPM,
++ N_("operate on binary rpms generated by spec (default)"), NULL },
++ { "srpm", 0, POPT_ARG_VAL, &source, RPMQV_SPECSRPM,
++ N_("operate on source rpm generated by spec"), NULL },
++ { "target", 0, POPT_ARG_STRING, &target, 0,
++ N_("override target platform"), NULL },
++ { "queryformat", 0, POPT_ARG_STRING, &queryformat, 0,
++ N_("use the following query format"), "QUERYFORMAT" },
++ { "qf", 0, (POPT_ARG_STRING | POPT_ARGFLAG_DOC_HIDDEN), &queryformat, 0,
++ NULL, NULL },
++ POPT_TABLEEND
++};
++
++/* the structure describing the options we take and the defaults */
++static struct poptOption optionsTable[] = {
++ { NULL, '\0', POPT_ARG_INCLUDE_TABLE, specOptsTable, 0,
++ N_("Spec options:"), NULL },
++
++ { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmcliAllPoptTable, 0,
++ N_("Common options for all rpm modes and executables:"), NULL },
++
++ POPT_AUTOALIAS
++ POPT_AUTOHELP
++ POPT_TABLEEND
++};
++
++/*@exits@*/ static void argerror(const char * desc)
++ /*@globals __assert_program_name, fileSystem @*/
++ /*@modifies fileSystem @*/
++{
++ fprintf(stderr, _("%s: %s\n"), __progname, desc);
++ exit(EXIT_FAILURE);
++}
++
++#ifdef DYING /* XXX rpmIsVerbose alone stops usage spewage with every --eval */
++static void printVersion(FILE * fp)
++ /*@globals rpmEVR, fileSystem @*/
++ /*@modifies *fp, fileSystem @*/
++{
++ fprintf(fp, "%s (" RPM_NAME ") %s\n", __progname, rpmEVR);
++ if (rpmIsVerbose())
++ fprintf(fp, "rpmlib 0x%08x,0x%08x,0x%08x\n",
++ rpmlibVersion(), rpmlibTimestamp(), rpmlibVendor());
++}
++
++static void printUsage(poptContext con, FILE * fp, int flags)
++ /*@globals rpmEVR, fileSystem, internalState @*/
++ /*@modifies *fp, fileSystem, internalState @*/
++{
++ printVersion(fp);
++ fprintf(fp, "\n");
++
++ if (rpmIsVerbose())
++ poptPrintHelp(con, fp, flags);
++ else
++ poptPrintUsage(con, fp, flags);
++}
++#endif
++
++int main(int argc, char *argv[])
++{
++ rpmts ts = NULL;
++ QVA_t qva = &rpmQVKArgs;
++
++ poptContext optCon;
++ int ec = 0;
++
++ optCon = rpmcliInit(argc, argv, optionsTable);
++
++ if (target) {
++ rpmFreeMacros(NULL);
++ rpmFreeRpmrc();
++ rpmcliConfigured();
++ }
++
++ ts = rpmtsCreate();
++ switch (mode) {
++
++ case MODE_QUERY:
++ if (!poptPeekArg(optCon))
++ argerror(_("no arguments given for query"));
++
++ qva->qva_queryFormat = queryformat;
++ qva->qva_source = source;
++ qva->qva_specQuery = rpmspecQuery;
++ ec = rpmcliQuery(ts, qva, (const char **) poptGetArgs(optCon));
++ break;
++
++ case MODE_PARSE: {
++ const char * spath;
++ if (!poptPeekArg(optCon))
++ argerror(_("no arguments given for parse"));
++
++ while ((spath = poptGetArg(optCon)) != NULL) {
++ int ret = parseSpec(ts, spath, "/", 0, NULL, NULL, 1, 1, 0);
++ if (ret != 0) {
++ ec++;
++ continue;
++ }
++ Spec spec = rpmtsSpec(ts);
++ fprintf(stdout, "%s", rpmiobStr(spec->parsed));
++ }
++ break;
++ }
++
++ case MODE_UNKNOWN:
++#ifdef DYING /* XXX rpmIsVerbose alone stops usage spewage with every --eval */
++ if (poptPeekArg(optCon) != NULL || argc <= 1 || rpmIsVerbose()) {
++ printUsage(optCon, stderr, 0);
++ ec = argc;
++ }
++#endif
++ break;
++ }
++
++ rpmtsFree(ts);
++
++ free(qva->qva_queryFormat);
++
++ rpmcliFini(optCon);
++
++ return ec;
++}
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/rpm.git/commitdiff/5131d1d1775df9cf255cbf2cf41a800f88270fe4
More information about the pld-cvs-commit
mailing list