diff options
Diffstat (limited to 'src/rules.c')
-rw-r--r-- | src/rules.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/rules.c b/src/rules.c index 67de769..3264e9b 100644 --- a/src/rules.c +++ b/src/rules.c @@ -52,7 +52,9 @@ dep_possible(Solver *solv, Id dep, Map *m) Reldep *rd = GETRELDEP(pool, dep); if (rd->flags >= 8) { - if (rd->flags == REL_AND || rd->flags == REL_COND) + if (rd->flags == REL_COND) + return 1; + if (rd->flags == REL_AND) { if (!dep_possible(solv, rd->name, m)) return 0; @@ -966,13 +968,20 @@ solver_addpkgrulesforsolvable(Solver *solv, Solvable *s, Map *m) } /*----------------------------------------- - * add recommends to the work queue + * add recommends/suggests to the work queue */ if (s->recommends && m) { recp = s->repo->idarraydata + s->recommends; while ((rec = *recp++) != 0) { +#ifdef ENABLE_COMPLEX_DEPS + if (pool_is_complex_dep(pool, rec)) + { + pool_add_pos_literals_complex_dep(pool, rec, &workq, m, 0); + continue; + } +#endif FOR_PROVIDES(p, pp, rec) if (!MAPTST(m, p)) queue_push(&workq, p); @@ -983,6 +992,13 @@ solver_addpkgrulesforsolvable(Solver *solv, Solvable *s, Map *m) sugp = s->repo->idarraydata + s->suggests; while ((sug = *sugp++) != 0) { +#ifdef ENABLE_COMPLEX_DEPS + if (pool_is_complex_dep(pool, sug)) + { + pool_add_pos_literals_complex_dep(pool, sug, &workq, m, 0); + continue; + } +#endif FOR_PROVIDES(p, pp, sug) if (!MAPTST(m, p)) queue_push(&workq, p); |