diff --git a/main.c b/main.c index dcde276..d807bf3 100644 --- a/main.c +++ b/main.c @@ -306,15 +306,19 @@ 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; + int eflag; - list = pkg_cflags(world, head, maxdepth, flags | PKGF_SEARCH_PRIVATE); - if (list == NULL) + eflag = pkg_cflags(world, head, maxdepth, flags | PKGF_SEARCH_PRIVATE); + if (eflag != PKG_ERRF_OK) return false; - print_cflags(list); + if (*head == NULL) + return true; + + print_cflags(*head); + + pkg_fragment_free(*head); - pkg_fragment_free(list); return true; } @@ -322,14 +326,18 @@ 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; + int eflag; - list = pkg_libs(world, head, maxdepth, flags); - if (list == NULL) + eflag = pkg_libs(world, head, maxdepth, flags); + if (eflag != PKG_ERRF_OK) return false; - print_libs(list); - pkg_fragment_free(list); + if (*head == NULL) + return true; + + print_libs(*head); + + pkg_fragment_free(*head); return true; } diff --git a/pkg.c b/pkg.c index 8f0688d..c1667c3 100644 --- a/pkg.c +++ b/pkg.c @@ -853,7 +853,7 @@ pkg_cflags_collect(pkg_t *pkg, void *data, unsigned int flags) *list = pkg_fragment_copy(*list, frag); } -pkg_fragment_t * +int pkg_cflags(pkg_t *root, pkg_fragment_t **list, int maxdepth, unsigned int flags) { int eflag; @@ -863,10 +863,10 @@ pkg_cflags(pkg_t *root, pkg_fragment_t **list, int maxdepth, unsigned int flags) if (eflag != PKG_ERRF_OK) { pkg_fragment_free(*list); - return NULL; + *list = NULL; } - return *list; + return eflag; } static void @@ -891,7 +891,7 @@ pkg_libs_private_collect(pkg_t *pkg, void *data, unsigned int flags) *list = pkg_fragment_copy(*list, frag); } -pkg_fragment_t * +int pkg_libs(pkg_t *root, pkg_fragment_t **list, int maxdepth, unsigned int flags) { int eflag; @@ -901,7 +901,8 @@ pkg_libs(pkg_t *root, pkg_fragment_t **list, int maxdepth, unsigned int flags) if (eflag != PKG_ERRF_OK) { pkg_fragment_free(*list); - return NULL; + *list = NULL; + return eflag; } if (flags & PKGF_MERGE_PRIVATE_FRAGMENTS) @@ -910,9 +911,9 @@ pkg_libs(pkg_t *root, pkg_fragment_t **list, int maxdepth, unsigned int flags) if (eflag != PKG_ERRF_OK) { pkg_fragment_free(*list); - return NULL; + *list = NULL; } } - return *list; + return eflag; } diff --git a/pkg.h b/pkg.h index 3ddb2d1..1a3bf37 100644 --- a/pkg.h +++ b/pkg.h @@ -134,8 +134,8 @@ unsigned int pkg_verify_graph(pkg_t *root, int depth, unsigned int flags); int pkg_compare_version(const char *a, const char *b); pkg_t *pkg_verify_dependency(pkg_dependency_t *pkgdep, unsigned int flags, unsigned int *eflags); const char *pkg_get_comparator(pkg_dependency_t *pkgdep); -pkg_fragment_t *pkg_cflags(pkg_t *root, pkg_fragment_t **list, int maxdepth, unsigned int flags); -pkg_fragment_t *pkg_libs(pkg_t *root, pkg_fragment_t **list, int maxdepth, unsigned int flags); +int pkg_cflags(pkg_t *root, pkg_fragment_t **list, int maxdepth, unsigned int flags); +int pkg_libs(pkg_t *root, pkg_fragment_t **list, int maxdepth, unsigned int flags); /* parse.c */ pkg_t *pkg_new_from_file(const char *path, FILE *f); diff --git a/tests/lib1/nocflag.pc b/tests/lib1/nocflag.pc new file mode 100644 index 0000000..9ce6bdc --- /dev/null +++ b/tests/lib1/nocflag.pc @@ -0,0 +1,9 @@ +prefix=/usr +exec_prefix=${prefix} +libdir=${prefix}/lib +includedir=${prefix}/include + +Name: foo +Description: A testing pkg-config file +Version: 1.2.3 +Libs: -L${libdir} -lfoo diff --git a/tests/lib1/nolib.pc b/tests/lib1/nolib.pc new file mode 100644 index 0000000..db5d746 --- /dev/null +++ b/tests/lib1/nolib.pc @@ -0,0 +1,9 @@ +prefix=/usr +exec_prefix=${prefix} +libdir=${prefix}/lib +includedir=${prefix}/include + +Name: foo +Description: A testing pkg-config file +Version: 1.2.3 +Cflags: -fPIC -I${includedir}/foo diff --git a/tests/run.sh.in b/tests/run.sh.in index ee50b3d..9ad7493 100644 --- a/tests/run.sh.in +++ b/tests/run.sh.in @@ -171,6 +171,12 @@ run_test "PKG_CONFIG_PATH=${selfdir}/lib1 ${1} --cflags missing-require; echo \$ run_test "PKG_CONFIG_PATH=${selfdir}/lib1 ${1} --cflags quotes" \ "-DQUOTED=\\\"bla\\\"" +run_test "PKG_CONFIG_PATH=${selfdir}/lib1 ${1} --libs nolib; echo \$?" \ + '0' + +run_test "PKG_CONFIG_PATH=${selfdir}/lib1 ${1} --libs nocflag; echo \$?" \ + '0' + # 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" \