From: Michael Schroeder Date: Fri, 4 Apr 2008 19:43:12 +0000 (+0000) Subject: - support REL_ARCH X-Git-Tag: BASE-SuSE-Code-12_1-Branch~762 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e78a2b4d833a85e40d808952a56482309fed8543;p=platform%2Fupstream%2Flibsolv.git - support REL_ARCH --- diff --git a/src/pool.c b/src/pool.c index a92e980..98fe188 100644 --- a/src/pool.c +++ b/src/pool.c @@ -423,6 +423,7 @@ pool_addrelproviders(Pool *pool, Id d) int flags = rd->flags; Id pid, *pidp; Id p, *pp, *pp2, *pp3; + int i; d = GETRELID(d); queue_init_buffer(&plist, buf, sizeof(buf)/sizeof(*buf)); @@ -453,6 +454,11 @@ pool_addrelproviders(Pool *pool, Id d) case REL_NAMESPACE: if (pool->nscallback) { + /* ask callback which packages provide the dependency + * 0: none + * 1: the system (aka SYSTEMSOLVABLE) + * >1: a set of packages, stored as offset on whatprovidesdata + */ p = pool->nscallback(pool, pool->nscallbackdata, name, evr); if (p > 1) { @@ -464,6 +470,20 @@ pool_addrelproviders(Pool *pool, Id d) queue_push(&plist, SYSTEMSOLVABLE); } break; + case REL_ARCH: + pp = pool_whatprovides(pool, name); + i = 0; + while ((p = *pp++) != 0) + { + Solvable *s = pool->solvables + p; + if (s->arch == evr) + queue_push(&plist, p); + else + i = 1; + } + if (i == 0) + return pp; + break; default: break; } @@ -474,7 +494,13 @@ pool_addrelproviders(Pool *pool, Id d) #endif if (flags && flags < 8) { - FOR_PROVIDES(p, pp, name) + pp = pool_whatprovides(pool, name); + while (ISRELDEP(name)) + { + rd = GETRELDEP(pool, name); + name = rd->name; + } + while ((p = *pp++) != 0) { #if 0 POOL_DEBUG(DEBUG_1, "addrelproviders: checking package %s\n", id2str(pool, pool->p[p].name)); diff --git a/src/pool.h b/src/pool.h index dde9587..06ed047 100644 --- a/src/pool.h +++ b/src/pool.h @@ -133,6 +133,7 @@ struct _Pool { #define REL_OR 17 #define REL_WITH 18 #define REL_NAMESPACE 19 +#define REL_ARCH 20 #if !defined(__GNUC__) && !defined(__attribute__) # define __attribute__(x) diff --git a/src/poolid.c b/src/poolid.c index abd859f..65c7d42 100644 --- a/src/poolid.c +++ b/src/poolid.c @@ -166,6 +166,8 @@ id2rel(Pool *pool, Id id) return " WITH "; case REL_NAMESPACE: return " NAMESPACE "; + case REL_ARCH: + return "."; default: break; }