support debian multiarch annotation
authorMichael Schroeder <mls@suse.de>
Fri, 18 Oct 2013 09:54:07 +0000 (11:54 +0200)
committerMichael Schroeder <mls@suse.de>
Fri, 18 Oct 2013 09:54:07 +0000 (11:54 +0200)
ext/repo_deb.c
src/pool.c
src/pool.h
src/poolid.c

index e9e4e39..370050e 100644 (file)
@@ -122,7 +122,14 @@ parseonedep(Pool *pool, char *p)
       while (*p == ' ' || *p == '\t' || *p == '\n')
        p++;
     }
-  name = pool_strn2id(pool, n, ne - n, 1);
+  if (ne - n > 4 && !strncmp(ne - 4, ":any", 4))
+    {
+      /* multiarch annotation */
+      name = pool_strn2id(pool, n, ne - n - 4, 1);
+      name = pool_rel2id(pool, name, ARCH_ANY, REL_MULTIARCH, 1);
+    }
+  else
+    name = pool_strn2id(pool, n, ne - n, 1);
   if (e)
     {
       evr = pool_strn2id(pool, e, ee - e, 1);
index f7b5456..910a9c1 100644 (file)
@@ -621,6 +621,11 @@ pool_match_nevr_rel(Pool *pool, Solvable *s, Id d)
          if (!pool_match_nevr(pool, s, name))
            return 0;
          return pool_match_nevr(pool, s, evr);
+       case REL_MULTIARCH:
+         if (evr != ARCH_ANY)
+           return 0;
+         /* XXX : need to check for Multi-Arch: allowed! */
+         return pool_match_nevr(pool, s, name);
        default:
          return 0;
        }
@@ -1001,6 +1006,12 @@ pool_addrelproviders(Pool *pool, Id d)
                wp = 0;
            }
          break;
+       case REL_MULTIARCH:
+         if (evr != ARCH_ANY)
+           break;
+         /* XXX : need to check for Multi-Arch: allowed! */
+         wp = pool_whatprovides(pool, name);
+         break;
        case REL_KIND:
          /* package kind filtering */
          if (!name)
index 2227bc2..d29f615 100644 (file)
@@ -213,7 +213,8 @@ struct _Pool {
 #define REL_FILECONFLICT       21
 #define REL_COND       22
 #define REL_COMPAT     23
-#define REL_KIND        24     /* for filters only */
+#define REL_KIND       24      /* for filters only */
+#define REL_MULTIARCH  25      /* debian multiarch annotation */
 
 #if !defined(__GNUC__) && !defined(__attribute__)
 # define __attribute__(x)
index 66b6d46..285ecaa 100644 (file)
@@ -180,6 +180,8 @@ pool_id2rel(const Pool *pool, Id id)
       return " NAMESPACE ";    /* actually not used in dep2str */
     case REL_ARCH:
       return ".";
+    case REL_MULTIARCH:
+      return ":";
     case REL_FILECONFLICT:
       return " FILECONFLICT ";
     case REL_COND: