]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
- support REL_ARCH
authorMichael Schroeder <mls@suse.de>
Fri, 4 Apr 2008 19:43:12 +0000 (19:43 +0000)
committerMichael Schroeder <mls@suse.de>
Fri, 4 Apr 2008 19:43:12 +0000 (19:43 +0000)
src/pool.c
src/pool.h
src/poolid.c

index a92e980a4f278c7189e33ef4be3fb63837c55fce..98fe188bf728525210f96246e7fac3e872934b91 100644 (file)
@@ -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));
index dde95874d0a9560e35c09b0d1324fb3396bec05c..06ed047427daf91fe1b675e688cd99cdfdf5eaef 100644 (file)
@@ -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)
index abd859fc76982c5d0b3649327d148131b40a721f..65c7d4203b985e37d220fcac9941c78a13e2c824 100644 (file)
@@ -166,6 +166,8 @@ id2rel(Pool *pool, Id id)
       return " WITH ";
     case REL_NAMESPACE:
       return " NAMESPACE ";
+    case REL_ARCH:
+      return ".";
     default:
       break;
     }