- add SOLVER_NOAUTOSET to disable automatic SET deduction
[platform/upstream/libsolv.git] / src / poolarch.c
index c25f876..3ea4713 100644 (file)
@@ -31,6 +31,7 @@ const char *archpolicies[] = {
   "ia64",      "ia64:i686:i586:i486:i386",
   "ppc64",     "ppc64:ppc",
   "ppc",       "ppc",
+  "armv7l",    "armv7l:armv6l:armv5tejl:armv5tel:armv5l:armv4tl:armv4l:armv3l",
   "armv6l",    "armv6l:armv5tejl:armv5tel:armv5l:armv4tl:armv4l:armv3l",
   "armv5tejl", "armv5tejl:armv5tel:armv5l:armv4tl:armv4l:armv3l",
   "armv5tel",  "armv5tel:armv5l:armv4tl:armv4l:armv3l",
@@ -41,6 +42,12 @@ const char *archpolicies[] = {
   "sh3",       "sh3",
   "sh4",       "sh4",
   "sh4a",      "sh4a:sh4",
+  "sparc64v",  "sparc64v:sparc64:sparcv9v:sparcv9:sparcv8:sparc",
+  "sparc64",   "sparc64:sparcv9:sparcv8:sparc",
+  "sparcv9v",  "sparcv9v:sparcv9:sparcv8:sparc",
+  "sparcv9",   "sparcv9:sparcv8:sparc",
+  "sparcv8",   "sparcv8:sparc",
+  "sparc",     "sparc",
   0
 };
 
@@ -48,7 +55,6 @@ void
 pool_setarch(Pool *pool, const char *arch)
 {
   const char *a;
-  char buf[256];
   unsigned int score = 0x10001;
   size_t l;
   char d;
@@ -57,6 +63,7 @@ pool_setarch(Pool *pool, const char *arch)
   Id id, lastarch;
 
   pool->id2arch = sat_free(pool->id2arch);
+  pool->id2color = sat_free(pool->id2color);
   if (!arch)
     {
       pool->lastarch = 0;
@@ -81,11 +88,9 @@ pool_setarch(Pool *pool, const char *arch)
   while (*a)
     {
       l = strcspn(a, ":=>");
-      if (l && l < sizeof(buf) - 1)
+      if (l)
        {
-         strncpy(buf, a, l);
-         buf[l] = 0;
-         id = str2id(pool, buf, 1);
+         id = strn2id(pool, a, l, 1);
          if (id > lastarch)
            {
              id2arch = sat_realloc(id2arch, (id + 255 + 1) * sizeof(Id));
@@ -108,3 +113,24 @@ pool_setarch(Pool *pool, const char *arch)
   pool->id2arch = id2arch;
   pool->lastarch = lastarch;
 }
+
+unsigned char
+pool_arch2color_slow(Pool *pool, Id arch)
+{
+  const char *s;
+  unsigned char color;
+
+  if (arch > pool->lastarch)
+    return ARCHCOLOR_ALL;
+  if (!pool->id2color)
+    pool->id2color = sat_calloc(pool->lastarch + 1, 1);
+  s = id2str(pool, arch);
+  if (arch == ARCH_NOARCH || arch == ARCH_ALL)
+    color = ARCHCOLOR_ALL;
+  else if (!strcmp(s, "s390x") || strstr(s, "64"))
+    color = ARCHCOLOR_64;
+  else
+    color = ARCHCOLOR_32;
+  return color;
+}
+