Fixed for new depends and overrides

This commit is contained in:
Jesse van den Kieboom 2005-11-15 11:45:09 +00:00
parent bbca125400
commit 546551c965
1 changed files with 26 additions and 15 deletions

View File

@ -90,24 +90,29 @@ gm_mcp_negotiate_find_package(GmMcpNegotiate *package, gchar *name) {
void
gm_mcp_negotiate_fix_overrides(GmMcpNegotiate *package) {
GList *l, *item, *over;
GList *l, *item;
PackageInfo *pinfo, *pover;
gchar *name;
gchar **over;
l = g_list_copy(package->priv->packages);
for (item = l; item; item = item->next) {
pinfo = (PackageInfo *)(item->data);
over = pinfo->klass->overrides;
for (over = pinfo->klass->overrides; over; over = over->next) {
name = (gchar *)(over->data);
if ((pover = gm_mcp_negotiate_find_package(package, name))) {
if (!over) {
continue;
}
while (*over) {
if ((pover = gm_mcp_negotiate_find_package(package, *over))) {
gm_debug_msg(DEBUG_MCP, "GmMcpNegotiate.FixOverrides: package %s "
"overrides %s", pinfo->klass->name, pover->klass->name);
package->priv->packages = g_list_remove(
package->priv->packages, pover);
}
++over;
}
}
@ -117,21 +122,25 @@ gm_mcp_negotiate_fix_overrides(GmMcpNegotiate *package) {
void
gm_mcp_negotiate_fix_depends(GmMcpNegotiate *package) {
PackageInfo *pinfo, *pdep;
GList *l, *item, *dep;
gchar *name;
GList *l, *item;
gchar **dep;
l = g_list_copy(package->priv->packages);
for (item = l; item; item = item->next) {
pinfo = (PackageInfo *)(item->data);
for (dep = pinfo->klass->depends; dep; dep = dep->next) {
name = (gchar *)(dep->data);
if (!(pdep = gm_mcp_negotiate_find_package(package, name))) {
dep = pinfo->klass->depends;
if (!dep) {
continue;
}
while (*dep) {
if (!(pdep = gm_mcp_negotiate_find_package(package, *dep))) {
gm_debug_msg(DEBUG_MCP, "GmMcpNegotiate.FixDepends: package %s depends "
"on %s, but %s is not supported", pinfo->klass->name,
name, name);
*dep, *dep);
// Remove package because depencendies are not met
package->priv->packages = g_list_remove(
@ -145,6 +154,8 @@ gm_mcp_negotiate_fix_depends(GmMcpNegotiate *package) {
package->priv->packages,
g_list_find(package->priv->packages, pinfo), pdep);
}
++dep;
}
}