2 * \file build/parsePolicies.c
3 * Parse %policies section from spec file.
8 #include <rpm/header.h>
9 #include <rpm/rpmbuild.h>
10 #include <rpm/rpmlog.h>
11 #include <rpm/rpmfileutil.h>
12 #include "build/rpmbuild_internal.h"
15 int parsePolicies(rpmSpec spec)
17 int nextPart, res = PART_ERROR;
21 const char **argv = NULL;
22 const char *name = NULL;
23 int flag = PART_SUBNAME;
24 poptContext optCon = NULL;
26 struct poptOption optionsTable[] = {
27 {NULL, 'n', POPT_ARG_STRING, &name, 'n', NULL, NULL},
28 {0, 0, 0, 0, 0, NULL, NULL}
31 if ((rc = poptParseArgvString(spec->line, &argc, &argv))) {
32 rpmlog(RPMLOG_ERR, _("line %d: Error parsing %%policies: %s\n"),
33 spec->lineNum, poptStrerror(rc));
37 optCon = poptGetContext(NULL, argc, argv, optionsTable, 0);
38 while ((arg = poptGetNextOpt(optCon)) > 0) {
45 rpmlog(RPMLOG_ERR, _("line %d: Bad option %s: %s\n"),
47 poptBadOption(optCon, POPT_BADOPTION_NOALIAS), spec->line);
51 if (poptPeekArg(optCon)) {
53 name = poptGetArg(optCon);
54 if (poptPeekArg(optCon)) {
55 rpmlog(RPMLOG_ERR, _("line %d: Too many names: %s\n"),
56 spec->lineNum, spec->line);
61 if (lookupPackage(spec, name, flag, &pkg)) {
62 rpmlog(RPMLOG_ERR, _("line %d: Package does not exist: %s\n"),
63 spec->lineNum, spec->line);
67 if ((rc = readLine(spec, STRIP_TRAILINGSPACE | STRIP_COMMENTS)) > 0) {
72 while (!(nextPart = isPart(spec->line))) {
73 argvAdd(&(pkg->policyList), spec->line);
74 if ((rc = readLine(spec, STRIP_TRAILINGSPACE | STRIP_COMMENTS)) > 0) {
86 poptFreeContext(optCon);