aboutsummaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/opkg/opkg
diff options
context:
space:
mode:
authorMartin Jansa <martin.jansa@gmail.com>2012-10-01 13:41:42 +0200
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-10-02 11:16:22 +0100
commit7ebce895a215b31cf01aea2ac43e554f96ef814f (patch)
tree1b5b0540b29d8684c8b61e209744e2426b876041 /meta/recipes-devtools/opkg/opkg
parentbbcc78d8ff03725ce5b3b65ce24025c3da45f2ab (diff)
downloadopenembedded-core-contrib-7ebce895a215b31cf01aea2ac43e554f96ef814f.tar.gz
opkg: fix version constraints in conflicts, depends, replaces
* http://code.google.com/p/opkg/issues/detail?id=94 Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-devtools/opkg/opkg')
-rw-r--r--meta/recipes-devtools/opkg/opkg/0009-pkg_depends-fix-version-constraints.patch188
-rw-r--r--meta/recipes-devtools/opkg/opkg/0010-pkg_depends-fix-version_constraints_satisfied.patch37
2 files changed, 225 insertions, 0 deletions
diff --git a/meta/recipes-devtools/opkg/opkg/0009-pkg_depends-fix-version-constraints.patch b/meta/recipes-devtools/opkg/opkg/0009-pkg_depends-fix-version-constraints.patch
new file mode 100644
index 0000000000..f7aa4eac91
--- /dev/null
+++ b/meta/recipes-devtools/opkg/opkg/0009-pkg_depends-fix-version-constraints.patch
@@ -0,0 +1,188 @@
+From b93ce2249751e0d90dab38e91691a6e9f33c3512 Mon Sep 17 00:00:00 2001
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Sat, 29 Sep 2012 11:38:03 +0200
+Subject: [PATCH 09/10] pkg_depends: fix version constraints
+
+* factor parsing version constraint to str_to_constraint and use that
+ from pkg (pkg_version_satisfied) and also pkg_depends (parseDepends)
+* fix constraint_to_str(), for EARLIER and LATER it was using '<' and
+ '>' which is parsed later as EARLIER_EQUAL and LATER_EQUAL
+* show notice when deprecated '<' or '>' is used
+
+Upstream-Status: Submitted
+http://code.google.com/p/opkg/issues/detail?id=94
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ libopkg/pkg.c | 36 +++++++++++--------------
+ libopkg/pkg_depends.c | 73 +++++++++++++++++++++++++++++----------------------
+ libopkg/pkg_depends.h | 1 +
+ 3 files changed, 59 insertions(+), 51 deletions(-)
+
+diff --git a/libopkg/pkg.c b/libopkg/pkg.c
+index 255c673..1e98b9c 100644
+--- a/libopkg/pkg.c
++++ b/libopkg/pkg.c
+@@ -968,28 +968,24 @@ pkg_version_satisfied(pkg_t *it, pkg_t *ref, const char *op)
+ int r;
+
+ r = pkg_compare_versions(it, ref);
++ char *op2 = op;
++ enum version_constraint constraint = str_to_constraint(&op2);
+
+- if (strcmp(op, "<=") == 0 || strcmp(op, "<") == 0) {
+- return r <= 0;
+- }
+-
+- if (strcmp(op, ">=") == 0 || strcmp(op, ">") == 0) {
+- return r >= 0;
+- }
+-
+- if (strcmp(op, "<<") == 0) {
+- return r < 0;
+- }
+-
+- if (strcmp(op, ">>") == 0) {
+- return r > 0;
+- }
+-
+- if (strcmp(op, "=") == 0) {
+- return r == 0;
++ switch (constraint)
++ {
++ case EARLIER_EQUAL:
++ return r <= 0;
++ case LATER_EQUAL:
++ return r >= 0;
++ case EARLIER:
++ return r < 0;
++ case LATER:
++ return r > 0;
++ case EQUAL:
++ return r == 0;
++ case NONE:
++ opkg_msg(ERROR, "Unknown operator: %s.\n", op);
+ }
+-
+- opkg_msg(ERROR, "Unknown operator: %s.\n", op);
+ return 0;
+ }
+
+diff --git a/libopkg/pkg_depends.c b/libopkg/pkg_depends.c
+index a72eed7..3dd8240 100644
+--- a/libopkg/pkg_depends.c
++++ b/libopkg/pkg_depends.c
+@@ -781,7 +781,7 @@ constraint_to_str(enum version_constraint c)
+ case NONE:
+ return "";
+ case EARLIER:
+- return "< ";
++ return "<< ";
+ case EARLIER_EQUAL:
+ return "<= ";
+ case EQUAL:
+@@ -789,12 +789,51 @@ constraint_to_str(enum version_constraint c)
+ case LATER_EQUAL:
+ return ">= ";
+ case LATER:
+- return "> ";
++ return ">> ";
+ }
+
+ return "";
+ }
+
++enum version_constraint
++str_to_constraint(char **str)
++{
++ if(!strncmp(*str, "<<", 2)){
++ *str += 2;
++ return EARLIER;
++ }
++ else if(!strncmp(*str, "<=", 2)){
++ *str += 2;
++ return EARLIER_EQUAL;
++ }
++ else if(!strncmp(*str, ">=", 2)){
++ *str += 2;
++ return LATER_EQUAL;
++ }
++ else if(!strncmp(*str, ">>", 2)){
++ *str += 2;
++ return LATER;
++ }
++ else if(!strncmp(*str, "=", 1)){
++ *str += 1;
++ return EQUAL;
++ }
++ /* should these be here to support deprecated designations; dpkg does */
++ else if(!strncmp(*str, "<", 1)){
++ *str += 1;
++ opkg_msg(NOTICE, "Deprecated version constraint '<' was used with the same meaning as '<='. Use '<<' for EARLIER constraint.\n");
++ return EARLIER_EQUAL;
++ }
++ else if(!strncmp(*str, ">", 1)){
++ *str += 1;
++ opkg_msg(NOTICE, "Deprecated version constraint '>' was used with the same meaning as '>='. Use '>>' for LATER constraint.\n");
++ return LATER_EQUAL;
++ }
++ else {
++ return NONE;
++ }
++}
++
+ /*
+ * Returns a printable string for pkg's dependency at the specified idx. The
+ * resultant string must be passed to free() by the caller.
+@@ -949,35 +988,7 @@ static int parseDepends(compound_depend_t *compound_depend,
+ /* extract constraint and version */
+ if(*src == '('){
+ src++;
+- if(!strncmp(src, "<<", 2)){
+- possibilities[i]->constraint = EARLIER;
+- src += 2;
+- }
+- else if(!strncmp(src, "<=", 2)){
+- possibilities[i]->constraint = EARLIER_EQUAL;
+- src += 2;
+- }
+- else if(!strncmp(src, ">=", 2)){
+- possibilities[i]->constraint = LATER_EQUAL;
+- src += 2;
+- }
+- else if(!strncmp(src, ">>", 2)){
+- possibilities[i]->constraint = LATER;
+- src += 2;
+- }
+- else if(!strncmp(src, "=", 1)){
+- possibilities[i]->constraint = EQUAL;
+- src++;
+- }
+- /* should these be here to support deprecated designations; dpkg does */
+- else if(!strncmp(src, "<", 1)){
+- possibilities[i]->constraint = EARLIER_EQUAL;
+- src++;
+- }
+- else if(!strncmp(src, ">", 1)){
+- possibilities[i]->constraint = LATER_EQUAL;
+- src++;
+- }
++ possibilities[i]->constraint = str_to_constraint(&src);
+
+ /* now we have any constraint, pass space to version string */
+ while(isspace(*src)) src++;
+diff --git a/libopkg/pkg_depends.h b/libopkg/pkg_depends.h
+index ca0801f..685a722 100644
+--- a/libopkg/pkg_depends.h
++++ b/libopkg/pkg_depends.h
+@@ -87,6 +87,7 @@ pkg_vec_t * pkg_hash_fetch_conflicts(pkg_t * pkg);
+ int pkg_dependence_satisfiable(depend_t *depend);
+ int pkg_dependence_satisfied(depend_t *depend);
+ const char* constraint_to_str(enum version_constraint c);
++enum version_constraint str_to_constraint(char **str);
+ int is_pkg_in_pkg_vec(pkg_vec_t * vec, pkg_t * pkg);
+
+ #endif
+--
+1.7.12
+
diff --git a/meta/recipes-devtools/opkg/opkg/0010-pkg_depends-fix-version_constraints_satisfied.patch b/meta/recipes-devtools/opkg/opkg/0010-pkg_depends-fix-version_constraints_satisfied.patch
new file mode 100644
index 0000000000..a13d6585c3
--- /dev/null
+++ b/meta/recipes-devtools/opkg/opkg/0010-pkg_depends-fix-version_constraints_satisfied.patch
@@ -0,0 +1,37 @@
+From e9add8fe4a63ef14aba8bd238ddde84d5470b611 Mon Sep 17 00:00:00 2001
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Sat, 29 Sep 2012 18:56:01 +0200
+Subject: [PATCH 10/10] pkg_depends: fix version_constraints_satisfied
+
+* with
+ Package: a
+ Version: 1
+ and
+ Conflicts: a (<< 1)
+ we have comparison == 0, but constraint EARLIER is not satisfied!
+
+Upstream-Status: Submitted
+http://code.google.com/p/opkg/issues/detail?id=94
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ libopkg/pkg_depends.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/libopkg/pkg_depends.c b/libopkg/pkg_depends.c
+index 3dd8240..be81b7f 100644
+--- a/libopkg/pkg_depends.c
++++ b/libopkg/pkg_depends.c
+@@ -464,7 +464,8 @@ int version_constraints_satisfied(depend_t * depends, pkg_t * pkg)
+ else if((depends->constraint == LATER) &&
+ (comparison > 0))
+ return 1;
+- else if(comparison == 0)
++ else if((depends->constraint == EQUAL) &&
++ (comparison == 0))
+ return 1;
+ else if((depends->constraint == LATER_EQUAL) &&
+ (comparison >= 0))
+--
+1.7.12
+