Compare commits

...

2 Commits

Author SHA1 Message Date
Ariadne Conill f49029c681 cli: ensure --modversion is output is printed in dependency queue order
ci/woodpecker/push/woodpecker Pipeline was successful Details
Previously, --modversion operated on the calculated solution and printed versions in
order of the calculated dependency graph.  Change this to use the dependency queue
instead, looking up nodes in the dependency graph as needed, to ensure that the
--modversion output behaves as intended.

Signed-off-by: Ariadne Conill <ariadne@dereferenced.org>
2023-08-11 14:19:26 -07:00
Ariadne Conill 4fb0988a29 libpkgconf: queue: make the pkgconf_queue_t type public
Signed-off-by: Ariadne Conill <ariadne@dereferenced.org>
2023-08-11 14:16:41 -07:00
3 changed files with 26 additions and 16 deletions

View File

@ -289,23 +289,32 @@ apply_digraph(pkgconf_client_t *client, pkgconf_pkg_t *world, void *unused, int
#endif
static bool
apply_modversion(pkgconf_client_t *client, pkgconf_pkg_t *world, void *unused, int maxdepth)
apply_modversion(pkgconf_client_t *client, pkgconf_pkg_t *world, void *data, int maxdepth)
{
pkgconf_node_t *iter;
pkgconf_node_t *queue_iter;
pkgconf_list_t *pkgq = data;
(void) client;
(void) unused;
(void) maxdepth;
PKGCONF_FOREACH_LIST_ENTRY(world->required.head, iter)
PKGCONF_FOREACH_LIST_ENTRY(pkgq->head, queue_iter)
{
pkgconf_dependency_t *dep = iter->data;
pkgconf_pkg_t *pkg = dep->match;
pkgconf_node_t *world_iter;
pkgconf_queue_t *queue_node = queue_iter->data;
if (pkg->version != NULL) {
if (verbosity)
printf("%s: ", pkg->id);
PKGCONF_FOREACH_LIST_ENTRY(world->required.head, world_iter)
{
pkgconf_dependency_t *dep = world_iter->data;
pkgconf_pkg_t *pkg = dep->match;
printf("%s\n", pkg->version);
if (strncmp(pkg->id, queue_node->package, strlen(pkg->id)))
continue;
if (pkg->version != NULL) {
if (verbosity)
printf("%s: ", pkg->id);
printf("%s\n", pkg->version);
}
}
}
@ -1430,7 +1439,7 @@ cleanup3:
if ((want_flags & PKG_MODVERSION) == PKG_MODVERSION)
{
want_flags &= ~(PKG_CFLAGS|PKG_LIBS);
apply_modversion(&pkg_client, &world, NULL, 2);
apply_modversion(&pkg_client, &world, &pkgq, 2);
}
if ((want_flags & PKG_PATH) == PKG_PATH)

View File

@ -67,6 +67,7 @@ typedef struct pkgconf_fragment_ pkgconf_fragment_t;
typedef struct pkgconf_path_ pkgconf_path_t;
typedef struct pkgconf_client_ pkgconf_client_t;
typedef struct pkgconf_cross_personality_ pkgconf_cross_personality_t;
typedef struct pkgconf_queue_ pkgconf_queue_t;
#define PKGCONF_ARRAY_SIZE(x) (sizeof(x) / sizeof(*(x)))
@ -82,6 +83,11 @@ typedef struct pkgconf_cross_personality_ pkgconf_cross_personality_t;
#define LIBPKGCONF_VERSION 20000
#define LIBPKGCONF_VERSION_STR "2.0.0"
struct pkgconf_queue_ {
pkgconf_node_t iter;
char *package;
};
struct pkgconf_fragment_ {
pkgconf_node_t iter;

View File

@ -29,11 +29,6 @@
* Using the `queue` module functions is the recommended way of working with dependency graphs.
*/
typedef struct {
pkgconf_node_t iter;
char *package;
} pkgconf_queue_t;
/*
* !doc
*