# build/parsePreamble.c File Reference

Parse tags in global section from spec file. More...

`#include "system.h"`
`#include <rpmio.h>`
`#include <rpmbuild.h>`
`#include "debug.h"`

Include dependency graph for parsePreamble.c:

Go to the source code of this file.

## Data Structures

struct | tokenBits_s
struct | optionalTag
struct | PreambleRec_s

## Defines

#define | _RPMEVR_INTERNAL
#define | _RPMTAG_INTERNAL
#define | SINGLE_TOKEN_ONLY

## Typedefs

typedef struct tokenBits_s * | tokenBits
typedef struct PreambleRec_s * | PreambleRec

## Functions

static void | addOrAppendListEntry (Header h, rpmTag tag, char *line)
static int | parseSimplePart (char *line, char **name, rpmParseState *flag)
static int | parseYesNo (const char *s)
static int | parseBits (const char *s, const tokenBits tokbits, rpmsenseFlags *bp)
static char * | findLastChar (char *s)
static int | isMemberInEntry (Header h, const char *name, rpmTag tag)
static int | checkForValidArchitectures (Spec spec)
static rpmRC | checkForRequired (Header h, const char *NVR)
| Check that required tags are present in header.
static rpmRC | checkForDuplicates (Header h, const char *NVR)
| Check that no duplicate tags are present in header.
static void | fillOutMainPackage (Header h)
static int | doIcon (Spec spec, Header h)
spectag | stashSt (Spec spec, Header h, int tag, const char *lang)
static rpmRC | handlePreambleTag (Spec spec, Package pkg, rpmTag tag, const char *macro, const char *lang)
static int | findPreambleTag (Spec spec, rpmTag *tagp, const char **macro, char *lang)
int | parsePreamble (Spec spec, int initialPackage)
| Parse tags from preamble of a spec file.

## Variables

static rpmTag | copyTagsDuringParse []
static rpmTag | requiredTags []
static struct tokenBits_s | installScriptBits []
static struct tokenBits_s | buildScriptBits []
static struct optionalTag | optionalTags []
int | noLang
static struct PreambleRec_s | preambleList []

## Detailed Description

Parse tags in global section from spec file.

Definition in file parsePreamble.c.

## Define Documentation

#define _RPMEVR_INTERNAL

Definition at line 10 of file parsePreamble.c.

#define _RPMTAG_INTERNAL

Definition at line 11 of file parsePreamble.c.

#define SINGLE_TOKEN_ONLY

Value:

    if (multiToken) { \
        rpmlog(RPMLOG_ERR, _("line %d: Tag takes single token only: %s\n"), \
                 spec->lineNum, spec->line); \
        return RPMRC_FAIL; \
    }

Definition at line 520 of file parsePreamble.c.

Referenced by handlePreambleTag().

## Typedef Documentation

typedef struct PreambleRec_s * PreambleRec

typedef struct tokenBits_s * tokenBits

## Function Documentation

static void addOrAppendListEntry | ( | Header | h,
|  | rpmTag | tag,
|  | char * | line |
| ) |  |  | `[static]`

Definition at line 63 of file parsePreamble.c.

References _free(), alloca(), _HE_s::append, rpmDataType_u::argv, _HE_s::c, headerPut(), _HE_s::p, RPM_STRING_ARRAY_TYPE, _HE_s::t, and _HE_s::tag.

Referenced by handlePreambleTag().

static rpmRC checkForDuplicates | ( | Header | h,
|  | const char * | NVR |
| ) |  |  | `[static]`

Check that no duplicate tags are present in header.

Parameters:

  | h | header
  | NVR | package name-version-release

Returns:
  RPMRC_OK if OK

Definition at line 302 of file parsePreamble.c.

References _, _free(), alloca(), headerFini(), headerInit(), headerNext(), _HE_s::p, rpmDataType_u::ptr, rpmlog(), RPMLOG_ERR, RPMRC_FAIL, RPMRC_OK, _HE_s::tag, and tagName().

Referenced by parsePreamble().

static rpmRC checkForRequired | ( | Header | h,
|  | const char * | NVR |
| ) |  |  | `[static]`

Check that required tags are present in header.

Parameters:

  | h | header
  | NVR | package name-version-release

Returns:
  RPMRC_OK if OK

Definition at line 278 of file parsePreamble.c.

References _, headerIsEntry(), requiredTags, rpmlog(), RPMLOG_ERR, RPMRC_FAIL, RPMRC_OK, and tagName().

Referenced by parsePreamble().

static int checkForValidArchitectures | ( | Spec | spec | ) | `[static]`

Definition at line 241 of file parsePreamble.c.

References _, _free(), isMemberInEntry(), rpmExpand(), rpmlog(), RPMLOG_ERR, RPMRC_FAIL, and Spec_s::sourceHeader.

Referenced by parsePreamble().

static int doIcon | ( | Spec | spec,
|  | Header | h |
| ) |  |  | `[static]`

Definition at line 382 of file parsePreamble.c.

References _, _free(), alloca(), _HE_s::c, F_OK, Fclose(), Ferror(), Source::flags, Fopen(), Fread(), Fstrerror(), headerPut(), Source::next, _HE_s::p, RPM_BIN_TYPE, RPMFILE_ICON, rpmGenPath(), rpmlog(), RPMLOG_ERR, RPMRC_FAIL, Source::source, Spec_s::sources, _HE_s::t, _HE_s::tag, rpmDataType_u::ui8p, URL_IS_DASH, URL_IS_FTP, URL_IS_HKP, URL_IS_HTTP, URL_IS_HTTPS, URL_IS_PATH, URL_IS_UNKNOWN, and urlPath().

Referenced by handlePreambleTag().

static void fillOutMainPackage | ( | Header | h | ) | `[static]`

Definition at line 345 of file parsePreamble.c.

References _free(), alloca(), _HE_s::c, headerIsEntry(), headerPut(), optionalTags, optionalTag::ot_mac, optionalTag::ot_tag, _HE_s::p, RPM_STRING_TYPE, rpmExpand(), rpmDataType_u::str, _HE_s::t, _HE_s::tag, tagCanonicalize(), and tagGenerate().

Referenced by parsePreamble().

static char* findLastChar | ( | char * | s | ) | `[inline, static]`

Definition at line 202 of file parsePreamble.c.

Referenced by handlePreambleTag().

static int findPreambleTag | ( | Spec | spec,
|  | rpmTag * | tagp,
|  | const char ** | macro,
|  | char * | lang |
| ) |  |  | `[static]`

Definition at line 900 of file parsePreamble.c.

References _, _free(), argvSearch(), argvStrcasecmp(), Spec_s::line, PreambleRec_s::multiLang, PreambleRec_s::obsolete, RPMBUILD_DEFAULT_LANG, rpmlog(), RPMLOG_ERR, rpmTags, SKIPSPACE, PreambleRec_s::tag, tagCanonicalize(), tagGenerate(), tagName(), PreambleRec_s::token, xisspace(), and xstrncasecmp().

Referenced by parsePreamble().

static rpmRC handlePreambleTag | ( | Spec | spec,
|  | Package | pkg,
|  | rpmTag | tag,
|  | const char * | macro,
|  | const char * | lang |
| ) |  |  | `[static]`

Definition at line 533 of file parsePreamble.c.

References _, _free(), addMacro(), addOrAppendListEntry(), addSource(), alloca(), _HE_s::append, rpmDataType_u::argv, Package_s::autoProv, Package_s::autoReq, Spec_s::BACount, Spec_s::BANames, _HE_s::c, delMacro(), doIcon(), field(), findLastChar(), Package_s::header, headerAddI18NString(), headerGet(), headerPut(), Spec_s::line, Spec_s::lineNum, Spec_s::macros, noLang, Spec_s::noSource, Source::num, _HE_s::p, parseBits(), parseNoSource(), parseNum(), parseRCPOT(), parseYesNo(), rpmDataType_u::ptr, RMIL_OLDSPEC, RMIL_SPEC, Spec_s::rootURL, RPM_STRING_ARRAY_TYPE, RPM_STRING_TYPE, RPM_UINT32_TYPE, RPMBUILD_DEFAULT_LANG, rpmGenPath(), rpmlog(), RPMLOG_ERR, RPMRC_FAIL, RPMRC_OK, SINGLE_TOKEN_ONLY, SKIPNONSPACE, SKIPSPACE, Spec_s::sourceHeader, stashSt(), rpmDataType_u::str, _HE_s::t, _HE_s::tag, tagName(), rpmDataType_u::ui32p, and urlPath().

Referenced by parsePreamble().

static int isMemberInEntry | ( | Header | h,
|  | const char * | name,
|  | rpmTag | tag |
| ) |  |  | `[static]`

Definition at line 216 of file parsePreamble.c.

References _free(), alloca(), rpmDataType_u::argv, _HE_s::c, headerGet(), _HE_s::p, rpmDataType_u::ptr, _HE_s::tag, and xstrcasecmp().

Referenced by checkForValidArchitectures().

static int parseBits | ( | const char * | s,
|  | const tokenBits | tokbits,
|  | rpmsenseFlags * | bp |
| ) |  |  | `[static]`

Definition at line 166 of file parsePreamble.c.

References tokenBits_s::bits, tokenBits_s::name, RPMRC_FAIL, RPMRC_OK, xisalpha(), and xisspace().

Referenced by handlePreambleTag().

static int parseSimplePart | ( | char * | line,
|  | char ** | name,
|  | rpmParseState * | flag |
| ) |  |  | `[static]`

Definition at line 89 of file parsePreamble.c.

References PART_NAME, and PART_SUBNAME.

Referenced by parsePreamble().

static int parseYesNo | ( | const char * | s | ) | `[inline, static]`

Definition at line 123 of file parsePreamble.c.

References xstrcasecmp().

Referenced by handlePreambleTag().

## Variable Documentation

struct tokenBits_s buildScriptBits[]`[static]`

Initial value:

     {
        { "prep",           RPMSENSE_SCRIPT_PREP },
        { "build",          RPMSENSE_SCRIPT_BUILD },
        { "install",        RPMSENSE_SCRIPT_INSTALL },
        { "clean",          RPMSENSE_SCRIPT_CLEAN },
        { "hint",           RPMSENSE_MISSINGOK },
        { NULL, 0 }
    }

Definition at line 155 of file parsePreamble.c.

rpmTag copyTagsDuringParse[]`[static]`

Initial value:

     {
        RPMTAG_EPOCH,
        RPMTAG_VERSION,
        RPMTAG_RELEASE,
        RPMTAG_LICENSE,
        RPMTAG_PACKAGER,
        RPMTAG_DISTRIBUTION,
        RPMTAG_DISTURL,
        RPMTAG_VENDOR,
        RPMTAG_ICON,
        RPMTAG_GIF,
        RPMTAG_XPM,
        RPMTAG_URL,
        RPMTAG_CHANGELOGTIME,
        RPMTAG_CHANGELOGNAME,
        RPMTAG_CHANGELOGTEXT,
        RPMTAG_PREFIXES,
        RPMTAG_DISTTAG,
        RPMTAG_CVSID,
        RPMTAG_VARIANTS,
        RPMTAG_XMAJOR,
        RPMTAG_XMINOR,
        RPMTAG_REPOTAG,
        RPMTAG_KEYWORDS,
        0
    }

Definition at line 21 of file parsePreamble.c.

Referenced by parsePreamble().

struct tokenBits_s installScriptBits[]`[static]`

Initial value:

     {
        { "interp",         RPMSENSE_INTERP },
        { "preun",          RPMSENSE_SCRIPT_PREUN },
        { "pre",            RPMSENSE_SCRIPT_PRE },
        { "postun",         RPMSENSE_SCRIPT_POSTUN },
        { "post",           RPMSENSE_SCRIPT_POST },
        { "rpmlib",         RPMSENSE_RPMLIB },
        { "verify",         RPMSENSE_SCRIPT_VERIFY },
        { "hint",           RPMSENSE_MISSINGOK },
        { NULL, 0 }
    }

Definition at line 140 of file parsePreamble.c.

int noLang

Definition at line 55 of file poptBT.c.

struct optionalTag optionalTags[]`[static]`

Referenced by fillOutMainPackage().

struct PreambleRec_s preambleList[]`[static]`

Definition at line 832 of file parsePreamble.c.

rpmTag requiredTags[]`[static]`

Initial value:

     {
        RPMTAG_NAME,
        RPMTAG_VERSION,
        RPMTAG_RELEASE,
        RPMTAG_SUMMARY,
        RPMTAG_GROUP,
        RPMTAG_LICENSE,
        0
    }

Definition at line 51 of file parsePreamble.c.

Referenced by checkForRequired().