From 50dc8bfbac42b9a9b52a2f7d0568740c41790c13 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. Signed-off-by: Robert Yang Signed-off-by: Richard Purdie --- meta/recipes-devtools/rpm/rpm/rpmdeps-oecore.patch | 198 +++++++++++++++++++++ meta/recipes-devtools/rpm/rpm_5.4.0.bb | 3 +- 2 files changed, 200 insertions(+), 1 deletion(-) create mode 100644 meta/recipes-devtools/rpm/rpm/rpmdeps-oecore.patch (limited to 'meta/recipes-devtools/rpm') 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 + diff --git a/meta/recipes-devtools/rpm/rpm_5.4.0.bb b/meta/recipes-devtools/rpm/rpm_5.4.0.bb index 64ae5373be..eeca8230f2 100644 --- a/meta/recipes-devtools/rpm/rpm_5.4.0.bb +++ b/meta/recipes-devtools/rpm/rpm_5.4.0.bb @@ -45,7 +45,7 @@ LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1" DEPENDS = "bzip2 zlib db openssl elfutils expat libpcre attr acl popt ${extrarpmdeps}" extrarpmdeps = "python perl" extrarpmdeps_virtclass-native = "file-native" -PR = "r32" +PR = "r33" # rpm2cpio is a shell script, which is part of the rpm src.rpm. It is needed # in order to extract the distribution SRPM into a format we can extract... @@ -68,6 +68,7 @@ SRC_URI = "http://www.rpm5.org/files/rpm/rpm-5.4/rpm-5.4.0-0.20101229.src.rpm;ex file://rpm-scriptletexechelper.patch \ file://fix_for_automake_1.11.2.patch \ file://pythondeps.sh \ + file://rpmdeps-oecore.patch \ " # file://rpm-autoconf.patch \ -- cgit 1.2.3-korg