Squashed 'yocto-poky/' content from commit ea562de

git-subtree-dir: yocto-poky
git-subtree-split: ea562de57590c966cd5a75fda8defecd397e6436
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 0000000..9bdd1d4
--- /dev/null
+++ b/meta/recipes-devtools/rpm/rpm/rpmdeps-oecore.patch
@@ -0,0 +1,194 @@
+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.14/tools/Makefile.am
+===================================================================
+--- rpm-5.4.14.orig/tools/Makefile.am
++++ rpm-5.4.14/tools/Makefile.am
+@@ -62,7 +62,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
+@@ -172,6 +172,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.14/tools/rpmdeps-oecore.c
+===================================================================
+--- /dev/null
++++ rpm-5.4.14/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;
++}