solver.h File Reference

#include "pooltypes.h"
#include "pool.h"
#include "repo.h"
#include "queue.h"
#include "bitmap.h"
#include "transaction.h"
#include "rules.h"
#include "problems.h"

Go to the source code of this file.

Classes

struct  _Solver

Defines

#define SOLVER_SOLVABLE   0x01
#define SOLVER_SOLVABLE_NAME   0x02
#define SOLVER_SOLVABLE_PROVIDES   0x03
#define SOLVER_SOLVABLE_ONE_OF   0x04
#define SOLVER_SOLVABLE_REPO   0x05
#define SOLVER_SELECTMASK   0xff
#define SOLVER_NOOP   0x0000
#define SOLVER_INSTALL   0x0100
#define SOLVER_ERASE   0x0200
#define SOLVER_UPDATE   0x0300
#define SOLVER_WEAKENDEPS   0x0400
#define SOLVER_NOOBSOLETES   0x0500
#define SOLVER_LOCK   0x0600
#define SOLVER_DISTUPGRADE   0x0700
#define SOLVER_VERIFY   0x0800
#define SOLVER_DROP_ORPHANED   0x0900
#define SOLVER_JOBMASK   0xff00
#define SOLVER_WEAK   0x010000
#define SOLVER_ESSENTIAL   0x020000
#define SOLVER_INSTALL_SOLVABLE   (SOLVER_INSTALL|SOLVER_SOLVABLE)
#define SOLVER_ERASE_SOLVABLE   (SOLVER_ERASE|SOLVER_SOLVABLE)
#define SOLVER_INSTALL_SOLVABLE_NAME   (SOLVER_INSTALL|SOLVER_SOLVABLE_NAME)
#define SOLVER_ERASE_SOLVABLE_NAME   (SOLVER_ERASE|SOLVER_SOLVABLE_NAME)
#define SOLVER_INSTALL_SOLVABLE_PROVIDES   (SOLVER_INSTALL|SOLVER_SOLVABLE_PROVIDES)
#define SOLVER_ERASE_SOLVABLE_PROVIDES   (SOLVER_ERASE|SOLVER_SOLVABLE_PROVIDES)
#define SOLVER_INSTALL_SOLVABLE_UPDATE   (SOLVER_UPDATE|SOLVER_SOLVABLE)
#define SOLVER_INSTALL_SOLVABLE_ONE_OF   (SOLVER_INSTALL|SOLVER_SOLVABLE_ONE_OF)
#define SOLVER_WEAKEN_SOLVABLE_DEPS   (SOLVER_WEAKENDEPS|SOLVER_SOLVABLE)
#define SOLVER_NOOBSOLETES_SOLVABLE   (SOLVER_NOOBSOLETES|SOLVER_SOLVABLE)
#define SOLVER_NOOBSOLETES_SOLVABLE_NAME   (SOLVER_NOOBSOLETES|SOLVER_SOLVABLE_NAME)
#define SOLVER_NOOBSOLETES_SOLVABLE_PROVIDES   (SOLVER_NOOBSOLETES|SOLVER_SOLVABLE_PROVIDES)
#define SOLVER_PROBLEM_UPDATE_RULE   SOLVER_RULE_UPDATE
#define SOLVER_PROBLEM_JOB_RULE   SOLVER_RULE_JOB
#define SOLVER_PROBLEM_JOB_NOTHING_PROVIDES_DEP   SOLVER_RULE_JOB_NOTHING_PROVIDES_DEP
#define SOLVER_PROBLEM_NOT_INSTALLABLE   SOLVER_RULE_RPM_NOT_INSTALLABLE
#define SOLVER_PROBLEM_NOTHING_PROVIDES_DEP   SOLVER_RULE_RPM_NOTHING_PROVIDES_DEP
#define SOLVER_PROBLEM_SAME_NAME   SOLVER_RULE_RPM_SAME_NAME
#define SOLVER_PROBLEM_PACKAGE_CONFLICT   SOLVER_RULE_RPM_PACKAGE_CONFLICT
#define SOLVER_PROBLEM_PACKAGE_OBSOLETES   SOLVER_RULE_RPM_PACKAGE_OBSOLETES
#define SOLVER_PROBLEM_DEP_PROVIDERS_NOT_INSTALLABLE   SOLVER_RULE_RPM_PACKAGE_REQUIRES
#define SOLVER_PROBLEM_SELF_CONFLICT   SOLVER_RULE_RPM_SELF_CONFLICT
#define SOLVER_PROBLEM_RPM_RULE   SOLVER_RULE_RPM
#define SOLVER_PROBLEM_DISTUPGRADE_RULE   SOLVER_RULE_DISTUPGRADE
#define SOLVER_PROBLEM_INFARCH_RULE   SOLVER_RULE_INFARCH
#define FOR_RULELITERALS(l, dp, r)
#define FOR_JOB_SELECT(p, pp, select, what)

Typedefs

typedef void(* BestSolvableCb )(Pool *pool, Queue *canditates)
typedef int(* ArchCheckCb )(Pool *pool, Solvable *solvable1, Solvable *solvable2)
typedef int(* VendorCheckCb )(Pool *pool, Solvable *solvable1, Solvable *solvable2)
typedef void(* UpdateCandidateCb )(Pool *pool, Solvable *solvable, Queue *canditates)
typedef struct _Solver Solver

Functions

Solversolver_create (Pool *pool)
void solver_free (Solver *solv)
void solver_solve (Solver *solv, Queue *job)
void solver_run_sat (Solver *solv, int disablerules, int doweak)
void solver_reset (Solver *solv)
int solver_dep_installed (Solver *solv, Id dep)
int solver_splitprovides (Solver *solv, Id dep)
void solver_calculate_noobsmap (Pool *pool, Queue *job, Map *noobsmap)
SolverRuleinfo solver_problemruleinfo (Solver *solv, Queue *job, Id rid, Id *depp, Id *sourcep, Id *targetp)
Idsolver_create_decisions_obsoletesmap (Solver *solv)
static int solver_dep_fulfilled (Solver *solv, Id dep)
static int solver_is_supplementing (Solver *solv, Solvable *s)
static int solver_is_enhancing (Solver *solv, Solvable *s)
void solver_calc_duchanges (Solver *solv, DUChanges *mps, int nmps)
int solver_calc_installsizechange (Solver *solv)
void solver_trivial_installable (Solver *solv, Queue *pkgs, Queue *res)
void solver_find_involved (Solver *solv, Queue *installedq, Solvable *s, Queue *q)
static void solver_create_state_maps (Solver *solv, Map *installedmap, Map *conflictsmap)


Define Documentation

#define SOLVER_SOLVABLE   0x01

#define SOLVER_SOLVABLE_NAME   0x02

Definition at line 217 of file solver.h.

Referenced by jobtodisablelist(), and solver_select2str().

#define SOLVER_SOLVABLE_PROVIDES   0x03

Definition at line 218 of file solver.h.

Referenced by jobtodisablelist(), solver_printsolution(), and solver_select2str().

#define SOLVER_SOLVABLE_ONE_OF   0x04

Definition at line 219 of file solver.h.

Referenced by solver_ruleinfo(), and solver_select2str().

#define SOLVER_SOLVABLE_REPO   0x05

Definition at line 220 of file solver.h.

Referenced by solver_createdupmaps(), and solver_select2str().

#define SOLVER_SELECTMASK   0xff

#define SOLVER_NOOP   0x0000

Definition at line 224 of file solver.h.

Referenced by solver_take_solutionelement().

#define SOLVER_INSTALL   0x0100

#define SOLVER_ERASE   0x0200

#define SOLVER_UPDATE   0x0300

Definition at line 227 of file solver.h.

Referenced by solver_printsolution(), and solver_solve().

#define SOLVER_WEAKENDEPS   0x0400

Definition at line 228 of file solver.h.

Referenced by solver_solve().

#define SOLVER_NOOBSOLETES   0x0500

Definition at line 229 of file solver.h.

Referenced by solver_calculate_noobsmap(), and solver_solve().

#define SOLVER_LOCK   0x0600

Definition at line 230 of file solver.h.

Referenced by solver_printsolution(), and solver_solve().

#define SOLVER_DISTUPGRADE   0x0700

Definition at line 231 of file solver.h.

Referenced by solver_createdupmaps(), and solver_solve().

#define SOLVER_VERIFY   0x0800

Definition at line 232 of file solver.h.

Referenced by solver_solve().

#define SOLVER_DROP_ORPHANED   0x0900

Definition at line 233 of file solver.h.

Referenced by solver_solve().

#define SOLVER_JOBMASK   0xff00

#define SOLVER_WEAK   0x010000

Definition at line 237 of file solver.h.

Referenced by solver_solve().

#define SOLVER_ESSENTIAL   0x020000

Definition at line 238 of file solver.h.

Referenced by problems_sortcmp(), and refine_suggestion().

#define SOLVER_INSTALL_SOLVABLE   (SOLVER_INSTALL|SOLVER_SOLVABLE)

Definition at line 242 of file solver.h.

#define SOLVER_ERASE_SOLVABLE   (SOLVER_ERASE|SOLVER_SOLVABLE)

Definition at line 243 of file solver.h.

#define SOLVER_INSTALL_SOLVABLE_NAME   (SOLVER_INSTALL|SOLVER_SOLVABLE_NAME)

Definition at line 244 of file solver.h.

#define SOLVER_ERASE_SOLVABLE_NAME   (SOLVER_ERASE|SOLVER_SOLVABLE_NAME)

Definition at line 245 of file solver.h.

#define SOLVER_INSTALL_SOLVABLE_PROVIDES   (SOLVER_INSTALL|SOLVER_SOLVABLE_PROVIDES)

Definition at line 246 of file solver.h.

#define SOLVER_ERASE_SOLVABLE_PROVIDES   (SOLVER_ERASE|SOLVER_SOLVABLE_PROVIDES)

Definition at line 247 of file solver.h.

#define SOLVER_INSTALL_SOLVABLE_UPDATE   (SOLVER_UPDATE|SOLVER_SOLVABLE)

Definition at line 248 of file solver.h.

#define SOLVER_INSTALL_SOLVABLE_ONE_OF   (SOLVER_INSTALL|SOLVER_SOLVABLE_ONE_OF)

Definition at line 249 of file solver.h.

#define SOLVER_WEAKEN_SOLVABLE_DEPS   (SOLVER_WEAKENDEPS|SOLVER_SOLVABLE)

Definition at line 250 of file solver.h.

#define SOLVER_NOOBSOLETES_SOLVABLE   (SOLVER_NOOBSOLETES|SOLVER_SOLVABLE)

Definition at line 251 of file solver.h.

#define SOLVER_NOOBSOLETES_SOLVABLE_NAME   (SOLVER_NOOBSOLETES|SOLVER_SOLVABLE_NAME)

Definition at line 252 of file solver.h.

#define SOLVER_NOOBSOLETES_SOLVABLE_PROVIDES   (SOLVER_NOOBSOLETES|SOLVER_SOLVABLE_PROVIDES)

Definition at line 253 of file solver.h.

#define SOLVER_PROBLEM_UPDATE_RULE   SOLVER_RULE_UPDATE

Definition at line 257 of file solver.h.

#define SOLVER_PROBLEM_JOB_RULE   SOLVER_RULE_JOB

Definition at line 258 of file solver.h.

#define SOLVER_PROBLEM_JOB_NOTHING_PROVIDES_DEP   SOLVER_RULE_JOB_NOTHING_PROVIDES_DEP

Definition at line 259 of file solver.h.

#define SOLVER_PROBLEM_NOT_INSTALLABLE   SOLVER_RULE_RPM_NOT_INSTALLABLE

Definition at line 260 of file solver.h.

#define SOLVER_PROBLEM_NOTHING_PROVIDES_DEP   SOLVER_RULE_RPM_NOTHING_PROVIDES_DEP

Definition at line 261 of file solver.h.

#define SOLVER_PROBLEM_SAME_NAME   SOLVER_RULE_RPM_SAME_NAME

Definition at line 262 of file solver.h.

#define SOLVER_PROBLEM_PACKAGE_CONFLICT   SOLVER_RULE_RPM_PACKAGE_CONFLICT

Definition at line 263 of file solver.h.

#define SOLVER_PROBLEM_PACKAGE_OBSOLETES   SOLVER_RULE_RPM_PACKAGE_OBSOLETES

Definition at line 264 of file solver.h.

#define SOLVER_PROBLEM_DEP_PROVIDERS_NOT_INSTALLABLE   SOLVER_RULE_RPM_PACKAGE_REQUIRES

Definition at line 265 of file solver.h.

#define SOLVER_PROBLEM_SELF_CONFLICT   SOLVER_RULE_RPM_SELF_CONFLICT

Definition at line 266 of file solver.h.

#define SOLVER_PROBLEM_RPM_RULE   SOLVER_RULE_RPM

Definition at line 267 of file solver.h.

#define SOLVER_PROBLEM_DISTUPGRADE_RULE   SOLVER_RULE_DISTUPGRADE

Definition at line 268 of file solver.h.

#define SOLVER_PROBLEM_INFARCH_RULE   SOLVER_RULE_INFARCH

Definition at line 269 of file solver.h.

#define FOR_RULELITERALS ( l,
dp,
 ) 

Value:

for (l = r->d < 0 ? -r->d - 1 : r->d,                   \
         dp = !l ? &r->w2 : pool->whatprovidesdata + l,         \
         l = r->p; l; l = (dp != &r->w2 + 1 ? *dp++ : 0))

Definition at line 359 of file solver.h.

Referenced by addchoicerules(), convertsolution(), disablechoicerules(), and solver_run_sat().

#define FOR_JOB_SELECT ( p,
pp,
select,
what   ) 

Value:

if (select == SOLVER_SOLVABLE_REPO)                             \
        p = pp = 0;                                             \
    else for (pp = (select == SOLVER_SOLVABLE ? 0 :             \
               select == SOLVER_SOLVABLE_ONE_OF ? what :        \
               pool_whatprovides(pool, what)),                          \
         p = (select == SOLVER_SOLVABLE ? what : pool->whatprovidesdata[pp++]) ; p ; p = pool->whatprovidesdata[pp++]) \
      if (select != SOLVER_SOLVABLE_NAME || pool_match_nevr(pool, pool->solvables + p, what))

Definition at line 365 of file solver.h.

Referenced by jobtodisablelist(), solver_calculate_noobsmap(), and solver_solve().


Typedef Documentation

typedef void(* BestSolvableCb)(Pool *pool, Queue *canditates)

Definition at line 33 of file solver.h.

typedef int(* ArchCheckCb)(Pool *pool, Solvable *solvable1, Solvable *solvable2)

Definition at line 34 of file solver.h.

typedef int(* VendorCheckCb)(Pool *pool, Solvable *solvable1, Solvable *solvable2)

Definition at line 35 of file solver.h.

typedef void(* UpdateCandidateCb)(Pool *pool, Solvable *solvable, Queue *canditates)

Definition at line 36 of file solver.h.

typedef struct _Solver Solver


Function Documentation

Solver* solver_create ( Pool pool  ) 

void solver_free ( Solver solv  ) 

void solver_solve ( Solver solv,
Queue job 
)

Definition at line 2438 of file solver.c.

References addchoicerules(), _Solver::allowarchchange, _Solver::allowdowngrade, _Pool::allowselfconflicts, _Solver::allowuninstall, _Solver::allowvendorchange, _Solver::choicerules, _Solver::choicerules_end, _Queue::count, _Rule::d, _Solver::decisionq, _Solver::distupgrade, _Solver::distupgrade_removeunsupported, _Solver::dontinstallrecommended, _Solver::dontshowinstalledrecommended, _Solver::dosplitprovides, _Solver::droporphanedmap, _Solver::duprules, _Solver::duprules_end, _Queue::elements, _Repo::end, _Solver::featurerules, _Solver::featurerules_end, findrecommendedsuggested(), _Solver::fixmap, _Solver::fixsystem, FOR_JOB_SELECT, FOR_PROVIDES, FOR_REPO_SOLVABLES, IF_POOLDEBUG, _Solver::ignorealreadyrecommended, _Pool::implicitobsoleteusesprovides, _Solver::infarchrules, _Solver::infarchrules_end, _Solver::installed, _Solver::job, _Solver::jobrules, _Solver::jobrules_end, _Solver::learntrules, makeruledecisions(), makewatches(), map_free(), map_grow(), map_init(), MAPSET, MAPTST, _Solvable::name, _Repo::name, _Solver::noinfarchcheck, _Solver::noobsoletes, _Solver::noupdateprovide, _Pool::novirtualconflicts, _Solver::nrules, _Pool::nsolvables, _Pool::obsoleteusescolors, _Pool::obsoleteusesprovides, _Solver::orphaned, _Rule::p, policy_create_obsolete_index(), _Solver::pool, _Repo::pool, pool_createwhatprovides(), POOL_DEBUG, pool_installable(), pool_queuetowhatprovides(), _Solver::problems, _Pool::promoteepoch, queue_empty(), queue_free(), queue_init(), queue_init_clone(), queue_push(), queue_shift(), _Solvable::repo, _Solver::rpmrules_end, _Solver::ruleassertions, _Solver::rules, _Solver::ruletojob, SAT_DEBUG_JOB, SAT_DEBUG_SCHUBI, SAT_DEBUG_SOLVER, SAT_DEBUG_STATS, sat_timems(), _Map::size, _Pool::solvables, solver_addduprules(), solver_addinfarchrules(), solver_addrpmrulesforsolvable(), solver_addrpmrulesforupdaters(), solver_addrpmrulesforweak(), solver_addrule(), solver_addupdaterule(), solver_calculate_noobsmap(), solver_createdupmaps(), solver_disablepolicyrules(), solver_disablerule(), SOLVER_DISTUPGRADE, SOLVER_DROP_ORPHANED, SOLVER_ERASE, solver_freedupmaps(), SOLVER_INSTALL, SOLVER_JOBMASK, SOLVER_LOCK, SOLVER_NOOBSOLETES, solver_prepare_solutions(), solver_printrule(), solver_run_sat(), solver_samerule(), solver_select2str(), SOLVER_SELECTMASK, SOLVER_SOLVABLE, solver_unifyrules(), SOLVER_UPDATE, SOLVER_VERIFY, SOLVER_WEAK, SOLVER_WEAKENDEPS, _Repo::start, _Solver::stats_learned, _Solver::stats_unsolvable, SYSTEMSOLVABLE, _Solver::trans, transaction_calculate(), _Solver::updatemap, _Solver::updaterules, _Solver::updaterules_end, _Solver::updatesystem, _Rule::w2, weaken_solvable_deps(), _Solver::weakrulemap, _Solver::weakruleq, and _Pool::whatprovides.

void solver_run_sat ( Solver solv,
int  disablerules,
int  doweak 
)

Definition at line 1328 of file solver.c.

References analyze_unsolvable(), _Solver::branches, _Queue::count, _Rule::d, _Solver::decisionmap, _Solver::decisionq, _Solver::decisionq_why, _Repo::disabled, _Solver::distupgrade, _Solver::distupgrade_removeunsupported, _Solver::droporphanedmap, _Queue::elements, _Repo::end, _Solver::featurerules, FOR_PROVIDES, FOR_RULELITERALS, _Repo::idarraydata, IF_POOLDEBUG, _Solver::ignorealreadyrecommended, _Solver::installed, _Solver::jobrules, map_free(), map_init(), MAPSET, MAPTST, _Solver::multiversionupdaters, _Solvable::name, _Solver::noobsoletes, _Solver::noupdate, _Solver::nrules, _Pool::nsolvables, _Repo::nsolvables, _Solvable::obsoletes, _Solver::orphaned, _Rule::p, policy_filter_unwanted(), POLICY_MODE_CHOOSE, POLICY_MODE_RECOMMEND, _Solver::pool, _Repo::pool, POOL_DEBUG, pool_installable(), propagate(), _Solver::propagate_index, queue_empty(), queue_free(), queue_init(), queue_push(), queue_pushunique(), _Solver::recommendations, _Solvable::recommends, _Solvable::repo, revert(), _Solver::rules, SAT_DEBUG_POLICY, SAT_DEBUG_PROPAGATE, SAT_DEBUG_RESULT, SAT_DEBUG_RULE_CREATION, SAT_DEBUG_SCHUBI, SAT_DEBUG_SOLVER, SAT_DEBUG_STATS, selectandinstall(), setpropagatelearn(), _Map::size, _Solver::solution_callback, _Solver::solution_callback_data, _Pool::solvables, solver_is_supplementing(), solver_printdecisionq(), solver_printdecisions(), solver_printruleclass(), solvid2str(), _Repo::start, _Solver::stats_learned, _Solver::stats_unsolvable, _Solvable::supplements, _Solver::updatemap, _Solver::updaterules, _Solver::updatesystem, _Rule::w2, and _Pool::whatprovidesdata.

Referenced by refine_suggestion(), and solver_solve().

void solver_reset ( Solver solv  ) 

int solver_dep_installed ( Solver solv,
Id  dep 
)

int solver_splitprovides ( Solver solv,
Id  dep 
)

void solver_calculate_noobsmap ( Pool pool,
Queue job,
Map noobsmap 
)

SolverRuleinfo solver_problemruleinfo ( Solver solv,
Queue job,
Id  rid,
Id depp,
Id sourcep,
Id targetp 
)

Definition at line 882 of file problems.c.

References solver_ruleinfo().

Id* solver_create_decisions_obsoletesmap ( Solver solv  ) 

Definition at line 44 of file solverdebug.c.

static int solver_dep_fulfilled ( Solver solv,
Id  dep 
) [inline, static]

static int solver_is_supplementing ( Solver solv,
Solvable s 
) [inline, static]

static int solver_is_enhancing ( Solver solv,
Solvable s 
) [inline, static]

void solver_calc_duchanges ( Solver solv,
DUChanges mps,
int  nmps 
)

int solver_calc_installsizechange ( Solver solv  ) 

void solver_trivial_installable ( Solver solv,
Queue pkgs,
Queue res 
)

void solver_find_involved ( Solver solv,
Queue installedq,
Solvable s,
Queue q 
)

static void solver_create_state_maps ( Solver solv,
Map installedmap,
Map conflictsmap 
) [inline, static]


doxygen