13 #ifndef SATSOLVER_SOLVER_H
14 #define SATSOLVER_SOLVER_H
223 #define SOLVER_SOLVABLE 0x01
224 #define SOLVER_SOLVABLE_NAME 0x02
225 #define SOLVER_SOLVABLE_PROVIDES 0x03
226 #define SOLVER_SOLVABLE_ONE_OF 0x04
227 #define SOLVER_SOLVABLE_REPO 0x05
228 #define SOLVER_SOLVABLE_ALL 0x06
230 #define SOLVER_SELECTMASK 0xff
232 #define SOLVER_NOOP 0x0000
233 #define SOLVER_INSTALL 0x0100
234 #define SOLVER_ERASE 0x0200
235 #define SOLVER_UPDATE 0x0300
236 #define SOLVER_WEAKENDEPS 0x0400
237 #define SOLVER_NOOBSOLETES 0x0500
238 #define SOLVER_LOCK 0x0600
239 #define SOLVER_DISTUPGRADE 0x0700
240 #define SOLVER_VERIFY 0x0800
241 #define SOLVER_DROP_ORPHANED 0x0900
242 #define SOLVER_USERINSTALLED 0x0a00
244 #define SOLVER_JOBMASK 0xff00
246 #define SOLVER_WEAK 0x010000
247 #define SOLVER_ESSENTIAL 0x020000
248 #define SOLVER_CLEANDEPS 0x040000
250 #define SOLVER_SETEV 0x01000000
251 #define SOLVER_SETEVR 0x02000000
252 #define SOLVER_SETARCH 0x04000000
253 #define SOLVER_SETVENDOR 0x08000000
254 #define SOLVER_SETREPO 0x10000000
255 #define SOLVER_NOAUTOSET 0x20000000
257 #define SOLVER_SETMASK 0x2f000000
261 #define SOLVER_INSTALL_SOLVABLE (SOLVER_INSTALL|SOLVER_SOLVABLE)
262 #define SOLVER_ERASE_SOLVABLE (SOLVER_ERASE|SOLVER_SOLVABLE)
263 #define SOLVER_INSTALL_SOLVABLE_NAME (SOLVER_INSTALL|SOLVER_SOLVABLE_NAME)
264 #define SOLVER_ERASE_SOLVABLE_NAME (SOLVER_ERASE|SOLVER_SOLVABLE_NAME)
265 #define SOLVER_INSTALL_SOLVABLE_PROVIDES (SOLVER_INSTALL|SOLVER_SOLVABLE_PROVIDES)
266 #define SOLVER_ERASE_SOLVABLE_PROVIDES (SOLVER_ERASE|SOLVER_SOLVABLE_PROVIDES)
267 #define SOLVER_INSTALL_SOLVABLE_UPDATE (SOLVER_UPDATE|SOLVER_SOLVABLE)
268 #define SOLVER_INSTALL_SOLVABLE_ONE_OF (SOLVER_INSTALL|SOLVER_SOLVABLE_ONE_OF)
269 #define SOLVER_WEAKEN_SOLVABLE_DEPS (SOLVER_WEAKENDEPS|SOLVER_SOLVABLE)
270 #define SOLVER_NOOBSOLETES_SOLVABLE (SOLVER_NOOBSOLETES|SOLVER_SOLVABLE)
271 #define SOLVER_NOOBSOLETES_SOLVABLE_NAME (SOLVER_NOOBSOLETES|SOLVER_SOLVABLE_NAME)
272 #define SOLVER_NOOBSOLETES_SOLVABLE_PROVIDES (SOLVER_NOOBSOLETES|SOLVER_SOLVABLE_PROVIDES)
276 #define SOLVER_PROBLEM_UPDATE_RULE SOLVER_RULE_UPDATE
277 #define SOLVER_PROBLEM_JOB_RULE SOLVER_RULE_JOB
278 #define SOLVER_PROBLEM_JOB_NOTHING_PROVIDES_DEP SOLVER_RULE_JOB_NOTHING_PROVIDES_DEP
279 #define SOLVER_PROBLEM_NOT_INSTALLABLE SOLVER_RULE_RPM_NOT_INSTALLABLE
280 #define SOLVER_PROBLEM_NOTHING_PROVIDES_DEP SOLVER_RULE_RPM_NOTHING_PROVIDES_DEP
281 #define SOLVER_PROBLEM_SAME_NAME SOLVER_RULE_RPM_SAME_NAME
282 #define SOLVER_PROBLEM_PACKAGE_CONFLICT SOLVER_RULE_RPM_PACKAGE_CONFLICT
283 #define SOLVER_PROBLEM_PACKAGE_OBSOLETES SOLVER_RULE_RPM_PACKAGE_OBSOLETES
284 #define SOLVER_PROBLEM_DEP_PROVIDERS_NOT_INSTALLABLE SOLVER_RULE_RPM_PACKAGE_REQUIRES
285 #define SOLVER_PROBLEM_SELF_CONFLICT SOLVER_RULE_RPM_SELF_CONFLICT
286 #define SOLVER_PROBLEM_RPM_RULE SOLVER_RULE_RPM
287 #define SOLVER_PROBLEM_DISTUPGRADE_RULE SOLVER_RULE_DISTUPGRADE
288 #define SOLVER_PROBLEM_INFARCH_RULE SOLVER_RULE_INFARCH
344 while ((sup = *supp++) != 0)
357 while ((enh = *enhp++) != 0)
378 #define FOR_RULELITERALS(l, dp, r) \
379 for (l = r->d < 0 ? -r->d - 1 : r->d, \
380 dp = !l ? &r->w2 : pool->whatprovidesdata + l, \
381 l = r->p; l; l = (dp != &r->w2 + 1 ? *dp++ : 0))
384 #define FOR_JOB_SELECT(p, pp, select, what) \
385 if (select == SOLVER_SOLVABLE_REPO || select == SOLVER_SOLVABLE_ALL) \
387 else for (pp = (select == SOLVER_SOLVABLE ? 0 : \
388 select == SOLVER_SOLVABLE_ONE_OF ? what : \
389 pool_whatprovides(pool, what)), \
390 p = (select == SOLVER_SOLVABLE ? what : pool->whatprovidesdata[pp++]) ; p ; p = pool->whatprovidesdata[pp++]) \
391 if (select != SOLVER_SOLVABLE_NAME || pool_match_nevr(pool, pool->solvables + p, what))