rpmds.c File Reference
RPMDS Dependency Set API. | RPMDS Dependency Set API.
`#include "system.h"`
`#include <rpmiotypes.h>`
`#include <rpmio_internal.h>`
`#include <rpmcb.h>`
`#include <rpmmacro.h>`
`#include <argv.h>`
`#include <rpmtypes.h>`
`#include <rpmtag.h>`
`#include <rpmds.h>`
`#include "debug.h"`
Include dependency graph for rpmds.c:

Go to the source code of this file.

## Data Structures

struct | cpuinfo_s
struct | rpmlibProvides_s
struct | conf

## Macros

#define | DT_GNU_HASH 0x6ffffef5
#define | _RPMIOB_INTERNAL
#define | _RPMDS_INTERNAL
#define | _RPMEVR_INTERNAL
#define | _RPMPRCO_INTERNAL
#define | _isspace(_c) ((_c) == ' ' || (_c) == '\t' || (_c) == '\r' || (_c) == '\n')
#define | _PROC_CPUINFO "/proc/cpuinfo"
#define | _ETC_RPM_SYSINFO SYSCONFIGDIR "/sysinfo"
#define | _GETCONF_PATH "/"
#define | _SBIN_LDCONFIG_P "/sbin/ldconfig -p"
#define | _LD_SO_CACHE "/etc/ld.so.cache"
#define | _PERL_PROVIDES "/usr/bin/find /usr/lib/perl5 | /usr/lib/rpm/perl.prov"

## Functions

static const char * | rpmdsTagName (rpmTag tagN)
| Return dependency set type string. More...
const char * | rpmdsType (const rpmds ds)
| Return current dependency type name. More...
static void | rpmdsFini (void *_ds)
static rpmds | rpmdsGetPool (rpmioPool pool)
static const char ** | rpmdsDupArgv (const char **argv, int argc)
rpmds | rpmdsNew (Header h, rpmTag tagN, int flags)
| Create and load a dependency set. More...
const char * | rpmdsNewN (rpmds ds)
| Return N string, expanded if necessary. More...
char * | rpmdsNewDNEVR (const char *dspfx, rpmds ds)
| Return new formatted dependency string. More...
rpmds | rpmdsThis (Header h, rpmTag tagN, evrFlags Flags)
| Create, load and initialize a dependency for this header. More...
rpmds | rpmdsSingle (rpmTag tagN, const char *N, const char *EVR, evrFlags Flags)
| Create, load and initialize a dependency set of size 1. More...
int | rpmdsCount (const rpmds ds)
| Return dependency set count. More...
int | rpmdsIx (const rpmds ds)
| Return dependency set index. More...
int | rpmdsSetIx (rpmds ds, int ix)
| Set dependency set index. More...
const char * | rpmdsDNEVR (const rpmds ds)
| Return current formatted dependency string. More...
const char * | rpmdsN (const rpmds ds)
| Return current dependency name. More...
const char * | rpmdsEVR (const rpmds ds)
| Return current dependency epoch-version-release. More...
evrFlags | rpmdsFlags (const rpmds ds)
| Return current dependency flags. More...
rpmTag | rpmdsTagN (const rpmds ds)
| Return current dependency type. More...
const char * | rpmdsA (const rpmds ds)
| Return current dependency arch. More...
time_t | rpmdsBT (const rpmds ds)
| Return dependency build time. More...
time_t | rpmdsSetBT (const rpmds ds, time_t BT)
| Set dependency build time. More...
nsType | rpmdsNSType (const rpmds ds)
| Return dependency class type. More...
int | rpmdsNoPromote (const rpmds ds)
| Return current "Don't promote Epoch:" flag. More...
int | rpmdsSetNoPromote (rpmds ds, int nopromote)
| Set "Don't promote Epoch:" flag. More...
void * | rpmdsSetEVRparse (rpmds ds, int(*EVRparse)(const char *evrstr, EVR_t evr))
void * | rpmdsSetEVRcmp (rpmds ds, int(*EVRcmp)(const char *a, const char *b))
| Set EVR comparison function. More...
rpmuint32_t | rpmdsColor (const rpmds ds)
| Return current dependency color. More...
rpmuint32_t | rpmdsSetColor (const rpmds ds, rpmuint32_t color)
| Set current dependency color. More...
void * | rpmdsExclude (const rpmds ds)
| Return dependency exclude patterns. More...
int | rpmdsNExclude (const rpmds ds)
| Return no. More...
void * | rpmdsInclude (const rpmds ds)
| Return dependency include patterns. More...
int | rpmdsNInclude (const rpmds ds)
| Return no. More...
rpmuint32_t | rpmdsRefs (const rpmds ds)
| Return current dependency file refs. More...
rpmuint32_t | rpmdsSetRefs (const rpmds ds, rpmuint32_t refs)
| Set current dependency file refs. More...
rpmint32_t | rpmdsResult (const rpmds ds)
| Return current dependency comparison result. More...
rpmint32_t | rpmdsSetResult (const rpmds ds, rpmint32_t result)
| Set current dependency comparison result. More...
void | rpmdsNotify (rpmds ds, const char *where, int rc)
| Notify of results of dependency match. More...
int | rpmdsNext (rpmds ds)
| Return next dependency set iterator index. More...
rpmds | rpmdsInit (rpmds ds)
| Initialize dependency set iterator. More...
static rpmds | rpmdsDup (const rpmds ods)
int | rpmdsFind (rpmds ds, const rpmds ods)
| Find a dependency set element using binary search. More...
int | rpmdsMerge (rpmds *dsp, rpmds ods)
| Merge a dependency set maintaining (N,EVR,Flags) sorted order. More...
int | rpmdsSearch (rpmds ds, rpmds ods)
| Search a sorted dependency set for an element that overlaps. More...
static void | rpmdsNSAdd (rpmds *dsp, const char *NS, const char *N, const char *EVR, evrFlags Flags)
| Merge a single provides, wrapping N as "NS(N)". More...
static int | rpmdsCpuinfoCtagFlags (const char *name)
| Return dependency format to use for a cpuinfo line. More...
int | rpmdsCpuinfo (rpmds *dsp, const char *fn)
| Load /proc/cpuinfo provides into a dependency set. More...
int | rpmdsRpmlib (rpmds *dsp, void *tblp)
| Load rpmlib provides into a dependency set. More...
static int | rpmdsSysinfoFile (rpmPRCO PRCO, const char *fn, int tagN)
| Merge contents of a sysinfo tag file into sysinfo dependencies. More...
int | rpmdsSysinfo (rpmPRCO PRCO, const char *fn)
| Load sysinfo dependencies into a dependency set. More...
int | rpmdsGetconf (rpmds *dsp, const char *path)
| Load getconf provides into a dependency set. More...
int | rpmdsMergePRCO (void *context, rpmds ds)
| Merge provides/requires/conflicts/obsoletes dependencies. More...
rpmPRCO | rpmdsFreePRCO (rpmPRCO PRCO)
| Free dependency set(s) container. More...
rpmPRCO | rpmdsNewPRCO (Header h)
| Create dependency set(s) container. More...
rpmds | rpmdsFromPRCO (rpmPRCO PRCO, rpmTag tagN)
| Retrieve a dependency set from container. More...
int | rpmdsELF (const char *fn, int flags, int(*add)(void *context, rpmds ds), void *context)
| Return a soname dependency constructed from an elf string. More...
int | rpmdsLdconfig (rpmPRCO PRCO, const char *fn)
| Load /etc/ld.so.cache provides into a dependency set. More...
int | rpmdsUname (rpmds *dsp, const struct utsname *un)
int | rpmdsPipe (rpmds *dsp, rpmTag tagN, const char *cmd)
| Load provides from a pipe into a dependency set. More...
static int | rpmdsNAcmp (rpmds A, rpmds B)
static const char * | rpmdsEVRorder (void)
| Return precedence permutation string. More...
int | rpmdsCompare (const rpmds A, const rpmds B)
| Compare two versioned dependency ranges, looking for overlap. More...
int | rpmdsMatch (const rpmds A, rpmds B)
| Compare A against every member of B, looking for 1st match. More...
void | rpmdsProblem (rpmps ps, const char *pkgNEVR, const rpmds ds, const fnpyKey *suggestedKeys, int adding)
| Report a Requires: or Conflicts: dependency problem. More...
int | rpmdsAnyMatchesDep (const Header h, const rpmds req, int nopromote)
| Compare package provides dependencies from header with a single dependency. More...
int | rpmdsNVRMatchesDep (const Header h, const rpmds req, int nopromote)
| Compare package name-version-release from header with a single dependency. More...
int | rpmdsNegateRC (const rpmds ds, int rc)
| Negate return code for negated comparisons. More...

## Variables

static int | _noisy_range_comparison_debug_message = 0
| Enable noisy range comparison debugging message? More...
int | _rpmds_debug = 0
int | _rpmds_nopromote = 1
int | _rpmds_unspecified_epoch_noise = 0
rpmioPool | _rpmdsPool
static struct cpuinfo_s | ctags []
const char * | _cpuinfo_path = NULL
static struct rpmlibProvides_s | rpmlibProvides []
const char * | _sysinfo_path = NULL
static const char * | _sysinfo_tags []
static struct conf | vars []
static const char * | _getconf_path = NULL
static const char * | _ldconfig_cmd = "/sbin/ldconfig -p"
static const char * | _ldconfig_cache = NULL
static const char * | _perldeps_cmd = NULL
const char * | evr_tuple_order = NULL

## Macro Definition Documentation

#define _ETC_RPM_SYSINFO SYSCONFIGDIR "/sysinfo"

Definition at line 1680 of file rpmds.c.

Referenced by rpmdsSysinfo().

#define _GETCONF_PATH "/"

Definition at line 2653 of file rpmds.c.

Referenced by rpmdsGetconf().

#define _isspace | ( |  | _c | ) | ((_c) == ' ' || (_c) == '\t' || (_c) == '\r' || (_c) == '\n')

Definition at line 105 of file rpmds.c.

Referenced by rpmdsCpuinfo(), rpmdsLdconfig(), rpmdsPipe(), and rpmdsSysinfoFile().

#define _LD_SO_CACHE "/etc/ld.so.cache"

Definition at line 3174 of file rpmds.c.

Referenced by rpmdsLdconfig().

#define _PERL_PROVIDES "/usr/bin/find /usr/lib/perl5 | /usr/lib/rpm/perl.prov"

Definition at line 3522 of file rpmds.c.

Referenced by rpmdsPipe().

#define _PROC_CPUINFO "/proc/cpuinfo"

Definition at line 1287 of file rpmds.c.

Referenced by rpmdsCpuinfo().

#define _RPMDS_INTERNAL

Definition at line 95 of file rpmds.c.

#define _RPMEVR_INTERNAL

Definition at line 96 of file rpmds.c.

#define _RPMIOB_INTERNAL

Definition at line 85 of file rpmds.c.

#define _RPMPRCO_INTERNAL

Definition at line 97 of file rpmds.c.

#define _SBIN_LDCONFIG_P "/sbin/ldconfig -p"

Definition at line 3170 of file rpmds.c.

Referenced by rpmdsLdconfig().

#define DT_GNU_HASH 0x6ffffef5

Definition at line 82 of file rpmds.c.

Referenced by rpmdsELF().

## Function Documentation

static int rpmdsCpuinfoCtagFlags | ( | const char * | name | ) |

static

Return dependency format to use for a cpuinfo line.

Parameters

  name | field name

Returns
  type of format (0 == ignore, -1 == not found)

Definition at line 1268 of file rpmds.c.

References cpuinfo_s::done, cpuinfo_s::flags, and cpuinfo_s::name.

Referenced by rpmdsCpuinfo().

static rpmds rpmdsDup | ( | const rpmds | ods | ) |

static

Definition at line 941 of file rpmds.c.

References headerLink(), rpmdsDupArgv(), rpmdsGetPool(), rpmdsLink(), and xmalloc().

Referenced by rpmdsMerge().

static const char** rpmdsDupArgv | ( | const char ** | argv,
|  | int | argc
| ) |  |

static

Definition at line 200 of file rpmds.c.

References stpcpy(), and xmalloc().

Referenced by rpmdsDup(), rpmdsMerge(), and rpmdsNew().

static const char* rpmdsEVRorder | ( | void |  | ) |

static

Return precedence permutation string.

Returns
  precedence permutation

Definition at line 3692 of file rpmds.c.

References evr_tuple_order, rpmExpand(), and xstrdup().

Referenced by rpmdsCompare().

static void rpmdsFini | ( | void * | _ds | ) |

static

Definition at line 159 of file rpmds.c.

References _free(), headerFree(), and mireFreeAll().

Referenced by rpmdsGetPool().

static rpmds rpmdsGetPool | ( | rpmioPool | pool | ) |

static

Definition at line 185 of file rpmds.c.

References _rpmdsPool, rpmdsFini(), rpmioGetPool(), and rpmioNewPool().

Referenced by rpmdsDup(), rpmdsNew(), rpmdsSingle(), and rpmdsThis().

static int rpmdsNAcmp | ( | rpmds | A,
|  | rpmds | B
| ) |  |

static

Definition at line 3659 of file rpmds.c.

Referenced by rpmdsCompare().

static void rpmdsNSAdd | ( | rpmds * | dsp,
|  | const char * | NS,
|  | const char * | N,
|  | const char * | EVR,
|  | evrFlags | Flags
| ) |  |

static

Merge a single provides, wrapping N as "NS(N)".

Return values

  *dsp | (loaded) dependency set

Parameters

  NS | dependency name space
  N | name
  EVR | epoch:version-release
  Flags | comparison/context flags

Definition at line 1164 of file rpmds.c.

References alloca(), rpmdsFree(), rpmdsMerge(), rpmdsSingle(), RPMTAG_PROVIDENAME, and stpcpy().

Referenced by rpmdsCpuinfo(), rpmdsGetconf(), and rpmdsUname().

void* rpmdsSetEVRparse | ( | rpmds | ds,
|  | int(*)(const char *evrstr, EVR_t evr) | EVRparse
| ) |  |

Definition at line 753 of file rpmds.c.

static int rpmdsSysinfoFile | ( | rpmPRCO | PRCO,
|  | const char * | fn,
|  | int | tagN
| ) |  |

static

Merge contents of a sysinfo tag file into sysinfo dependencies.

Return values

  *PRCO | provides/requires/conflicts/obsoletes depedency set(s)

Parameters

  fn | path to file
  tagN | dependency set tag

Returns
  0 on success

Definition at line 1556 of file rpmds.c.

References _, _isspace, Fclose(), fdGetFILE, Ferror(), Fopen(), rpmdsFree(), rpmdsMergePRCO(), rpmdsSingle(), rpmEVRflags(), RPMTAG_DIRNAMES, RPMTAG_FILELINKTOS, RPMTAG_PROVIDENAME, and xisalnum().

Referenced by rpmdsSysinfo().

static const char* rpmdsTagName | ( | rpmTag | tagN | ) |

static

Return dependency set type string.

Parameters

  tagN | dependency set tag

Returns
  dependency set type string

Definition at line 131 of file rpmds.c.

References RPMTAG_BASENAMES, RPMTAG_CONFLICTNAME, RPMTAG_DIRNAMES, RPMTAG_ENHANCESNAME, RPMTAG_FILELINKTOS, RPMTAG_OBSOLETENAME, RPMTAG_PROVIDENAME, RPMTAG_REQUIRENAME, RPMTAG_SUGGESTSNAME, RPMTAG_TRIGGERNAME, and tagName().

Referenced by rpmdsMergePRCO(), rpmdsNew(), rpmdsNotify(), rpmdsSingle(), rpmdsThis(), and rpmdsType().

int rpmdsUname | ( | rpmds * | dsp,
|  | const struct utsname * | un
| ) |  |

Definition at line 3482 of file rpmds.c.

References rpmdsNSAdd(), and RPMSENSE_EQUAL.

Referenced by main(), rpmds_Uname(), rpmShowRC(), and unsatisfiedDepend().

## Variable Documentation

const char* _cpuinfo_path = NULL

Definition at line 1291 of file rpmds.c.

Referenced by rpmdsCpuinfo().

const char* _getconf_path = NULL

static

Definition at line 2655 of file rpmds.c.

Referenced by rpmdsGetconf().

const char* _ldconfig_cache = NULL

static

Definition at line 3176 of file rpmds.c.

Referenced by rpmdsLdconfig().

const char* _ldconfig_cmd = "/sbin/ldconfig -p"

static

Definition at line 3172 of file rpmds.c.

int _noisy_range_comparison_debug_message = 0

static

Enable noisy range comparison debugging message?

Definition at line 112 of file rpmds.c.

const char* _perldeps_cmd = NULL

static

Definition at line 3524 of file rpmds.c.

Referenced by rpmdsPipe().

int _rpmds_unspecified_epoch_noise = 0

Definition at line 122 of file rpmds.c.

Referenced by showVerifyPackage().

rpmioPool _rpmdsPool

Definition at line 183 of file rpmds.c.

Referenced by rpmdsGetPool().

const char* _sysinfo_tags[]

static

Initial value:
= {
"Providename",
"Requirename",
"Conflictname",
"Obsoletename",
"Dirnames",
"Filelinktos",
NULL
}

Definition at line 1688 of file rpmds.c.

struct cpuinfo_s ctags[]

static

Initial value:
= {
{ "processor", 0, 0 },
{ "vendor_id", 0, 0 },
{ "cpu_family", 0, 1 },
{ "model", 0, 1 },
{ "model_name", 0, 0 },
{ "stepping", 0, 1 },
{ "cpu_MHz", 0, 1 },
{ "cache_size", 0, 1 },
{ "physical_id", 0, 0 },
{ "siblings", 0, 0 },
{ "core_id", 0, 0 },
{ "cpu_cores", 0, 0 },
{ "fdiv_bug", 0, 3 },
{ "hlt_bug", 0, 3 },
{ "f00f_bug", 0, 3 },
{ "coma_bug", 0, 3 },
{ "fpu", 0, 0 },
{ "fpu_exception", 0, 3 },
{ "cpuid_level", 0, 0 },
{ "wp", 0, 3 },
{ "flags", 0, 4 },
{ "bogomips", 0, 1 },
{ "clflush_size", 0, 1 },
{ NULL, 0, -1 }
}

Definition at line 1236 of file rpmds.c.

const char* evr_tuple_order = NULL

Definition at line 3685 of file rpmds.c.

Referenced by rpmcliFini(), rpmdsEVRorder(), and rpmEVRorder().

struct rpmlibProvides_s rpmlibProvides[]

static

Definition at line 1429 of file rpmds.c.

Referenced by rpmdsRpmlib().

struct conf vars[]

static

Definition at line 1765 of file rpmds.c.