Main Page   Modules   Data Structures   File List   Data Fields   Globals   Related Pages  

lib/depends.c File Reference

More...

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

Go to the source code of this file.

Data Structures

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)
int rpmtransRemovePackage (rpmTransactionSet ts, int dboffset)
rpmTransactionSet rpmtransFree (rpmTransactionSet ts)
rpmDependencyConflict rpmdepFreeConflicts (rpmDependencyConflict conflicts, int numConflicts)
int rpmdepOrder (rpmTransactionSet ts)
int rpmdepCheck (rpmTransactionSet ts, 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 (availableList al)
 Destroy available item index. More...

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

void alFree (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 (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 (availableList al)
 Generate index for available list. 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)
int intcmp (const void *a, const void *b)
 Compare removed package instances (qsort/bsearch). More...

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

struct availablePackage** alAllFileSatisfiesDepend (const availableList al, const char *keyType, const char *fileName)
 Check added package file lists for package(s) that provide a file. More...

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

struct availablePackagealSatisfiesDepend (const availableList al, const char *keyType, const char *keyDepend, const char *keyName, const char *keyEVR, int keyFlags)
 Check added package file lists for first package that has 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, problemsSet psp, Header h, const char *keyName, uint_32 multiLib)
 Check header requires/conflicts against against installed+added packages. More...

int checkPackageSet (rpmTransactionSet ts, problemsSet psp, const char *key, rpmdbMatchIterator mi)
 Check dependency against installed packages. More...

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

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

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

const char* const 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 1618 of file depends.c.


Typedef Documentation

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

Definition at line 601 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 1845 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 1777 of file depends.c.

Referenced by rpmdepOrder().

struct availablePackage * alAddPackage ( 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 238 of file depends.c.

Referenced by rpmtransAddPackage(), and rpmtransAvailablePackage().

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

Check added package file lists for package(s) that provide a file.

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

Definition at line 958 of file depends.c.

Referenced by alAllSatisfiesDepend().

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

Check added package file lists for package(s) that have 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 1073 of file depends.c.

Referenced by unsatisfiedDepend().

void alCreate ( availableList al ) [static]
 

Initialize available packckages, items, and directories list.

Parameters:
al   available list

Definition at line 141 of file depends.c.

Referenced by rpmtransCreateSet().

void alFree ( availableList al ) [static]
 

Free available packages, items, and directories members.

Parameters:
al   available list

Definition at line 159 of file depends.c.

Referenced by rpmtransFree().

void alFreeIndex ( availableList al ) [static]
 

Destroy available item index.

Parameters:
al   available list

Definition at line 128 of file depends.c.

Referenced by alAddPackage(), and alFree().

void alMakeIndex ( availableList al ) [static]
 

Generate index for available list.

Parameters:
al   available list

Definition at line 440 of file depends.c.

Referenced by rpmdepCheck(), and rpmdepOrder().

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

Check added package file lists for first package that has a provide.

Todo:
Eliminate.
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 1158 of file depends.c.

Referenced by addRelation(), and unsatisfiedDepend().

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

Adding: check name/provides key against conflicts matches.

Parameters:
ts   transaction set
psp   dependency problems
key   conflicts name
Returns:
0 no problems found

Definition at line 1599 of file depends.c.

Referenced by rpmdepCheck().

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

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

Parameters:
ts   transaction set
psp   dependency problems
key   requires name
Returns:
0 no problems found

Definition at line 1583 of file depends.c.

Referenced by rpmdepCheck().

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

Check header requires/conflicts against against installed+added packages.

Parameters:
ts   transaction set
psp   dependency problems
h   header to check
keyName   dependency name
multiLib   skip multilib colored dependencies?
Returns:
0 no problems found

Definition at line 1371 of file depends.c.

Referenced by checkPackageSet(), and rpmdepCheck().

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

Check dependency against installed packages.

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

Parameters:
ts   transaction set
psp   dependency problems
key   dependency name
mi   rpm database iterator
Returns:
0 no problems found

Definition at line 1556 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 215 of file depends.c.

Referenced by alAllFileSatisfiesDepend().

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

Definition at line 1687 of file depends.c.

Referenced by zapRelation().

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

Definition at line 1650 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 424 of file depends.c.

Referenced by alAllSatisfiesDepend().

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 743 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 1670 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 1832 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 484 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 59 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 604 of file depends.c.

Referenced by unsatisfiedDepend().

int 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)
Returns:
0 on success

Definition at line 758 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.

Todo:
Eliminate rpmrc provides.
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(s) to resolve dependency
Returns:
0 if satisfied, 1 if not satisfied, 2 if error

Definition at line 1187 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 1719 of file depends.c.

Referenced by rpmdepOrder().


Variable Documentation

int _depends_debug = 0
 

Definition at line 6 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 Thu Sep 6 11:25:45 2001 for rpm by doxygen1.2.8.1 written by Dimitri van Heesch, © 1997-2001