summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta/classes/package_rpm.bbclass4
-rw-r--r--meta/classes/rootfs_rpm.bbclass2
-rw-r--r--meta/recipes-devtools/rpm/rpmresolve/rpmresolve.c69
3 files changed, 58 insertions, 17 deletions
diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass
index 50e9b31517..b58ae85300 100644
--- a/meta/classes/package_rpm.bbclass
+++ b/meta/classes/package_rpm.bbclass
@@ -235,9 +235,9 @@ process_pkg_list_rpm() {
235 extraopt="-i" 235 extraopt="-i"
236 fi 236 fi
237 237
238 rpmresolve $extraopt ${confbase}-base_archs.conf ${target_rootfs}/install/base_archs.pkglist >> ${target_rootfs}/install/${manifestpfx}.manifest 238 rpmresolve $extraopt ${confbase}-base_archs.conf ${target_rootfs}/install/base_archs.pkglist -o ${target_rootfs}/install/${manifestpfx}.manifest
239 if [ -s ${target_rootfs}/install/ml_archs.pkglist ] ; then 239 if [ -s ${target_rootfs}/install/ml_archs.pkglist ] ; then
240 rpmresolve $extraopt ${confbase}-ml_archs.conf ${target_rootfs}/install/ml_archs.pkglist >> ${target_rootfs}/install/${manifestpfx}_multilib.manifest 240 rpmresolve $extraopt ${confbase}-ml_archs.conf ${target_rootfs}/install/ml_archs.pkglist -o ${target_rootfs}/install/${manifestpfx}_multilib.manifest
241 fi 241 fi
242} 242}
243 243
diff --git a/meta/classes/rootfs_rpm.bbclass b/meta/classes/rootfs_rpm.bbclass
index a03e9f379d..c0207d8629 100644
--- a/meta/classes/rootfs_rpm.bbclass
+++ b/meta/classes/rootfs_rpm.bbclass
@@ -151,7 +151,7 @@ list_installed_packages() {
151} 151}
152 152
153rootfs_list_installed_depends() { 153rootfs_list_installed_depends() {
154 rpmresolve -d $INSTALL_ROOTFS_RPM/${rpmlibdir} 154 rpmresolve -t $INSTALL_ROOTFS_RPM/${rpmlibdir}
155} 155}
156 156
157rootfs_install_packages() { 157rootfs_install_packages() {
diff --git a/meta/recipes-devtools/rpm/rpmresolve/rpmresolve.c b/meta/recipes-devtools/rpm/rpmresolve/rpmresolve.c
index 568b6891f4..3613ee5a8d 100644
--- a/meta/recipes-devtools/rpm/rpmresolve/rpmresolve.c
+++ b/meta/recipes-devtools/rpm/rpmresolve/rpmresolve.c
@@ -36,6 +36,9 @@
36#include <argv.h> 36#include <argv.h>
37#include <mire.h> 37#include <mire.h>
38 38
39int debugmode;
40FILE *outf;
41
39int getPackageStr(rpmts ts, const char *NVRA, rpmTag tag, char **value) 42int getPackageStr(rpmts ts, const char *NVRA, rpmTag tag, char **value)
40{ 43{
41 int rc = -1; 44 int rc = -1;
@@ -69,6 +72,8 @@ int loadTs(rpmts **ts, int *tsct, const char *dblistfn)
69 listfile = 0; 72 listfile = 0;
70 73
71 if(listfile) { 74 if(listfile) {
75 if(debugmode)
76 printf("DEBUG: reading database list file '%s'\n", dblistfn);
72 *ts = malloc(sz * sizeof(rpmts)); 77 *ts = malloc(sz * sizeof(rpmts));
73 FILE *f = fopen(dblistfn, "r" ); 78 FILE *f = fopen(dblistfn, "r" );
74 if(f) { 79 if(f) {
@@ -87,6 +92,8 @@ int loadTs(rpmts **ts, int *tsct, const char *dblistfn)
87 *ts = (rpmts *)realloc(*ts, sz); 92 *ts = (rpmts *)realloc(*ts, sz);
88 } 93 }
89 94
95 if(debugmode)
96 printf("DEBUG: opening database '%s'\n", line);
90 char *dbpathm = malloc(strlen(line) + 10); 97 char *dbpathm = malloc(strlen(line) + 10);
91 sprintf(dbpathm, "_dbpath %s", line); 98 sprintf(dbpathm, "_dbpath %s", line);
92 rpmDefineMacro(NULL, dbpathm, RMIL_CMDLINE); 99 rpmDefineMacro(NULL, dbpathm, RMIL_CMDLINE);
@@ -113,6 +120,8 @@ int loadTs(rpmts **ts, int *tsct, const char *dblistfn)
113 } 120 }
114 } 121 }
115 else { 122 else {
123 if(debugmode)
124 printf("DEBUG: opening database '%s'\n", dblistfn);
116 // Load from single database 125 // Load from single database
117 *ts = malloc(sizeof(rpmts)); 126 *ts = malloc(sizeof(rpmts));
118 char *dbpathm = malloc(strlen(dblistfn) + 10); 127 char *dbpathm = malloc(strlen(dblistfn) + 10);
@@ -164,13 +173,22 @@ int processPackages(rpmts *ts, int tscount, const char *packagelistfn, int ignor
164 char *value = NULL; 173 char *value = NULL;
165 rc = getPackageStr(ts[i], keys[0], RPMTAG_PACKAGEORIGIN, &value); 174 rc = getPackageStr(ts[i], keys[0], RPMTAG_PACKAGEORIGIN, &value);
166 if(rc == 0) 175 if(rc == 0)
167 printf("%s\n", value); 176 fprintf(outf, "%s\n", value);
168 else 177 else
169 fprintf(stderr, "Failed to get package origin for %s\n", line); 178 fprintf(stderr, "Failed to get package origin for %s\n", line);
170 found = 1; 179 found = 1;
171 } 180 }
172 else if( nkeys > 1 ) { 181 else if( nkeys > 1 ) {
173 fprintf(stderr, "Multiple matches for %s!\n", line); 182 int keyindex = 0;
183 fprintf(stderr, "Multiple matches for %s:\n", line);
184 for( keyindex=0; keyindex<nkeys; keyindex++) {
185 char *value = NULL;
186 rc = getPackageStr(ts[i], keys[keyindex], RPMTAG_PACKAGEORIGIN, &value);
187 if(rc == 0)
188 fprintf(outf, " %s\n", value);
189 else
190 fprintf(stderr, " (%s)\n", keys[keyindex]);
191 }
174 } 192 }
175 } 193 }
176 if(found) 194 if(found)
@@ -230,7 +248,7 @@ int printDepList(rpmts *ts, int tscount)
230 int rc = 0; 248 int rc = 0;
231 249
232 if( tscount > 1 ) 250 if( tscount > 1 )
233 printf(">1 database specified with dependency list, using first only\n"); 251 fprintf(stderr, ">1 database specified with dependency list, using first only\n");
234 252
235 /* Get list of names */ 253 /* Get list of names */
236 rpmdb db = rpmtsGetRdb(ts[0]); 254 rpmdb db = rpmtsGetRdb(ts[0]);
@@ -274,17 +292,17 @@ int printDepList(rpmts *ts, int tscount)
274 } 292 }
275 if(prov) { 293 if(prov) {
276 if((int)reqflags[j] & 0x80000) 294 if((int)reqflags[j] & 0x80000)
277 printf("%s|%s [REC]\n", name, prov); 295 fprintf(outf, "%s|%s [REC]\n", name, prov);
278 else 296 else
279 printf("%s|%s\n", name, prov); 297 fprintf(outf, "%s|%s\n", name, prov);
280 } 298 }
281 else { 299 else {
282 rc = lookupProvider(ts[0], reqs[j], &prov); 300 rc = lookupProvider(ts[0], reqs[j], &prov);
283 if(rc==0 && prov) { 301 if(rc==0 && prov) {
284 if((int)reqflags[j] & 0x80000) 302 if((int)reqflags[j] & 0x80000)
285 printf("%s|%s [REC]\n", name, prov); 303 fprintf(outf, "%s|%s [REC]\n", name, prov);
286 else 304 else
287 printf("%s|%s\n", name, prov); 305 fprintf(outf, "%s|%s\n", name, prov);
288 free(prov); 306 free(prov);
289 } 307 }
290 } 308 }
@@ -301,7 +319,7 @@ int printDepList(rpmts *ts, int tscount)
301void usage() 319void usage()
302{ 320{
303 fprintf(stderr, "OpenEmbedded rpm resolver utility\n"); 321 fprintf(stderr, "OpenEmbedded rpm resolver utility\n");
304 fprintf(stderr, "syntax: rpmresolve [-i] [-d] <dblistfile> <packagelistfile>\n"); 322 fprintf(stderr, "syntax: rpmresolve [-i] [-d] [-t] <dblistfile> <packagelistfile>\n");
305} 323}
306 324
307int main(int argc, char **argv) 325int main(int argc, char **argv)
@@ -313,16 +331,26 @@ int main(int argc, char **argv)
313 int c; 331 int c;
314 int ignoremissing = 0; 332 int ignoremissing = 0;
315 int deplistmode = 0; 333 int deplistmode = 0;
334 char *outfile = NULL;
335
336 debugmode = 0;
337 outf = stdout;
316 338
317 opterr = 0; 339 opterr = 0;
318 while ((c = getopt (argc, argv, "id")) != -1) { 340 while ((c = getopt (argc, argv, "itdo:")) != -1) {
319 switch (c) { 341 switch (c) {
320 case 'i': 342 case 'i':
321 ignoremissing = 1; 343 ignoremissing = 1;
322 break; 344 break;
323 case 'd': 345 case 't':
324 deplistmode = 1; 346 deplistmode = 1;
325 break; 347 break;
348 case 'd':
349 debugmode = 1;
350 break;
351 case 'o':
352 outfile = strdup(optarg);
353 break;
326 case '?': 354 case '?':
327 if(isprint(optopt)) 355 if(isprint(optopt))
328 fprintf(stderr, "Unknown option `-%c'.\n", optopt); 356 fprintf(stderr, "Unknown option `-%c'.\n", optopt);
@@ -341,11 +369,18 @@ int main(int argc, char **argv)
341 return 1; 369 return 1;
342 } 370 }
343 371
372 if( outfile ) {
373 if(debugmode)
374 printf("DEBUG: Using output file %s\n", outfile);
375 outf = fopen(outfile, "w");
376 }
377
344 const char *dblistfn = argv[optind]; 378 const char *dblistfn = argv[optind];
345 379
346 rpmcliInit(argc, argv, NULL); 380 rpmcliInit(argc, argv, NULL);
347 381
348 //rpmSetVerbosity(RPMLOG_DEBUG); 382 if(debugmode)
383 rpmSetVerbosity(RPMLOG_DEBUG);
349 384
350 rpmDefineMacro(NULL, "__dbi_txn create nofsync", RMIL_CMDLINE); 385 rpmDefineMacro(NULL, "__dbi_txn create nofsync", RMIL_CMDLINE);
351 386
@@ -363,15 +398,21 @@ int main(int argc, char **argv)
363 else { 398 else {
364 if( argc - optind < 2 ) { 399 if( argc - optind < 2 ) {
365 fprintf(stderr, "Please specify package list file\n"); 400 fprintf(stderr, "Please specify package list file\n");
366 return 1;
367 } 401 }
368 const char *pkglistfn = argv[optind+1]; 402 else {
369 rc = processPackages(ts, tscount, pkglistfn, ignoremissing); 403 const char *pkglistfn = argv[optind+1];
404 rc = processPackages(ts, tscount, pkglistfn, ignoremissing);
405 }
370 } 406 }
371 407
372 for(i=0; i<tscount; i++) 408 for(i=0; i<tscount; i++)
373 (void) rpmtsCloseDB(ts[i]); 409 (void) rpmtsCloseDB(ts[i]);
374 free(ts); 410 free(ts);
375 411
412 if( outfile ) {
413 fclose(outf);
414 free(outfile);
415 }
416
376 return rc; 417 return rc;
377} 418}