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

lib/depends.c File Reference

More...

#include "system.h"
#include <rpmlib.h>
#include "depends.h"
#include "rpmdb.h"
#include "misc.h"
#include "debug.h"

Go to the source code of this file.

Compounds

struct  badDeps_s
struct  orderListIndex

RPMTS

int rpmRangesOverlap (const char *AName, const char *AEVR, int AFlags, const char *BName, const char *BEVR, int BFlags)
rpmTransactionSet rpmtransCreateSet (rpmdb rpmdb, const char *rootDir)
int rpmtransAddPackage (rpmTransactionSet ts, Header h, FD_t fd, const void *key, int upgrade, rpmRelocation *relocs)
void rpmtransAvailablePackage (rpmTransactionSet ts, Header h, const void *key)
void rpmtransRemovePackage (rpmTransactionSet ts, int dboffset)
void rpmtransFree (rpmTransactionSet ts)
void rpmdepFreeConflicts (struct rpmDependencyConflict *conflicts, int numConflicts)
int rpmdepOrder (rpmTransactionSet ts)
int rpmdepCheck (rpmTransactionSet ts, struct rpmDependencyConflict **conflicts, int *numConflicts)

Defines

#define DEPENDENCY_WHITEOUT

Typedefs

typedef int (* dbrecMatch_t )(Header h, const char *reqName, const char *reqEVR, int reqFlags)

Functions

int headerNVR (Header h, const char **np, const char **vp, const char **rp)
char* printDepend (const char *depend, const char *key, const char *keyEVR, int keyFlags)
 Return formatted dependency string. More...

void alFreeIndex (struct availableList *al)
 Destroy available item index. More...

void alCreate (struct availableList *al)
 Initialize available packckages, items, and directories list. More...

void alFree (struct availableList *al)
 Free available packages, items, and directories members. More...

int dirInfoCompare (const void *one, const void *two)
 Compare two directory info entries by name (qsort/bsearch). More...

struct availablePackagealAddPackage (struct availableList *al, Header h, const void *key, FD_t fd, rpmRelocation *relocs)
 Add package to available list. More...

int indexcmp (const void *one, const void *two)
 Compare two available index entries by name (qsort/bsearch). More...

void alMakeIndex (struct availableList *al)
 Generate index for available list. More...

int intcmp (const void *a, const void *b)
 Compare removed package instances (qsort/bsearch). More...

void parseEVR (char *evr, const char **ep, const char **vp, const char **rp)
 Split EVR into epoch, version, and release components. More...

int rangeMatchesDepFlags (Header h, const char *reqName, const char *reqEVR, int reqFlags)
int headerMatchesDepFlags (Header h, const char *reqName, const char *reqEVR, int reqFlags)
 Compare package name-version-release from header with dependency, looking for overlap. More...

void removePackage (rpmTransactionSet ts, int dboffset, int depends)
 Add removed package instance to ordered transaction set. More...

struct availablePackagealFileSatisfiesDepend (struct availableList *al, const char *keyType, const char *fileName)
 Check added package file lists for a file. More...

struct availablePackagealSatisfiesDepend (struct availableList *al, const char *keyType, const char *keyDepend, const char *keyName, const char *keyEVR, int keyFlags)
 Check added package file lists for a provide. More...

int unsatisfiedDepend (rpmTransactionSet ts, const char *keyType, const char *keyDepend, const char *keyName, const char *keyEVR, int keyFlags, struct availablePackage **suggestion)
 Check key for an unsatisfied dependency. More...

int checkPackageDeps (rpmTransactionSet ts, struct problemsSet *psp, Header h, const char *keyName, uint_32 multiLib)
int checkPackageSet (rpmTransactionSet ts, struct problemsSet *psp, const char *key, rpmdbMatchIterator mi)
 Adding: check name/provides key against each conflict match, Erasing: check name/provides/filename key against each requiredby match.

int checkDependentPackages (rpmTransactionSet ts, struct problemsSet *psp, const char *key)
 Erasing: check name/provides/filename key against requiredby matches.

int checkDependentConflicts (rpmTransactionSet ts, struct problemsSet *psp, const char *key)
 Adding: check name/provides key against conflicts matches.

int ignoreDep (struct availablePackage *p, struct availablePackage *q)
void markLoop (struct tsortInfo *tsi, struct availablePackage *q)
 Recursively mark all nodes with their predecessors. More...

const char* identifyDepend (int_32 f)
const char* zapRelation (struct availablePackage *q, struct availablePackage *p, int zap, int *nzaps)
 Find (and eliminate co-requisites) "q <- p" relation in dependency loop. More...

int addRelation (const rpmTransactionSet ts, struct availablePackage *p, unsigned char *selected, int j)
 Record next "q <- p" relation (i.e. More...

int orderListIndexCmp (const void *one, const void *two)
 Compare ordered list entries by index (qsort/bsearch). More...

void addQ (struct availablePackage *p, struct availablePackage **qp, struct availablePackage **rp)
 Add element to list sorting by initial successor count. More...


Variables

int _depends_debug = 0
const char* rpmNAME = PACKAGE
const char* rpmEVR = VERSION
int rpmFLAGS = RPMSENSE_EQUAL
struct badDeps_s  badDeps []


Detailed Description

Definition in file depends.c.


Define Documentation

#define DEPENDENCY_WHITEOUT
 

Value:

Definition at line 1399 of file depends.c.


Typedef Documentation

typedef int (* dbrecMatch_t)(Header h, const char *reqName, const char * reqEVR, int reqFlags)
 

Definition at line 600 of file depends.c.


Function Documentation

void addQ ( struct availablePackage * p,
struct availablePackage ** qp,
struct availablePackage ** rp ) [static]
 

Add element to list sorting by initial successor count.

Parameters:
p   new element
Return values:
qp   address of first element
rp   address of last element

Definition at line 1607 of file depends.c.

Referenced by rpmdepOrder().

int addRelation ( const rpmTransactionSet ts,
struct availablePackage * p,
unsigned char * selected,
int j ) [inline, static]
 

Record next "q <- p" relation (i.e.

"p" requires "q").

Parameters:
ts   transaction set
p   predecessor (i.e. package that "Requires: q")
selected   boolean package selected array
j   relation index
Returns:
0 always

Definition at line 1546 of file depends.c.

Referenced by rpmdepOrder().

struct availablePackage* alAddPackage ( struct availableList * al,
Header h,
const void * key,
FD_t fd,
rpmRelocation * relocs ) [static]
 

Add package to available list.

Parameters:
al   available list
h   package header
key   package private data
fd   package file handle
relocs   package file relocations
Returns:
available package pointer

Definition at line 229 of file depends.c.

Referenced by rpmtransAddPackage(), and rpmtransAvailablePackage().

void alCreate ( struct availableList * al ) [static]
 

Initialize available packckages, items, and directories list.

Parameters:
al   available list

Definition at line 134 of file depends.c.

Referenced by rpmtransCreateSet().

struct availablePackage* alFileSatisfiesDepend ( struct availableList * al,
const char * keyType,
const char * fileName ) [static]
 

Check added package file lists for a file.

Parameters:
al   available list
keyType   type of dependency
fileName   file name to search for
Returns:
available package pointer

Definition at line 910 of file depends.c.

Referenced by alSatisfiesDepend().

void alFree ( struct availableList * al ) [static]
 

Free available packages, items, and directories members.

Parameters:
al   available list

Definition at line 152 of file depends.c.

Referenced by rpmtransFree().

void alFreeIndex ( struct availableList * al ) [static]
 

Destroy available item index.

Parameters:
al   available list

Definition at line 119 of file depends.c.

Referenced by alAddPackage(), and alFree().

void alMakeIndex ( struct availableList * al ) [static]
 

Generate index for available list.

Parameters:
al   available list

Definition at line 427 of file depends.c.

Referenced by rpmdepCheck(), and rpmdepOrder().

struct availablePackage* alSatisfiesDepend ( struct availableList * al,
const char * keyType,
const char * keyDepend,
const char * keyName,
const char * keyEVR,
int keyFlags ) [static]
 

Check added package file lists for a provide.

Parameters:
al   available list
keyType   type of dependency
keyDepend   dependency string representation
keyName   dependency name string
keyEVR   dependency [epoch:]version[-release] string
keyFlags   dependency logical range qualifiers
Returns:
available package pointer

Definition at line 968 of file depends.c.

Referenced by addRelation(), and unsatisfiedDepend().

int checkDependentConflicts ( rpmTransactionSet ts,
struct problemsSet * psp,
const char * key ) [static]
 

Adding: check name/provides key against conflicts matches.

Definition at line 1381 of file depends.c.

Referenced by rpmdepCheck().

int checkDependentPackages ( rpmTransactionSet ts,
struct problemsSet * psp,
const char * key ) [static]
 

Erasing: check name/provides/filename key against requiredby matches.

Definition at line 1370 of file depends.c.

Referenced by rpmdepCheck().

int checkPackageDeps ( rpmTransactionSet ts,
struct problemsSet * psp,
Header h,
const char * keyName,
uint_32 multiLib ) [static]
 

Definition at line 1190 of file depends.c.

Referenced by checkPackageSet(), and rpmdepCheck().

int checkPackageSet ( rpmTransactionSet ts,
struct problemsSet * psp,
const char * key,
rpmdbMatchIterator mi ) [static]
 

Adding: check name/provides key against each conflict match, Erasing: check name/provides/filename key against each requiredby match.

Definition at line 1349 of file depends.c.

Referenced by checkDependentConflicts(), and checkDependentPackages().

int dirInfoCompare ( const void * one,
const void * two ) [static]
 

Compare two directory info entries by name (qsort/bsearch).

Parameters:
one   1st directory info
two   2nd directory info
Returns:
result of comparison

Definition at line 207 of file depends.c.

int headerMatchesDepFlags ( Header h,
const char * reqName,
const char * reqEVR,
int reqFlags )
 

Compare package name-version-release from header with dependency, looking for overlap.

Deprecated:
Remove from API when obsoletes is correctly eliminated.
Parameters:
h   header
reqName   dependency name
reqEVR   dependency [epoch:]version[-release]
reqFlags   dependency logical range qualifiers
Returns:
1 if dependency overlaps, 0 otherwise

Definition at line 654 of file depends.c.

const char* identifyDepend ( int_32 f ) [inline, static]
 

Definition at line 1459 of file depends.c.

Referenced by zapRelation().

int ignoreDep ( struct availablePackage * p,
struct availablePackage * q ) [static]
 

Definition at line 1428 of file depends.c.

Referenced by addRelation().

int indexcmp ( const void * one,
const void * two ) [static]
 

Compare two available index entries by name (qsort/bsearch).

Parameters:
one   1st available index entry
two   2nd available index entry
Returns:
result of comparison

Definition at line 411 of file depends.c.

int intcmp ( const void * a,
const void * b ) [static]
 

Compare removed package instances (qsort/bsearch).

Parameters:
a   1st instance address
b   2nd instance address
Returns:
result of comparison

Definition at line 470 of file depends.c.

void markLoop ( struct tsortInfo * tsi,
struct availablePackage * q ) [static]
 

Recursively mark all nodes with their predecessors.

Parameters:
tsi   successor chain
q   predecessor

Definition at line 1445 of file depends.c.

Referenced by rpmdepOrder().

int orderListIndexCmp ( const void * one,
const void * two ) [static]
 

Compare ordered list entries by index (qsort/bsearch).

Parameters:
a   1st ordered list entry
b   2nd ordered list entry
Returns:
result of comparison

Definition at line 1594 of file depends.c.

void parseEVR ( char * evr,
const char ** ep,
const char ** vp,
const char ** rp ) [static]
 

Split EVR into epoch, version, and release components.

Parameters:
evr   [epoch:]version[-release] string
Return values:
ep   pointer to epoch
vp   pointer to version
rp   pointer to release

Definition at line 485 of file depends.c.

Referenced by rpmRangesOverlap().

char* printDepend ( const char * depend,
const char * key,
const char * keyEVR,
int keyFlags ) [static]
 

Return formatted dependency string.

Parameters:
depend   type of dependency ("R" == Requires, "C" == Conflcts)
key   dependency name string
keyEVR   dependency [epoch:]version[-release] string
keyFlags   dependency logical range qualifiers
Returns:
formatted dependency (malloc'ed)

Definition at line 51 of file depends.c.

Referenced by checkPackageDeps(), rpmRangesOverlap(), and zapRelation().

int rangeMatchesDepFlags ( Header h,
const char * reqName,
const char * reqEVR,
int reqFlags ) [static]
 

Definition at line 602 of file depends.c.

Referenced by unsatisfiedDepend().

void removePackage ( rpmTransactionSet ts,
int dboffset,
int depends ) [static]
 

Add removed package instance to ordered transaction set.

Parameters:
ts   transaction set
dboffset   rpm database instance
depends   installed package of pair (or -1 on erase)

Definition at line 732 of file depends.c.

Referenced by rpmtransAddPackage(), and rpmtransRemovePackage().

int unsatisfiedDepend ( rpmTransactionSet ts,
const char * keyType,
const char * keyDepend,
const char * keyName,
const char * keyEVR,
int keyFlags,
struct availablePackage ** suggestion ) [static]
 

Check key for an unsatisfied dependency.

Parameters:
al   available list
keyType   type of dependency
keyDepend   dependency string representation
keyName   dependency name string
keyEVR   dependency [epoch:]version[-release] string
keyFlags   dependency logical range qualifiers
Return values:
suggestion   possible package to resolve dependency
Returns:
0 if satisfied, 1 if not satisfied, 2 if error

Definition at line 1030 of file depends.c.

Referenced by checkPackageDeps().

const char* zapRelation ( struct availablePackage * q,
struct availablePackage * p,
int zap,
int * nzaps ) [static]
 

Find (and eliminate co-requisites) "q <- p" relation in dependency loop.

Search all successors of q for instance of p. Format the specific relation, (e.g. p contains "Requires: q"). Unlink and free co-requisite (i.e. pure Requires: dependencies) successor node(s).

Parameters:
q   sucessor (i.e. package required by p)
p   predecessor (i.e. package that "Requires: q")
zap   max. no. of co-requisites to remove (-1 is all)?
Return values:
nzaps   address of no. of relations removed
Returns:
(possibly NULL) formatted "q <- p" releation (malloc'ed)

Definition at line 1490 of file depends.c.

Referenced by rpmdepOrder().


Variable Documentation

int _depends_debug = 0
 

Definition at line 5 of file depends.c.

struct badDeps_s badDeps[] [static]
 

const char* rpmEVR = VERSION
 

Definition at line 521 of file depends.c.

int rpmFLAGS = RPMSENSE_EQUAL
 

Definition at line 522 of file depends.c.

const char* rpmNAME = PACKAGE
 

Definition at line 520 of file depends.c.


Generated at Mon May 21 08:53:41 2001 for rpm by doxygen1.2.6 written by Dimitri van Heesch, © 1997-2001