diff options
-rw-r--r-- | meta/recipes-devtools/rpm/rpm/rpmdeps-oecore.patch | 198 | ||||
-rw-r--r-- | meta/recipes-devtools/rpm/rpm_5.4.0.bb | 3 |
2 files changed, 200 insertions, 1 deletions
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 @@ | |||
1 | Add an "rpmdeps-oecore" binary which allows batch processing of individual file | ||
2 | dependencies in a similar manner to rpmdeps --provides --requires -v, prefixing | ||
3 | each line of output with the filename that has the dependency. | ||
4 | |||
5 | This is much faster than individually calling rpmdeps on each file. | ||
6 | |||
7 | This binary is used by package.bbclass. | ||
8 | |||
9 | Upstream-Status: Inappropriate [OE Specific] | ||
10 | |||
11 | RP 2012/2/7 | ||
12 | |||
13 | --- | ||
14 | tools/Makefile.am | 6 ++- | ||
15 | tools/rpmdeps-oecore.c | 147 ++++++++++++++++++++++++++++++++++++++++++++++++ | ||
16 | 2 files changed, 152 insertions(+), 1 deletions(-) | ||
17 | create mode 100644 tools/rpmdeps-oecore.c | ||
18 | |||
19 | diff --git a/tools/Makefile.am b/tools/Makefile.am | ||
20 | index f520843..2eba9bf 100644 | ||
21 | --- a/tools/Makefile.am | ||
22 | +++ b/tools/Makefile.am | ||
23 | @@ -58,7 +58,7 @@ pkgbin_PROGRAMS = \ | ||
24 | @WITH_AUGEAS_AUGTOOL@ chroot cp @WITH_CUDF_CUDFTOOL@ find mtree \ | ||
25 | @WITH_SEMANAGE_SEMODULE@ wget \ | ||
26 | rpmcache rpmdigest rpmrepo rpmspecdump \ | ||
27 | - rpmcmp rpmdeps sqlite3 @WITH_KEYUTILS_RPMKEY@ @WITH_LIBELF_DEBUGEDIT@ | ||
28 | + rpmcmp rpmdeps rpmdeps-oecore sqlite3 @WITH_KEYUTILS_RPMKEY@ @WITH_LIBELF_DEBUGEDIT@ | ||
29 | dist_man_MANS = rpmgrep.1 | ||
30 | |||
31 | augtool_SOURCES = augtool.c | ||
32 | @@ -155,6 +155,10 @@ rpmdeps_SOURCES = rpmdeps.c | ||
33 | rpmdeps_LDFLAGS = @LDFLAGS_STATIC@ $(LDFLAGS) | ||
34 | rpmdeps_LDADD = $(RPM_LDADD_COMMON) | ||
35 | |||
36 | +rpmdeps_oecore_SOURCES = rpmdeps-oecore.c | ||
37 | +rpmdeps_oecore_LDFLAGS = @LDFLAGS_STATIC@ $(LDFLAGS) | ||
38 | +rpmdeps_oecore_LDADD = $(RPM_LDADD_COMMON) | ||
39 | + | ||
40 | rpmdigest_SOURCES = rpmdigest.c | ||
41 | rpmdigest_LDFLAGS = @LDFLAGS_STATIC@ $(LDFLAGS) | ||
42 | rpmdigest_LDADD = $(RPMIO_LDADD_COMMON) | ||
43 | diff --git a/tools/rpmdeps-oecore.c b/tools/rpmdeps-oecore.c | ||
44 | new file mode 100644 | ||
45 | index 0000000..e646da9 | ||
46 | --- /dev/null | ||
47 | +++ b/tools/rpmdeps-oecore.c | ||
48 | @@ -0,0 +1,147 @@ | ||
49 | +#include "system.h" | ||
50 | +const char *__progname; | ||
51 | + | ||
52 | +#include <rpmio.h> | ||
53 | +#include <rpmiotypes.h> | ||
54 | +#include <rpmcb.h> | ||
55 | +#include <argv.h> | ||
56 | +#include <rpmtypes.h> | ||
57 | +#include <rpmtag.h> | ||
58 | + | ||
59 | +#include <rpmds.h> | ||
60 | +#define _RPMFC_INTERNAL /* XXX for debugging */ | ||
61 | +#include <rpmfc.h> | ||
62 | + | ||
63 | +#include <rpmcli.h> | ||
64 | + | ||
65 | +#include "debug.h" | ||
66 | + | ||
67 | +/*@unchecked@*/ | ||
68 | +char *progname; | ||
69 | + | ||
70 | +#define RPMDEP_RPMFC 1 | ||
71 | + | ||
72 | +static int rpmdepPrint(char *filename, rpmds ds, FILE * fp) | ||
73 | +{ | ||
74 | + if (fp == NULL) fp = stderr; | ||
75 | + | ||
76 | + ds = rpmdsInit(ds); | ||
77 | + while (rpmdsNext(ds) >= 0) { | ||
78 | + fprintf(fp, "%s %s: %s\n", filename, rpmdsType(ds), rpmdsDNEVR(ds)+2); | ||
79 | + } | ||
80 | + return 0; | ||
81 | +} | ||
82 | + | ||
83 | +static struct poptOption optionsTable[] = { | ||
84 | + | ||
85 | + { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmcliAllPoptTable, 0, | ||
86 | + N_("Common options:"), | ||
87 | + NULL }, | ||
88 | + | ||
89 | + POPT_AUTOALIAS | ||
90 | + POPT_AUTOHELP | ||
91 | + POPT_TABLEEND | ||
92 | +}; | ||
93 | + | ||
94 | + | ||
95 | +int | ||
96 | +main(int argc, char *argv[]) | ||
97 | +{ | ||
98 | + poptContext optCon; | ||
99 | + ARGV_t av = NULL; | ||
100 | + rpmfc fc = NULL; | ||
101 | + FILE * fp = NULL; | ||
102 | + int flags = 0; | ||
103 | + int ac = 0; | ||
104 | + int ec = 1; | ||
105 | + int xx; | ||
106 | + int i; | ||
107 | + char buf[BUFSIZ]; | ||
108 | + int nddict; | ||
109 | + const char * s; | ||
110 | + char * se; | ||
111 | + const char * fn; | ||
112 | + const char * N; | ||
113 | + const char * EVR; | ||
114 | + evrFlags Flags; | ||
115 | + unsigned char deptype; | ||
116 | + int ix; | ||
117 | + rpmds ds; | ||
118 | + | ||
119 | +/*@-modobserver@*/ | ||
120 | + if ((progname = strrchr(argv[0], '/')) != NULL) | ||
121 | + progname++; | ||
122 | + else | ||
123 | + progname = argv[0]; | ||
124 | +/*@=modobserver@*/ | ||
125 | + | ||
126 | + optCon = rpmcliInit(argc, argv, optionsTable); | ||
127 | + if (optCon == NULL) | ||
128 | + goto exit; | ||
129 | + | ||
130 | + av = poptGetArgs(optCon); | ||
131 | + ac = argvCount(av); | ||
132 | + | ||
133 | + if (ac == 0) { | ||
134 | + av = NULL; | ||
135 | + xx = argvFgets(&av, NULL); | ||
136 | + ac = argvCount(av); | ||
137 | + } | ||
138 | + | ||
139 | + /* Make sure file names are sorted. */ | ||
140 | + xx = argvSort(av, NULL); | ||
141 | + | ||
142 | + /* Build file class dictionary. */ | ||
143 | + fc = rpmfcNew(); | ||
144 | + xx = rpmfcClassify(fc, av, NULL); | ||
145 | + | ||
146 | + /* Build file/package dependency dictionary. */ | ||
147 | + xx = rpmfcApply(fc); | ||
148 | + | ||
149 | + /* Generate per-file indices into package dependencies. */ | ||
150 | + nddict = argvCount(fc->ddict); | ||
151 | + | ||
152 | + for (i = 0; i < nddict; i++) { | ||
153 | + s = fc->ddict[i]; | ||
154 | + | ||
155 | + /* Parse out (file#,deptype,N,EVR,Flags) */ | ||
156 | + ix = strtol(s, &se, 10); | ||
157 | + assert(se != NULL); | ||
158 | + deptype = *se++; | ||
159 | + se++; | ||
160 | + N = se; | ||
161 | + while (*se && *se != ' ') | ||
162 | + se++; | ||
163 | + *se++ = '\0'; | ||
164 | + EVR = se; | ||
165 | + while (*se && *se != ' ') | ||
166 | + se++; | ||
167 | + *se++ = '\0'; | ||
168 | + Flags = strtol(se, NULL, 16); | ||
169 | + | ||
170 | + switch (deptype) { | ||
171 | + default: | ||
172 | + /*@switchbreak@*/ break; | ||
173 | + case 'P': | ||
174 | + ds = rpmdsSingle(RPMTAG_PROVIDENAME, N, EVR, Flags); | ||
175 | + rpmdepPrint((char *)fc->fn[ix], ds, stdout); | ||
176 | + (void)rpmdsFree(ds); | ||
177 | + ds = NULL; | ||
178 | + /*@switchbreak@*/ break; | ||
179 | + case 'R': | ||
180 | + ds = rpmdsSingle(RPMTAG_REQUIRENAME, N, EVR, Flags); | ||
181 | + rpmdepPrint((char *)fc->fn[ix], ds, stdout); | ||
182 | + (void)rpmdsFree(ds); | ||
183 | + ds = NULL; | ||
184 | + /*@switchbreak@*/ break; | ||
185 | + } | ||
186 | + } | ||
187 | + | ||
188 | + fc = rpmfcFree(fc); | ||
189 | + | ||
190 | + ec = 0; | ||
191 | + | ||
192 | +exit: | ||
193 | + optCon = rpmcliFini(optCon); | ||
194 | + return ec; | ||
195 | +} | ||
196 | -- | ||
197 | 1.7.4.1 | ||
198 | |||
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" | |||
45 | DEPENDS = "bzip2 zlib db openssl elfutils expat libpcre attr acl popt ${extrarpmdeps}" | 45 | DEPENDS = "bzip2 zlib db openssl elfutils expat libpcre attr acl popt ${extrarpmdeps}" |
46 | extrarpmdeps = "python perl" | 46 | extrarpmdeps = "python perl" |
47 | extrarpmdeps_virtclass-native = "file-native" | 47 | extrarpmdeps_virtclass-native = "file-native" |
48 | PR = "r32" | 48 | PR = "r33" |
49 | 49 | ||
50 | # rpm2cpio is a shell script, which is part of the rpm src.rpm. It is needed | 50 | # rpm2cpio is a shell script, which is part of the rpm src.rpm. It is needed |
51 | # in order to extract the distribution SRPM into a format we can extract... | 51 | # 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 | |||
68 | file://rpm-scriptletexechelper.patch \ | 68 | file://rpm-scriptletexechelper.patch \ |
69 | file://fix_for_automake_1.11.2.patch \ | 69 | file://fix_for_automake_1.11.2.patch \ |
70 | file://pythondeps.sh \ | 70 | file://pythondeps.sh \ |
71 | file://rpmdeps-oecore.patch \ | ||
71 | " | 72 | " |
72 | 73 | ||
73 | # file://rpm-autoconf.patch \ | 74 | # file://rpm-autoconf.patch \ |