int pacman_deptest(alpm_list_t *targets) { alpm_list_t *i; alpm_list_t *deps = NULL; alpm_db_t *localdb = alpm_get_localdb(config->handle); for(i = targets; i; i = alpm_list_next(i)) { char *target = i->data; if(!alpm_find_satisfier(alpm_db_get_pkgcache(localdb), target)) { deps = alpm_list_add(deps, target); } } if(deps == NULL) { return 0; } for(i = deps; i; i = alpm_list_next(i)) { const char *dep = i->data; printf("%s\n", dep); } alpm_list_free(deps); return 127; }
void add_deps(alpm_pkg_t *pkg) { alpm_list_t *i; for(i = alpm_pkg_get_depends(pkg); i; i = alpm_list_next(i)) { char *depstring = alpm_dep_compute_string(i->data); alpm_pkg_t *p = alpm_find_satisfier(pkgcache, depstring); if(p && !alpm_list_find_ptr(packages, p)) { packages = alpm_list_add(packages, p); add_deps(p); } free(depstring); } if(checks & CHECK_OPT_DEPENDS) { for(i = alpm_pkg_get_optdepends(pkg); i; i = alpm_list_next(i)) { char *depstring = alpm_dep_compute_string(i->data); alpm_pkg_t *p = alpm_find_satisfier(pkgcache, depstring); if(p && !alpm_list_find_ptr(packages, p)) { packages = alpm_list_add(packages, p); add_deps(p); } free(depstring); } } }
static int check_depends(alpm_pkg_t *p) { int ret = 0; alpm_list_t *i; for(i = alpm_pkg_get_depends(p); i; i = alpm_list_next(i)) { char *depstring = alpm_dep_compute_string(i->data); if(!alpm_find_satisfier(pkgcache, depstring)) { eprintf("%s: unsatisfied dependency '%s'\n", alpm_pkg_get_name(p), depstring); ret = 1; } free(depstring); } if(!quiet && !ret) { eprintf("%s: all dependencies satisfied\n", alpm_pkg_get_name(p)); } return ret; }
static alpm_list_t * pk_backend_find_provider (PkBackend *self, alpm_list_t *pkgs, const gchar *depend, GError **error) { PkBitfield filters; gboolean recursive, skip_local, skip_remote; alpm_pkg_t *provider; alpm_list_t *pkgcache, *syncdbs; g_return_val_if_fail (self != NULL, pkgs); g_return_val_if_fail (depend != NULL, pkgs); g_return_val_if_fail (alpm != NULL, pkgs); g_return_val_if_fail (localdb != NULL, pkgs); recursive = pk_backend_get_bool (self, "recursive"); filters = pk_backend_get_uint (self, "filters"); skip_local = pk_bitfield_contain (filters, PK_FILTER_ENUM_NOT_INSTALLED); skip_remote = pk_bitfield_contain (filters, PK_FILTER_ENUM_INSTALLED); if (alpm_find_satisfier (pkgs, depend) != NULL) { return pkgs; } /* look for local dependencies */ pkgcache = alpm_db_get_pkgcache (localdb); provider = alpm_find_satisfier (pkgcache, depend); if (provider != NULL) { if (!skip_local) { pk_backend_pkg (self, provider, PK_INFO_ENUM_INSTALLED); /* assume later dependencies will also be local */ if (recursive) { pkgs = alpm_list_add (pkgs, provider); } } return pkgs; } /* look for remote dependencies */ syncdbs = alpm_get_syncdbs (alpm); provider = alpm_find_dbs_satisfier (alpm, syncdbs, depend); if (provider != NULL) { if (!skip_remote) { pk_backend_pkg (self, provider, PK_INFO_ENUM_AVAILABLE); } /* keep looking for local dependencies */ if (recursive) { pkgs = alpm_list_add (pkgs, provider); } } else { int code = ALPM_ERR_UNSATISFIED_DEPS; g_set_error (error, ALPM_ERROR, code, "%s: %s", depend, alpm_strerror (code)); } return pkgs; }