rpm
4.5
|
00001 #include "system.h" 00002 const char *__progname; 00003 00004 #include <rpmcli.h> 00005 #include <argv.h> 00006 #include <rpmds.h> 00007 #include <stringbuf.h> 00008 #define _RPMFC_INTERNAL /* XXX for debugging */ 00009 #include <rpmfc.h> 00010 00011 #include "debug.h" 00012 00013 /*@unchecked@*/ 00014 char *progname; 00015 00016 #define RPMDEP_RPMFC 1 00017 #define RPMDEP_RPMDSCPUINFO 2 00018 #define RPMDEP_RPMDSRPMLIB 3 00019 #define RPMDEP_RPMDSSYSINFO 4 00020 #define RPMDEP_RPMDSGETCONF 5 00021 #define RPMDEP_RPMDSELF 6 00022 #define RPMDEP_RPMDSLDCONFIG 7 00023 #define RPMDEP_RPMDSUNAME 8 00024 #define RPMDEP_RPMDSPIPE 9 00025 00026 #define RPMDEP_RPMDSPERL 10 00027 #define RPMDEP_RPMDSPYTHON 11 00028 #define RPMDEP_RPMDSLIBTOOL 12 00029 #define RPMDEP_RPMDSPKGCONFIG 13 00030 00031 #define RPMDEP_RPMDSPUBKEY 14 00032 #define RPMDEP_RPMDSARCH 15 00033 #define RPMDEP_RPMDSFILE 16 00034 #define RPMDEP_RPMDSSONAME 17 00035 #define RPMDEP_RPMDSPACKAGE 18 00036 00037 #define RPMDEP_RPMDSJAVA 20 00038 #define RPMDEP_RPMDSRUBY 21 00039 #define RPMDEP_RPMDSPHP 22 00040 00041 #define RPMDEP_RPMDSDPKGRPM 32 00042 #define RPMDEP_RPMDSRPMDPKG 33 00043 00044 /*@unchecked@*/ 00045 static int rpmdeps_mode = RPMDEP_RPMFC; 00046 00047 /*@unchecked@*/ 00048 static int print_provides = 1; 00049 00050 /*@unchecked@*/ 00051 static int print_requires = 1; 00052 00053 /*@unchecked@*/ 00054 static int print_closure = 0; 00055 00056 #define _PERL_PROVIDES "/usr/bin/find /usr/lib/perl5 | /usr/lib/rpm/perl.prov" 00057 /*@unchecked@*/ /*@observer@*/ 00058 static const char * _perl_provides = _PERL_PROVIDES; 00059 00060 #define _PERL_REQUIRES "rpm -qa --fileclass | grep 'perl script' | sed -e 's/\t.*$//' | /usr/lib/rpm/perl.req" 00061 /*@unchecked@*/ /*@observer@*/ 00062 static const char * _perl_requires = _PERL_REQUIRES; 00063 00064 #define _JAVA_PROVIDES "rpm -qal | egrep '\\.(jar|class)$' | /usr/lib/rpm/javadeps.sh -P" 00065 /*@unchecked@*/ /*@observer@*/ 00066 static const char * _java_provides = _JAVA_PROVIDES; 00067 00068 #define _JAVA_REQUIRES "rpm -qal | egrep '\\.(jar|class)$' | /usr/lib/rpm/javadeps.sh -R" 00069 /*@unchecked@*/ /*@observer@*/ 00070 static const char * _java_requires = _JAVA_REQUIRES; 00071 00072 #define _LIBTOOL_PROVIDES "/usr/bin/find /usr/lib -name '*.la' | /usr/lib/rpm/libtooldeps.sh -P /" 00073 /*@unchecked@*/ /*@observer@*/ 00074 static const char * _libtool_provides = _LIBTOOL_PROVIDES; 00075 00076 #define _LIBTOOL_REQUIRES "/bin/rpm -qal | grep '\\.la$' | /usr/lib/rpm/libtooldeps.sh -R /" 00077 /*@unchecked@*/ /*@observer@*/ 00078 static const char * _libtool_requires = _LIBTOOL_REQUIRES; 00079 00080 #define _PKGCONFIG_PROVIDES "/usr/bin/find /usr/lib -name '*.pc' | /usr/lib/rpm/pkgconfigdeps.sh -P" 00081 static const char * _pkgconfig_provides = _PKGCONFIG_PROVIDES; 00082 00083 #define _PKGCONFIG_REQUIRES "/bin/rpm -qal | grep '\\.pc$' | /usr/lib/rpm/pkgconfigdeps.sh -R" 00084 static const char * _pkgconfig_requires = _PKGCONFIG_REQUIRES; 00085 00086 #define _DPKG_PROVIDES "egrep '^(Package|Status|Version|Provides):' /var/lib/dpkg/status | sed -e '\n\ 00087 /^Package: / {\n\ 00088 N\n\ 00089 /not-installed/d\n\ 00090 N\n\ 00091 s|^Package: \\([^\\n]*\\)\\n[^\\n]*\\nVersion: \\(.*\\)$|\\1 = \\2|\n\ 00092 }\n\ 00093 /^Provides: / {\n\ 00094 s|^Provides: ||\n\ 00095 s|, |\\n|g\n\ 00096 }' | sed -f /usr/lib/rpm/dpkg2fc.sed | sort -u | tee /tmp/dpkg" 00097 static const char * _dpkg_provides = _DPKG_PROVIDES; 00098 00099 #define _DPKG_REQUIRES "egrep '^(Package|Status|Pre-Depends|Depends):' /var/lib/dpkg/status | sed -e '\n\ 00100 /^Package: / {\n\ 00101 N\n\ 00102 /not-installed/d\n\ 00103 s|^Package: [^\\n]*\\n.*$||\n\ 00104 }\n\ 00105 /^Depends: / {\n\ 00106 s|^Depends: ||\n\ 00107 s|(\\([^)]*\\))|\\1|g\n\ 00108 s|>>|>|\n\ 00109 s|<<|<|\n\ 00110 s|, |\\n|g\n\ 00111 }\n\ 00112 /^Pre-Depends: / {\n\ 00113 s|^Pre-Depends: ||\n\ 00114 s|(\\([^)]*\\))|\\1|g\n\ 00115 s|>>|>|\n\ 00116 s|<<|<|\n\ 00117 s|, |\\n|g\n\ 00118 }' | sed -f /usr/lib/rpm/dpkg2fc.sed | sed -e 's/ |.*$//' | sort -u | tee /tmp/dpkg" 00119 static const char * _dpkg_requires = _DPKG_REQUIRES; 00120 00121 #define _RPMDB_PACKAGE_PROVIDES "/bin/rpm -qa --qf '%{name} = %|epoch?{%{epoch}:}|%{version}-%{release}\n' | sort -u" 00122 static const char * _rpmdb_package_provides = _RPMDB_PACKAGE_PROVIDES; 00123 00124 #define _RPMDB_PACKAGE_REQUIRES "/bin/rpm -qa --requires | sort -u | sed -e '/^\\//d' -e '/.*\\.so.*/d' -e '/^%/d' -e '/^.*(.*)/d'" 00125 static const char * _rpmdb_package_requires = _RPMDB_PACKAGE_REQUIRES; 00126 00127 #define _RPMDB_SONAME_REQUIRES "/bin/rpm -qa --requires | grep -v '^/' | grep '.*\\.so.*' | sort -u" 00128 static const char * _rpmdb_soname_requires = _RPMDB_SONAME_REQUIRES; 00129 00130 #define _RPMDB_FILE_REQUIRES "/bin/rpm -qa --requires | grep '^/' | sort -u" 00131 static const char * _rpmdb_file_requires = _RPMDB_FILE_REQUIRES; 00132 00133 static int rpmdepPrint(const char * msg, rpmds ds, FILE * fp) 00134 { 00135 if (fp == NULL) fp = stderr; 00136 00137 if (msg) 00138 fprintf(fp, "===================================== %s\n", msg); 00139 00140 ds = rpmdsInit(ds); 00141 while (rpmdsNext(ds) >= 0) { 00142 if (_rpmfc_debug || rpmIsDebug()) 00143 fprintf(fp, "%6d\t", rpmdsIx(ds)); 00144 if (_rpmfc_debug || rpmIsVerbose()) 00145 fprintf(fp, "%s: ", rpmdsTagName(ds)); 00146 fprintf(fp, "%s\n", rpmdsDNEVR(ds)+2); 00147 } 00148 return 0; 00149 } 00150 00151 static struct poptOption optionsTable[] = { 00152 00153 { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmcliAllPoptTable, 0, 00154 N_("Common options for all rpm modes and executables:"), 00155 NULL }, 00156 00157 { "cpuinfo", 0, POPT_ARG_VAL, &rpmdeps_mode, RPMDEP_RPMDSCPUINFO, 00158 N_("print cpuinfo(...) dependency set"), NULL }, 00159 { "rpmlib", 0, POPT_ARG_VAL, &rpmdeps_mode, RPMDEP_RPMDSRPMLIB, 00160 N_("print rpmlib(...) dependency set"), NULL }, 00161 { "sysinfo", 0, POPT_ARG_VAL, &rpmdeps_mode, RPMDEP_RPMDSSYSINFO, 00162 N_("print /etc/rpm/sysinfo dependency set"), NULL }, 00163 { "getconf", 0, POPT_ARG_VAL, &rpmdeps_mode, RPMDEP_RPMDSGETCONF, 00164 N_("print getconf(...) dependency set"), NULL }, 00165 { "elf", 0, POPT_ARG_VAL, &rpmdeps_mode, RPMDEP_RPMDSELF, 00166 N_("print soname(...) dependencies for elf files"), NULL }, 00167 { "ldconfig", 0, POPT_ARG_VAL, &rpmdeps_mode, RPMDEP_RPMDSLDCONFIG, 00168 N_("print soname(...) dependencies from /etc/ld.so.cache"), NULL }, 00169 { "uname", 0, POPT_ARG_VAL, &rpmdeps_mode, RPMDEP_RPMDSUNAME, 00170 N_("print uname(...) dependency set"), NULL }, 00171 { "pipe", 0, POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &rpmdeps_mode, RPMDEP_RPMDSPIPE, 00172 N_("print dependency set from a command pipe"), NULL }, 00173 00174 { "perl", 0, POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &rpmdeps_mode, RPMDEP_RPMDSPERL, 00175 N_("print perl(...) dependency set"), NULL }, 00176 { "python", 0, POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &rpmdeps_mode, RPMDEP_RPMDSPYTHON, 00177 N_("print python(...) dependency set"), NULL }, 00178 { "libtool", 0, POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &rpmdeps_mode, RPMDEP_RPMDSLIBTOOL, 00179 N_("print libtool(...) dependency set"), NULL }, 00180 { "pkgconfig", 0, POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &rpmdeps_mode, RPMDEP_RPMDSPKGCONFIG, 00181 N_("print pkgconfig(...) dependency set"), NULL }, 00182 00183 { "pubkey", 0, POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &rpmdeps_mode, RPMDEP_RPMDSPUBKEY, 00184 N_("print pubkey(...) dependency set"), NULL }, 00185 { "arch", 0, POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &rpmdeps_mode, RPMDEP_RPMDSARCH, 00186 N_("print arch(...) dependency set"), NULL }, 00187 { "file", 0, POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &rpmdeps_mode, RPMDEP_RPMDSFILE, 00188 N_("print file(...) dependency set"), NULL }, 00189 { "soname", 0, POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &rpmdeps_mode, RPMDEP_RPMDSSONAME, 00190 N_("print soname(...) dependency set"), NULL }, 00191 { "package", 0, POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &rpmdeps_mode, RPMDEP_RPMDSPACKAGE, 00192 N_("print package(...) dependency set"), NULL }, 00193 00194 { "java", 0, POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &rpmdeps_mode, RPMDEP_RPMDSJAVA, 00195 N_("print java(...) dependency set"), NULL }, 00196 { "php", 0, POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &rpmdeps_mode, RPMDEP_RPMDSPHP, 00197 N_("print php(...) dependency set"), NULL }, 00198 { "ruby", 0, POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &rpmdeps_mode, RPMDEP_RPMDSRUBY, 00199 N_("print ruby(...) dependency set"), NULL }, 00200 { "dpkgrpm", 0, POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &rpmdeps_mode, RPMDEP_RPMDSDPKGRPM, 00201 N_("print /var/lib/dpkg Provides: dependency set"), NULL }, 00202 { "rpmdpkg", 0, POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &rpmdeps_mode, RPMDEP_RPMDSRPMDPKG, 00203 N_("print /var/lib/dpkg Requires: dependency set"), NULL }, 00204 00205 { "provides", 'P', POPT_ARG_VAL, &print_provides, -1, 00206 N_("print Provides: dependency set"), NULL }, 00207 { "requires", 'R', POPT_ARG_VAL, &print_requires, -1, 00208 N_("print Requires: dependency set"), NULL }, 00209 { "closure", 0, POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &print_closure, -1, 00210 N_("check Requires: against Provides: for dependency closure"), NULL }, 00211 00212 POPT_AUTOALIAS 00213 POPT_AUTOHELP 00214 POPT_TABLEEND 00215 }; 00216 00217 int 00218 main(int argc, char *const argv[]) 00219 { 00220 poptContext optCon; 00221 ARGV_t av = NULL; 00222 rpmfc fc = NULL; 00223 rpmds P = NULL; 00224 rpmds R = NULL; 00225 rpmPRCO PRCO = rpmdsNewPRCO(NULL); 00226 const char * closure_name = "for"; 00227 FILE * fp = NULL; 00228 int flags = 0; 00229 int ac = 0; 00230 int ec = 1; 00231 int xx; 00232 int i; 00233 char buf[BUFSIZ]; 00234 00235 /*@-modobserver@*/ 00236 if ((progname = strrchr(argv[0], '/')) != NULL) 00237 progname++; 00238 else 00239 progname = argv[0]; 00240 /*@=modobserver@*/ 00241 00242 optCon = rpmcliInit(argc, argv, optionsTable); 00243 if (optCon == NULL) 00244 goto exit; 00245 00246 av = poptGetArgs(optCon); 00247 ac = argvCount(av); 00248 00249 if (rpmdeps_mode == RPMDEP_RPMFC && ac == 0) { 00250 av = NULL; 00251 xx = argvFgets(&av, NULL); 00252 ac = argvCount(av); 00253 } 00254 00255 /* Make sure file names are sorted. */ 00256 xx = argvSort(av, NULL); 00257 00258 switch (rpmdeps_mode) { 00259 case RPMDEP_RPMFC: 00260 if (ac <= 0) /* XXX avoid rpmfcApply() segfault */ 00261 break; 00262 00263 /* Build file class dictionary. */ 00264 fc = rpmfcNew(); 00265 xx = rpmfcClassify(fc, av, NULL); 00266 00267 /* Build file/package dependency dictionary. */ 00268 xx = rpmfcApply(fc); 00269 00270 if (_rpmfc_debug) { 00271 sprintf(buf, "final: files %d cdict[%d] %d%% ddictx[%d]", fc->nfiles, argvCount(fc->cdict), ((100 * fc->fknown)/fc->nfiles), argiCount(fc->ddictx)); 00272 rpmfcPrint(buf, fc, NULL); 00273 } 00274 if (print_provides > 0) print_provides = 0; 00275 if (print_requires > 0) print_requires = 0; 00276 P = fc->provides; fc->provides = NULL; 00277 R = fc->requires; fc->requires = NULL; 00278 fp = stdout; 00279 break; 00280 case RPMDEP_RPMDSCPUINFO: 00281 closure_name = "cpuinfo(...)"; 00282 xx = rpmdsCpuinfo(&P, NULL); 00283 break; 00284 case RPMDEP_RPMDSRPMLIB: 00285 closure_name = "rpmlib(...)"; 00286 xx = rpmdsRpmlib(&P, NULL); 00287 break; 00288 case RPMDEP_RPMDSSYSINFO: 00289 xx = rpmdsSysinfo(PRCO, NULL); 00290 P = rpmdsLink(rpmdsFromPRCO(PRCO, RPMTAG_PROVIDENAME), __FUNCTION__); 00291 R = rpmdsLink(rpmdsFromPRCO(PRCO, RPMTAG_REQUIRENAME), __FUNCTION__); 00292 break; 00293 case RPMDEP_RPMDSGETCONF: 00294 closure_name = "getconf(...)"; 00295 xx = rpmdsGetconf(&P, NULL); 00296 break; 00297 case RPMDEP_RPMDSELF: 00298 closure_name = "soname(...)"; 00299 for (i = 0; i < ac; i++) 00300 xx = rpmdsELF(av[i], flags, rpmdsMergePRCO, PRCO); 00301 P = rpmdsLink(rpmdsFromPRCO(PRCO, RPMTAG_PROVIDENAME), __FUNCTION__); 00302 R = rpmdsLink(rpmdsFromPRCO(PRCO, RPMTAG_REQUIRENAME), __FUNCTION__); 00303 break; 00304 case RPMDEP_RPMDSLDCONFIG: 00305 closure_name = "soname(...)"; 00306 xx = rpmdsLdconfig(PRCO, NULL); 00307 P = rpmdsLink(rpmdsFromPRCO(PRCO, RPMTAG_PROVIDENAME), __FUNCTION__); 00308 R = rpmdsLink(rpmdsFromPRCO(PRCO, RPMTAG_REQUIRENAME), __FUNCTION__); 00309 break; 00310 case RPMDEP_RPMDSUNAME: 00311 closure_name = "uname(...)"; 00312 xx = rpmdsUname(&P, NULL); 00313 break; 00314 00315 case RPMDEP_RPMDSPIPE: 00316 break; 00317 case RPMDEP_RPMDSPERL: 00318 closure_name = "perl(...)"; 00319 if (rpmIsVerbose()) 00320 fprintf(stderr, "\n*** Gathering %s Provides: using\n\t%s\n", closure_name, _perl_provides); 00321 xx = rpmdsPipe(&P, RPMTAG_PROVIDENAME, _perl_provides); 00322 if (print_closure || rpmIsVerbose()) { 00323 fprintf(stderr, "\n*** Gathering %s Requires: using\n\t%s\n", closure_name, _perl_requires); 00324 xx = rpmdsPipe(&R, RPMTAG_REQUIRENAME, _perl_requires); 00325 print_closure = 1; 00326 } 00327 break; 00328 case RPMDEP_RPMDSPYTHON: 00329 break; 00330 case RPMDEP_RPMDSLIBTOOL: 00331 closure_name = "libtool(...)"; 00332 if (rpmIsVerbose()) 00333 fprintf(stderr, "\n*** Gathering %s Provides: using\n\t%s\n", closure_name, _libtool_provides); 00334 xx = rpmdsPipe(&P, RPMTAG_PROVIDENAME, _libtool_provides); 00335 if (print_closure || rpmIsVerbose()) { 00336 fprintf(stderr, "\n*** Gathering %s Requires: using\n\t%s\n", closure_name, _libtool_requires); 00337 xx = rpmdsPipe(&R, RPMTAG_REQUIRENAME, _libtool_requires); 00338 print_closure = 1; 00339 } 00340 break; 00341 case RPMDEP_RPMDSPKGCONFIG: 00342 closure_name = "pkgconfig(...)"; 00343 if (rpmIsVerbose()) 00344 fprintf(stderr, "\n*** Gathering %s Provides: using\n\t%s\n", closure_name, _pkgconfig_provides); 00345 xx = rpmdsPipe(&P, RPMTAG_PROVIDENAME, _pkgconfig_provides); 00346 if (print_closure || rpmIsVerbose()) { 00347 fprintf(stderr, "\n*** Gathering %s Requires: using\n\t%s\n", closure_name, _pkgconfig_requires); 00348 xx = rpmdsPipe(&R, RPMTAG_REQUIRENAME, _pkgconfig_requires); 00349 print_closure = 1; 00350 } 00351 break; 00352 00353 case RPMDEP_RPMDSPUBKEY: 00354 break; 00355 case RPMDEP_RPMDSARCH: 00356 break; 00357 case RPMDEP_RPMDSFILE: 00358 if (rpmIsVerbose()) 00359 fprintf(stderr, "\n*** Gathering rpmdb file Requires: using\n\t%s\n", _rpmdb_file_requires); 00360 xx = rpmdsPipe(&R, RPMTAG_REQUIRENAME, _rpmdb_file_requires); 00361 break; 00362 case RPMDEP_RPMDSSONAME: 00363 closure_name = "soname(...)"; 00364 xx = rpmdsLdconfig(PRCO, NULL); 00365 P = rpmdsLink(rpmdsFromPRCO(PRCO, RPMTAG_PROVIDENAME), __FUNCTION__); 00366 if (print_closure || rpmIsVerbose()) { 00367 fprintf(stderr, "\n*** Gathering rpmdb soname Requires: using\n\t%s\n", _rpmdb_soname_requires); 00368 xx = rpmdsPipe(&R, RPMTAG_REQUIRENAME, _rpmdb_soname_requires); 00369 print_closure = 1; 00370 } 00371 break; 00372 case RPMDEP_RPMDSPACKAGE: 00373 closure_name = "package(...)"; 00374 if (rpmIsVerbose()) 00375 fprintf(stderr, "\n*** Gathering rpmdb package Provides: using\n\t%s\n", _rpmdb_package_provides); 00376 xx = rpmdsPipe(&P, RPMTAG_PROVIDENAME, _rpmdb_package_provides); 00377 if (print_closure || rpmIsVerbose()) { 00378 fprintf(stderr, "\n*** Gathering rpmdb package Requires: using\n\t%s\n", _rpmdb_package_requires); 00379 xx = rpmdsPipe(&R, RPMTAG_REQUIRENAME, _rpmdb_package_requires); 00380 print_closure = 1; 00381 } 00382 break; 00383 00384 case RPMDEP_RPMDSJAVA: 00385 closure_name = "java(...)"; 00386 if (rpmIsVerbose()) 00387 fprintf(stderr, "\n*** Gathering %s Provides: using\n\t%s\n", closure_name, _java_provides); 00388 xx = rpmdsPipe(&P, RPMTAG_PROVIDENAME, _java_provides); 00389 if (print_closure || rpmIsVerbose()) { 00390 fprintf(stderr, "\n*** Gathering %s Requires: using\n\t%s\n", closure_name, _java_requires); 00391 xx = rpmdsPipe(&R, RPMTAG_REQUIRENAME, _java_requires); 00392 print_closure = 1; 00393 } 00394 break; 00395 case RPMDEP_RPMDSRUBY: 00396 break; 00397 case RPMDEP_RPMDSPHP: 00398 break; 00399 case RPMDEP_RPMDSDPKGRPM: 00400 closure_name = "dpkgrpm(...)"; 00401 if (rpmIsVerbose()) 00402 fprintf(stderr, "\n*** Gathering dpkg Provides: using\n\t%s\n", _dpkg_provides); 00403 xx = rpmdsPipe(&P, RPMTAG_PROVIDENAME, _dpkg_provides); 00404 if (print_closure || rpmIsVerbose()) { 00405 fprintf(stderr, "\n*** Gathering rpmdb package Requires: using\n\t%s\n", _rpmdb_package_requires); 00406 xx = rpmdsPipe(&R, RPMTAG_REQUIRENAME, _rpmdb_package_requires); 00407 print_closure = 1; 00408 } 00409 break; 00410 case RPMDEP_RPMDSRPMDPKG: 00411 closure_name = "rpmdpkg(...)"; 00412 if (print_closure || rpmIsVerbose()) { 00413 fprintf(stderr, "\n*** Gathering rpmdb package Provides: using\n\t%s\n", _rpmdb_package_provides); 00414 xx = rpmdsPipe(&P, RPMTAG_PROVIDENAME, _rpmdb_package_provides); 00415 print_closure = 1; 00416 } 00417 if (rpmIsVerbose()) 00418 fprintf(stderr, "\n*** Gathering dpkg Requires: using\n\t%s\n", _dpkg_requires); 00419 xx = rpmdsPipe(&R, RPMTAG_REQUIRENAME, _dpkg_requires); 00420 break; 00421 } 00422 00423 if (print_provides && P != NULL) 00424 xx = rpmdepPrint(NULL, P, fp); 00425 if (print_requires && R != NULL) 00426 xx = rpmdepPrint(NULL, R, fp); 00427 if (print_closure) { 00428 if (rpmIsVerbose()) 00429 fprintf(stderr, "\n*** Checking %s Requires(%d): against Provides(%d): closure:\n", closure_name, rpmdsCount(R), rpmdsCount(P)); 00430 xx = rpmdsPrintClosure(P, R, fp); 00431 } 00432 00433 fc = rpmfcFree(fc); 00434 P = rpmdsFree(P); 00435 R = rpmdsFree(R); 00436 PRCO = rpmdsFreePRCO(PRCO); 00437 00438 ec = 0; 00439 00440 exit: 00441 optCon = rpmcliFini(optCon); 00442 return ec; 00443 }