Radish alpha
H
HardenedBSD Package Manager
Radicle
Git (anonymous pull)
Log in to clone via SSH
Manage dependencies of dependencies which can be our dependencies correctly.
jlaffaye committed 15 years ago
commit ca61697bedec73e4dd14be3e4ead805df473da1c
parent fc581c410d936a0bd82c4f670162b0b9c1e3ccb8
1 file changed +19 -3
modified libpkg/pkg_add.c
@@ -86,25 +86,41 @@ pkg_add(struct pkgdb *db, const char *path)
	/*
	 * Check for dependencies
	 */
-
	pkg_resolvdeps(pkg, db);
	deps = pkg_deps(pkg);
	basedir = dirname(path);
	if ((ext = strrchr(path, '.')) == NULL) {
		retcode = pkg_error_set(EPKG_FATAL, "%s has no extension", path);
		goto error;
	}
+
	pkg_resolvdeps(pkg, db);
	for (i = 0; deps[i] != NULL; i++) {
		if (pkg_type(deps[i]) == PKG_NOTFOUND) {
			snprintf(dpath, sizeof(dpath), "%s/%s-%s%s", basedir,
					 pkg_get(deps[i], PKG_NAME), pkg_get(deps[i], PKG_VERSION),
					 ext);

-
			if (pkg_add(db, dpath) != EPKG_OK) {
-
				retcode = pkg_error_set(EPKG_DEPENDENCY, "unresolved %s-%s dependency",
+
			if (access(dpath, F_OK) == 0) {
+
				if (pkg_add(db, dpath) == EPKG_OK) {
+
					/*
+
					 * Recheck the deps because the last installed package may
+
					 * have installed our deps too.
+
					 * TODO: do not it database here.
+
					 */
+
					pkg_resolvdeps(pkg, db);
+
				} else {
+
					retcode = pkg_error_set(EPKG_FATAL, "error while "
+
											"installing %s (dependency): %s",
+
											dpath,
+
											pkg_error_string());
+
					goto error;
+
				}
+
			} else {
+
				retcode = pkg_error_set(EPKG_DEPENDENCY, "missing %s-%s dependency",
										pkg_get(deps[i], PKG_NAME),
										pkg_get(deps[i], PKG_VERSION));
				goto error;
			}
+

		}
	}