return 1 and do not output anything a requirement is missing

feature/tap-sh
Baptiste Daroussin 2012-08-12 12:32:31 +02:00
parent c04062a4ef
commit 9a26337507
6 changed files with 112 additions and 21 deletions

81
main.c
View File

@ -213,28 +213,48 @@ print_digraph_node(pkg_t *pkg, void *unused, unsigned int flags)
}
}
static void
static bool
apply_digraph(pkg_t *world, void *unused, int maxdepth, unsigned int flags)
{
int eflag;
printf("graph deptree {\n");
printf("edge [color=blue len=7.5 fontname=Sans fontsize=8]\n");
printf("node [fontname=Sans fontsize=8]\n");
pkg_traverse(world, print_digraph_node, unused, maxdepth, flags);
eflag = pkg_traverse(world, print_digraph_node, unused, maxdepth, flags);
if (eflag != PKG_ERRF_OK)
return false;
printf("}\n");
return true;
}
static void
static bool
apply_modversion(pkg_t *world, void *unused, int maxdepth, unsigned int flags)
{
pkg_traverse(world, print_modversion, unused, maxdepth, flags);
int eflag;
eflag = pkg_traverse(world, print_modversion, unused, maxdepth, flags);
if (eflag != PKG_ERRF_OK)
return false;
return true;
}
static void
static bool
apply_variables(pkg_t *world, void *unused, int maxdepth, unsigned int flags)
{
pkg_traverse(world, print_variables, unused, maxdepth, flags);
int eflag;
eflag = pkg_traverse(world, print_variables, unused, maxdepth, flags);
if (eflag != PKG_ERRF_OK)
return false;
return true;
}
typedef struct {
@ -263,44 +283,57 @@ print_variable(pkg_t *pkg, void *data, unsigned int flags)
}
}
static void
static bool
apply_variable(pkg_t *world, void *variable, int maxdepth, unsigned int flags)
{
int eflag;
var_request_t req = {
.variable = variable,
};
*req.buf = '\0';
pkg_traverse(world, print_variable, &req, maxdepth, flags);
eflag = pkg_traverse(world, print_variable, &req, maxdepth, flags);
if (eflag != PKG_ERRF_OK)
return false;
printf("%s\n", req.buf);
return true;
}
static void
static bool
apply_cflags(pkg_t *world, void *list_head, int maxdepth, unsigned int flags)
{
pkg_fragment_t **head = list_head;
pkg_fragment_t *list;
list = pkg_cflags(world, head, maxdepth, flags | PKGF_SEARCH_PRIVATE);
if (list == NULL)
return false;
print_cflags(list);
pkg_fragment_free(list);
return true;
}
static void
static bool
apply_libs(pkg_t *world, void *list_head, int maxdepth, unsigned int flags)
{
pkg_fragment_t **head = list_head;
pkg_fragment_t *list;
list = pkg_libs(world, head, maxdepth, flags);
if (list == NULL)
return false;
print_libs(list);
pkg_fragment_free(list);
return true;
}
static void
static bool
apply_requires(pkg_t *world, void *unused, int maxdepth, unsigned int flags)
{
pkg_dependency_t *iter;
@ -316,9 +349,10 @@ apply_requires(pkg_t *world, void *unused, int maxdepth, unsigned int flags)
pkg_free(pkg);
}
return true;
}
static void
static bool
apply_requires_private(pkg_t *world, void *unused, int maxdepth, unsigned int flags)
{
pkg_dependency_t *iter;
@ -334,6 +368,7 @@ apply_requires_private(pkg_t *world, void *unused, int maxdepth, unsigned int fl
pkg_free(pkg);
}
return true;
}
static void
@ -346,10 +381,17 @@ check_uninstalled(pkg_t *pkg, void *data, unsigned int flags)
*retval = EXIT_SUCCESS;
}
static void
static bool
apply_uninstalled(pkg_t *world, void *data, int maxdepth, unsigned int flags)
{
pkg_traverse(world, check_uninstalled, data, maxdepth, flags);
int eflag;
eflag = pkg_traverse(world, check_uninstalled, data, maxdepth, flags);
if (eflag != PKG_ERRF_OK)
return false;
return true;
}
static void
@ -361,10 +403,17 @@ print_graph_node(pkg_t *pkg, void *data, unsigned int flags)
printf("Considering graph node '%s' (%p)\n", pkg->id, pkg);
}
static void
static bool
apply_simulate(pkg_t *world, void *data, int maxdepth, unsigned int flags)
{
pkg_traverse(world, print_graph_node, data, maxdepth, flags);
int eflag;
eflag = pkg_traverse(world, print_graph_node, data, maxdepth, flags);
if (eflag != PKG_ERRF_OK)
return false;
return true;
}
static void

29
pkg.c
View File

@ -850,7 +850,15 @@ pkg_cflags_collect(pkg_t *pkg, void *data, unsigned int flags)
pkg_fragment_t *
pkg_cflags(pkg_t *root, pkg_fragment_t **list, int maxdepth, unsigned int flags)
{
pkg_traverse(root, pkg_cflags_collect, list, maxdepth, flags);
int eflag;
eflag = pkg_traverse(root, pkg_cflags_collect, list, maxdepth, flags);
if (eflag != PKG_ERRF_OK)
{
pkg_fragment_free(*list);
return NULL;
}
return *list;
}
@ -880,10 +888,25 @@ pkg_libs_private_collect(pkg_t *pkg, void *data, unsigned int flags)
pkg_fragment_t *
pkg_libs(pkg_t *root, pkg_fragment_t **list, int maxdepth, unsigned int flags)
{
pkg_traverse(root, pkg_libs_collect, list, maxdepth, flags);
int eflag;
eflag = pkg_traverse(root, pkg_libs_collect, list, maxdepth, flags);
if (eflag != PKG_ERRF_OK)
{
pkg_fragment_free(*list);
return NULL;
}
if (flags & PKGF_MERGE_PRIVATE_FRAGMENTS)
pkg_traverse(root, pkg_libs_private_collect, list, maxdepth, flags);
{
eflag = pkg_traverse(root, pkg_libs_private_collect, list, maxdepth, flags);
if (eflag != PKG_ERRF_OK)
{
pkg_fragment_free(*list);
return NULL;
}
}
return *list;
}

2
pkg.h
View File

@ -122,7 +122,7 @@ struct pkg_ {
typedef void (*pkg_iteration_func_t)(const pkg_t *pkg);
typedef void (*pkg_traverse_func_t)(pkg_t *pkg, void *data, unsigned int flags);
typedef void (*pkg_queue_apply_func_t)(pkg_t *world, void *data, int maxdepth, unsigned int flags);
typedef bool (*pkg_queue_apply_func_t)(pkg_t *world, void *data, int maxdepth, unsigned int flags);
/* pkg.c */
void pkg_free(pkg_t *pkg);

View File

@ -85,7 +85,11 @@ pkg_queue_apply(pkg_queue_t *head, pkg_queue_apply_func_t func, int maxdepth, un
if (pkg_queue_verify(&world, head, maxdepth, flags) != PKG_ERRF_OK)
return false;
func(&world, data, maxdepth, flags);
if (!func(&world, data, maxdepth, flags))
{
pkg_free(&world);
return false;
}
pkg_free(&world);

View File

@ -0,0 +1,11 @@
prefix=/usr
exec_prefix=${prefix}
libdir=${prefix}/lib
includedir=${prefix}/include
Name: missing-require
Description: A testing pkg-config file
Version: 1.2.3
Requires.private: missing
Libs: -L${libdir} -lfoo
Cflags: -fPIC -I${includedir}/foo

View File

@ -163,6 +163,10 @@ run_test "PKG_CONFIG_PATH=${selfdir}/lib1 ${1} --max-version 1.0 'foo '; echo \$
run_test "PKG_CONFIG_PATH=${selfdir}/lib1 ${1} --max-version 2.0 'foo '; echo \$?" \
'0'
# test missing requires
run_test "PKG_CONFIG_PATH=${selfdir}/lib1 ${1} --cflags missing-require; echo \$?" \
'1'
# 10) tests for internal getopt implementation with options at the end
if [ "x@STRICT_MODE@" = "xno" ]; then
run_test "PKG_CONFIG_PATH=${selfdir}/lib1 ${1} foo --libs" \