Main Page   Modules   Compound List   File List   Compound Members   File Members   Related Pages  

lib/poptQV.c

Go to the documentation of this file.
00001 
00006 #include "system.h"
00007 
00008 #include "rpmbuild.h"
00009 #include <rpmurl.h>
00010 #include "debug.h"
00011 
00012 struct rpmQVArguments rpmQVArgs;
00013 int specedit = 0;
00014 
00015 /* ======================================================================== */
00016 #define POPT_QUERYFORMAT        1000
00017 #define POPT_WHATREQUIRES       1001
00018 #define POPT_WHATPROVIDES       1002
00019 #define POPT_QUERYBYNUMBER      1003
00020 #define POPT_TRIGGEREDBY        1004
00021 #define POPT_DUMP               1005
00022 #define POPT_SPECFILE           1006
00023 
00024 /* ========== Query/Verify source popt args */
00025 static void rpmQVSourceArgCallback( /*@unused@*/ poptContext con,
00026         /*@unused@*/ enum poptCallbackReason reason,
00027         const struct poptOption * opt, /*@unused@*/ const char * arg, 
00028         const void * data)
00029 {
00030     QVA_t *qva = &rpmQVArgs;
00031 
00032     switch (opt->val) {
00033     case 'q':
00034     case 'Q':
00035     case 'V':
00036         if (qva->qva_mode == ' ') {
00037             qva->qva_mode = opt->val;
00038             qva->qva_char = ' ';
00039         }
00040         break;
00041     case 'a': qva->qva_source |= RPMQV_ALL; qva->qva_sourceCount++; break;
00042     case 'f': qva->qva_source |= RPMQV_PATH; qva->qva_sourceCount++; break;
00043     case 'g': qva->qva_source |= RPMQV_GROUP; qva->qva_sourceCount++; break;
00044     case 'p': qva->qva_source |= RPMQV_RPM; qva->qva_sourceCount++; break;
00045     case POPT_WHATPROVIDES: qva->qva_source |= RPMQV_WHATPROVIDES; 
00046                               qva->qva_sourceCount++; break;
00047     case POPT_WHATREQUIRES: qva->qva_source |= RPMQV_WHATREQUIRES; 
00048                               qva->qva_sourceCount++; break;
00049     case POPT_TRIGGEREDBY: qva->qva_source |= RPMQV_TRIGGEREDBY;
00050                               qva->qva_sourceCount++; break;
00051 
00052 /* XXX SPECFILE is not verify sources */
00053     case POPT_SPECFILE:
00054         qva->qva_source |= RPMQV_SPECFILE;
00055         qva->qva_sourceCount++;
00056         break;
00057     case POPT_QUERYBYNUMBER:
00058         qva->qva_source |= RPMQV_DBOFFSET; 
00059         qva->qva_sourceCount++;
00060         break;
00061     }
00062 }
00063 
00064 struct poptOption rpmQVSourcePoptTable[] = {
00065  { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA, 
00066         rpmQVSourceArgCallback, 0, NULL, NULL },
00067  { "all", 'a', 0, 0, 'a',
00068         N_("query/verify all packages"), NULL },
00069  { "file", 'f', 0, 0, 'f',
00070         N_("query/verify package(s) owning file"), "FILE" },
00071  { "group", 'g', 0, 0, 'g',
00072         N_("query/verify package(s) in group"), "GROUP" },
00073  { "package", 'p', 0, 0, 'p',
00074         N_("query/verify a package file (i.e. a binary *.rpm file)"), NULL },
00075  { "query", 'q', POPT_ARGFLAG_DOC_HIDDEN, NULL, 'q',
00076         N_("rpm query mode"), NULL },
00077  { "querybynumber", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, 
00078         POPT_QUERYBYNUMBER, NULL, NULL },
00079  { "querytags", '\0', 0, 0, 'Q',
00080         N_("display known query tags"), NULL },
00081  { "specfile", '\0', 0, 0, POPT_SPECFILE,
00082         N_("query a spec file"), N_("<spec>") },
00083  { "triggeredby", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, POPT_TRIGGEREDBY, 
00084         N_("query the package(s) triggered by the package"), "PACKAGE" },
00085  { "verify", 'V', POPT_ARGFLAG_DOC_HIDDEN, NULL, 'V',
00086         N_("rpm verify mode"), NULL },
00087  { NULL, 'y',  POPT_ARGFLAG_DOC_HIDDEN, NULL, 'V',
00088         N_("rpm verify mode (legacy)"), NULL },
00089  { "whatrequires", '\0', 0, 0, POPT_WHATREQUIRES, 
00090         N_("query/verify the package(s) which require a dependency"), "CAPABILITY" },
00091  { "whatprovides", '\0', 0, 0, POPT_WHATPROVIDES, 
00092         N_("query/verify the package(s) which provide a dependency"), "CAPABILITY" },
00093    POPT_TABLEEND
00094 };
00095 
00096 /* ========== Query specific popt args */
00097 
00098 static void queryArgCallback(/*@unused@*/poptContext con, /*@unused@*/enum poptCallbackReason reason,
00099                              const struct poptOption * opt, const char * arg, 
00100                              const void * data)
00101 {
00102     QVA_t *qva = &rpmQVArgs;
00103 
00104     switch (opt->val) {
00105     case 'c': qva->qva_flags |= QUERY_FOR_CONFIG | QUERY_FOR_LIST; break;
00106     case 'd': qva->qva_flags |= QUERY_FOR_DOCS | QUERY_FOR_LIST; break;
00107     case 'l': qva->qva_flags |= QUERY_FOR_LIST; break;
00108     case 's': qva->qva_flags |= QUERY_FOR_STATE | QUERY_FOR_LIST;
00109         break;
00110     case POPT_DUMP: qva->qva_flags |= QUERY_FOR_DUMPFILES | QUERY_FOR_LIST; break;
00111     case 'v': rpmIncreaseVerbosity();    break;
00112 
00113     case POPT_QUERYFORMAT:
00114       { char *qf = (char *)qva->qva_queryFormat;
00115         if (qf) {
00116             int len = strlen(qf) + strlen(arg) + 1;
00117             qf = xrealloc(qf, len);
00118             strcat(qf, arg);
00119         } else {
00120             qf = xmalloc(strlen(arg) + 1);
00121             strcpy(qf, arg);
00122         }
00123         qva->qva_queryFormat = qf;
00124       } break;
00125     }
00126 }
00127 
00128 struct poptOption rpmQueryPoptTable[] = {
00129  { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA, 
00130         queryArgCallback, 0, NULL, NULL },
00131  { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmQVSourcePoptTable, 0,
00132         NULL, NULL },
00133  { "configfiles", 'c', 0, 0, 'c',
00134         N_("list all configuration files"), NULL },
00135  { "docfiles", 'd', 0, 0, 'd',
00136         N_("list all documentation files"), NULL },
00137  { "dump", '\0', 0, 0, POPT_DUMP,
00138         N_("dump basic file information"), NULL },
00139  { "list", 'l', 0, 0, 'l',
00140         N_("list files in package"), NULL },
00141  { "qf", '\0', POPT_ARG_STRING | POPT_ARGFLAG_DOC_HIDDEN, 0, 
00142         POPT_QUERYFORMAT, NULL, NULL },
00143  { "queryformat", '\0', POPT_ARG_STRING, 0, POPT_QUERYFORMAT,
00144         N_("use the following query format"), "QUERYFORMAT" },
00145  { "specedit", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &specedit, -1,
00146         N_("substitute i18n sections into spec file"), NULL },
00147  { "state", 's', 0, 0, 's',
00148         N_("display the states of the listed files"), NULL },
00149  { "verbose", 'v', 0, 0, 'v',
00150         N_("display a verbose file listing"), NULL },
00151    POPT_TABLEEND
00152 };
00153 
00154 /* ======================================================================== */

Generated at Sun Apr 8 18:43:00 2001 for rpm by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000