[oe-commits] Mark Hatle : opkg: Add support for excluding packages from the install

git at git.openembedded.org git at git.openembedded.org
Thu Aug 22 17:20:06 UTC 2013


Module: openembedded-core.git
Branch: master-next
Commit: 63c61b7c0c8aeb89661e3bb85e281dd1ef5b618c
URL:    http://git.openembedded.org/?p=openembedded-core.git&a=commit;h=63c61b7c0c8aeb89661e3bb85e281dd1ef5b618c

Author: Mark Hatle <mark.hatle at windriver.com>
Date:   Tue Aug 13 20:31:23 2013 -0500

opkg: Add support for excluding packages from the install

This adds a new argument to opkg-cl, --add-exclude, which is
used to add package names to the list of packages to exclude
from the install.

If an excluded package is needed for the install to resolve,
an error will be generated.  Recommended packages will not
generate an error.

Signed-off-by: Mark Hatle <mark.hatle at windriver.com>
Signed-off-by: Saul Wold <sgw at linux.intel.com>

---

 meta/recipes-devtools/opkg/opkg/add-exclude.patch |   99 +++++++++++++++++++++
 meta/recipes-devtools/opkg/opkg_svn.bb            |    1 +
 2 files changed, 100 insertions(+), 0 deletions(-)

diff --git a/meta/recipes-devtools/opkg/opkg/add-exclude.patch b/meta/recipes-devtools/opkg/opkg/add-exclude.patch
new file mode 100644
index 0000000..34e2bb4
--- /dev/null
+++ b/meta/recipes-devtools/opkg/opkg/add-exclude.patch
@@ -0,0 +1,99 @@
+Add a way to exclude specific packages from the install
+
+When an excluded package is required by another package an error
+will be generated.  If the excluded package is only recommended,
+no error will be generated.
+
+The lifespan of the exclude_list covers the execution of the process,
+so there is no need to free the data.
+
+Upstream-Status: Pending
+
+Signed-off-by: Mark Hatle <mark.hatle at windriver.com>
+
+Index: trunk/libopkg/opkg_conf.h
+===================================================================
+--- trunk.orig/libopkg/opkg_conf.h
++++ trunk/libopkg/opkg_conf.h
+@@ -49,6 +49,8 @@ struct opkg_conf
+      pkg_dest_list_t pkg_dest_list;
+      pkg_dest_list_t tmp_dest_list;
+      nv_pair_list_t arch_list;
++     size_t exclude_count;
++     char ** exclude_list;
+ 
+      int restrict_to_default_dest;
+      pkg_dest_t *default_dest;
+Index: trunk/libopkg/pkg_depends.c
+===================================================================
+--- trunk.orig/libopkg/pkg_depends.c
++++ trunk/libopkg/pkg_depends.c
+@@ -212,6 +212,22 @@ pkg_hash_fetch_unsatisfied_dependencies(
+ 			 continue;
+ 		    }
+ 
++		    /* Check for excluded packages */
++		    if (satisfying_pkg != NULL && conf->exclude_list) {
++			int i, exclude = 0;
++			for (i = 0; i < conf->exclude_count; i++) {
++			    if (!strcmp(satisfying_pkg->name, conf->exclude_list[i])) {
++				opkg_msg(NOTICE, "%s: exclude required package %s"
++					"at users request\n",
++					pkg->name, satisfying_pkg->name);
++				exclude = 1;
++				break;
++			    }
++			}
++			if (exclude)
++			    continue;
++		    }
++
+ 		    opkg_msg(DEBUG, "satisfying_pkg=%p\n", satisfying_pkg);
+ 		    if (satisfying_pkg != NULL) {
+ 			 satisfier_entry_pkg = satisfying_pkg;
+Index: trunk/src/opkg-cl.c
+===================================================================
+--- trunk.orig/src/opkg-cl.c
++++ trunk/src/opkg-cl.c
+@@ -45,6 +45,7 @@ enum {
+ 	ARGS_OPT_PREFER_ARCH_TO_VERSION,
+ 	ARGS_OPT_ADD_ARCH,
+ 	ARGS_OPT_ADD_DEST,
++	ARGS_OPT_ADD_EXCLUDE,
+ 	ARGS_OPT_NOACTION,
+ 	ARGS_OPT_DOWNLOAD_ONLY,
+ 	ARGS_OPT_NODEPS,
+@@ -95,6 +96,7 @@ static struct option long_options[] = {
+ 	{"offline-root", 1, 0, 'o'},
+ 	{"add-arch", 1, 0, ARGS_OPT_ADD_ARCH},
+ 	{"add-dest", 1, 0, ARGS_OPT_ADD_DEST},
++	{"add-exclude", 1, 0, ARGS_OPT_ADD_EXCLUDE},
+ 	{"test", 0, 0, ARGS_OPT_NOACTION},
+ 	{"tmp-dir", 1, 0, 't'},
+ 	{"tmp_dir", 1, 0, 't'},
+@@ -198,6 +200,17 @@ args_parse(int argc, char *argv[])
+ 			}
+ 			free(tuple);
+ 			break;
++		case ARGS_OPT_ADD_EXCLUDE:
++			tuple = xstrdup(optarg);
++			if (!conf->exclude_list) {
++				conf->exclude_count = 1;
++				conf->exclude_list = malloc(sizeof(char *) * conf->exclude_count);
++				conf->exclude_list[conf->exclude_count - 1] = tuple;
++			} else {
++				conf->exclude_count++;
++				conf->exclude_list = realloc(conf->exclude_list, sizeof(char *) * conf->exclude_count);
++				conf->exclude_list[conf->exclude_count - 1] = tuple;
++			}
+ 		case ARGS_OPT_NOACTION:
+ 			conf->noaction = 1;
+ 			break;
+@@ -282,6 +295,7 @@ usage()
+ 	printf("\t--offline-root <dir>	offline installation of packages.\n");
+ 	printf("\t--add-arch <arch>:<prio>	Register architecture with given priority\n");
+ 	printf("\t--add-dest <name>:<path>	Register destination with given path\n");
++	printf("\t--add-exclude <name>		Register package to be excluded from install\n");
+ 	printf("\t--prefer-arch-to-version\t 	Use the architecture priority package rather\n");
+ 	printf("\t				than the higher version one if more\n");
+ 	printf("\t				than one candidate is found.\n");
diff --git a/meta/recipes-devtools/opkg/opkg_svn.bb b/meta/recipes-devtools/opkg/opkg_svn.bb
index dbfca0f..bc10491 100644
--- a/meta/recipes-devtools/opkg/opkg_svn.bb
+++ b/meta/recipes-devtools/opkg/opkg_svn.bb
@@ -2,6 +2,7 @@ require opkg.inc
 
 SRC_URI = "svn://opkg.googlecode.com/svn;module=trunk;protocol=http \
            file://no-install-recommends.patch \
+           file://add-exclude.patch \
 "
 
 S = "${WORKDIR}/trunk"



More information about the Openembedded-commits mailing list