- 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 a92e980..98fe188 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 dde9587..06ed047 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 abd859f..65c7d42 100644 (file)
@@ -166,6 +166,8 @@ id2rel(Pool *pool, Id id)
       return " WITH ";
     case REL_NAMESPACE:
       return " NAMESPACE ";
+    case REL_ARCH:
+      return ".";
     default:
       break;
     }