From 8100eb84f03f1c30a5eb29741a61e051053915a1 Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Mon, 25 Jul 2011 17:44:05 -0500 Subject: [PATCH] pkg: add pkg_verify_graph() to verify the depgraph is satisfiable --- main.c | 3 +++ pkg.c | 15 ++++++++++++++- pkg.h | 1 + 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/main.c b/main.c index c753a5a..b0f86d1 100644 --- a/main.c +++ b/main.c @@ -101,6 +101,9 @@ pkg_queue_walk(pkg_queue_t *head) world.requires = pkg_dependency_append(world.requires, pkgdep); } + /* we should verify that the graph is complete before attempting to compute cflags etc. */ + pkg_verify_graph(&world, maximum_traverse_depth); + if (want_modversion) { wanted_something = 0; diff --git a/pkg.c b/pkg.c index d0e597c..806230f 100644 --- a/pkg.c +++ b/pkg.c @@ -33,6 +33,18 @@ pkg_find(const char *name) return parse_file(locbuf); } +/* + * pkg_verify_graph(root, depth) + * + * verify the graph dependency nodes are satisfiable by walking the tree using + * pkg_traverse(). + */ +void +pkg_verify_graph(pkg_t *root, int depth) +{ + pkg_traverse(root, NULL, NULL, depth); +} + void pkg_traverse(pkg_t *root, void (*pkg_traverse_func)(pkg_t *package, void *data), @@ -64,5 +76,6 @@ pkg_traverse(pkg_t *root, pkg_traverse(pkgdep, pkg_traverse_func, data, maxdepth - 1); } - pkg_traverse_func(root, data); + if (pkg_traverse_func != NULL) + pkg_traverse_func(root, data); } diff --git a/pkg.h b/pkg.h index ed31042..a4a3bea 100644 --- a/pkg.h +++ b/pkg.h @@ -87,6 +87,7 @@ struct pkg_ { pkg_t *pkg_find(const char *name); void pkg_traverse(pkg_t *root, void (*pkg_traverse_func)(pkg_t *package, void *data), void *data, int maxdepth); +void pkg_verify_graph(pkg_t *root, int depth); /* parse.c */ pkg_t *parse_file(const char *path);