Main Page | Modules | Data Structures | File List | Data Fields | Globals | Related Pages

tools/rpmdeps.c

Go to the documentation of this file.
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 }

Generated on Wed Dec 28 00:13:48 2016 for rpm by  doxygen 1.4.4