#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
#include "solver.h"
#include "bitmap.h"
#include "pool.h"
#include "util.h"
#include "policy.h"
#include "solverdebug.h"
Go to the source code of this file.
Defines | |
#define | RULES_BLOCK 63 |
#define | DECISIONMAP_TRUE(p) ((p) > 0 ? (decisionmap[p] > 0) : (decisionmap[-p] < 0)) |
#define | DECISIONMAP_FALSE(p) ((p) > 0 ? (decisionmap[p] < 0) : (decisionmap[-p] > 0)) |
#define | DECISIONMAP_UNDEF(p) (decisionmap[(p) > 0 ? (p) : -(p)] == 0) |
Functions | |
int | solver_splitprovides (Solver *solv, Id dep) |
int | solver_dep_installed (Solver *solv, Id dep) |
static void | makeruledecisions (Solver *solv) |
static void | enabledisablelearntrules (Solver *solv) |
static void | makewatches (Solver *solv) |
static void | addwatches_rule (Solver *solv, Rule *r) |
static Rule * | propagate (Solver *solv, int level) |
static int | analyze (Solver *solv, int level, Rule *c, int *pr, int *dr, int *whyp) |
void | solver_reset (Solver *solv) |
static void | analyze_unsolvable_rule (Solver *solv, Rule *r, Id *lastweakp) |
static int | analyze_unsolvable (Solver *solv, Rule *cr, int disablerules) |
static void | revert (Solver *solv, int level) |
static void | watch2onhighest (Solver *solv, Rule *r) |
static int | setpropagatelearn (Solver *solv, int level, Id decision, int disablerules, Id ruleid) |
static int | selectandinstall (Solver *solv, int level, Queue *dq, int disablerules, Id ruleid) |
Solver * | solver_create (Pool *pool) |
void | solver_free (Solver *solv) |
void | solver_run_sat (Solver *solv, int disablerules, int doweak) |
static void | removedisabledconflicts (Solver *solv, Queue *removed) |
static void | undo_removedisabledconflicts (Solver *solv, Queue *removed) |
static void | weaken_solvable_deps (Solver *solv, Id p) |
static void | findrecommendedsuggested (Solver *solv) |
void | solver_calculate_noobsmap (Pool *pool, Queue *job, Map *noobsmap) |
void | solver_solve (Solver *solv, Queue *job) |
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) |
#define DECISIONMAP_TRUE | ( | p | ) | ((p) > 0 ? (decisionmap[p] > 0) : (decisionmap[-p] < 0)) |
Definition at line 476 of file solver.c.
Referenced by analyze(), analyze_unsolvable(), and propagate().
#define DECISIONMAP_FALSE | ( | p | ) | ((p) > 0 ? (decisionmap[p] < 0) : (decisionmap[-p] > 0)) |
#define DECISIONMAP_UNDEF | ( | p | ) | (decisionmap[(p) > 0 ? (p) : -(p)] == 0) |
Definition at line 45 of file solver.c.
References _Solver::dosplitprovides, _Reldep::flags, FOR_PROVIDES, GETRELDEP, _Solver::installed, ISRELDEP, MAPTST, _Reldep::name, _Solvable::name, _Solver::pool, _Repo::pool, REL_WITH, _Solvable::repo, _Map::size, _Pool::solvables, _Repo::start, _Solver::updatemap, and _Solver::updatesystem.
Referenced by dep_possible(), and solver_dep_fulfilled().
Definition at line 77 of file solver.c.
References _Reldep::evr, _Reldep::flags, FOR_PROVIDES, GETRELDEP, _Solver::installed, ISRELDEP, _Reldep::name, _Solver::pool, _Repo::pool, REL_AND, REL_NAMESPACE, _Solvable::repo, _Pool::solvables, solver_dep_installed(), and SYSTEMSOLVABLE.
Referenced by dep_possible(), solver_dep_fulfilled(), and solver_dep_installed().
static void makeruledecisions | ( | Solver * | solv | ) | [static] |
Definition at line 116 of file solver.c.
References _Queue::count, _Rule::d, _Solver::decisionmap, _Solver::decisionq, _Solver::decisionq_why, _Queue::elements, _Solver::featurerules, IF_POOLDEBUG, _Solver::jobrules, _Solver::learnt_pool, _Solver::learntrules, MAPTST, _Rule::p, _Solver::pool, _Repo::pool, POOL_DEBUG, _Solver::problems, queue_push(), _Solver::rpmrules_end, _Solver::ruleassertions, _Solver::rules, _Solver::ruletojob, SAT_DEBUG_PROPAGATE, SAT_DEBUG_SCHUBI, SAT_DEBUG_UNSOLVABLE, solvable2str(), _Pool::solvables, solver_disableproblem(), solver_disablerule(), solver_printrule(), solver_printruleclass(), solver_reenablepolicyrules(), SYSTEMSOLVABLE, _Rule::w2, and _Solver::weakrulemap.
Referenced by solver_reset(), and solver_solve().
static void enabledisablelearntrules | ( | Solver * | solv | ) | [static] |
Definition at line 366 of file solver.c.
References _Rule::d, _Queue::elements, IF_POOLDEBUG, _Solver::learnt_pool, _Solver::learnt_why, _Solver::learntrules, _Solver::pool, _Repo::pool, POOL_DEBUG, _Solver::rules, SAT_DEBUG_SOLUTIONS, solver_disablerule(), solver_enablerule(), and solver_printruleclass().
Referenced by findrecommendedsuggested(), and solver_reset().
static void makewatches | ( | Solver * | solv | ) | [static] |
Definition at line 417 of file solver.c.
References _Rule::n1, _Rule::n2, _Solver::nrules, _Pool::nsolvables, _Repo::nsolvables, _Solver::pool, _Solver::rules, sat_calloc(), sat_free(), _Rule::w1, _Rule::w2, and _Solver::watches.
Referenced by solver_solve().
Definition at line 455 of file solver.c.
References _Rule::n1, _Rule::n2, _Pool::nsolvables, _Repo::nsolvables, _Solver::pool, _Solver::rules, _Rule::w1, _Rule::w2, and _Solver::watches.
Referenced by setpropagatelearn().
Definition at line 497 of file solver.c.
References _Queue::count, _Rule::d, _Solver::decisionmap, DECISIONMAP_FALSE, DECISIONMAP_TRUE, _Solver::decisionq, _Solver::decisionq_why, _Queue::elements, IF_POOLDEBUG, _Rule::n1, _Rule::n2, _Pool::nsolvables, _Rule::p, _Solver::pool, _Repo::pool, POOL_DEBUG, _Solver::propagate_index, queue_push(), _Solver::rules, SAT_DEBUG_PROPAGATE, solver_printrule(), solver_printruleelement(), solvid2str(), _Rule::w1, _Rule::w2, _Solver::watches, watches, and _Pool::whatprovidesdata.
Referenced by setpropagatelearn(), and solver_run_sat().
Definition at line 685 of file solver.c.
References _Queue::count, _Rule::d, _Solver::decisionmap, DECISIONMAP_TRUE, _Solver::decisionq, _Solver::decisionq_why, _Queue::elements, IF_POOLDEBUG, _Solver::learnt_pool, map_free(), map_init(), MAPCLR, MAPSET, MAPTST, _Pool::nsolvables, _Rule::p, _Solver::pool, _Repo::pool, POOL_DEBUG, pool_queuetowhatprovides(), queue_init(), queue_push(), _Solver::rules, SAT_DEBUG_ANALYZE, solver_printruleclass(), solver_printruleelement(), _Solver::stats_learned, _Rule::w2, and _Pool::whatprovidesdata.
Referenced by setpropagatelearn().
void solver_reset | ( | Solver * | solv | ) |
Definition at line 806 of file solver.c.
References _Solver::branches, _Queue::count, _Solver::decisionmap, _Solver::decisionq, _Solver::decisionq_why, _Queue::elements, enabledisablelearntrules(), makeruledecisions(), _Solver::pool, _Repo::pool, POOL_DEBUG, _Solver::propagate_index, _Solver::recommendations, _Solver::recommends_index, and SAT_DEBUG_UNSOLVABLE.
Referenced by analyze_unsolvable(), and refine_suggestion().
Definition at line 840 of file solver.c.
References _Queue::count, _Solver::duprules, _Queue::elements, IF_POOLDEBUG, _Solver::infarchrules, _Solver::jobrules, _Solver::learnt_pool, _Solver::learnt_why, _Solver::learntrules, MAPTST, _Solvable::name, _Repo::name, _Rule::p, _Solver::pool, _Repo::pool, _Solver::problems, queue_push(), _Solver::rules, _Solver::ruletojob, SAT_DEBUG_UNSOLVABLE, _Pool::solvables, solver_printruleclass(), and _Solver::weakrulemap.
Referenced by analyze_unsolvable().
Definition at line 900 of file solver.c.
References analyze_unsolvable_rule(), _Solver::choicerules, _Queue::count, _Rule::d, _Solver::decisionmap, DECISIONMAP_TRUE, _Solver::decisionq, _Solver::decisionq_why, disablechoicerules(), _Queue::elements, _Solver::jobrules, _Solver::learnt_pool, map_free(), map_init(), MAPSET, MAPTST, _Pool::nsolvables, _Rule::p, _Solver::pool, _Repo::pool, POOL_DEBUG, _Solver::problems, queue_push(), _Solver::rules, _Solver::ruletojob, SAT_DEBUG_UNSOLVABLE, solver_disableproblem(), solver_printruleclass(), solver_reenablepolicyrules(), solver_reset(), _Solver::stats_unsolvable, _Rule::w2, and _Pool::whatprovidesdata.
Referenced by setpropagatelearn(), and solver_run_sat().
static void revert | ( | Solver * | solv, | |
int | level | |||
) | [static] |
Definition at line 1032 of file solver.c.
References _Solver::branches, _Queue::count, _Solver::decisionmap, _Solver::decisionq, _Solver::decisionq_why, _Queue::elements, _Solver::pool, _Repo::pool, POOL_DEBUG, _Solver::propagate_index, _Solver::recommendations, _Solver::recommends_index, and SAT_DEBUG_PROPAGATE.
Referenced by setpropagatelearn(), and solver_run_sat().
Definition at line 1066 of file solver.c.
References _Rule::d, _Solver::decisionmap, _Solver::pool, _Rule::w2, and _Pool::whatprovidesdata.
Referenced by setpropagatelearn().
static int setpropagatelearn | ( | Solver * | solv, | |
int | level, | |||
Id | decision, | |||
int | disablerules, | |||
Id | ruleid | |||
) | [static] |
Definition at line 1106 of file solver.c.
References addwatches_rule(), analyze(), analyze_unsolvable(), _Queue::count, _Solver::decisionmap, _Solver::decisionq, _Solver::decisionq_why, IF_POOLDEBUG, _Solver::learnt_why, _Solver::learntrules, _Solver::pool, _Repo::pool, POOL_DEBUG, propagate(), queue_push(), revert(), _Solver::ruleassertions, _Solver::rules, SAT_DEBUG_ANALYZE, solver_addrule(), solver_printrule(), solver_printruleelement(), and watch2onhighest().
Referenced by selectandinstall(), and solver_run_sat().
static int selectandinstall | ( | Solver * | solv, | |
int | level, | |||
Queue * | dq, | |||
int | disablerules, | |||
Id | ruleid | |||
) | [static] |
Definition at line 1180 of file solver.c.
References _Solver::branches, _Queue::count, _Queue::elements, policy_filter_unwanted(), POLICY_MODE_CHOOSE, _Solver::pool, _Repo::pool, POOL_DEBUG, queue_push(), SAT_DEBUG_POLICY, setpropagatelearn(), _Pool::solvables, solver_is_supplementing(), and solvid2str().
Referenced by solver_run_sat().
Definition at line 1235 of file solver.c.
References _Solver::branches, _Solver::covenantq, _Solver::decisionmap, _Solver::decisionq, _Solver::decisionq_why, _Repo::end, _Pool::installed, _Solver::installed, _Solver::learnt_pool, _Solver::learnt_why, map_init(), _Solver::noupdate, _Solver::nrules, _Pool::nsolvables, _Solver::orphaned, _Solver::pool, _Solver::problems, queue_init(), _Solver::recommendations, _Solver::recommends_index, _Solver::recommendsmap, _Solver::ruleassertions, _Solver::rules, RULES_BLOCK, _Solver::ruletojob, sat_calloc(), sat_extend_resize(), _Repo::start, _Solver::suggestions, _Solver::suggestsmap, _Solver::trans, transaction_init(), and _Solver::weakruleq.
void solver_free | ( | Solver * | solv | ) |
Definition at line 1277 of file solver.c.
References _Solver::branches, _Solver::choicerules_ref, _Solver::covenantq, _Solver::decisionmap, _Solver::decisionq, _Solver::decisionq_why, _Solver::droporphanedmap, _Solver::dupinvolvedmap, _Solver::dupmap, _Solver::fixmap, _Solver::job, _Solver::learnt_pool, _Solver::learnt_why, map_free(), _Solver::multiversionupdaters, _Solver::noobsoletes, _Solver::noupdate, _Solver::obsoletes, _Solver::obsoletes_data, _Solver::orphaned, _Solver::problems, queue_free(), _Solver::recommendations, _Solver::recommendsmap, _Solver::ruleassertions, _Solver::rules, _Solver::ruletojob, sat_free(), _Solver::solutions, _Solver::suggestions, _Solver::suggestsmap, _Solver::trans, transaction_free(), _Solver::updatemap, _Solver::watches, _Solver::weakrulemap, and _Solver::weakruleq.
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().
Definition at line 2080 of file solver.c.
References _Queue::count, _Rule::d, _Solver::decisionmap, DECISIONMAP_FALSE, _Solver::decisionq, _Solver::decisionq_why, _Queue::elements, _Solver::nrules, _Rule::p, _Solver::pool, _Repo::pool, POOL_DEBUG, queue_empty(), queue_push(), _Solver::rules, SAT_DEBUG_SCHUBI, solvid2str(), _Rule::w2, and _Pool::whatprovidesdata.
Referenced by findrecommendedsuggested().
Definition at line 2181 of file solver.c.
References _Queue::count, _Solver::decisionmap, and _Queue::elements.
Referenced by findrecommendedsuggested().
Definition at line 2195 of file solver.c.
References _Rule::d, _Rule::p, queue_push(), _Solver::rules, _Rule::w2, and _Solver::weakruleq.
Referenced by solver_solve().
static void findrecommendedsuggested | ( | Solver * | solv | ) | [static] |
Definition at line 2216 of file solver.c.
References _Queue::count, _Rule::d, _Solver::decisionmap, _Solver::decisionq, _Solver::dontinstallrecommended, _Solver::dontshowinstalledrecommended, _Queue::elements, enabledisablelearntrules(), _Solvable::enhances, FOR_PROVIDES, _Repo::idarraydata, _Solver::ignorealreadyrecommended, _Solver::installed, _Solver::jobrules, map_free(), map_init(), MAPSET, MAPTST, MAPZERO, _Solver::noobsoletes, _Pool::nsolvables, _Solvable::obsoletes, _Rule::p, policy_filter_unwanted(), POLICY_MODE_SUGGEST, _Solver::pool, _Repo::pool, pool_installable(), queue_free(), queue_init(), queue_push(), queue_pushunique(), _Solver::recommendations, _Solvable::recommends, _Solver::recommends_index, _Solver::recommendsmap, removedisabledconflicts(), _Solvable::repo, _Solver::rules, _Map::size, _Pool::solvables, solver_disablerule(), solver_enablerule(), solver_is_enhancing(), solver_is_supplementing(), _Repo::start, _Solver::suggestions, _Solvable::suggests, _Solver::suggestsmap, _Solvable::supplements, and undo_removedisabledconflicts().
Referenced by solver_solve().
Definition at line 2412 of file solver.c.
References _Queue::count, _Queue::elements, FOR_JOB_SELECT, map_grow(), MAPSET, _Pool::nsolvables, _Map::size, SOLVER_JOBMASK, SOLVER_NOOBSOLETES, and SOLVER_SELECTMASK.
Referenced by solver_solve().
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.
Definition at line 2968 of file solver.c.
References map_free(), _Solver::pool, pool_calc_duchanges(), and solver_create_state_maps().
int solver_calc_installsizechange | ( | Solver * | solv | ) |
Definition at line 2984 of file solver.c.
References map_free(), _Solver::pool, pool_calc_installsizechange(), and solver_create_state_maps().
Definition at line 2996 of file solver.c.
References map_free(), _Solver::noobsoletes, _Solver::pool, pool_trivial_installable_noobsoletesmap(), _Map::size, and solver_create_state_maps().
Referenced by solver_printtrivial().