Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package libsolv for openSUSE:Factory checked 
in at 2026-03-14 22:20:59
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libsolv (Old)
 and      /work/SRC/openSUSE:Factory/.libsolv.new.8177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libsolv"

Sat Mar 14 22:20:59 2026 rev:102 rq:1338716 version:0.7.36

Changes:
--------
--- /work/SRC/openSUSE:Factory/libsolv/libsolv.changes  2026-01-13 
21:23:07.407610238 +0100
+++ /work/SRC/openSUSE:Factory/.libsolv.new.8177/libsolv.changes        
2026-03-14 22:21:26.810774555 +0100
@@ -1,0 +2,10 @@
+Thu Mar 12 10:11:18 CET 2026 - Michael Schroeder <[email protected]>
+
+- respect the "default" attribute in environment optionlist in
+  the comps parser
+- support suse namespace deps in boolean dependencies [bsc#1258193]
+- support for the Elbrus2000 (e2k) architecture
+- support language() suse namespace rewriting
+- bump version to 0.7.36
+
+-------------------------------------------------------------------

Old:
----
  libsolv-0.7.35.tar.bz2

New:
----
  libsolv-0.7.36.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libsolv.spec ++++++
--- /var/tmp/diff_new_pack.vMMfVa/_old  2026-03-14 22:21:27.810815953 +0100
+++ /var/tmp/diff_new_pack.vMMfVa/_new  2026-03-14 22:21:27.810815953 +0100
@@ -72,7 +72,7 @@
 %bcond_with zypp
 
 Name:           libsolv
-Version:        0.7.35
+Version:        0.7.36
 Release:        0
 Summary:        Package dependency solver using a satisfiability algorithm
 License:        BSD-3-Clause

++++++ libsolv-0.7.35.tar.bz2 -> libsolv-0.7.36.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.35/NEWS new/libsolv-0.7.36/NEWS
--- old/libsolv-0.7.35/NEWS     2025-08-04 11:20:06.000000000 +0200
+++ new/libsolv-0.7.36/NEWS     2026-03-12 10:20:08.000000000 +0100
@@ -1,6 +1,15 @@
 
 This file contains the major changes between libsolv versions:
 
+Version 0.7.36
+- selected bug fixes:
+  * respect the "default" attribute in environment optionlist in
+    the comps parser
+  * support suse namespace deps in boolean dependencies
+- new features:
+  * support for the Elbrus2000 (e2k) architecture
+  * support language() suse namespace rewriting
+
 Version 0.7.35
 - selected bug fixes:
   * fixed rare crash in the handling of allowuninstall in combination
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.35/VERSION.cmake 
new/libsolv-0.7.36/VERSION.cmake
--- old/libsolv-0.7.35/VERSION.cmake    2025-08-04 11:20:06.000000000 +0200
+++ new/libsolv-0.7.36/VERSION.cmake    2026-03-12 10:20:08.000000000 +0100
@@ -49,5 +49,5 @@
 
 SET(LIBSOLV_MAJOR "0")
 SET(LIBSOLV_MINOR "7")
-SET(LIBSOLV_PATCH "35")
+SET(LIBSOLV_PATCH "36")
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.35/examples/solv/repoinfo_download.c 
new/libsolv-0.7.36/examples/solv/repoinfo_download.c
--- old/libsolv-0.7.35/examples/solv/repoinfo_download.c        2023-07-19 
11:52:42.000000000 +0200
+++ new/libsolv-0.7.36/examples/solv/repoinfo_download.c        2026-03-09 
10:20:07.000000000 +0100
@@ -114,8 +114,8 @@
       const char *path = cinfo->path && strcmp(cinfo->path, "/") != 0 ? 
cinfo->path : "";
       int l = strlen(baseurl);
       int pl = strlen(path);
-      const char *sep = l && baseurl[l - 1] == '/' ? "" : "/";
-      const char *psep = pl && cinfo->path[pl - 1] == '/' ? "" : "/";
+      const char *sep = !l || baseurl[l - 1] == '/' ? "" : "/";
+      const char *psep = !pl || cinfo->path[pl - 1] == '/' ? "" : "/";
       snprintf(url, sizeof(url), "%s%s%s%s%s", baseurl, sep, path, psep, file);
     }
   fd = opentmpfile();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.35/examples/solv/solv.c 
new/libsolv-0.7.36/examples/solv/solv.c
--- old/libsolv-0.7.35/examples/solv/solv.c     2023-07-19 11:52:42.000000000 
+0200
+++ new/libsolv-0.7.36/examples/solv/solv.c     2026-02-03 13:20:07.000000000 
+0100
@@ -159,11 +159,6 @@
         printf("unsolvable: ");
       else
         printf("%s %s: ", v < 0 ? "conflicted" : "installed", 
pool_solvidset2str(pool, &qp));
-      if (type == 0)
-        {
-          printf("%s\n", solver_reason2str(solv, reason));
-          continue;
-        }
       if (type == SOLVER_RULE_LEARNT && lq)
         {
           for (j = 0; j < lq->count; j++)
@@ -175,7 +170,10 @@
               continue;
             }
         }
-      printf("%s\n", solver_decisioninfo2str(solv, bits, type, from, to, dep));
+      if (type == 0)           /* for SOLVER_REASON_PREMISE */
+        printf("%s\n", solver_reason2str(solv, reason));
+      else
+        printf("%s\n", solver_decisioninfo2str(solv, bits, type, from, to, 
dep));
     }
   queue_free(&qp);
   queue_free(&q);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.35/ext/repo_comps.c 
new/libsolv-0.7.36/ext/repo_comps.c
--- old/libsolv-0.7.35/ext/repo_comps.c 2023-07-19 11:52:42.000000000 +0200
+++ new/libsolv-0.7.36/ext/repo_comps.c 2026-03-09 16:00:06.000000000 +0100
@@ -108,6 +108,7 @@
   const char *kind;
   int isdefault;
   int isvisible;
+  int groupid_isdefault;
   Id handle;
 };
 
@@ -188,6 +189,13 @@
        break;
       }
 
+    case STATE_GROUPID:
+      {
+       const char *isdefault = solv_xmlparser_find_attr("default", atts);
+       pd->groupid_isdefault = (isdefault && !strcmp(isdefault, "true"));
+       break;
+      }
+
     default:
       break;
     }
@@ -240,7 +248,10 @@
 
     case STATE_GROUPID:
       id = pool_str2id(pd->pool, join2(&pd->jd, "group", ":", content), 1);
-      repo_add_idarray(pd->repo, pd->handle, pd->reqtype, id);
+      if (pd->groupid_isdefault && pd->reqtype == SOLVABLE_SUGGESTS)
+        repo_add_idarray(pd->repo, pd->handle, SOLVABLE_RECOMMENDS, id);
+      else
+        repo_add_idarray(pd->repo, pd->handle, pd->reqtype, id);
       break;
 
     case STATE_USERVISIBLE:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.35/ext/repo_rpmdb_librpm.h 
new/libsolv-0.7.36/ext/repo_rpmdb_librpm.h
--- old/libsolv-0.7.35/ext/repo_rpmdb_librpm.h  2023-07-19 11:52:42.000000000 
+0200
+++ new/libsolv-0.7.36/ext/repo_rpmdb_librpm.h  2026-02-03 13:20:07.000000000 
+0100
@@ -54,9 +54,20 @@
       return;
     }
   solv_free((char *)state->dbpath);
-  state->dbpath = access_rootdir(state, "/var/lib/rpm", W_OK) == -1
-                  && (access_rootdir(state, "/usr/share/rpm/Packages", R_OK) 
== 0 || access_rootdir(state, "/usr/share/rpm/rpmdb.sqlite", R_OK) == 0)
-                  ? "/usr/share/rpm" : "/var/lib/rpm";
+  if (access_rootdir(state, "/var/lib/rpm", W_OK) == -1)
+    {
+      if (access_rootdir(state, "/usr/share/rpm/Packages", R_OK) == 0 || 
access_rootdir(state, "/usr/share/rpm/rpmdb.sqlite", R_OK))
+       {
+         state->dbpath = "/usr/share/rpm";
+         return;
+       }
+      if (access_rootdir(state, "/usr/lib/sysimage/rpm/Packages.db", R_OK) == 
0 || access_rootdir(state, "/usr/lib/sysimage/rpm/rpmdb.sqlite", R_OK) || 
access_rootdir(state, "/usr/lib/sysimage/rpm/Packages", R_OK))
+       {
+         state->dbpath = "/usr/lib/sysimage/rpm";
+         return;
+       }
+    }
+  state->dbpath = "/var/lib/rpm";
 }
 
 static int
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.35/ext/solv_xfopen.c 
new/libsolv-0.7.36/ext/solv_xfopen.c
--- old/libsolv-0.7.35/ext/solv_xfopen.c        2024-11-28 14:00:06.000000000 
+0100
+++ new/libsolv-0.7.36/ext/solv_xfopen.c        2026-02-03 15:30:06.000000000 
+0100
@@ -33,7 +33,7 @@
   return funopen(cookie,
       (int (*)(void *, char *, int))(*mode == 'r' ? cread : NULL),             
/* readfn */
       (int (*)(void *, const char *, int))(*mode == 'w' ? cwrite : NULL),      
/* writefn */
-      (fpos_t (*)(void *, fpos_t, int))NULL,                                   
/* seekfn */
+      NULL,                                                                    
/* seekfn */
       cclose
       );
 #elif defined(HAVE_FOPENCOOKIE)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.35/ext/testcase.c 
new/libsolv-0.7.36/ext/testcase.c
--- old/libsolv-0.7.35/ext/testcase.c   2025-07-29 10:10:07.000000000 +0200
+++ new/libsolv-0.7.36/ext/testcase.c   2026-03-09 10:20:07.000000000 +0100
@@ -2585,6 +2585,15 @@
            id = 0;
          else if (!strcmp(pieces[1], "dep"))
            id = testcase_str2dep(pool, pieces[2]);
+         else if (!strcmp(pieces[1], "susedep"))
+           {
+             if (ngenid < 1)
+               {
+                 pool_error(pool, 0, "testcase_read: genid: out of stack");
+                 break;
+               }
+             id = pool_rewrite_suse_dep(pool, pool_str2id(pool, pieces[2], 
-1), genid[--ngenid]);
+           }
          else
            {
              pool_error(pool, 0, "testcase_read: genid: unknown command '%s'", 
pieces[1]);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.35/package/libsolv.changes 
new/libsolv-0.7.36/package/libsolv.changes
--- old/libsolv-0.7.35/package/libsolv.changes  2025-08-04 11:20:06.000000000 
+0200
+++ new/libsolv-0.7.36/package/libsolv.changes  2026-03-12 10:20:08.000000000 
+0100
@@ -1,4 +1,14 @@
 -------------------------------------------------------------------
+Thu Mar 12 10:11:18 CET 2026 - Michael Schroeder <[email protected]>
+
+- respect the "default" attribute in environment optionlist in
+  the comps parser
+- support suse namespace deps in boolean dependencies [bsc#1258193]
+- support for the Elbrus2000 (e2k) architecture
+- support language() suse namespace rewriting
+- bump version to 0.7.36
+
+-------------------------------------------------------------------
 Mon Aug  4 10:46:17 CEST 2025 - [email protected]
 
 - fixed rare crash in the handling of allowuninstall in combination
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.35/src/bitmap.c 
new/libsolv-0.7.36/src/bitmap.c
--- old/libsolv-0.7.35/src/bitmap.c     2023-07-19 11:52:42.000000000 +0200
+++ new/libsolv-0.7.36/src/bitmap.c     2026-03-06 09:40:07.000000000 +0100
@@ -69,6 +69,9 @@
   end = ti + (t->size < s->size ? t->size : s->size);
   while (ti < end)
     *ti++ &= *si++;
+  end = t->map + t->size;
+  while (ti < end)
+    *ti++ = 0;
 }
 
 /* bitwise-ors maps t and s, stores the result in t. */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.35/src/decision.c 
new/libsolv-0.7.36/src/decision.c
--- old/libsolv-0.7.35/src/decision.c   2025-05-16 10:20:07.000000000 +0200
+++ new/libsolv-0.7.36/src/decision.c   2026-02-03 13:20:07.000000000 +0100
@@ -737,10 +737,10 @@
   Pool *pool = solv->pool;
   Map dm;
   if ((flags & SOLVER_DECISIONLIST_TYPEMASK) != SOLVER_DECISIONLIST_SOLVABLE)
-  {
-    solver_get_proof(solv, id, flags, decisionlistq);
-    return;
-  }
+    {
+      solver_get_proof(solv, id, flags, decisionlistq);
+      return;
+    }
   map_init(&dm, pool->nsolvables);
   MAPSET(&dm, id);
   getdecisionlist(solv, &dm, flags, decisionlistq);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.35/src/libsolv.ver 
new/libsolv-0.7.36/src/libsolv.ver
--- old/libsolv-0.7.35/src/libsolv.ver  2025-08-01 15:40:11.000000000 +0200
+++ new/libsolv-0.7.36/src/libsolv.ver  2026-03-09 10:20:07.000000000 +0100
@@ -96,6 +96,7 @@
                pool_prepend_rootdir_tmp;
                pool_queuetowhatprovides;
                pool_rel2id;
+               pool_rewrite_suse_dep;
                pool_satisfieddep_map;
                pool_search;
                pool_selection2str;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.35/src/pool.h 
new/libsolv-0.7.36/src/pool.h
--- old/libsolv-0.7.35/src/pool.h       2025-08-01 15:40:11.000000000 +0200
+++ new/libsolv-0.7.36/src/pool.h       2026-03-09 10:20:07.000000000 +0100
@@ -424,6 +424,7 @@
 /* weird suse stuff */
 void pool_trivial_installable_multiversionmap(Pool *pool, Map *installedmap, 
Queue *pkgs, Queue *res, Map *multiversionmap);
 void pool_trivial_installable(Pool *pool, Map *installedmap, Queue *pkgs, 
Queue *res);
+Id pool_rewrite_suse_dep(Pool *pool, Id keyname, Id id);
 
 #ifdef __cplusplus
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.35/src/problems.c 
new/libsolv-0.7.36/src/problems.c
--- old/libsolv-0.7.35/src/problems.c   2023-07-19 11:52:42.000000000 +0200
+++ new/libsolv-0.7.36/src/problems.c   2026-02-03 13:20:07.000000000 +0100
@@ -1271,10 +1271,13 @@
 /*
  * find problem rule
  *
- * search for a rule that describes the problem to the
- * user. Actually a pretty hopeless task that may leave the user
+ * search for a rule that describes the problem to the user.
+ * Actually a pretty hopeless task that may leave the user
  * puzzled. To get all of the needed information use
  * solver_findallproblemrules() instead.
+ *
+ * Also note that solver_get_decisionlist() can be used to get
+ * a "proof" for the problem.
  */
 
 Id
@@ -1351,6 +1354,9 @@
  * return all rules that lead to the problem. This gives the user
  * all of the information to understand the problem, but the result
  * can be a large number of rules.
+ * 
+ * Also note that solver_get_decisionlist() can be used to get
+ * a "proof" for the problem.
  */
 
 void
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.35/src/suse.c 
new/libsolv-0.7.36/src/suse.c
--- old/libsolv-0.7.35/src/suse.c       2023-07-19 11:52:42.000000000 +0200
+++ new/libsolv-0.7.36/src/suse.c       2026-03-10 14:10:06.000000000 +0100
@@ -19,12 +19,95 @@
 #include "poolvendor.h"
 #include "util.h"
 
+/* use a REL_NAMESPACE dep for modalias/filesystem/language dependencies */
+static Id
+fix_namespace_dep_norel(Pool *pool, Id id)
+{
+  char buf[1024], *p, *bp;
+  const char *dep;
+  size_t depl;
+
+  dep = pool_id2str(pool, id);
+  if (!strncmp(dep, "modalias(", 9) && dep[9] && dep[10])
+    {
+      Id pkgid = 0;
+      depl = strlen(dep);
+      if (dep[depl - 1] != ')' || depl >= sizeof(buf))
+       return id;
+      strcpy(buf, dep);                /* need to make a copy for str2id */
+      bp = buf;
+      bp[depl - 1] = 0;                /* get rid of trailing ')' */
+      p = strchr(bp + 9, ':');
+      if (p && p != dep + 9 && strchr(p + 1, ':'))
+       {
+         pkgid = pool_strn2id(pool, bp + 9, p - (bp + 9), 1);
+         p++;
+       }
+      else
+       p = bp + 9;
+      id = pool_str2id(pool, p, 1);
+      id = pool_rel2id(pool, NAMESPACE_MODALIAS, id, REL_NAMESPACE, 1);
+      if (pkgid)
+        id = pool_rel2id(pool, pkgid, id, REL_AND, 1);
+    }
+  else if (!strncmp(dep, "filesystem(", 11) && dep[11] && dep[12])
+    {
+      depl = strlen(dep);
+      if (dep[depl - 1] != ')' || depl >= sizeof(buf))
+       return id;
+      strcpy(buf, dep);                /* need to make a copy for str2id */
+      bp = buf;
+      bp[depl - 1] = 0;                /* get rid of trailing ')' */
+      id = pool_str2id(pool, bp + 11, 1);
+      id = pool_rel2id(pool, NAMESPACE_FILESYSTEM, id, REL_NAMESPACE, 1);
+    }
+  else if (!strncmp(dep, "language(", 9) && dep[9] && dep[10] && dep[9] != ';')
+    {
+      char *p2;
+      depl = strlen(dep);
+      if (dep[depl - 1] != ')' || depl >= sizeof(buf))
+       return id;
+      strcpy(buf, dep);                /* need to make a copy for str2id */
+      bp = buf;
+      bp[depl - 1] = 0;                /* get rid of trailing ')' */
+      id = 0;
+      for (p2 = bp + 9; *p2; p2 = *p ? p + 1 : p)
+       {
+         Id idl;
+         p = strchr(p2, ';');
+         if (!p)
+           p = p2 + strlen(p2);
+         idl = pool_strn2id(pool, p2, p - p2, 1);
+         idl = pool_rel2id(pool, NAMESPACE_LANGUAGE, idl, REL_NAMESPACE, 1);
+         id = id ? pool_rel2id(pool, id, idl, REL_OR, 1) : idl;
+       }
+    }
+  return id;
+}
+
+static Id
+fix_namespace_dep(Pool *pool, Id id)
+{
+  Reldep *rd;
+  if (!ISRELDEP(id))
+    return fix_namespace_dep_norel(pool, id);
+  rd = GETRELDEP(pool, id);
+  if (rd->flags == REL_AND || rd->flags == REL_OR || rd->flags == REL_COND || 
rd->flags == REL_UNLESS || rd->flags == REL_ELSE)
+    {
+      Id name = fix_namespace_dep(pool, rd->name);
+      Id evr = fix_namespace_dep(pool, rd->evr);
+      return name == rd->name && evr == rd->evr ? id : pool_rel2id(pool, name, 
evr, rd->flags, 1);
+    }
+  return id;
+}
+
 Offset
 repo_fix_supplements(Repo *repo, Offset provides, Offset supplements, Offset 
freshens)
 {
   Pool *pool = repo->pool;
   Id id, idp, idl;
-  char buf[1024], *p, *dep;
+  char buf[1024], *p, *bp;
+  const char *dep;
   int i, l;
 
   if (provides)
@@ -34,41 +117,41 @@
          id = repo->idarraydata[i];
          if (ISRELDEP(id))
            continue;
-         dep = (char *)pool_id2str(pool, id);
+         dep = pool_id2str(pool, id);
          if (!strncmp(dep, "locale(", 7) && strlen(dep) < sizeof(buf) - 2)
            {
              idp = 0;
              strcpy(buf + 2, dep);
-             dep = buf + 2 + 7;
-             if ((p = strchr(dep, ':')) != 0 && p != dep)
+             bp = buf + 2 + 7;
+             if ((p = strchr(bp, ':')) != 0 && p != bp)
                {
                  *p++ = 0;
-                 idp = pool_str2id(pool, dep, 1);
-                 dep = p;
+                 idp = pool_str2id(pool, bp, 1);
+                 bp = p;
                }
              id = 0;
-             while ((p = strchr(dep, ';')) != 0)
+             while ((p = strchr(bp, ';')) != 0)
                {
-                 if (p == dep)
+                 if (p == bp)
                    {
-                     dep = p + 1;
+                     bp = p + 1;
                      continue;
                    }
                  *p++ = 0;
-                 idl = pool_str2id(pool, dep, 1);
+                 idl = pool_str2id(pool, bp, 1);
                  idl = pool_rel2id(pool, NAMESPACE_LANGUAGE, idl, 
REL_NAMESPACE, 1);
                  if (id)
                    id = pool_rel2id(pool, id, idl, REL_OR, 1);
                  else
                    id = idl;
-                 dep = p;
+                 bp = p;
                }
-             if (dep[0] && dep[1])
+             if (bp[0] && bp[1])
                {
-                 for (p = dep; *p && *p != ')'; p++)
+                 for (p = bp; *p && *p != ')'; p++)
                    ;
                  *p = 0;
-                 idl = pool_str2id(pool, dep, 1);
+                 idl = pool_str2id(pool, bp, 1);
                  idl = pool_rel2id(pool, NAMESPACE_LANGUAGE, idl, 
REL_NAMESPACE, 1);
                  if (id)
                    id = pool_rel2id(pool, id, idl, REL_OR, 1);
@@ -103,64 +186,46 @@
        {
          id = repo->idarraydata[i];
          if (ISRELDEP(id))
-           continue;
-         dep = (char *)pool_id2str(pool, id);
-         if (!strncmp(dep, "system:modalias(", 16))
-           dep += 7;
-         if (!strncmp(dep, "modalias(", 9) && dep[9] && dep[10] && strlen(dep) 
< sizeof(buf))
            {
-             strcpy(buf, dep);
-             p = strchr(buf + 9, ':');
-             if (p && p != buf + 9 && strchr(p + 1, ':'))
-               {
-                 *p++ = 0;
-                 idp = pool_str2id(pool, buf + 9, 1);
-                 p[strlen(p) - 1] = 0;
-                 id = pool_str2id(pool, p, 1);
-                 id = pool_rel2id(pool, NAMESPACE_MODALIAS, id, REL_NAMESPACE, 
1);
-                 id = pool_rel2id(pool, idp, id, REL_AND, 1);
-               }
-             else
-               {
-                 p = buf + 9;
-                 p[strlen(p) - 1] = 0;
-                 id = pool_str2id(pool, p, 1);
-                 id = pool_rel2id(pool, NAMESPACE_MODALIAS, id, REL_NAMESPACE, 
1);
-               }
-             if (id)
-               repo->idarraydata[i] = id;
+             Reldep *rd = GETRELDEP(pool, id);
+             if (rd->flags == REL_AND || rd->flags == REL_OR || rd->flags == 
REL_COND || rd->flags == REL_UNLESS  || rd->flags == REL_ELSE)
+               repo->idarraydata[i] = fix_namespace_dep(pool, id);
+             continue;
            }
+         dep = pool_id2str(pool, id);
+         if (!strncmp(dep, "modalias(", 9) || !strncmp(dep, "filesystem(", 11) 
|| !strncmp(dep, "language(", 9))
+           repo->idarraydata[i] = fix_namespace_dep_norel(pool, id);
          else if (!strncmp(dep, "packageand(", 11) && strlen(dep) < 
sizeof(buf))
            {
              strcpy(buf, dep);
              id = 0;
-             dep = buf + 11;
-             while ((p = strchr(dep, ':')) != 0)
+             bp = buf + 11;
+             while ((p = strchr(bp, ':')) != 0)
                {
-                 if (p == dep)
+                 if (p == bp)
                    {
-                     dep = p + 1;
+                     bp = p + 1;
                      continue;
                    }
                  /* argh, allow pattern: prefix. sigh */
-                 if (p - dep == 7 && !strncmp(dep, "pattern", 7))
+                 if (p - bp == 7 && !strncmp(bp, "pattern", 7))
                    {
                      p = strchr(p + 1, ':');
                      if (!p)
                        break;
                    }
                  *p++ = 0;
-                 idp = pool_str2id(pool, dep, 1);
+                 idp = pool_str2id(pool, bp, 1);
                  if (id)
                    id = pool_rel2id(pool, id, idp, REL_AND, 1);
                  else
                    id = idp;
-                 dep = p;
+                 bp = p;
                }
-             if (dep[0] && dep[1])
+             if (bp[0] && bp[1])
                {
-                 dep[strlen(dep) - 1] = 0;
-                 idp = pool_str2id(pool, dep, 1);
+                 bp[strlen(bp) - 1] = 0;
+                 idp = pool_str2id(pool, bp, 1);
                  if (id)
                    id = pool_rel2id(pool, id, idp, REL_AND, 1);
                  else
@@ -169,15 +234,6 @@
              if (id)
                repo->idarraydata[i] = id;
            }
-         else if (!strncmp(dep, "filesystem(", 11) && strlen(dep) < 
sizeof(buf))
-           {
-             strcpy(buf, dep + 11);
-             if ((p = strrchr(buf, ')')) != 0)
-               *p = 0;
-             id = pool_str2id(pool, buf, 1);
-             id = pool_rel2id(pool, NAMESPACE_FILESYSTEM, id, REL_NAMESPACE, 
1);
-             repo->idarraydata[i] = id;
-           }
        }
     }
   if (freshens && repo->idarraydata[freshens])
@@ -244,6 +300,32 @@
     s->conflicts = repo_fix_conflicts(s->repo, s->conflicts);
 }
 
+Id
+pool_rewrite_suse_dep(Pool *pool, Id keyname, Id id)
+{
+  /* hack: use a synthetic repo. As this is only for testing it
+   * should not be a problem */
+  Repo repo;
+  Id idarraydata[5];
+  memset(&repo, 0, sizeof(repo));
+  idarraydata[0] = 0;
+  idarraydata[1] = id;
+  idarraydata[2] = 0;
+  idarraydata[3] = 0;
+  idarraydata[4] = 0;
+  repo.pool = pool;
+  repo.idarraydata = idarraydata;
+  repo.idarraysize = 4;
+  repo.lastoff = 3;
+  if (keyname == SOLVABLE_PROVIDES)
+    return idarraydata[repo_fix_supplements(&repo, 1, 3, 0)];
+  if (keyname == SOLVABLE_SUPPLEMENTS)
+    return idarraydata[repo_fix_supplements(&repo, 0, 1, 0)];
+  if (keyname == SOLVABLE_CONFLICTS)
+    return idarraydata[repo_fix_conflicts(&repo, 1)];
+  return 0;
+}
+
 
/**********************************************************************************/
 
 static inline Id
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libsolv-0.7.35/test/testcases/forcebest/forcebest_multiarch_implicitobsoleteusescolors.t
 
new/libsolv-0.7.36/test/testcases/forcebest/forcebest_multiarch_implicitobsoleteusescolors.t
--- 
old/libsolv-0.7.35/test/testcases/forcebest/forcebest_multiarch_implicitobsoleteusescolors.t
        1970-01-01 01:00:00.000000000 +0100
+++ 
new/libsolv-0.7.36/test/testcases/forcebest/forcebest_multiarch_implicitobsoleteusescolors.t
        2026-01-21 11:40:06.000000000 +0100
@@ -0,0 +1,54 @@
+repo @System 0 testtags <inline>
+#>=Ver: 3.0
+#>=Pkg: a 1 1 x86_64
+#>=Prv: a = 1-1
+#>=Con: c < 1-1
+#>
+#>=Pkg: c 1 1 x86_64
+#>=Req: c-dep = 1-1
+#>=Prv: c = 1-1
+#>
+#>=Pkg: c-dep 1 1 x86_64
+#>=Prv: c-dep = 1-1
+#>
+#>=Pkg: d 1 1 x86_64
+#>=Req: c = 1-1
+#>=Req: multiarch = 1-1
+#>=Prv: d = 1-1
+#>
+#>=Pkg: multiarch 1 1 x86_64
+#>=Prv: multiarch = 1-1
+
+repo available 0 testtags <inline>
+#>=Ver: 3.0
+#>=Pkg: a 2 2 x86_64
+#>=Prv: a = 2-2
+#>=Con: c < 2-2
+#>
+#>=Pkg: c 2 2 x86_64
+#>=Req: c-dep = 2-2
+#>=Prv: c = 2-2
+#>
+#>=Pkg: c-dep 2 2 x86_64
+#>=Prv: c-dep = 2-2
+#>
+#>=Pkg: d 2 2 x86_64
+#>=Req: multiarch >= 2-2
+#>=Prv: d = 2-2
+#>
+#>=Pkg: multiarch 2 2 x86_64
+#>=Prv: multiarch = 2-2
+#>
+#>=Pkg: multiarch 2 2 i686
+#>=Prv: multiarch = 2-2
+
+system x86_64 rpm @System
+poolflags implicitobsoleteusescolors
+solverflags bestobeypolicy
+job update oneof a-2-2.x86_64@available multiarch-1-1.x86_64@@System 
multiarch-2-2.i686@available [forcebest,targeted,setevr,setarch]
+result transaction,problems <inline>
+#>upgrade a-1-1.x86_64@@System a-2-2.x86_64@available
+#>upgrade multiarch-1-1.x86_64@@System multiarch-2-2.x86_64@available
+#>upgrade c-dep-1-1.x86_64@@System c-dep-2-2.x86_64@available
+#>upgrade c-1-1.x86_64@@System c-2-2.x86_64@available
+#>upgrade d-1-1.x86_64@@System d-2-2.x86_64@available
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.35/test/testcases/suse/susedep.t 
new/libsolv-0.7.36/test/testcases/suse/susedep.t
--- old/libsolv-0.7.35/test/testcases/suse/susedep.t    1970-01-01 
01:00:00.000000000 +0100
+++ new/libsolv-0.7.36/test/testcases/suse/susedep.t    2026-03-09 
12:50:06.000000000 +0100
@@ -0,0 +1,125 @@
+genid dep modalias(bar:baz)
+genid susedep solvable:supplements
+result genid <inline>
+#>genid  1: genid lit namespace:modalias
+#>genid  2: genid lit bar:baz
+#>genid  3: genid op <NAMESPACE>
+#>genid dep namespace:modalias(bar:baz)
+nextjob
+
+genid dep modalias(foo:bar:baz)
+genid susedep solvable:supplements
+result genid <inline>
+#>genid  1: genid lit foo
+#>genid  2: genid lit namespace:modalias
+#>genid  3: genid lit bar:baz
+#>genid  4: genid op <NAMESPACE>
+#>genid  5: genid op &
+#>genid dep foo & namespace:modalias(bar:baz)
+nextjob
+
+genid dep kernel & modalias(foo:bar:baz)
+genid susedep solvable:supplements
+result genid <inline>
+#>genid  1: genid lit kernel
+#>genid  2: genid lit foo
+#>genid  3: genid lit namespace:modalias
+#>genid  4: genid lit bar:baz
+#>genid  5: genid op <NAMESPACE>
+#>genid  6: genid op &
+#>genid  7: genid op &
+#>genid dep kernel & foo & namespace:modalias(bar:baz)
+nextjob
+
+genid dep filesystem(foo:bar)
+genid susedep solvable:supplements
+result genid <inline>
+#>genid  1: genid lit namespace:filesystem
+#>genid  2: genid lit foo:bar
+#>genid  3: genid op <NAMESPACE>
+#>genid dep namespace:filesystem(foo:bar)
+nextjob
+
+genid dep packageand(foo:bar)
+genid susedep solvable:supplements
+result genid <inline>
+#>genid  1: genid lit foo
+#>genid  2: genid lit bar
+#>genid  3: genid op &
+#>genid dep foo & bar
+nextjob
+
+genid dep packageand(foo:pattern:bar)
+genid susedep solvable:supplements
+result genid <inline>
+#>genid  1: genid lit foo
+#>genid  2: genid lit pattern:bar
+#>genid  3: genid op &
+#>genid dep foo & pattern:bar
+nextjob
+
+genid dep otherproviders(foo:bar)
+genid susedep solvable:conflicts
+result genid <inline>
+#>genid  1: genid lit namespace:otherproviders
+#>genid  2: genid lit foo:bar
+#>genid  3: genid op <NAMESPACE>
+#>genid dep namespace:otherproviders(foo:bar)
+nextjob
+
+genid dep foo:/bin/bar
+genid susedep solvable:provides
+result genid <inline>
+#>genid  1: genid lit namespace:splitprovides
+#>genid  2: genid lit foo
+#>genid  3: genid lit /bin/bar
+#>genid  4: genid op +
+#>genid  5: genid op <NAMESPACE>
+#>genid dep namespace:splitprovides(foo + /bin/bar)
+nextjob
+
+genid dep locale(de)
+genid susedep solvable:provides
+result genid <inline>
+#>genid  1: genid lit namespace:language
+#>genid  2: genid lit de
+#>genid  3: genid op <NAMESPACE>
+#>genid dep namespace:language(de)
+nextjob
+
+genid dep locale(foo:de;en)
+genid susedep solvable:provides
+result genid <inline>
+#>genid  1: genid lit foo
+#>genid  2: genid lit namespace:language
+#>genid  3: genid lit de
+#>genid  4: genid op <NAMESPACE>
+#>genid  5: genid lit namespace:language
+#>genid  6: genid lit en
+#>genid  7: genid op <NAMESPACE>
+#>genid  8: genid op |
+#>genid  9: genid op &
+#>genid dep foo & (namespace:language(de) | namespace:language(en))
+nextjob
+
+genid dep language(de)
+genid susedep solvable:supplements
+result genid <inline>
+#>genid  1: genid lit namespace:language
+#>genid  2: genid lit de
+#>genid  3: genid op <NAMESPACE>
+#>genid dep namespace:language(de)
+nextjob
+
+genid dep language(de;en)
+genid susedep solvable:supplements
+result genid <inline>
+#>genid  1: genid lit namespace:language
+#>genid  2: genid lit de
+#>genid  3: genid op <NAMESPACE>
+#>genid  4: genid lit namespace:language
+#>genid  5: genid lit en
+#>genid  6: genid op <NAMESPACE>
+#>genid  7: genid op |
+#>genid dep namespace:language(de) | namespace:language(en)
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.35/tools/deb2solv.c 
new/libsolv-0.7.36/tools/deb2solv.c
--- old/libsolv-0.7.35/tools/deb2solv.c 2023-07-19 11:52:42.000000000 +0200
+++ new/libsolv-0.7.36/tools/deb2solv.c 2026-02-03 13:20:07.000000000 +0100
@@ -15,7 +15,6 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <string.h>
-#include <getopt.h>
 
 #include "util.h"
 #include "pool.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.35/tools/dumpsolv.c 
new/libsolv-0.7.36/tools/dumpsolv.c
--- old/libsolv-0.7.35/tools/dumpsolv.c 2023-07-19 11:52:42.000000000 +0200
+++ new/libsolv-0.7.36/tools/dumpsolv.c 2026-02-03 13:20:07.000000000 +0100
@@ -9,7 +9,6 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <string.h>
-#include <getopt.h>
 
 static int with_attr;
 static int dump_json;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.35/tools/mergesolv.c 
new/libsolv-0.7.36/tools/mergesolv.c
--- old/libsolv-0.7.35/tools/mergesolv.c        2023-07-19 11:52:42.000000000 
+0200
+++ new/libsolv-0.7.36/tools/mergesolv.c        2026-02-03 13:20:07.000000000 
+0100
@@ -16,7 +16,6 @@
 #include <stdlib.h>
 #include <string.h>
 #include <assert.h>
-#include <getopt.h>
 
 #include "pool.h"
 #include "repo_solv.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.35/tools/repo2solv.c 
new/libsolv-0.7.36/tools/repo2solv.c
--- old/libsolv-0.7.35/tools/repo2solv.c        2025-05-14 14:10:07.000000000 
+0200
+++ new/libsolv-0.7.36/tools/repo2solv.c        2026-02-03 13:20:07.000000000 
+0100
@@ -5,7 +5,6 @@
  * for further information
  */
 
-#include <getopt.h>
 #include <sys/types.h>
 #include <stdio.h>
 #include <stdlib.h>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.35/tools/testsolv.c 
new/libsolv-0.7.36/tools/testsolv.c
--- old/libsolv-0.7.35/tools/testsolv.c 2024-04-10 12:40:06.000000000 +0200
+++ new/libsolv-0.7.36/tools/testsolv.c 2026-02-03 13:20:07.000000000 +0100
@@ -1,7 +1,6 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
-#include <getopt.h>
 
 #include "pool.h"
 #include "repo.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.35/win32/unistd.h 
new/libsolv-0.7.36/win32/unistd.h
--- old/libsolv-0.7.35/win32/unistd.h   2023-07-19 11:52:42.000000000 +0200
+++ new/libsolv-0.7.36/win32/unistd.h   2026-02-03 13:20:07.000000000 +0100
@@ -1,4 +1,6 @@
 #ifndef _UNISTD_H
 #define _UNISTD_H
 
+#include <getopt.h>
+
 #endif
\ No newline at end of file

Reply via email to