From 45d422c48405ee151a3cb26de3db7584f01a793e Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Sun, 10 Jul 2016 15:20:31 -0500 Subject: [PATCH] libpkgconf: implement PKG_CONFIG_LOG style auditing (closes #88) --- libpkgconf/audit.c | 18 ++++++++++++++++++ libpkgconf/libpkgconf.h | 3 ++- libpkgconf/pkg.c | 5 ++++- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/libpkgconf/audit.c b/libpkgconf/audit.c index e31505e..c95f619 100644 --- a/libpkgconf/audit.c +++ b/libpkgconf/audit.c @@ -28,7 +28,25 @@ pkgconf_audit_log(const char *format, ...) { va_list va; + if (pkgconf_auditf == NULL) + return; + va_start(va, format); vfprintf(pkgconf_auditf, format, va); va_end(va); } + +void +pkgconf_audit_log_dependency(const pkgconf_pkg_t *dep, const pkgconf_dependency_t *depnode) +{ + if (pkgconf_auditf == NULL) + return; + + fprintf(pkgconf_auditf, "%s ", dep->id); + if (depnode->version != NULL && depnode->compare != PKGCONF_CMP_ANY) + { + fprintf(pkgconf_auditf, "%s %s ", pkgconf_pkg_get_comparator(depnode), depnode->version); + } + + fprintf(pkgconf_auditf, "[%s]\n", dep->version); +} diff --git a/libpkgconf/libpkgconf.h b/libpkgconf/libpkgconf.h index c956294..c5d4c8b 100644 --- a/libpkgconf/libpkgconf.h +++ b/libpkgconf/libpkgconf.h @@ -154,7 +154,7 @@ pkgconf_pkg_t *pkgconf_pkg_find(const char *name, unsigned int flags); unsigned int pkgconf_pkg_traverse(pkgconf_pkg_t *root, pkgconf_pkg_traverse_func_t func, void *data, int maxdepth, unsigned int flags); unsigned int pkgconf_pkg_verify_graph(pkgconf_pkg_t *root, int depth, unsigned int flags); pkgconf_pkg_t *pkgconf_pkg_verify_dependency(pkgconf_dependency_t *pkgdep, unsigned int flags, unsigned int *eflags); -const char *pkgconf_pkg_get_comparator(pkgconf_dependency_t *pkgdep); +const char *pkgconf_pkg_get_comparator(const pkgconf_dependency_t *pkgdep); int pkgconf_pkg_cflags(pkgconf_pkg_t *root, pkgconf_list_t *list, int maxdepth, unsigned int flags); int pkgconf_pkg_libs(pkgconf_pkg_t *root, pkgconf_list_t *list, int maxdepth, unsigned int flags); pkgconf_pkg_comparator_t pkgconf_pkg_comparator_lookup_by_name(const char *name); @@ -209,5 +209,6 @@ void pkgconf_cache_free(void); /* audit.c */ void pkgconf_audit_open_log(FILE *auditf); void pkgconf_audit_log(const char *format, ...) PRINTFLIKE(1, 2); +void pkgconf_audit_log_dependency(const pkgconf_pkg_t *dep, const pkgconf_dependency_t *depnode); #endif diff --git a/libpkgconf/pkg.c b/libpkgconf/pkg.c index 41b1ee7..2f252b7 100644 --- a/libpkgconf/pkg.c +++ b/libpkgconf/pkg.c @@ -741,7 +741,7 @@ static pkgconf_vercmp_res_func_t pkgconf_pkg_comparator_impls[PKGCONF_CMP_SIZE + * returns the comparator used in a depgraph dependency node as a string. */ const char * -pkgconf_pkg_get_comparator(pkgconf_dependency_t *pkgdep) +pkgconf_pkg_get_comparator(const pkgconf_dependency_t *pkgdep) { const pkgconf_pkg_comparator_name_t *i; @@ -844,6 +844,7 @@ pkgconf_pkg_report_graph_error(pkgconf_pkg_t *parent, pkgconf_pkg_t *pkg, pkgcon } pkgconf_error("Package '%s', required by '%s', not found\n", node->package, parent->id); + pkgconf_audit_log("%s NOT-FOUND\n", node->package); } else if (eflags & PKGCONF_PKG_ERRF_PACKAGE_VER_MISMATCH) { @@ -898,6 +899,8 @@ pkgconf_pkg_walk_list(pkgconf_pkg_t *parent, continue; } + pkgconf_audit_log_dependency(pkgdep, depnode); + pkgdep->flags |= PKGCONF_PKG_PROPF_SEEN; eflags |= pkgconf_pkg_traverse(pkgdep, func, data, depth - 1, flags); pkgdep->flags &= ~PKGCONF_PKG_PROPF_SEEN;