195 lines
4.6 KiB
Diff
195 lines
4.6 KiB
Diff
Add an "rpmdeps-oecore" binary which allows batch processing of individual file
|
|
dependencies in a similar manner to rpmdeps --provides --requires -v, prefixing
|
|
each line of output with the filename that has the dependency.
|
|
|
|
This is much faster than individually calling rpmdeps on each file.
|
|
|
|
This binary is used by package.bbclass.
|
|
|
|
Upstream-Status: Inappropriate [OE Specific]
|
|
|
|
RP 2012/2/7
|
|
|
|
---
|
|
tools/Makefile.am | 6 ++-
|
|
tools/rpmdeps-oecore.c | 147 ++++++++++++++++++++++++++++++++++++++++++++++++
|
|
2 files changed, 152 insertions(+), 1 deletions(-)
|
|
create mode 100644 tools/rpmdeps-oecore.c
|
|
|
|
Index: rpm-5.4.9/tools/Makefile.am
|
|
===================================================================
|
|
--- rpm-5.4.9.orig/tools/Makefile.am
|
|
+++ rpm-5.4.9/tools/Makefile.am
|
|
@@ -58,7 +58,7 @@ pkgbin_PROGRAMS = \
|
|
@WITH_AUGEAS_AUGTOOL@ chroot cp @WITH_CUDF_CUDFTOOL@ find mtree \
|
|
@WITH_SEMANAGE_SEMODULE@ wget \
|
|
rpmcache rpmdigest rpmrepo rpmspecdump \
|
|
- rpmcmp rpmdeps sqlite3 @WITH_KEYUTILS_RPMKEY@ @WITH_LIBELF_DEBUGEDIT@
|
|
+ rpmcmp rpmdeps rpmdeps-oecore sqlite3 @WITH_KEYUTILS_RPMKEY@ @WITH_LIBELF_DEBUGEDIT@
|
|
if WITH_DB
|
|
pkgbin_PROGRAMS += dbconvert
|
|
endif
|
|
@@ -168,6 +168,10 @@ rpmdeps_SOURCES = rpmdeps.c
|
|
rpmdeps_LDFLAGS = @LDFLAGS_STATIC@ $(LDFLAGS)
|
|
rpmdeps_LDADD = $(RPM_LDADD_COMMON)
|
|
|
|
+rpmdeps_oecore_SOURCES = rpmdeps-oecore.c
|
|
+rpmdeps_oecore_LDFLAGS = @LDFLAGS_STATIC@ $(LDFLAGS)
|
|
+rpmdeps_oecore_LDADD = $(RPM_LDADD_COMMON)
|
|
+
|
|
rpmdigest_SOURCES = rpmdigest.c
|
|
rpmdigest_LDFLAGS = @LDFLAGS_STATIC@ $(LDFLAGS)
|
|
rpmdigest_LDADD = $(RPMIO_LDADD_COMMON)
|
|
Index: rpm-5.4.9/tools/rpmdeps-oecore.c
|
|
===================================================================
|
|
--- /dev/null
|
|
+++ rpm-5.4.9/tools/rpmdeps-oecore.c
|
|
@@ -0,0 +1,147 @@
|
|
+#include "system.h"
|
|
+const char *__progname;
|
|
+
|
|
+#include <rpmio.h>
|
|
+#include <rpmiotypes.h>
|
|
+#include <rpmcb.h>
|
|
+#include <argv.h>
|
|
+#include <rpmtypes.h>
|
|
+#include <rpmtag.h>
|
|
+
|
|
+#include <rpmds.h>
|
|
+#define _RPMFC_INTERNAL /* XXX for debugging */
|
|
+#include <rpmfc.h>
|
|
+
|
|
+#include <rpmcli.h>
|
|
+
|
|
+#include "debug.h"
|
|
+
|
|
+/*@unchecked@*/
|
|
+char *progname;
|
|
+
|
|
+#define RPMDEP_RPMFC 1
|
|
+
|
|
+static int rpmdepPrint(char *filename, rpmds ds, FILE * fp)
|
|
+{
|
|
+ if (fp == NULL) fp = stderr;
|
|
+
|
|
+ ds = rpmdsInit(ds);
|
|
+ while (rpmdsNext(ds) >= 0) {
|
|
+ fprintf(fp, "%s %s: %s\n", filename, rpmdsType(ds), rpmdsDNEVR(ds)+2);
|
|
+ }
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static struct poptOption optionsTable[] = {
|
|
+
|
|
+ { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmcliAllPoptTable, 0,
|
|
+ N_("Common options:"),
|
|
+ NULL },
|
|
+
|
|
+ POPT_AUTOALIAS
|
|
+ POPT_AUTOHELP
|
|
+ POPT_TABLEEND
|
|
+};
|
|
+
|
|
+
|
|
+int
|
|
+main(int argc, char *argv[])
|
|
+{
|
|
+ poptContext optCon;
|
|
+ ARGV_t av = NULL;
|
|
+ rpmfc fc = NULL;
|
|
+ FILE * fp = NULL;
|
|
+ int flags = 0;
|
|
+ int ac = 0;
|
|
+ int ec = 1;
|
|
+ int xx;
|
|
+ int i;
|
|
+ char buf[BUFSIZ];
|
|
+ int nddict;
|
|
+ const char * s;
|
|
+ char * se;
|
|
+ const char * fn;
|
|
+ const char * N;
|
|
+ const char * EVR;
|
|
+ evrFlags Flags;
|
|
+ unsigned char deptype;
|
|
+ int ix;
|
|
+ rpmds ds;
|
|
+
|
|
+/*@-modobserver@*/
|
|
+ if ((progname = strrchr(argv[0], '/')) != NULL)
|
|
+ progname++;
|
|
+ else
|
|
+ progname = argv[0];
|
|
+/*@=modobserver@*/
|
|
+
|
|
+ optCon = rpmcliInit(argc, argv, optionsTable);
|
|
+ if (optCon == NULL)
|
|
+ goto exit;
|
|
+
|
|
+ av = poptGetArgs(optCon);
|
|
+ ac = argvCount(av);
|
|
+
|
|
+ if (ac == 0) {
|
|
+ av = NULL;
|
|
+ xx = argvFgets(&av, NULL);
|
|
+ ac = argvCount(av);
|
|
+ }
|
|
+
|
|
+ /* Make sure file names are sorted. */
|
|
+ xx = argvSort(av, NULL);
|
|
+
|
|
+ /* Build file class dictionary. */
|
|
+ fc = rpmfcNew();
|
|
+ xx = rpmfcClassify(fc, av, NULL);
|
|
+
|
|
+ /* Build file/package dependency dictionary. */
|
|
+ xx = rpmfcApply(fc);
|
|
+
|
|
+ /* Generate per-file indices into package dependencies. */
|
|
+ nddict = argvCount(fc->ddict);
|
|
+
|
|
+ for (i = 0; i < nddict; i++) {
|
|
+ s = fc->ddict[i];
|
|
+
|
|
+ /* Parse out (file#,deptype,N,EVR,Flags) */
|
|
+ ix = strtol(s, &se, 10);
|
|
+ assert(se != NULL);
|
|
+ deptype = *se++;
|
|
+ se++;
|
|
+ N = se;
|
|
+ while (*se && *se != ' ')
|
|
+ se++;
|
|
+ *se++ = '\0';
|
|
+ EVR = se;
|
|
+ while (*se && *se != ' ')
|
|
+ se++;
|
|
+ *se++ = '\0';
|
|
+ Flags = strtol(se, NULL, 16);
|
|
+
|
|
+ switch (deptype) {
|
|
+ default:
|
|
+ /*@switchbreak@*/ break;
|
|
+ case 'P':
|
|
+ ds = rpmdsSingle(RPMTAG_PROVIDENAME, N, EVR, Flags);
|
|
+ rpmdepPrint((char *)fc->fn[ix], ds, stdout);
|
|
+ (void)rpmdsFree(ds);
|
|
+ ds = NULL;
|
|
+ /*@switchbreak@*/ break;
|
|
+ case 'R':
|
|
+ ds = rpmdsSingle(RPMTAG_REQUIRENAME, N, EVR, Flags);
|
|
+ rpmdepPrint((char *)fc->fn[ix], ds, stdout);
|
|
+ (void)rpmdsFree(ds);
|
|
+ ds = NULL;
|
|
+ /*@switchbreak@*/ break;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ fc = rpmfcFree(fc);
|
|
+
|
|
+ ec = 0;
|
|
+
|
|
+exit:
|
|
+ optCon = rpmcliFini(optCon);
|
|
+ return ec;
|
|
+}
|