Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
libpkg: add SHLIB_PROVIDE_IGNORE_{GLOB,REGEX} options
Isaac Freund committed 1 year ago
commit 6ec1463c4d7c1e97f869a6f3badead947907f6bd
parent a35c0a3
4 files changed +34 -8
modified libpkg/pkg.c
@@ -966,14 +966,6 @@ pkg_addshlib_required(struct pkg *pkg, const char *name,

	char *full_name = pkg_shlib_name_with_flags(name, flags);

-
	if (match_ucl_lists(full_name,
-
	    pkg_config_get("SHLIB_REQUIRE_IGNORE_GLOB"),
-
	    pkg_config_get("SHLIB_REQUIRE_IGNORE_REGEX"))) {
-
		dbg(3, "ignoring shlib %s required by package %s", full_name, pkg->name);
-
		free(full_name);
-
		return (EPKG_OK);
-
	}
-

	/* silently ignore duplicates in case of shlibs */
	tll_foreach(pkg->shlibs_required, s) {
		if (STREQ(s->item, full_name)) {
modified libpkg/pkg_abi.c
@@ -546,6 +546,16 @@ pkg_analyse_files(struct pkgdb *db __unused, struct pkg *pkg, const char *stage)
			tll_remove_and_free(pkg->shlibs_required, s, free);
			continue;
		}
+
		if (match_ucl_lists(s->item,
+
		    pkg_config_get("SHLIB_REQUIRE_IGNORE_GLOB"),
+
		    pkg_config_get("SHLIB_REQUIRE_IGNORE_REGEX"))) {
+
			pkg_debug(2,
+
			    "remove %s from required shlibs for package %s as it "
+
			    "is matched by SHLIB_REQUIRE_IGNORE_GLOB/REGEX.",
+
			    s->item, pkg->name);
+
			tll_remove_and_free(pkg->shlibs_required, s, free);
+
			continue;
+
		}
		file = NULL;
		while (pkg_files(pkg, &file) == EPKG_OK) {
			if ((lib = strstr(file->path, s->item)) != NULL &&
@@ -564,6 +574,19 @@ pkg_analyse_files(struct pkgdb *db __unused, struct pkg *pkg, const char *stage)

	tll_free_and_free(internal_provided, free);

+
	tll_foreach(pkg->shlibs_provided, s) {
+
		if (match_ucl_lists(s->item,
+
		    pkg_config_get("SHLIB_PROVIDE_IGNORE_GLOB"),
+
		    pkg_config_get("SHLIB_PROVIDE_IGNORE_REGEX"))) {
+
			pkg_debug(2,
+
			    "remove %s from provided shlibs for package %s as it "
+
			    "is matched by SHLIB_PROVIDE_IGNORE_GLOB/REGEX.",
+
			    s->item, pkg->name);
+
			tll_remove_and_free(pkg->shlibs_provided, s, free);
+
			continue;
+
		}
+
	}
+

	/*
	 * if the package is not supposed to provide share libraries then
	 * drop the provided one
modified libpkg/pkg_config.c
@@ -450,6 +450,16 @@ static struct config_entry c[] = {
	},
	{
		PKG_ARRAY,
+
		"SHLIB_PROVIDE_IGNORE_GLOB",
+
		NULL,
+
	},
+
	{
+
		PKG_ARRAY,
+
		"SHLIB_PROVIDE_IGNORE_REGEX",
+
		NULL,
+
	},
+
	{
+
		PKG_ARRAY,
		"SHLIB_REQUIRE_IGNORE_GLOB",
		NULL,
	},
modified tests/frontend/create-parsebin.sh
@@ -131,5 +131,6 @@ create_from_bin_body() {
    do
        do_check testbin $bin
        do_check testbin $bin "-o SHLIB_PROVIDE_PATHS_NATIVE=/does/not/exist"
+
        do_check testbin $bin "-o SHLIB_PROVIDE_IGNORE_GLOB=*"
    done
}