summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Schroeder <mls@suse.de>2012-02-14 18:18:18 +0100
committerMichael Schroeder <mls@suse.de>2012-02-14 18:18:18 +0100
commitd9da98eb5a9bc3f984ba3cff81e136cef1557d06 (patch)
tree991a1e00c2986cdb29734436b52590791c037f7b
parent75b3cf4a0a60cf6115a1b0241dd4a568a44b0700 (diff)
downloadlibsolv-d9da98eb5a9bc3f984ba3cff81e136cef1557d06.tar.gz
libsolv-d9da98eb5a9bc3f984ba3cff81e136cef1557d06.tar.bz2
libsolv-d9da98eb5a9bc3f984ba3cff81e136cef1557d06.zip
- add pool_addvendorclass and solver_solutionelement_internalid
-rw-r--r--src/libsolv.ver2
-rw-r--r--src/pool.c14
-rw-r--r--src/pool.h16
-rw-r--r--src/poolvendor.c24
-rw-r--r--src/poolvendor.h1
-rw-r--r--src/problems.c9
-rw-r--r--src/problems.h1
7 files changed, 46 insertions, 21 deletions
diff --git a/src/libsolv.ver b/src/libsolv.ver
index 4da45b2..e0194ee 100644
--- a/src/libsolv.ver
+++ b/src/libsolv.ver
@@ -40,6 +40,7 @@ SOLV_1.0 {
pool_addfileprovides;
pool_addfileprovides_queue;
pool_addrelproviders;
+ pool_addvendorclass;
pool_alloctmpspace;
pool_arch2color_slow;
pool_bin2hex;
@@ -306,6 +307,7 @@ SOLV_1.0 {
solver_solution_count;
solver_solutionelement2str;
solver_solutionelement_count;
+ solver_solutionelement_internalid;
solver_solve;
solver_take_solution;
solver_take_solutionelement;
diff --git a/src/pool.c b/src/pool.c
index 01b3dd4..0d84f34 100644
--- a/src/pool.c
+++ b/src/pool.c
@@ -68,9 +68,7 @@ pool_create(void)
#endif
#ifdef DEBIAN
pool->allowselfconflicts = 1;
-# ifdef MULTI_SEMANTICS
pool->disttype = DISTTYPE_DEB;
-# endif
#endif
#ifdef RPM5
pool->obsoleteusesprovides = 1;
@@ -727,17 +725,9 @@ pool_addrelproviders(Pool *pool, Id d)
{
if (pid == name)
{
-#if defined(MULTI_SEMANTICS)
if (pool->disttype == DISTTYPE_DEB)
- continue;
- else
- break;
-#elif defined(DEBIAN_SEMANTICS)
- continue; /* unversioned provides can
- * never match versioned deps */
-#else
- break; /* yes, provides all versions */
-#endif
+ continue; /* unversioned provides can never match versioned deps */
+ break;
}
if (!ISRELDEP(pid))
continue; /* wrong provides name */
diff --git a/src/pool.h b/src/pool.h
index 2b51167..ee9f256 100644
--- a/src/pool.h
+++ b/src/pool.h
@@ -82,7 +82,10 @@ struct _Pool {
Id *languagecache;
int languagecacheother;
- /* flags to tell the library how the installed rpm works */
+ /* package manager type, deb/rpm */
+ int disttype;
+
+ /* flags to tell the library how the installed package manager works */
int promoteepoch; /* true: missing epoch is replaced by epoch of dependency */
int obsoleteusesprovides; /* true: obsoletes are matched against provides, not names */
int implicitobsoleteusesprovides; /* true: implicit obsoletes due to same name are matched against provides, not names */
@@ -90,10 +93,6 @@ struct _Pool {
int noinstalledobsoletes; /* true: ignore obsoletes of installed packages */
int allowselfconflicts; /* true: packages which conflict with itself are installable */
-#ifdef MULTI_SEMANTICS
- int disttype;
-#endif
-
Id *id2arch; /* map arch ids to scores */
unsigned char *id2color; /* map arch ids to colors */
Id lastarch; /* last valid entry in id2arch/id2color */
@@ -116,6 +115,7 @@ struct _Pool {
bitmap for solving. If zero, consider all solvables. */
Map *considered;
+ /* callback for REL_NAMESPACE dependencies handled by the application */
Id (*nscallback)(struct _Pool *, void *data, Id name, Id evr);
void *nscallbackdata;
@@ -135,10 +135,8 @@ struct _Pool {
Datapos pos;
};
-#ifdef MULTI_SEMANTICS
-# define DISTTYPE_RPM 0
-# define DISTTYPE_DEB 1
-#endif
+#define DISTTYPE_RPM 0
+#define DISTTYPE_DEB 1
#define SOLV_FATAL (1<<0)
#define SOLV_ERROR (1<<1)
diff --git a/src/poolvendor.c b/src/poolvendor.c
index 2bf00f8..a52a94b 100644
--- a/src/poolvendor.c
+++ b/src/poolvendor.c
@@ -103,3 +103,27 @@ pool_setvendorclasses(Pool *pool, const char **vendorclasses)
queue_empty(&pool->vendormap);
}
+void
+pool_addvendorclass(Pool *pool, const char **vendorclass)
+{
+ int i, j;
+
+ if (!vendorclass || !vendorclass[0])
+ return;
+ for (j = 1; vendorclass[j]; j++)
+ ;
+ i = 0;
+ if (pool->vendorclasses)
+ {
+ for (i = 0; pool->vendorclasses[i] || pool->vendorclasses[i + 1]; i++)
+ ;
+ if (i)
+ i++;
+ }
+ pool->vendorclasses = solv_realloc2(pool->vendorclasses, i + j + 2, sizeof(const char *));
+ for (j = 0; vendorclass[j]; j++)
+ pool->vendorclasses[i++] = solv_strdup(vendorclass[j]);
+ pool->vendorclasses[i++] = 0;
+ pool->vendorclasses[i] = 0;
+ queue_empty(&pool->vendormap);
+}
diff --git a/src/poolvendor.h b/src/poolvendor.h
index 7f34fd5..2e14450 100644
--- a/src/poolvendor.h
+++ b/src/poolvendor.h
@@ -12,5 +12,6 @@
Id pool_vendor2mask(Pool *pool, Id vendor);
void pool_setvendorclasses(Pool *pool, const char **vendorclasses);
+void pool_addvendorclass(Pool *pool, const char **vendorclass);
#endif /* LIBSOLV_POOLVENDOR_H */
diff --git a/src/problems.c b/src/problems.c
index 976d99a..3a1409d 100644
--- a/src/problems.c
+++ b/src/problems.c
@@ -608,6 +608,7 @@ create_solutions(Solver *solv, int probnr, int solidx)
solv->solutions.elements[solstart] = (solv->solutions.count - (solstart + 1)) / 2;
queue_push(&solv->solutions, 0); /* add end marker */
queue_push(&solv->solutions, 0); /* add end marker */
+ queue_push(&solv->solutions, problem.elements[i]); /* just for bookkeeping */
solv->solutions.elements[solidx + 1 + nsol++] = solstart;
}
solv->solutions.elements[solidx + 1 + nsol] = 0; /* end marker */
@@ -688,6 +689,14 @@ solver_solutionelement_count(Solver *solv, Id problem, Id solution)
return solv->solutions.elements[solidx];
}
+Id
+solver_solutionelement_internalid(Solver *solv, Id problem, Id solution)
+{
+ Id solidx = solv->problems.elements[problem * 2 - 1];
+ solidx = solv->solutions.elements[solidx + solution];
+ return solv->solutions.elements[solidx + 2 * solv->solutions.elements[solidx] + 3];
+}
+
/*
* return the next item of the proposed solution
diff --git a/src/problems.h b/src/problems.h
index 1da7cd0..cd56aa2 100644
--- a/src/problems.h
+++ b/src/problems.h
@@ -33,6 +33,7 @@ Id solver_next_problem(struct _Solver *solv, Id problem);
unsigned int solver_solution_count(struct _Solver *solv, Id problem);
Id solver_next_solution(struct _Solver *solv, Id problem, Id solution);
unsigned int solver_solutionelement_count(struct _Solver *solv, Id problem, Id solution);
+Id solver_solutionelement_internalid(struct _Solver *solv, Id problem, Id solution);
Id solver_next_solutionelement(struct _Solver *solv, Id problem, Id solution, Id element, Id *p, Id *rp);
void solver_take_solutionelement(struct _Solver *solv, Id p, Id rp, Queue *job);