/* ARGSUSED */ static int add_shlibs_to_pkg(struct pkg *pkg, const char *fpath, const char *name, bool is_shlib) { struct pkg_file *file = NULL; const char *filepath; switch(filter_system_shlibs(name, NULL, 0)) { case EPKG_OK: /* A non-system library */ pkg_addshlib_required(pkg, name); return (EPKG_OK); case EPKG_END: /* A system library */ return (EPKG_OK); default: /* Ignore link resolution errors if we're analysing a shared library. */ if (is_shlib) return (EPKG_OK); while (pkg_files(pkg, &file) == EPKG_OK) { filepath = file->path; if (strcmp(&filepath[strlen(filepath) - strlen(name)], name) == 0) { pkg_addshlib_required(pkg, name); return (EPKG_OK); } } pkg_emit_notice("(%s-%s) %s - required shared library %s not " "found", pkg->name, pkg->version, fpath, name); return (EPKG_FATAL); } }
/* ARGSUSED */ static int add_shlibs_to_pkg(__unused void *actdata, struct pkg *pkg, const char *fpath, const char *name, bool is_shlib) { const char *pkgname, *pkgversion; struct pkg_file *file = NULL; const char *filepath; switch(filter_system_shlibs(name, NULL, 0)) { case EPKG_OK: /* A non-system library */ pkg_addshlib_required(pkg, name); return (EPKG_OK); case EPKG_END: /* A system library */ return (EPKG_OK); default: /* Ignore link resolution errors if we're analysing a shared library. */ if (is_shlib) return (EPKG_OK); while (pkg_files(pkg, &file) == EPKG_OK) { filepath = pkg_file_path(file); if (strcmp(&filepath[strlen(filepath) - strlen(name)], name) == 0) { pkg_addshlib_required(pkg, name); return (EPKG_OK); } } pkg_get(pkg, PKG_NAME, &pkgname, PKG_VERSION, &pkgversion); warnx("(%s-%s) %s - shared library %s not found", pkgname, pkgversion, fpath, name); return (EPKG_FATAL); } }
static int test_depends(void *actdata, struct pkg *pkg, const char *fpath, const char *name, bool is_shlib) { struct pkgdb *db = actdata; struct pkg_dep *dep = NULL; struct pkgdb_it *it = NULL; struct pkg *d; const char *deporigin, *depname, *depversion; const char *pkgname, *pkgversion; bool deplocked; char pathbuf[MAXPATHLEN]; assert(db != NULL); switch(filter_system_shlibs(name, pathbuf, sizeof(pathbuf))) { case EPKG_OK: /* A non-system library */ break; case EPKG_END: /* A system library */ return (EPKG_OK); default: /* Ignore link resolution errors if we're analysing a shared library. */ if (is_shlib) return (EPKG_OK); pkg_get(pkg, PKG_NAME, &pkgname, PKG_VERSION, &pkgversion); warnx("(%s-%s) %s - shared library %s not found", pkgname, pkgversion, fpath, name); return (EPKG_FATAL); } pkg_addshlib_required(pkg, name); if ((it = pkgdb_query_which(db, pathbuf, false)) == NULL) return (EPKG_OK); d = NULL; if (pkgdb_it_next(it, &d, PKG_LOAD_BASIC) == EPKG_OK) { pkg_get(d, PKG_ORIGIN, &deporigin, PKG_NAME, &depname, PKG_VERSION, &depversion, PKG_LOCKED, &deplocked); dep = pkg_dep_lookup(pkg, deporigin); if (dep == NULL) { pkg_debug(1, "Autodeps: adding unlisted depends (%s): %s-%s", pathbuf, depname, depversion); pkg_adddep(pkg, depname, deporigin, depversion, deplocked); } pkg_free(d); } pkgdb_it_free(it); return (EPKG_OK); }
/* ARGSUSED */ static int add_shlibs_to_pkg(__unused void *actdata, struct pkg *pkg, const char *fpath, const char *name, bool is_shlib) { switch(filter_system_shlibs(name, NULL, 0)) { case EPKG_OK: /* A non-system library */ pkg_addshlib_required(pkg, name); return (EPKG_OK); case EPKG_END: /* A system library */ return (EPKG_OK); default: /* Ignore link resolution errors if we're analysing a shared library. */ if (is_shlib) return (EPKG_OK); warnx("(%s-%s) %s - shared library %s not found", pkg_name(pkg), pkg_version(pkg), fpath, name); return (EPKG_FATAL); } }
static int pkg_array(struct pkg *pkg, ucl_object_t *obj, int attr) { ucl_object_t *cur; ucl_object_iter_t it = NULL; pkg_debug(3, "%s", "Manifest: parsing array"); while ((cur = ucl_iterate_object(obj, &it, true))) { switch (attr) { case PKG_CATEGORIES: if (cur->type != UCL_STRING) pkg_emit_error("Skipping malformed category"); else pkg_addcategory(pkg, ucl_object_tostring(cur)); break; case PKG_LICENSES: if (cur->type != UCL_STRING) pkg_emit_error("Skipping malformed license"); else pkg_addlicense(pkg, ucl_object_tostring(cur)); break; case PKG_USERS: if (cur->type == UCL_STRING) pkg_adduser(pkg, ucl_object_tostring(cur)); else if (cur->type == UCL_OBJECT) pkg_object(pkg, cur, attr); else pkg_emit_error("Skipping malformed license"); break; case PKG_GROUPS: if (cur->type == UCL_STRING) pkg_addgroup(pkg, ucl_object_tostring(cur)); else if (cur->type == UCL_OBJECT) pkg_object(pkg, cur, attr); else pkg_emit_error("Skipping malformed license"); break; case PKG_DIRS: if (cur->type == UCL_STRING) pkg_adddir(pkg, ucl_object_tostring(cur), 1, false); else if (cur->type == UCL_OBJECT) pkg_object(pkg, cur, attr); else pkg_emit_error("Skipping malformed dirs"); break; case PKG_SHLIBS_REQUIRED: if (cur->type != UCL_STRING) pkg_emit_error("Skipping malformed required shared library"); else pkg_addshlib_required(pkg, ucl_object_tostring(cur)); break; case PKG_SHLIBS_PROVIDED: if (cur->type != UCL_STRING) pkg_emit_error("Skipping malformed provided shared library"); else pkg_addshlib_provided(pkg, ucl_object_tostring(cur)); break; case PKG_CONFLICTS: if (cur->type != UCL_STRING) pkg_emit_error("Skipping malformed conflict name"); else pkg_addconflict(pkg, ucl_object_tostring(cur)); break; case PKG_PROVIDES: if (cur->type != UCL_STRING) pkg_emit_error("Skipping malformed provide name"); else pkg_addprovide(pkg, ucl_object_tostring(cur)); break; } } return (EPKG_OK); }
static int test_depends(void *actdata, struct pkg *pkg, const char *fpath, const char *name, bool is_shlib) { struct pkgdb *db = actdata; struct pkg_dep *dep = NULL; struct pkgdb_it *it = NULL; struct pkg *d; const char *deporigin, *depname, *depversion; bool deplocked; char pathbuf[MAXPATHLEN]; bool found; bool shlibs = false; assert(db != NULL); pkg_config_bool(PKG_CONFIG_SHLIBS, &shlibs); switch(filter_system_shlibs(name, pathbuf, sizeof(pathbuf))) { case EPKG_OK: /* A non-system library */ break; case EPKG_END: /* A system library */ return (EPKG_OK); default: /* Ignore link resolution errors if we're analysing a shared library. */ if (is_shlib) return (EPKG_OK); warnx("(%s-%s) %s - shared library %s not found", pkg_name(pkg), pkg_version(pkg), fpath, name); return (EPKG_FATAL); } if (shlibs) pkg_addshlib_required(pkg, name); if ((it = pkgdb_query_which(db, pathbuf)) == NULL) return (EPKG_OK); d = NULL; if (pkgdb_it_next(it, &d, PKG_LOAD_BASIC) == EPKG_OK) { found = false; pkg_get(d, PKG_ORIGIN, &deporigin, PKG_NAME, &depname, PKG_VERSION, &depversion, PKG_LOCKED, &deplocked); dep = NULL; found = false; while (pkg_deps(pkg, &dep) == EPKG_OK) { if (strcmp(pkg_dep_origin(dep), deporigin) == 0) { found = true; break; } } if (!found) { pkg_emit_error("adding forgotten depends (%s): %s-%s", pathbuf, depname, depversion); pkg_adddep(pkg, depname, deporigin, depversion, deplocked); } pkg_free(d); } pkgdb_it_free(it); return (EPKG_OK); }
static int parse_sequence(struct pkg * pkg, yaml_node_t *node, yaml_document_t *doc, int attr) { yaml_node_item_t *item; yaml_node_t *val; item = node->data.sequence.items.start; while (item < node->data.sequence.items.top) { val = yaml_document_get_node(doc, *item); switch (attr) { case PKG_CATEGORIES: if (!is_valid_yaml_scalar(val)) pkg_emit_error("Skipping malformed category"); else pkg_addcategory(pkg, val->data.scalar.value); break; case PKG_LICENSES: if (!is_valid_yaml_scalar(val)) pkg_emit_error("Skipping malformed license"); else pkg_addlicense(pkg, val->data.scalar.value); break; case PKG_USERS: if (is_valid_yaml_scalar(val)) pkg_adduser(pkg, val->data.scalar.value); else if (val->type == YAML_MAPPING_NODE) parse_mapping(pkg, val, doc, attr); else pkg_emit_error("Skipping malformed license"); break; case PKG_GROUPS: if (is_valid_yaml_scalar(val)) pkg_addgroup(pkg, val->data.scalar.value); else if (val->type == YAML_MAPPING_NODE) parse_mapping(pkg, val, doc, attr); else pkg_emit_error("Skipping malformed license"); break; case PKG_DIRS: if (is_valid_yaml_scalar(val)) pkg_adddir(pkg, val->data.scalar.value, 1, false); else if (val->type == YAML_MAPPING_NODE) parse_mapping(pkg, val, doc, attr); else pkg_emit_error("Skipping malformed dirs"); break; case PKG_SHLIBS_REQUIRED: if (!is_valid_yaml_scalar(val)) pkg_emit_error("Skipping malformed required shared library"); else pkg_addshlib_required(pkg, val->data.scalar.value); break; case PKG_SHLIBS_PROVIDED: if (!is_valid_yaml_scalar(val)) pkg_emit_error("Skipping malformed provided shared library"); else pkg_addshlib_provided(pkg, val->data.scalar.value); break; } ++item; } return (EPKG_OK); }