mirror of
git://git.yoctoproject.org/poky
synced 2026-09-27 01:56:12 +00:00
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 <liezhi.yang@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
2f4d784699
commit
7eb3440ac5
198
meta/recipes-devtools/rpm/rpm/rpmdeps-oecore.patch
Normal file
198
meta/recipes-devtools/rpm/rpm/rpmdeps-oecore.patch
Normal file
@ -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 <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;
|
||||||
|
+}
|
||||||
|
--
|
||||||
|
1.7.4.1
|
||||||
|
|
||||||
@ -45,7 +45,7 @@ LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1"
|
|||||||
DEPENDS = "bzip2 zlib db openssl elfutils expat libpcre attr acl popt ${extrarpmdeps}"
|
DEPENDS = "bzip2 zlib db openssl elfutils expat libpcre attr acl popt ${extrarpmdeps}"
|
||||||
extrarpmdeps = "python perl"
|
extrarpmdeps = "python perl"
|
||||||
extrarpmdeps_virtclass-native = "file-native"
|
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
|
# 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...
|
# 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://rpm-scriptletexechelper.patch \
|
||||||
file://fix_for_automake_1.11.2.patch \
|
file://fix_for_automake_1.11.2.patch \
|
||||||
file://pythondeps.sh \
|
file://pythondeps.sh \
|
||||||
|
file://rpmdeps-oecore.patch \
|
||||||
"
|
"
|
||||||
|
|
||||||
# file://rpm-autoconf.patch \
|
# file://rpm-autoconf.patch \
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user