diff --git a/libpkgconf/dependency.c b/libpkgconf/dependency.c index 86362ea..a33dd88 100644 --- a/libpkgconf/dependency.c +++ b/libpkgconf/dependency.c @@ -211,6 +211,9 @@ pkgconf_dependency_free_one(pkgconf_dependency_t *dep) if (dep->version != NULL) free(dep->version); + if (dep->why != NULL) + free(dep->why); + free(dep); } diff --git a/libpkgconf/libpkgconf.h b/libpkgconf/libpkgconf.h index ed8e634..6dda9dd 100644 --- a/libpkgconf/libpkgconf.h +++ b/libpkgconf/libpkgconf.h @@ -102,6 +102,8 @@ struct pkgconf_dependency_ { int refcount; pkgconf_client_t *owner; + + char *why; }; struct pkgconf_tuple_ { diff --git a/libpkgconf/pkg.c b/libpkgconf/pkg.c index 37b4661..2730db3 100644 --- a/libpkgconf/pkg.c +++ b/libpkgconf/pkg.c @@ -1647,7 +1647,7 @@ pkgconf_pkg_walk_conflicts_list(pkgconf_client_t *client, if (eflags == PKGCONF_PKG_ERRF_OK) { pkgconf_error(client, "Version '%s' of '%s' conflicts with '%s' due to satisfying conflict rule '%s %s%s%s'.\n", - pkgdep->version, pkgdep->realname, root->realname, parentnode->package, pkgconf_pkg_get_comparator(parentnode), + pkgdep->version, pkgdep->id, parentnode->why, parentnode->package, pkgconf_pkg_get_comparator(parentnode), parentnode->version != NULL ? " " : "", parentnode->version != NULL ? parentnode->version : ""); if (!(client->flags & PKGCONF_PKG_PKGF_SIMPLIFY_ERRORS)) diff --git a/libpkgconf/queue.c b/libpkgconf/queue.c index 9144797..6e27c1f 100644 --- a/libpkgconf/queue.c +++ b/libpkgconf/queue.c @@ -277,6 +277,7 @@ pkgconf_queue_collect_conflicts(pkgconf_client_t *client, pkgconf_dependency_t *conflict = cnode->data; pkgconf_dependency_t *flattened_conflict = pkgconf_dependency_copy(client, conflict); + flattened_conflict->why = strdup(pkg->id); pkgconf_node_insert(&flattened_conflict->iter, flattened_conflict, &world->conflicts); } }