Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Fix registering shlibs with a stage directory
Baptiste Daroussin committed 12 years ago
commit b876000342fe1bbdbfe2e3d3b59e96dd732a2650
parent ab199ee
3 files changed +12 -5
modified libpkg/pkg_create.c
@@ -103,7 +103,7 @@ pkg_create_from_dir(struct pkg *pkg, const char *root,
		 */
		struct sbuf *b = sbuf_new_auto();

-
		pkg_register_shlibs(pkg);
+
		pkg_register_shlibs(pkg, root);

		pkg_emit_manifest_sbuf(pkg, b, PKG_MANIFEST_EMIT_COMPACT, NULL);
		packing_append_buffer(pkg_archive, sbuf_data(b), "+COMPACT_MANIFEST", sbuf_len(b));
modified libpkg/pkg_elf.c
@@ -457,6 +457,7 @@ pkg_analyse_files(struct pkgdb *db, struct pkg *pkg)

	while (pkg_files(pkg, &file) == EPKG_OK) {
		fpath = pkg_file_path(file);
+

		ret = analyse_elf(pkg, fpath, action, db);
		if (developer) {
			if (ret != EPKG_OK && ret != EPKG_END)
@@ -474,9 +475,10 @@ cleanup:
}

int
-
pkg_register_shlibs(struct pkg *pkg)
+
pkg_register_shlibs(struct pkg *pkg, const char *root)
{
	struct pkg_file        *file = NULL;
+
	char fpath[MAXPATHLEN];

	pkg_list_free(pkg, PKG_SHLIBS_REQUIRED);

@@ -489,8 +491,13 @@ pkg_register_shlibs(struct pkg *pkg)
		return (EPKG_FATAL);
	}

-
	while(pkg_files(pkg, &file) == EPKG_OK)
-
		analyse_elf(pkg, pkg_file_path(file), add_shlibs_to_pkg, NULL);
+
	while(pkg_files(pkg, &file) == EPKG_OK) {
+
		if (root != NULL) {
+
			snprintf(fpath, MAXPATHLEN, "%s%s", root, pkg_file_path(file));
+
			analyse_elf(pkg, fpath, add_shlibs_to_pkg, NULL);
+
		} else
+
			analyse_elf(pkg, pkg_file_path(file), add_shlibs_to_pkg, NULL);
+
	}

	shlib_list_free();
	return (EPKG_OK);
modified libpkg/private/pkg.h
@@ -401,7 +401,7 @@ int pkgdb_update_shlibs_provided(struct pkg *pkg, int64_t package_id, sqlite3 *s
int pkgdb_insert_annotations(struct pkg *pkg, int64_t package_id, sqlite3 *s);
int pkgdb_register_finale(struct pkgdb *db, int retcode);

-
int pkg_register_shlibs(struct pkg *pkg);
+
int pkg_register_shlibs(struct pkg *pkg, const char *root);

void pkg_config_parse(yaml_document_t *doc, yaml_node_t *node, struct pkg_config *conf_by_key);