From 7eb3440ac5152cba8940f6317df236bbc9aaef2f Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Fri, 9 Mar 2012 14:14:04 +0800 Subject: rpm 5.4.0: Add rpmdeps-oecore to replace rpmdeps for package.bbclass This is a performance enhancement by adding a binary allowing batch processing of individual file dependencies. The second patch in this series uses the binary this patch creates. (From OE-Core rev: 50dc8bfbac42b9a9b52a2f7d0568740c41790c13) Signed-off-by: Robert Yang Signed-off-by: Richard Purdie --- meta/recipes-devtools/rpm/rpm/rpmdeps-oecore.patch | 198 +++++++++++++++++++++ 1 file changed, 198 insertions(+) create mode 100644 meta/recipes-devtools/rpm/rpm/rpmdeps-oecore.patch (limited to 'meta/recipes-devtools/rpm/rpm/rpmdeps-oecore.patch') diff --git a/meta/recipes-devtools/rpm/rpm/rpmdeps-oecore.patch b/meta/recipes-devtools/rpm/rpm/rpmdeps-oecore.patch new file mode 100644 index 0000000000..1667901b63 --- /dev/null +++ b/meta/recipes-devtools/rpm/rpm/rpmdeps-oecore.patch @@ -0,0 +1,198 @@ +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 + +diff --git a/tools/Makefile.am b/tools/Makefile.am +index f520843..2eba9bf 100644 +--- a/tools/Makefile.am ++++ b/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@ + dist_man_MANS = rpmgrep.1 + + augtool_SOURCES = augtool.c +@@ -155,6 +155,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) +diff --git a/tools/rpmdeps-oecore.c b/tools/rpmdeps-oecore.c +new file mode 100644 +index 0000000..e646da9 +--- /dev/null ++++ b/tools/rpmdeps-oecore.c +@@ -0,0 +1,147 @@ ++#include "system.h" ++const char *__progname; ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#define _RPMFC_INTERNAL /* XXX for debugging */ ++#include ++ ++#include ++ ++#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; ++} +-- +1.7.4.1 + -- cgit v1.2.3-54-g00ecf