Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Make pkg check really supporting provides/requires
Baptiste Daroussin committed 10 years ago
commit 5fb789246062a53d84fe2be050d4ed4be634ffa0
parent 29a933b
4 files changed +41 -1
modified libpkg/libpkg.ver
@@ -109,6 +109,7 @@ global:
	pkg_plugins_init;
	pkg_plugins_shutdown;
	pkg_printf;
+
	pkg_provide_name;
	pkg_provides;
	pkg_rdeps;
	pkg_recompute;
@@ -134,6 +135,7 @@ global:
	pkg_set_from_file;
	pkg_set_from_fileat;
	pkg_set_rootdir;
+
	pkg_shlib_name;
	pkg_shlibs_provided;
	pkg_shlibs_required;
	pkg_shutdown;
modified libpkg/pkg.h.in
@@ -646,6 +646,8 @@ int pkg_shlibs_required(const struct pkg *pkg, struct pkg_shlib **shlib);
 */
int pkg_shlibs_provided(const struct pkg *pkg, struct pkg_shlib **shlib);

+
const char *pkg_shlib_name(const struct pkg_shlib *shlib);
+

/**
 * Iterates over the conflicts registered in the package.
 * @param conflict must be set to NULL for the first call.
@@ -661,6 +663,8 @@ int pkg_conflicts(const struct pkg *pkg, struct pkg_conflict **conflict);
int pkg_provides(const struct pkg *pkg, struct pkg_provide **provide);
int pkg_requires(const struct pkg *pkg, struct pkg_provide **require);

+
const char *pkg_provide_name(const struct pkg_provide *provide);
+

/**
 * Iterates over the config files registered in the package.
 * @param provide must be set to NULL for the first call.
modified libpkg/pkg_attributes.c
@@ -238,6 +238,15 @@ pkg_shlib_free(struct pkg_shlib *sl)
	free(sl);
}

+
const char *
+
pkg_shlib_name(const struct pkg_shlib *sl)
+
{
+
	if (sl == NULL)
+
		return (NULL);
+

+
	return (sl->name);
+
}
+

/*
 * Conflicts
 */
@@ -357,3 +366,15 @@ pkg_kv_free(struct pkg_kv *c)
	free(c->value);
	free(c);
}
+

+
/*
+
 * provide
+
 */
+
const char *
+
pkg_provide_name(const struct pkg_provide *provide)
+
{
+
	if (provide == NULL)
+
		return (NULL);
+

+
	return (provide->provide);
+
}
modified src/check.c
@@ -64,6 +64,7 @@ check_deps(struct pkgdb *db, struct pkg *p, struct deps_head *dh, bool noinstall
{
	struct pkg_dep *dep = NULL;
	struct pkg_shlib *shlib = NULL;
+
	struct pkgdb_it *it;
	struct pkg_provide *provide = NULL;
	int nbpkgs = 0;

@@ -85,6 +86,12 @@ check_deps(struct pkgdb *db, struct pkg *p, struct deps_head *dh, bool noinstall

	/* checking libraries required */
	while (pkg_shlibs_required(p, &shlib) == EPKG_OK) {
+
		it = pkgdb_query_shlib_provide(db, pkg_shlib_name(shlib));
+
		if (it != NULL && pkgdb_it_count(it) > 0) {
+
			pkgdb_it_free(it);
+
			continue;
+
		}
+
		pkgdb_it_free(it);
		if (quiet)
			pkg_sbuf_printf(out, "%n\t%Bn\n", p, shlib);
		else
@@ -94,6 +101,12 @@ check_deps(struct pkgdb *db, struct pkg *p, struct deps_head *dh, bool noinstall

	/* checking requires */
	while (pkg_requires(p, &provide) == EPKG_OK) {
+
		it = pkgdb_query_provide(db, pkg_provide_name(provide));
+
		if (it != NULL && pkgdb_it_count(it) > 0) {
+
			pkgdb_it_free(it);
+
			continue;
+
		}
+
		pkgdb_it_free(it);
		if (quiet)
			pkg_sbuf_printf(out, "%n\tYn\n", p, provide);
		else
@@ -312,7 +325,7 @@ exec_check(int argc, char **argv)
			break;
		case 'd':
			dcheck = true;
-
			flags |= PKG_LOAD_DEPS;
+
			flags |= PKG_LOAD_DEPS|PKG_LOAD_REQUIRES|PKG_LOAD_SHLIBS_REQUIRED;
			break;
		case 'g':
			match = MATCH_GLOB;