diff --git a/0.7.24.tar.gz b/0.7.24.tar.gz deleted file mode 100644 index 0b59a57a026d2a202073b502fdc337543c1d307c..0000000000000000000000000000000000000000 Binary files a/0.7.24.tar.gz and /dev/null differ diff --git a/0.7.35.tar.gz b/0.7.35.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..cdb7850df056389977964f3069e4973b2a7be329 Binary files /dev/null and b/0.7.35.tar.gz differ diff --git a/backport-Add-testcase-for-last-commit.patch b/backport-Add-testcase-for-last-commit.patch deleted file mode 100644 index f26a9bd0dd45b73f92fe97ab49aeec0fb8a1fe85..0000000000000000000000000000000000000000 --- a/backport-Add-testcase-for-last-commit.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 47734e26d67ad236a29c160ff224fcb1910e3a6f Mon Sep 17 00:00:00 2001 -From: Michael Schroeder -Date: Tue, 18 Apr 2023 12:36:40 +0200 -Subject: [PATCH] Add testcase for last commit - ---- - test/testcases/cplxdeps/ifelse_rec.t | 10 ++++++++++ - 1 file changed, 10 insertions(+) - create mode 100644 test/testcases/cplxdeps/ifelse_rec.t - -diff --git a/test/testcases/cplxdeps/ifelse_rec.t b/test/testcases/cplxdeps/ifelse_rec.t -new file mode 100644 -index 000000000..ea467027c ---- /dev/null -+++ b/test/testcases/cplxdeps/ifelse_rec.t -@@ -0,0 +1,10 @@ -+repo appstream 0 testtags -+#>=Pkg: xorg-x11-server-Xorg 1.20.11 18.el9 noarch -+#>=Req: missing-req -+#>=Pkg: pass 1.7.4 6.el9 noarch -+#>=Rec: xclip (xorg-x11-server-Xorg wl-clipboard) -+repo @System 0 empty -+system unset * @System -+job install pkg pass-1.7.4-6.el9.noarch@appstream -+result transaction,problems -+#>install pass-1.7.4-6.el9.noarch@appstream diff --git a/backport-Fix-a-couple-small-static-analysis-findings-for-uninitialized-structs.patch b/backport-Fix-a-couple-small-static-analysis-findings-for-uninitialized-structs.patch deleted file mode 100644 index f082e31e0dde588db436123cd2164b7e88595320..0000000000000000000000000000000000000000 --- a/backport-Fix-a-couple-small-static-analysis-findings-for-uninitialized-structs.patch +++ /dev/null @@ -1,69 +0,0 @@ -From 2c4ee52a948a9ccff2242cd02ac8ce81a0559deb Mon Sep 17 00:00:00 2001 -From: David Cantrell -Date: Tue, 26 Mar 2024 12:13:55 -0400 -Subject: [PATCH] Fix a couple small static analysis findings for uninitialized - structs - -The memset() on the KeyValue is more explicit even though if you trace -the code you will see it fills out the struct. However, it's possible -that not every struct member will be initialized and adding the -memset() makes things more obvious and appeases the static analyzer. - -Conflict:NA -Reference:https://github.com/openSUSE/libsolv/commit/2c4ee52a948a9ccff2242cd02ac8ce81a0559deb.patch - ---- - ext/repo_rpmmd.c | 2 ++ - ext/repo_susetags.c | 1 + - ext/testcase.c | 3 +++ - 3 files changed, 6 insertions(+) - -diff --git a/ext/repo_rpmmd.c b/ext/repo_rpmmd.c -index 1232e43..5d0f5fe 100644 ---- a/ext/repo_rpmmd.c -+++ b/ext/repo_rpmmd.c -@@ -609,6 +609,8 @@ fill_cshash_from_new_solvables(struct parsedata *pd) - KeyValue kv; - Repokey *key; - -+ memset(&kv, 0, sizeof(kv)); -+ - for (i = pd->first; i < pool->nsolvables; i++) - { - if (pool->solvables[i].repo != pd->repo) -diff --git a/ext/repo_susetags.c b/ext/repo_susetags.c -index dc60aa4..86bb1e9 100644 ---- a/ext/repo_susetags.c -+++ b/ext/repo_susetags.c -@@ -339,6 +339,7 @@ lookup_shared_id(Repodata *data, Id p, Id keyname, Id voidid, int uninternalized - if (uninternalized) - { - KeyValue kv; -+ memset(&kv, 0, sizeof(kv)); - Repokey *key = repodata_lookup_kv_uninternalized(data, p, keyname, &kv); - if (!key) - return 0; -diff --git a/ext/testcase.c b/ext/testcase.c -index f46f738..3e22546 100644 ---- a/ext/testcase.c -+++ b/ext/testcase.c -@@ -1440,6 +1440,7 @@ testcase_solverresult(Solver *solv, int resultflags) - { - Queue q; - -+ - queue_init(&q); - solver_get_orphaned(solv, &q); - for (i = 0; i < q.count; i++) -@@ -1497,6 +1498,8 @@ testcase_solverresult(Solver *solv, int resultflags) - if ((resultflags & TESTCASE_RESULT_USERINSTALLED) != 0) - { - Queue q; -+ -+ queue_init(&q); - solver_get_userinstalled(solv, &q, 0); - for (i = 0; i < q.count; i++) - { --- -2.9.3.windows.1 - diff --git a/backport-Fix-a-possible-format-overflow-in-dump_genid.patch b/backport-Fix-a-possible-format-overflow-in-dump_genid.patch deleted file mode 100644 index 27097aaf564ae37c6610a77ead334ad02743ee7b..0000000000000000000000000000000000000000 --- a/backport-Fix-a-possible-format-overflow-in-dump_genid.patch +++ /dev/null @@ -1,58 +0,0 @@ -From f31c6de1a7051d2d98efec2a56b92f6da0fef537 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= -Date: Wed, 10 Jul 2024 16:54:56 +0200 -Subject: [PATCH] Fix a possible format overflow in dump_genid() -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -GCC 14 called with CFLAGS='-O2 -Wformat-overflow' complains: - - /tmp/libsolv/ext/testcase.c: In function ‘dump_genid’: - /tmp/libsolv/ext/testcase.c:1275:33: warning: ‘: genid ’ directive writing 8 bytes into a region of size between 3 and 12 [-Wformat-overflow=] - 1275 | sprintf(cntbuf, "genid %2d: genid ", cnt++); - | ^~~~~~~~ - /tmp/libsolv/ext/testcase.c:1275:7: note: ‘sprintf’ output between 17 and 26 bytes into a destination of size 20 - 1275 | sprintf(cntbuf, "genid %2d: genid ", cnt++); - | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - /tmp/libsolv/ext/testcase.c:1270:33: warning: ‘: genid ’ directive writing 8 bytes into a region of size between 3 and 12 [-Wformat-overflow=] - 1270 | sprintf(cntbuf, "genid %2d: genid ", cnt++); - | ^~~~~~~~ - /tmp/libsolv/ext/testcase.c:1270:7: note: ‘sprintf’ output between 17 and 26 bytes into a destination of size 20 - 1270 | sprintf(cntbuf, "genid %2d: genid ", cnt++); - | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -That's indeed a bug: sprintf() writes into a 20-byte array cntbuf. cnt -is int, 32-bit long integer on x86_64 Linux platform. dump_genid() -starts with cnt = 1 and increases. It can go up to 2147483647 decimal -value, then wrap to -2147483648 decimal value. That's up to 11 bytes -of the integer, plus 14 bytes of a static string, plus 1 byte of -a trailing '\0'. 26 bytes in total. - -While it's improbable that cnt would amount that long number in real -life, it's better to be prepared for the worst. Also a benefit is that -static analyzers will be be content. - -This patch increases cntbuf[] size to accomodate common 32-bit -ints. (Generic, albeit illegible, expression would be: - - cntbuf[((sizeof(cnt) * 8 - 1) * 3 / 10 + 1 + 1) + 14 + 1]; - -but I'm not sure that long expression is worth of it.) ---- - ext/testcase.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/ext/testcase.c b/ext/testcase.c -index d3533b9bf..1640ad7ad 100644 ---- a/ext/testcase.c -+++ b/ext/testcase.c -@@ -1256,7 +1256,7 @@ static int - dump_genid(Pool *pool, Strqueue *sq, Id id, int cnt) - { - struct oplist *op; -- char cntbuf[20]; -+ char cntbuf[26]; - const char *s; - - if (ISRELDEP(id)) diff --git a/backport-Fix-incomplete-headers.patch b/backport-Fix-incomplete-headers.patch deleted file mode 100644 index 5a8fbad9dea96b981df660db7c6138fd0a2afbca..0000000000000000000000000000000000000000 --- a/backport-Fix-incomplete-headers.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 9169e25bb2bab6af8cba0008b77a55de22833168 Mon Sep 17 00:00:00 2001 -From: AntoinePrv -Date: Wed, 3 May 2023 14:59:23 +0200 -Subject: [PATCH] Fix incomplete headers - ---- - src/rules.h | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/src/rules.h b/src/rules.h -index 92efe8a7c..895462a5c 100644 ---- a/src/rules.h -+++ b/src/rules.h -@@ -13,10 +13,17 @@ - #ifndef LIBSOLV_RULES_H - #define LIBSOLV_RULES_H - -+#include "pooltypes.h" -+ - #ifdef __cplusplus - extern "C" { - #endif - -+typedef struct s_Solvable Solvable; -+typedef struct s_Map Map; -+typedef struct s_Queue Queue; -+ -+ - /* ---------------------------------------------- - * Rule - * diff --git a/backport-Handle-installed-packages-in-three-passes.patch b/backport-Handle-installed-packages-in-three-passes.patch deleted file mode 100644 index 80e1bf458c14b4b8052c35b47af5966058bb8357..0000000000000000000000000000000000000000 --- a/backport-Handle-installed-packages-in-three-passes.patch +++ /dev/null @@ -1,69 +0,0 @@ -From bbd1801748e74259f7d8d7d7eee369064961962b Mon Sep 17 00:00:00 2001 -From: Michael Schroeder -Date: Tue, 13 Feb 2024 15:25:47 +0100 -Subject: [PATCH] Handle installed packages in three passes - -Fixes issue #550 ---- - src/solver.c | 21 ++++++++++++++++----- - 1 file changed, 16 insertions(+), 5 deletions(-) - -diff --git a/src/solver.c b/src/solver.c -index 741aa1b2f..a1a41f677 100644 ---- a/src/solver.c -+++ b/src/solver.c -@@ -1836,7 +1836,7 @@ resolve_installed(Solver *solv, int level, int disablerules, Queue *dq) - { - Pool *pool = solv->pool; - Repo *installed = solv->installed; -- int i, n, pass; -+ int i, n, pass, startpass; - int installedpos = solv->installedpos; - Solvable *s; - Id p, pp; -@@ -1845,10 +1845,14 @@ resolve_installed(Solver *solv, int level, int disablerules, Queue *dq) - POOL_DEBUG(SOLV_DEBUG_SOLVER, "resolving installed packages\n"); - if (!installedpos) - installedpos = installed->start; -- /* we use two passes if we need to update packages -- * to create a better user experience */ -- for (pass = !solv->updatemap_all && solv->updatemap.size ? 0 : 1; pass < 2; ) -+ /* we use passes if we need to update packages to create a better user experience: -+ * pass 0: update the packages requested by the user -+ * pass 1: keep the installed packages if we can -+ * pass 2: update the packages that could not be kept */ -+ startpass = solv->updatemap_all ? 2 : solv->updatemap.size ? 0 : 1; -+ for (pass = startpass; pass < 3; ) - { -+ int needpass2 = 0; - int passlevel = level; - Id *specialupdaters = solv->specialupdaters; - /* start with installedpos, the position that gave us problems the last time */ -@@ -1880,6 +1884,11 @@ resolve_installed(Solver *solv, int level, int disablerules, Queue *dq) - * the installed package and not replace it with a newer version */ - if (!MAPTST(&solv->noupdate, i - installed->start) && (solv->decisionmap[i] < 0 || solv->updatemap_all || (solv->updatemap.size && MAPTST(&solv->updatemap, i - installed->start)))) - { -+ if (pass == 1) -+ { -+ needpass2 = 1; /* first do the packages we do not want/need to update */ -+ continue; -+ } - if (dq->count) - queue_empty(dq); - /* find update candidates */ -@@ -1964,12 +1973,14 @@ resolve_installed(Solver *solv, int level, int disablerules, Queue *dq) - if (level < origlevel) - break; /* ran into trouble */ - /* re-run all passes */ -- pass = !solv->updatemap_all && solv->updatemap.size ? 0 : 1; -+ pass = startpass; - continue; - } - /* reset installedpos, advance to next pass */ - installedpos = installed->start; - pass++; -+ if (pass == 2 && !needpass2) -+ break; - } - solv->installedpos = installedpos; - return level; diff --git a/backport-Move-special-updaters-handling-into-its-own-function.patch b/backport-Move-special-updaters-handling-into-its-own-function.patch deleted file mode 100644 index c4d88ab1d5697e270b62a5d7d1952660cde7de4e..0000000000000000000000000000000000000000 --- a/backport-Move-special-updaters-handling-into-its-own-function.patch +++ /dev/null @@ -1,189 +0,0 @@ -From 4c7ce065280f062c52ae19d75344c49e5f562108 Mon Sep 17 00:00:00 2001 -From: Michael Schroeder -Date: Tue, 13 Feb 2024 14:42:25 +0100 -Subject: [PATCH] Move special updaters handling into its own function - ---- - src/solver.c | 127 ++++++++++++++++++++++++++++----------------------- - 1 file changed, 71 insertions(+), 56 deletions(-) - -diff --git a/src/solver.c b/src/solver.c -index 0c3333d87..741aa1b2f 100644 ---- a/src/solver.c -+++ b/src/solver.c -@@ -1788,6 +1788,49 @@ prune_to_update_targets(Solver *solv, Id *cp, Queue *q) - queue_truncate(q, j); - } - -+static void -+get_special_updaters(Solver *solv, int i, Rule *rr, Queue *dq) -+{ -+ Pool *pool = solv->pool; -+ Repo *installed = solv->installed; -+ int specoff = solv->specialupdaters[i - installed->start]; -+ int j, d; -+ Id p; -+ -+ /* special multiversion handling, make sure best version is chosen */ -+ if (rr->p == i && solv->decisionmap[i] >= 0) -+ queue_push(dq, i); -+ for (d = specoff; (p = pool->whatprovidesdata[d]) != 0; d++) -+ if (solv->decisionmap[p] >= 0) -+ queue_push(dq, p); -+ /* if we have installed packages try to find identical ones to get -+ * repo priorities. see issue #343 */ -+ for (j = 0; j < dq->count; j++) -+ { -+ Id p2 = dq->elements[j]; -+ if (pool->solvables[p2].repo != installed) -+ continue; -+ for (d = specoff; (p = pool->whatprovidesdata[d]) != 0; d++) -+ { -+ if (solv->decisionmap[p] >= 0 || pool->solvables[p].repo == installed) -+ continue; -+ if (solvable_identical(pool->solvables + p, pool->solvables + p2)) -+ queue_push(dq, p); /* identical to installed, put it on the list so we have a repo prio */ -+ } -+ } -+ if (dq->count && solv->update_targets && solv->update_targets->elements[i - installed->start]) -+ prune_to_update_targets(solv, solv->update_targets->elements + solv->update_targets->elements[i - installed->start], dq); -+ if (dq->count) -+ { -+ policy_filter_unwanted(solv, dq, POLICY_MODE_CHOOSE); -+ p = dq->elements[0]; -+ if (p != i && solv->decisionmap[p] == 0) -+ dq->count = 1; -+ else -+ dq->count = 0; -+ } -+} -+ - static int - resolve_installed(Solver *solv, int level, int disablerules, Queue *dq) - { -@@ -1804,7 +1847,7 @@ resolve_installed(Solver *solv, int level, int disablerules, Queue *dq) - installedpos = installed->start; - /* we use two passes if we need to update packages - * to create a better user experience */ -- for (pass = solv->updatemap.size ? 0 : 1; pass < 2; ) -+ for (pass = !solv->updatemap_all && solv->updatemap.size ? 0 : 1; pass < 2; ) - { - int passlevel = level; - Id *specialupdaters = solv->specialupdaters; -@@ -1812,7 +1855,6 @@ resolve_installed(Solver *solv, int level, int disablerules, Queue *dq) - for (i = installedpos, n = installed->start; n < installed->end; i++, n++) - { - Rule *r, *rr; -- Id d; - - if (i == installed->end) - i = installed->start; -@@ -1836,48 +1878,20 @@ resolve_installed(Solver *solv, int level, int disablerules, Queue *dq) - /* check if we should update this package to the latest version - * noupdate is set for erase jobs, in that case we want to deinstall - * the installed package and not replace it with a newer version */ -- if (dq->count) -- queue_empty(dq); - if (!MAPTST(&solv->noupdate, i - installed->start) && (solv->decisionmap[i] < 0 || solv->updatemap_all || (solv->updatemap.size && MAPTST(&solv->updatemap, i - installed->start)))) - { -- if (specialupdaters && (d = specialupdaters[i - installed->start]) != 0) -+ if (dq->count) -+ queue_empty(dq); -+ /* find update candidates */ -+ if (specialupdaters && specialupdaters[i - installed->start] != 0) - { -- int j; -- /* special multiversion handling, make sure best version is chosen */ -- if (rr->p == i && solv->decisionmap[i] >= 0) -- queue_push(dq, i); -- while ((p = pool->whatprovidesdata[d++]) != 0) -- if (solv->decisionmap[p] >= 0) -- queue_push(dq, p); -- for (j = 0; j < dq->count; j++) -- { -- Id p2 = dq->elements[j]; -- if (pool->solvables[p2].repo != installed) -- continue; -- d = specialupdaters[i - installed->start]; -- while ((p = pool->whatprovidesdata[d++]) != 0) -- { -- if (solv->decisionmap[p] >= 0 || pool->solvables[p].repo == installed) -- continue; -- if (solvable_identical(pool->solvables + p, pool->solvables + p2)) -- queue_push(dq, p); /* identical to installed, put it on the list so we have a repo prio */ -- } -- } -- if (dq->count && solv->update_targets && solv->update_targets->elements[i - installed->start]) -- prune_to_update_targets(solv, solv->update_targets->elements + solv->update_targets->elements[i - installed->start], dq); -+ get_special_updaters(solv, i, rr, dq); -+ /* if we have an update set rr to the feature rule */ - if (dq->count) - { -- policy_filter_unwanted(solv, dq, POLICY_MODE_CHOOSE); -- p = dq->elements[0]; -- if (p != i && solv->decisionmap[p] == 0) -- { -- rr = solv->rules + solv->featurerules + (i - solv->installed->start); -- if (!rr->p) /* update rule == feature rule? */ -- rr = rr - solv->featurerules + solv->updaterules; -- dq->count = 1; -- } -- else -- dq->count = 0; -+ rr = solv->rules + solv->featurerules + (i - solv->installed->start); -+ if (!rr->p) /* update rule == feature rule? */ -+ rr = rr - solv->featurerules + solv->updaterules; - } - } - else -@@ -1894,24 +1908,25 @@ resolve_installed(Solver *solv, int level, int disablerules, Queue *dq) - queue_push(dq, p); - } - } -- } -- if (dq->count && solv->update_targets && solv->update_targets->elements[i - installed->start]) -- prune_to_update_targets(solv, solv->update_targets->elements + solv->update_targets->elements[i - installed->start], dq); -- /* install best version */ -- if (dq->count) -- { -- olevel = level; -- level = selectandinstall(solv, level, dq, disablerules, rr - solv->rules, SOLVER_REASON_UPDATE_INSTALLED); -- if (level <= olevel) -+ if (dq->count && solv->update_targets && solv->update_targets->elements[i - installed->start]) -+ prune_to_update_targets(solv, solv->update_targets->elements + solv->update_targets->elements[i - installed->start], dq); -+ /* install best version */ -+ if (dq->count) - { -- if (level < passlevel) -- break; /* trouble */ -- if (level < olevel) -- n = installed->start; /* redo all */ -- i--; -- n--; -- continue; -+ olevel = level; -+ level = selectandinstall(solv, level, dq, disablerules, rr - solv->rules, SOLVER_REASON_UPDATE_INSTALLED); -+ if (level <= olevel) -+ { -+ if (level < passlevel) -+ break; /* trouble */ -+ if (level < olevel) -+ n = installed->start; /* redo all */ -+ i--; -+ n--; -+ continue; -+ } - } -+ /* check original package even if we installed an update */ - } - /* if still undecided keep package */ - if (solv->decisionmap[i] == 0) -@@ -1949,7 +1964,7 @@ resolve_installed(Solver *solv, int level, int disablerules, Queue *dq) - if (level < origlevel) - break; /* ran into trouble */ - /* re-run all passes */ -- pass = solv->updatemap.size ? 0 : 1; -+ pass = !solv->updatemap_all && solv->updatemap.size ? 0 : 1; - continue; - } - /* reset installedpos, advance to next pass */ diff --git a/backport-Treat-condition-both-as-positive-and-negative-literal-in-pool_add_pos_literals_complex_dep.patch b/backport-Treat-condition-both-as-positive-and-negative-literal-in-pool_add_pos_literals_complex_dep.patch deleted file mode 100644 index 0ac5e3f3eefd30b843b56a6a560657411b50b11c..0000000000000000000000000000000000000000 --- a/backport-Treat-condition-both-as-positive-and-negative-literal-in-pool_add_pos_literals_complex_dep.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 1edb35a3bd9abcede3a200471a4d1868f8054c99 Mon Sep 17 00:00:00 2001 -From: Michael Schroeder -Date: Tue, 18 Apr 2023 11:57:50 +0200 -Subject: [PATCH] Treat condition both as positive and negative literal in - pool_add_pos_literals_complex_dep - -That's because (A IF B ELSE C) gets rewritten to (A OR ~B) AND (C OR B) and -(A UNLESS B ELSE C) gets rewritten to (A AND ~B) OR (C AND B). In both -cases we have A, B, ~B, C. - -This resolves issue #527 ---- - src/cplxdeps.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/cplxdeps.c b/src/cplxdeps.c -index 6c40752e2..26e754d95 100644 ---- a/src/cplxdeps.c -+++ b/src/cplxdeps.c -@@ -405,6 +405,7 @@ pool_add_pos_literals_complex_dep(Pool *pool, Id dep, Queue *q, Map *m, int neg) - Reldep *rd2 = GETRELDEP(pool, rd->evr); - if (rd2->flags == REL_ELSE) - { -+ pool_add_pos_literals_complex_dep(pool, rd2->name, q, m, !neg); - pool_add_pos_literals_complex_dep(pool, rd2->evr, q, m, !neg); - dep = rd2->name; - } diff --git a/backport-choice-rules-also-do-solver_choicerulecheck-for-package-downgrades.patch b/backport-choice-rules-also-do-solver_choicerulecheck-for-package-downgrades.patch deleted file mode 100644 index 06c5c53d2dd2b3d60d6ad7679eb2ae73e08240bb..0000000000000000000000000000000000000000 --- a/backport-choice-rules-also-do-solver_choicerulecheck-for-package-downgrades.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 2c85ed581422e072ad95119f3d7dc19eb45f29ac Mon Sep 17 00:00:00 2001 -From: Michael Schroeder -Date: Fri, 19 May 2023 15:17:53 +0200 -Subject: [PATCH] choice rules: also do solver_choicerulecheck for package - downgrades - -Fixes issue #514 ---- - src/rules.c | 13 ++++++++++++- - 1 file changed, 12 insertions(+), 1 deletion(-) - -diff --git a/src/rules.c b/src/rules.c -index 660656f01..7d57cfdee 100644 ---- a/src/rules.c -+++ b/src/rules.c -@@ -3449,6 +3449,7 @@ solver_addchoicerules(Solver *solv) - int lastaddedcnt; - unsigned int now; - int isinstalled; -+ int dodowngradecheck = solv->allowdowngrade; - - solv->choicerules = solv->nrules; - if (!pool->installed) -@@ -3457,6 +3458,8 @@ solver_addchoicerules(Solver *solv) - return; - } - now = solv_timems(0); -+ if ((solv->dupinvolvedmap_all || solv->dupinvolvedmap.size) && solv->dup_allowdowngrade) -+ dodowngradecheck = 1; - queue_init(&q); - queue_init(&qi); - queue_init(&qcheck); -@@ -3532,8 +3535,16 @@ solver_addchoicerules(Solver *solv) - /* do extra checking for packages related to installed packages */ - for (i = j = 0; i < qi.count; i += 2) - { -+ int isdowngrade = 0; - p2 = qi.elements[i]; -- if (solv->updatemap_all || (solv->updatemap.size && MAPTST(&solv->updatemap, p2 - solv->installed->start))) -+ if (dodowngradecheck) -+ { -+ p = qi.elements[i + 1]; -+ if (pool->solvables[p2].name == pool->solvables[p].name) -+ if (pool_evrcmp(pool, pool->solvables[p2].evr, pool->solvables[p].evr, EVRCMP_COMPARE) > 0) -+ isdowngrade = 1; -+ } -+ if (isdowngrade || solv->updatemap_all || (solv->updatemap.size && MAPTST(&solv->updatemap, p2 - solv->installed->start))) - { - if (solver_choicerulecheck(solv, p2, r, &m, &qcheck)) - continue; diff --git a/backport-resolve-installed-remove-dead-code.patch b/backport-resolve-installed-remove-dead-code.patch deleted file mode 100644 index ed7fed05e140b65e99620f0d9e185b30c01085e8..0000000000000000000000000000000000000000 --- a/backport-resolve-installed-remove-dead-code.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 553c69b514c1ca85a6311373b48c6096886dcff3 Mon Sep 17 00:00:00 2001 -From: Michael Schroeder -Date: Tue, 13 Feb 2024 12:43:50 +0100 -Subject: [PATCH] resolve_installed: remove dead code - -Since we simplified our dup handling the update rules always -start with the installed package. ---- - src/solver.c | 5 ++--- - 1 file changed, 2 insertions(+), 3 deletions(-) - -diff --git a/src/solver.c b/src/solver.c -index 363d88734..0c3333d87 100644 ---- a/src/solver.c -+++ b/src/solver.c -@@ -1835,11 +1835,10 @@ resolve_installed(Solver *solv, int level, int disablerules, Queue *dq) - - /* check if we should update this package to the latest version - * noupdate is set for erase jobs, in that case we want to deinstall -- * the installed package and not replace it with a newer version -- * rr->p != i is for dup jobs where the installed package cannot be kept */ -+ * the installed package and not replace it with a newer version */ - if (dq->count) - queue_empty(dq); -- if (!MAPTST(&solv->noupdate, i - installed->start) && (solv->decisionmap[i] < 0 || solv->updatemap_all || (solv->updatemap.size && MAPTST(&solv->updatemap, i - installed->start)) || (rr->p && rr->p != i))) -+ if (!MAPTST(&solv->noupdate, i - installed->start) && (solv->decisionmap[i] < 0 || solv->updatemap_all || (solv->updatemap.size && MAPTST(&solv->updatemap, i - installed->start)))) - { - if (specialupdaters && (d = specialupdaters[i - installed->start]) != 0) - { diff --git a/libsolv-0.7.35-fix-linkage.patch b/libsolv-0.7.35-fix-linkage.patch new file mode 100644 index 0000000000000000000000000000000000000000..99fa242238a3a0edb86b2773138d9aa726377af4 --- /dev/null +++ b/libsolv-0.7.35-fix-linkage.patch @@ -0,0 +1,58 @@ +From c4f8306842fa23c64822eaa826c8513180f1dca9 Mon Sep 17 00:00:00 2001 +From: Funda Wang +Date: Mon, 3 Nov 2025 00:03:58 +0800 +Subject: [PATCH] Fix lib linkage of bindings + +--- + bindings/perl/CMakeLists.txt | 3 ++- + bindings/python/CMakeLists.txt | 2 +- + bindings/ruby/CMakeLists.txt | 2 +- + 3 files changed, 4 insertions(+), 3 deletions(-) + +diff --git a/bindings/perl/CMakeLists.txt b/bindings/perl/CMakeLists.txt +index b57fd9c..1a7b698 100644 +--- a/bindings/perl/CMakeLists.txt ++++ b/bindings/perl/CMakeLists.txt +@@ -1,4 +1,5 @@ + FIND_PACKAGE (Perl) ++FIND_PACKAGE (PerlLibs) + + EXECUTE_PROCESS(COMMAND ${PERL_EXECUTABLE} -e "use Config; print \$Config{ccflags}" OUTPUT_VARIABLE PERL_CCFLAGS) + EXECUTE_PROCESS(COMMAND ${PERL_EXECUTABLE} -e "use Config; print \$Config{archlib}.\"/CORE\"" OUTPUT_VARIABLE PERL_CORE_DIR) +@@ -31,7 +32,7 @@ INCLUDE_DIRECTORIES (${PERL_INCLUDE_PATH} ${PERL_CORE_DIR}) + ADD_LIBRARY (bindings_perl MODULE solv_perl.c) + SET_TARGET_PROPERTIES (bindings_perl PROPERTIES PREFIX "" OUTPUT_NAME "solv") + SET_TARGET_PROPERTIES (bindings_perl PROPERTIES LINK_FLAGS "${PERL_CCLDFLAGS}") +-TARGET_LINK_LIBRARIES (bindings_perl ${LIBSOLV_BINDINGS_LIBRARIES} ${SYSTEM_LIBRARIES}) ++TARGET_LINK_LIBRARIES (bindings_perl ${LIBSOLV_BINDINGS_LIBRARIES} ${SYSTEM_LIBRARIES} ${PERL_LIBRARY}) + + INSTALL (TARGETS bindings_perl LIBRARY DESTINATION ${PERL_INSTALL_DIR}) + INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/solv.pm DESTINATION ${PERL_INSTALL_DIR}) +diff --git a/bindings/python/CMakeLists.txt b/bindings/python/CMakeLists.txt +index 4bd0fae..b5c1433 100644 +--- a/bindings/python/CMakeLists.txt ++++ b/bindings/python/CMakeLists.txt +@@ -39,7 +39,7 @@ INCLUDE_DIRECTORIES (${PYTHON_INCLUDE_PATH}) + + ADD_LIBRARY (bindings_python MODULE solv_python.c) + SET_TARGET_PROPERTIES (bindings_python PROPERTIES PREFIX "" OUTPUT_NAME "_solv") +-TARGET_LINK_LIBRARIES (bindings_python ${LIBSOLV_BINDINGS_LIBRARIES} ${SYSTEM_LIBRARIES}) ++TARGET_LINK_LIBRARIES (bindings_python ${LIBSOLV_BINDINGS_LIBRARIES} ${SYSTEM_LIBRARIES} ${PYTHON_LIBRARIES}) + + INSTALL (TARGETS bindings_python LIBRARY DESTINATION ${PYTHON_INSTALL_DIR}) + INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/solv.py DESTINATION ${PYTHON_INSTALL_DIR}) +diff --git a/bindings/ruby/CMakeLists.txt b/bindings/ruby/CMakeLists.txt +index b065fd4..059f626 100644 +--- a/bindings/ruby/CMakeLists.txt ++++ b/bindings/ruby/CMakeLists.txt +@@ -21,6 +21,6 @@ INCLUDE_DIRECTORIES (${RUBY_INCLUDE_PATH}) + + ADD_LIBRARY (bindings_ruby MODULE solv_ruby.c) + SET_TARGET_PROPERTIES (bindings_ruby PROPERTIES PREFIX "" OUTPUT_NAME "solv") +-TARGET_LINK_LIBRARIES (bindings_ruby ${LIBSOLV_BINDINGS_LIBRARIES} ${SYSTEM_LIBRARIES}) ++TARGET_LINK_LIBRARIES (bindings_ruby ${LIBSOLV_BINDINGS_LIBRARIES} ${SYSTEM_LIBRARIES} ${Ruby_LIBRARIES}) + + INSTALL (TARGETS bindings_ruby LIBRARY DESTINATION ${RUBY_INSTALL_DIR}) +-- +2.50.1 + diff --git a/libsolv.spec b/libsolv.spec index f88564cc66590c7bdd5cd24e17964b236356c672..847f8a1c9d838b94e8fee0615dff0eea8b72633d 100644 --- a/libsolv.spec +++ b/libsolv.spec @@ -14,22 +14,14 @@ %bcond_without conda Name: libsolv -Version: 0.7.24 -Release: 4 +Version: 0.7.35 +Release: 1 Summary: Package dependency solver -License: BSD +License: BSD-3-Clause URL: https://github.com/openSUSE/libsolv Source: https://github.com/openSUSE/libsolv/archive/refs/tags/%{version}.tar.gz -Patch6001: backport-Treat-condition-both-as-positive-and-negative-literal-in-pool_add_pos_literals_complex_dep.patch -Patch6002: backport-Add-testcase-for-last-commit.patch -Patch6003: backport-choice-rules-also-do-solver_choicerulecheck-for-package-downgrades.patch -Patch6004: backport-Fix-a-couple-small-static-analysis-findings-for-uninitialized-structs.patch -Patch6005: backport-resolve-installed-remove-dead-code.patch -Patch6006: backport-Move-special-updaters-handling-into-its-own-function.patch -Patch6007: backport-Handle-installed-packages-in-three-passes.patch -Patch6008: backport-Fix-incomplete-headers.patch -Patch6009: backport-Fix-a-possible-format-overflow-in-dump_genid.patch +Patch0: libsolv-0.7.35-fix-linkage.patch BuildRequires: cmake gcc-c++ ninja-build pkgconfig(rpm) zlib-devel BuildRequires: libxml2-devel xz-devel bzip2-devel @@ -108,7 +100,7 @@ Python 3 version. %autosetup -p1 %build -%cmake . -B"%{_vpath_builddir}" -GNinja \ +%cmake -GNinja \ -DFEDORA=1 \ -DENABLE_RPMDB=ON \ -DENABLE_RPMDB_BYRPMHEADER=ON \ @@ -140,20 +132,13 @@ Python 3 version. -DPYTHON_EXECUTABLE=%{__python3} \ %endif %{nil} -%ninja_build -C "%{_vpath_builddir}" +%cmake_build %install -%ninja_install -C "%{_vpath_builddir}" +%cmake_install %check -%ninja_test -C "%{_vpath_builddir}" - -%if %{undefined ldconfig_scriptlets} -%post -p /sbin/ldconfig -%postun -p /sbin/ldconfig -%else -%ldconfig_scriptlets -%endif +%ctest %files %license LICENSE* @@ -223,6 +208,9 @@ Python 3 version. %{_mandir}/man3/%{name}*.3* %changelog +* Sun Nov 02 2025 Funda Wang - 0.7.35-1 +- update to 0.7.35 + * Tue Jul 23 2024 zhangxingrong - 0.7.24-4 - Fix incomplete headers - Fix a possible format overflow in dump_genid