# lib/rpmrc.c File Reference

`#include "system.h"`
`#include <stdarg.h>`
`#include <rpmio_internal.h>`
`#include <rpmlua.h>`
`#include <rpmluaext.h>`
`#include <rpmmacro.h>`
`#include <rpmcli.h>`
`#include <rpmds.h>`
`#include "debug.h"`

Include dependency graph for rpmrc.c:

Go to the source code of this file.

## Data Structures
struct | machCacheEntry_s
struct | machCache_s
struct | machEquivInfo_s
struct | machEquivTable_s
struct | defaultEntry_s
struct | canonEntry_s
struct | tableType_s
struct | cpu_vendor_os_gnu
## Defines
#define | __power_pc() 0
#define | _MIRE_INTERNAL
#define | OS 0
#define | ARCH 1
#define | _TOPDIRMACRO "%{_topdir}/"
## Typedefs
typedef const char * | cptr_t
typedef struct machCacheEntry_s * | machCacheEntry
typedef struct machCache_s * | machCache
typedef struct machEquivInfo_s * | machEquivInfo
typedef struct machEquivTable_s * | machEquivTable
typedef struct defaultEntry_s * | defaultEntry
typedef struct canonEntry_s * | canonEntry
typedef struct tableType_s * | tableType
typedef struct cpu_vendor_os_gnu * | CVOG_t
## Functions
static void | rpmRebuildTargetVars (const char **target, const char **canontarget)
static machCacheEntry | machCacheFindEntry (const machCache cache, const char *key)
static void | machAddEquiv (machEquivTable table, const char *name, int distance)
static void | machCacheEntryVisit (machCache cache, machEquivTable table, const char *name, int distance)
static void | rebuildCompatTables (int type, const char *name)
static canonEntry | lookupInCanonTable (const char *name, const canonEntry table, int tableLen)
static const char * | lookupInDefaultTable (const char *name, const defaultEntry table, int tableLen)
static void | addMacroDefault (const char *macroname, const char *val, const char *body)
static void | setPathDefault (const char *macroname, const char *subdir)
static void | setDefaults (void)
static int | parseCVOG (const char *str, CVOG_t *cvogp)
static void * | mireFreeAll (miRE mire, int nre)
| Destroy platform patterns.
static int | mireAppend (rpmMireMode mode, int tag, const char *pattern, miRE *mi_rep, int *mi_nrep)
| Append pattern to array.
static rpmRC | rpmPlatform (const char *platform)
| Read and configure /etc/rpm/platform patterns.
int | rpmPlatformScore (const char *platform, void *mi_re, int mi_nre)
| Return score of a platform string.
static void | defaultMachine (const char **arch, const char **os)
void | rpmSetTables (int archTable, int osTable)
static void | rpmSetMachine (const char *arch, const char *os)
static void | getMachineInfo (int type, const char **name, int *num)
void | rpmFreeRpmrc (void)
static int | rpmReadRC (void)
| Read macro configuration file(s).
int | rpmReadConfigFiles (const char *file, const char *target)
| Read macro configuration file(s) for a target.
int | rpmShowRC (FILE *fp)
| Display current rpmrc (and macro) configuration.
## Variables
static const char * | configTarget = NULL
static const char * | platform = SYSCONFIGDIR "/platform"
void * | platpat = NULL
int | nplatpat = 0
static struct tableType_s | tables [RPM_MACHTABLE_COUNT]
static cptr_t | current [2]
static int | currTables [2] = { RPM_MACHTABLE_INSTOS, RPM_MACHTABLE_INSTARCH }
static int | defaultsInitialized = 0
static const char * | ___build_pre

## Define Documentation

#define __power_pc | ( |  | ) | 0

Definition at line 8 of file rpmrc.c.

#define _MIRE_INTERNAL

Definition at line 11 of file rpmrc.c.

#define _TOPDIRMACRO "%{_topdir}/"

Referenced by setPathDefault().

#define ARCH 1

Definition at line 95 of file rpmrc.c.

Referenced by rpmFreeRpmrc(), rpmRebuildTargetVars(), rpmSetMachine(), rpmSetTables(), and rpmShowRC().

#define OS 0

Definition at line 94 of file rpmrc.c.

Referenced by rpmFreeRpmrc(), rpmRebuildTargetVars(), rpmSetMachine(), rpmSetTables(), and rpmShowRC().

## Typedef Documentation

typedef struct canonEntry_s * canonEntry

typedef const char* cptr_t

Definition at line 33 of file rpmrc.c.

typedef struct cpu_vendor_os_gnu * CVOG_t

typedef struct defaultEntry_s * defaultEntry

typedef struct machCache_s * machCache

typedef struct machCacheEntry_s * machCacheEntry

typedef struct machEquivInfo_s * machEquivInfo

typedef struct machEquivTable_s * machEquivTable

typedef struct tableType_s * tableType

## Function Documentation

static void addMacroDefault | ( | const char * | macroname,
|  | const char * | val,
|  | const char * | body |
| ) |  |  | `[static]`

Definition at line 234 of file rpmrc.c.

References addMacro(), and RMIL_DEFAULT.

Referenced by setDefaults().

static void defaultMachine | ( | const char ** | arch,
|  | const char ** | os |
| ) |  |  | `[static]`

Definition at line 540 of file rpmrc.c.

References _free(), configTarget, cpu_vendor_os_gnu::cpu, cpu_vendor_os_gnu::os, parseCVOG(), platform, rpmExpand(), rpmPlatform(), RPMRC_OK, and cpu_vendor_os_gnu::str.

Referenced by rpmRebuildTargetVars(), rpmSetMachine(), and rpmSetTables().

static void getMachineInfo | ( | int | type,
|  | const char ** | name,
|  | int * | num |
| ) |  |  | `[static]`

Definition at line 725 of file rpmrc.c.

References current, currTables, lookupInCanonTable(), canonEntry_s::num, and canonEntry_s::short_name.

Referenced by rpmRebuildTargetVars().

static canonEntry lookupInCanonTable | ( | const char * | name,
|  | const canonEntry | table,
|  | int | tableLen |
| ) |  |  | `[static]`

Definition at line 204 of file rpmrc.c.

Referenced by getMachineInfo().

static const char* lookupInDefaultTable | ( | const char * | name,
|  | const defaultEntry | table,
|  | int | tableLen |
| ) |  |  | `[static]`

Definition at line 221 of file rpmrc.c.

References defaultEntry_s::defName.

Referenced by rpmSetMachine().

static void machAddEquiv | ( | machEquivTable | table,
|  | const char * | name,
|  | int | distance |
| ) |  |  | `[static]`

Definition at line 124 of file rpmrc.c.

References machEquivTable_s::count, tableType_s::equiv, machEquivTable_s::list, machEquivInfo_s::name, machEquivInfo_s::score, xmalloc(), xrealloc(), xstrcasecmp(), and xstrdup().

Referenced by machCacheEntryVisit(), and rebuildCompatTables().

static void machCacheEntryVisit | ( | machCache | cache,
|  | machEquivTable | table,
|  | const char * | name,
|  | int | distance |
| ) |  |  | `[static]`

Definition at line 152 of file rpmrc.c.

References machCacheEntry_s::count, machCacheEntry_s::equivs, machAddEquiv(), machCacheFindEntry(), and machCacheEntry_s::visited.

Referenced by rebuildCompatTables().

static machCacheEntry machCacheFindEntry | ( | const machCache | cache,
|  | const char * | key |
| ) |  |  | `[static]`

Definition at line 113 of file rpmrc.c.

References machCache_s::cache, machCacheEntry_s::name, and machCache_s::size.

Referenced by machCacheEntryVisit().

static int mireAppend | ( | rpmMireMode | mode,
|  | int | tag,
|  | const char * | pattern,
|  | miRE * | mi_rep,
|  | int * | mi_nrep |
| ) |  |  | `[static]`

Append pattern to array.

Parameters:

  | mode | type of pattern match
  | tag | identifier (like an rpmTag)
  | pattern | pattern to compile

Return values:

  | *mi_rep | platform pattern array
  | *mi_nrep | no. of patterns in array

Definition at line 411 of file rpmrc.c.

References xrealloc().

Referenced by rpmPlatform().

static void* mireFreeAll | ( | miRE | mire,
|  | int | nre |
| ) |  |  | `[static]`

Destroy platform patterns.

Parameters:

  | mire | platform pattern array
  | nre | no of patterns in array

Returns:
  NULL always

Definition at line 388 of file rpmrc.c.

References _free().

Referenced by rpmFreeRpmrc(), and rpmPlatform().

static int parseCVOG | ( | const char * | str,
|  | CVOG_t * | cvogp |
| ) |  |  | `[static]`

Definition at line 329 of file rpmrc.c.

References _free(), cpu_vendor_os_gnu::cpu, cpu_vendor_os_gnu::gnu, cpu_vendor_os_gnu::os, cpu_vendor_os_gnu::str, cpu_vendor_os_gnu::vendor, xcalloc(), and xstrdup().

Referenced by defaultMachine(), and rpmPlatform().

static void rebuildCompatTables | ( | int | type,
|  | const char * | name |
| ) |  |  | `[static]`

Definition at line 173 of file rpmrc.c.

References _free(), machCache_s::cache, tableType_s::cache, machEquivTable_s::count, currTables, tableType_s::equiv, tableType_s::key, machEquivTable_s::list, machAddEquiv(), machCacheEntryVisit(), machEquivInfo_s::name, machCache_s::size, and machCacheEntry_s::visited.

Referenced by rpmSetMachine(), and rpmSetTables().

static rpmRC rpmPlatform | ( | const char * | platform | ) | `[static]`

Read and configure /etc/rpm/platform patterns.

Parameters:

  | platform | path to platform patterns

Returns:
  RPMRC_OK on success

Definition at line 437 of file rpmrc.c.

References _free(), addMacro(), cpu_vendor_os_gnu::cpu, cpu_vendor_os_gnu::gnu, mireAppend(), mireFreeAll(), nplatpat, cpu_vendor_os_gnu::os, parseCVOG(), platpat, rpmExpand(), rpmioSlurp(), RPMRC_FAIL, RPMRC_OK, cpu_vendor_os_gnu::str, cpu_vendor_os_gnu::vendor, and xisspace().

Referenced by defaultMachine().

static void rpmRebuildTargetVars | ( | const char ** | target,
|  | const char ** | canontarget |
| ) |  |  | `[static]`

Definition at line 748 of file rpmrc.c.

References _free(), addMacro(), ARCH, defaultMachine(), delMacro(), getMachineInfo(), OS, RMIL_RPMRC, RPM_MACHTABLE_BUILDARCH, RPM_MACHTABLE_BUILDOS, RPM_MACHTABLE_INSTARCH, RPM_MACHTABLE_INSTOS, rpmSetMachine(), rpmSetTables(), xmalloc(), xstrcasecmp(), xstrdup(), and xtolower().

Referenced by rpmReadConfigFiles().

static void rpmSetMachine | ( | const char * | arch,
|  | const char * | os |
| ) |  |  | `[static]`

Definition at line 684 of file rpmrc.c.

References _free(), ARCH, current, currTables, defaultMachine(), lookupInDefaultTable(), OS, rebuildCompatTables(), and xstrdup().

Referenced by rpmReadConfigFiles(), and rpmRebuildTargetVars().

static void setDefaults | ( | void |  | ) | `[static]`

Definition at line 276 of file rpmrc.c.

References ___build_pre, addMacro(), addMacroDefault(), RMIL_DEFAULT, setPathDefault(), USRPREFIX, and VARPREFIX.

Referenced by rpmReadRC().

static void setPathDefault | ( | const char * | macroname,
|  | const char * | subdir |
| ) |  |  | `[static]`

Definition at line 244 of file rpmrc.c.

References _TOPDIRMACRO, addMacro(), alloca(), body(), and RMIL_DEFAULT.

Referenced by setDefaults().

## Variable Documentation

const char* ___build_pre`[static]`

Initial value:

     "\n\
    RPM_SOURCE_DIR=\"%{_sourcedir}\"\n\
    RPM_BUILD_DIR=\"%{_builddir}\"\n\
    RPM_OPT_FLAGS=\"%{optflags}\"\n\
    RPM_ARCH=\"%{_arch}\"\n\
    RPM_OS=\"%{_os}\"\n\
    export RPM_SOURCE_DIR RPM_BUILD_DIR RPM_OPT_FLAGS RPM_ARCH RPM_OS\n\
    RPM_DOC_DIR=\"%{_docdir}\"\n\
    export RPM_DOC_DIR\n\
    RPM_PACKAGE_NAME=\"%{name}\"\n\
    RPM_PACKAGE_VERSION=\"%{version}\"\n\
    RPM_PACKAGE_RELEASE=\"%{release}\"\n\
    export RPM_PACKAGE_NAME RPM_PACKAGE_VERSION RPM_PACKAGE_RELEASE\n\
    %{?buildroot:RPM_BUILD_ROOT=\"%{buildroot}\"\n\
    export RPM_BUILD_ROOT\n}\
    "

Definition at line 259 of file rpmrc.c.

Referenced by setDefaults().

const char* configTarget = NULL`[static]`

Definition at line 24 of file rpmrc.c.

Referenced by defaultMachine(), and rpmReadConfigFiles().

cptr_t current[2]`[static]`

Definition at line 98 of file rpmrc.c.

Referenced by getMachineInfo(), rpmFreeRpmrc(), rpmSetMachine(), and rpmShowRC().

int currTables[2] = { RPM_MACHTABLE_INSTOS, RPM_MACHTABLE_INSTARCH }`[static]`

Definition at line 101 of file rpmrc.c.

Referenced by getMachineInfo(), rebuildCompatTables(), rpmSetMachine(), and rpmSetTables().

int defaultsInitialized = 0`[static]`

Definition at line 104 of file rpmrc.c.

Referenced by rpmFreeRpmrc(), and rpmReadRC().

int nplatpat = 0

Definition at line 31 of file rpmrc.c.

Referenced by rpmFreeRpmrc(), rpmPlatform(), rpmPlatformScore(), and rpmtsAddInstallElement().

const char* platform = SYSCONFIGDIR "/platform"`[static]`

Definition at line 27 of file rpmrc.c.

Referenced by archScore(), defaultMachine(), parseSpec(), platformScore(), and rpmtsAddInstallElement().

void* platpat = NULL

Definition at line 29 of file rpmrc.c.

Referenced by rpmFreeRpmrc(), rpmPlatform(), rpmPlatformScore(), and rpmtsAddInstallElement().

struct tableType_s tables[RPM_MACHTABLE_COUNT]`[static]`

Initial value:

     {
        { "arch", 1, 0 },
        { "os", 1, 0 },
        { "buildarch", 0, 1 },
        { "buildos", 0, 1 }
    }

Definition at line 86 of file rpmrc.c.