Skip to contentSkip to conversation

Martin Jansa : xserver-xorg: use EXTENDPKGV instead of PV in RCONFLICTS_${PN}-module-exa

oe-commits Superseded Martin Jansa 4 participants 13 messages Sep 27, 2012 – Oct 2, 2012 1 message not in the archive

lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): 20120927142926.CA9C5103AC@opal

#1 lore raw
Quoted 16 lines · On Thu, Sep 27, 2012 at 02:29:25PM +0000, [email protected] wrote:
Module: openembedded-core.git
Branch: master
Commit: ed0216d29fc4355c5220f3ad51df04a63cacb0c3
URL:    http://git.openembedded.org/?p=openembedded-core.git&a=commit;h=ed0216d29fc4355c5220f3ad51df04a63cacb0c3
Author: Martin Jansa <[email protected]>
Date:   Sat Sep 22 19:13:14 2012 +0200

xserver-xorg: use EXTENDPKGV instead of PV in RCONFLICTS_${PN}-module-exa

* it doesn't make much sense with PV, because xserver-xorg-module-exa was introduced in
http://git.openembedded.org/openembedded-core/commit/meta/recipes-graphics/xorg-xserver?id=1a666ee1cda3c0b74daba5881fc5f62e13deec66
so our xserver-xorg-module-exa RCONFLICTS with xserver-xorg (<= 1.11.2-r4) and (< 1.11.2) is not good enough

Quoted 5 lines

* because we don't know how many PRINC are in BSP/DISTRO layers, then it's safer to RCONFLICTS with every older version then current EXTENDPKGV

Also fixes whitespace to work correctly with opkg

The whitespace problem wasn't opkg fault AFAIK, but bb.utils.explode_dep_versions as shown in
http://patchwork.openembedded.org/patch/37069/

Cheers

Quoted 34 lines

--

* I haven't really tested this with IPK, since it was changed from RREPLACES to RCONFLICTS (because of RPM) and all my installed devices are already upgraded

---

 .../recipes-graphics/xorg-xserver/xserver-xorg.inc |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
meta/recipes-graphics/xorg-xserver/xserver-xorg.inc +1 -1
index 643ca70..7513399 100644
@@ -66,7 +66,7 @@ PACKAGES =+ "${PN}-security-policy \
 
 RRECOMMENDS_${PN} += "${PN}-security-policy xkeyboard-config rgb xserver-xf86-config"
 RDEPENDS_${PN}-xvfb += "xkeyboard-config"
-RCONFLICTS_${PN}-module-exa = "${PN} (<${PV})"
+RCONFLICTS_${PN}-module-exa = "${PN} (< ${EXTENDPKGV})"
 
 FILES_${PN} = "${bindir} ${libdir}/X11/Options ${libdir}/X11/Cards ${libdir}/X11/getconfig ${libdir}/X11/etc ${libdir}/modules/*.so ${libdir}/xorg/modules/*.so /etc/X11 ${libdir}/xorg/protocol.txt ${datadir}/X11/xorg.conf.d"
 FILES_${PN}-dev += "${libdir}/xorg/modules/*.la ${libdir}/xorg/modules/*/*.la"

_______________________________________________
Openembedded-commits mailing list
[email protected]
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-commits

Signature · 1 line
Martin 'JaMa' Jansa     jabber: [email protected]
#2 lore raw
Quoted 21 lines · Martin Jansa
Quoted 20 lines · On Thu, Sep 27, 2012 at 02:29:25PM +0000, [email protected] wrote:
Module: openembedded-core.git
Branch: master
Commit: ed0216d29fc4355c5220f3ad51df04a63cacb0c3
URL:    http://git.openembedded.org/?p=openembedded-core.git&a=commit;h=ed0216d29fc4355c5220f3ad51df04a63cacb0c3
Author: Martin Jansa <[email protected]>
Date:   Sat Sep 22 19:13:14 2012 +0200

xserver-xorg: use EXTENDPKGV instead of PV in RCONFLICTS_${PN}-module-exa

* it doesn't make much sense with PV, because xserver-xorg-module-exa was introduced in
http://git.openembedded.org/openembedded-core/commit/meta/recipes-graphics/xorg-xserver?id=1a666ee1cda3c0b74daba5881fc5f62e13deec66
so our xserver-xorg-module-exa RCONFLICTS with xserver-xorg (<= 1.11.2-r4) and (< 1.11.2) is not good enough

* because we don't know how many PRINC are in BSP/DISTRO layers, then it's safer to RCONFLICTS with every older version then current EXTENDPKGV

Quoted 5 lines
Quoted 1 line

Also fixes whitespace to work correctly with opkg

The whitespace problem wasn't opkg fault AFAIK, but bb.utils.explode_dep_versions as shown in
http://patchwork.openembedded.org/patch/37069/

Ah and it was meant to be applied together with this patch, so now it's missing PR bump..

Cheers,

Quoted 36 lines
Quoted 33 lines

--

* I haven't really tested this with IPK, since it was changed from RREPLACES to RCONFLICTS (because of RPM) and all my installed devices are already upgraded

---

 .../recipes-graphics/xorg-xserver/xserver-xorg.inc |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
meta/recipes-graphics/xorg-xserver/xserver-xorg.inc +1 -1
index 643ca70..7513399 100644
@@ -66,7 +66,7 @@ PACKAGES =+ "${PN}-security-policy \
 
 RRECOMMENDS_${PN} += "${PN}-security-policy xkeyboard-config rgb xserver-xf86-config"
 RDEPENDS_${PN}-xvfb += "xkeyboard-config"
-RCONFLICTS_${PN}-module-exa = "${PN} (<${PV})"
+RCONFLICTS_${PN}-module-exa = "${PN} (< ${EXTENDPKGV})"
 
 FILES_${PN} = "${bindir} ${libdir}/X11/Options ${libdir}/X11/Cards ${libdir}/X11/getconfig ${libdir}/X11/etc ${libdir}/modules/*.so ${libdir}/xorg/modules/*.so /etc/X11 ${libdir}/xorg/protocol.txt ${datadir}/X11/xorg.conf.d"
 FILES_${PN}-dev += "${libdir}/xorg/modules/*.la ${libdir}/xorg/modules/*/*.la"

_______________________________________________
Openembedded-commits mailing list
[email protected]
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-commits

Signature · 1 line
Martin 'JaMa' Jansa     jabber: [email protected]
Signature · 1 line
Martin 'JaMa' Jansa     jabber: [email protected]
#3 lore raw
Quoted 22 lines · Martin Jansa
Quoted 21 lines · Martin Jansa
Quoted 20 lines · On Thu, Sep 27, 2012 at 02:29:25PM +0000, [email protected] wrote:
Module: openembedded-core.git
Branch: master
Commit: ed0216d29fc4355c5220f3ad51df04a63cacb0c3
URL:    http://git.openembedded.org/?p=openembedded-core.git&a=commit;h=ed0216d29fc4355c5220f3ad51df04a63cacb0c3
Author: Martin Jansa <[email protected]>
Date:   Sat Sep 22 19:13:14 2012 +0200

xserver-xorg: use EXTENDPKGV instead of PV in RCONFLICTS_${PN}-module-exa

* it doesn't make much sense with PV, because xserver-xorg-module-exa was introduced in
http://git.openembedded.org/openembedded-core/commit/meta/recipes-graphics/xorg-xserver?id=1a666ee1cda3c0b74daba5881fc5f62e13deec66
so our xserver-xorg-module-exa RCONFLICTS with xserver-xorg (<= 1.11.2-r4) and (< 1.11.2) is not good enough

* because we don't know how many PRINC are in BSP/DISTRO layers, then it's safer to RCONFLICTS with every older version then current EXTENDPKGV

Quoted 8 lines
Quoted 5 lines
Quoted 1 line

Also fixes whitespace to work correctly with opkg

The whitespace problem wasn't opkg fault AFAIK, but bb.utils.explode_dep_versions as shown in
http://patchwork.openembedded.org/patch/37069/

Ah and it was meant to be applied together with this patch, so now it's missing PR bump..

It keeps failing for me.

Signature · 3 lines
Otavio Salvador                             O.S. Systems
E-mail: [email protected]  http://www.ossystems.com.br
Mobile: +55 53 9981-7854              http://projetos.ossystems.com.br
#4 lore raw

Just an FYI -- Martin Jansa found a problem with the implement of the package version comparison.

In deb and ipk, they do not support '<' or '>', instead it's '<<' and '>>'. (Odd, historical reasons apparently).

While RPM doesn't have any idea what '<<' or '>>' is.

Talking with RP and others it seems like the best approach is to implement a conversion, in the deb and ipk packaging classes, to convert '<' and '>' to the '<<' and '>>' equivalents. As well as add a sanity check that nobody is using '<<' or '>>'.

I'm in the process of doing that now.

--Mark

Quoted 34 lines · Otavio Salvador
Quoted 22 lines · Martin Jansa
Quoted 21 lines · Martin Jansa
Quoted 20 lines · On Thu, Sep 27, 2012 at 02:29:25PM +0000, [email protected] wrote:
Module: openembedded-core.git
Branch: master
Commit: ed0216d29fc4355c5220f3ad51df04a63cacb0c3
URL:    http://git.openembedded.org/?p=openembedded-core.git&a=commit;h=ed0216d29fc4355c5220f3ad51df04a63cacb0c3
Author: Martin Jansa <[email protected]>
Date:   Sat Sep 22 19:13:14 2012 +0200

xserver-xorg: use EXTENDPKGV instead of PV in RCONFLICTS_${PN}-module-exa

* it doesn't make much sense with PV, because xserver-xorg-module-exa was introduced in
http://git.openembedded.org/openembedded-core/commit/meta/recipes-graphics/xorg-xserver?id=1a666ee1cda3c0b74daba5881fc5f62e13deec66
so our xserver-xorg-module-exa RCONFLICTS with xserver-xorg (<= 1.11.2-r4) and (< 1.11.2) is not good enough

* because we don't know how many PRINC are in BSP/DISTRO layers, then it's safer to RCONFLICTS with every older version then current EXTENDPKGV

Quoted 8 lines
Quoted 5 lines
Quoted 1 line

Also fixes whitespace to work correctly with opkg

The whitespace problem wasn't opkg fault AFAIK, but bb.utils.explode_dep_versions as shown in
http://patchwork.openembedded.org/patch/37069/

Ah and it was meant to be applied together with this patch, so now it's missing PR bump..

It keeps failing for me.

#5 lore raw
Quoted 8 lines · Mark Hatle

Just an FYI -- Martin Jansa found a problem with the implement of the package version comparison.

In deb and ipk, they do not support '<' or '>', instead it's '<<' and '>>'. (Odd, historical reasons apparently).

While RPM doesn't have any idea what '<<' or '>>' is.

Quoted 8 lines

Talking with RP and others it seems like the best approach is to implement a conversion, in the deb and ipk packaging classes, to convert '<' and '>' to the '<<' and '>>' equivalents. As well as add a sanity check that nobody is using '<<' or '>>'.

I'm in the process of doing that now.

--Mark

There is still some problem in opkg, now when I'm testing << with opkg which should work as LESS (and < as LESS_EQUAL), it still shows <= in opkg status and behaves like <=. So there is probably some bug in opkg still hidden :/

#6 lore raw
Quoted 14 lines · Martin Jansa
Quoted 13 lines · Mark Hatle

Just an FYI -- Martin Jansa found a problem with the implement of the package version comparison.

In deb and ipk, they do not support '<' or '>', instead it's '<<' and '>>'. (Odd, historical reasons apparently).

While RPM doesn't have any idea what '<<' or '>>' is.

Talking with RP and others it seems like the best approach is to implement a conversion, in the deb and ipk packaging classes, to convert '<' and '>' to the '<<' and '>>' equivalents. As well as add a sanity check that nobody is using '<<' or '>>'.

Quoted 8 lines
Quoted 3 lines

I'm in the process of doing that now.

--Mark

There is still some problem in opkg, now when I'm testing << with opkg which should work as LESS (and < as LESS_EQUAL), it still shows <= in opkg status and behaves like <=. So there is probably some bug in opkg still hidden :/

Yes; it seems the right fix is in opkg.

Using RCONFLICTS with << also fails to me as said yestarday on IRC.

Signature · 3 lines
Otavio Salvador                             O.S. Systems
E-mail: [email protected]  http://www.ossystems.com.br
Mobile: +55 53 9981-7854              http://projetos.ossystems.com.br
#7 lore raw
Quoted 19 lines · Otavio Salvador
Quoted 18 lines · Martin Jansa
Quoted 16 lines · Mark Hatle

Just an FYI -- Martin Jansa found a problem with the implement of the package version comparison.

In deb and ipk, they do not support '<' or '>', instead it's '<<' and '>>'. (Odd, historical reasons apparently).

While RPM doesn't have any idea what '<<' or '>>' is.

Talking with RP and others it seems like the best approach is to implement a conversion, in the deb and ipk packaging classes, to convert '<' and '>' to the '<<' and '>>' equivalents. As well as add a sanity check that nobody is using '<<' or '>>'.

I'm in the process of doing that now.

--Mark

Quoted 8 lines
Quoted 4 lines

There is still some problem in opkg, now when I'm testing << with opkg which should work as LESS (and < as LESS_EQUAL), it still shows <= in opkg status and behaves like <=. So there is probably some bug in opkg still hidden :/

Yes; it seems the right fix is in opkg.

Using RCONFLICTS with << also fails to me as said yestarday on IRC.

Reported upstream with simple test case
http://code.google.com/p/opkg/issues/detail?id=94

will attach patch there + send here when I have it.

Cheers,

Signature · 1 line
Martin 'JaMa' Jansa     jabber: [email protected]
#8 lore raw

PATCH 1/1 opkg: fix version constraints in conflicts, depends, replaces

* http://code.google.com/p/opkg/issues/detail?id=94

---
 .../0009-pkg_depends-fix-version-constraints.patch | 188 +++++++++++++++++++++
 ...depends-fix-version_constraints_satisfied.patch |  37 ++++
 meta/recipes-devtools/opkg/opkg_svn.bb             |   4 +-
 3 files changed, 228 insertions(+), 1 deletion(-)
 create mode 100644 meta/recipes-devtools/opkg/opkg/0009-pkg_depends-fix-version-constraints.patch
 create mode 100644 meta/recipes-devtools/opkg/opkg/0010-pkg_depends-fix-version_constraints_satisfied.patch
meta/recipes-devtools/opkg/opkg/0009-pkg_depends-fix-version-constraints.patch new file +188 -0
new file mode 100644
index 0000000..27df307
@@ -0,0 +1,188 @@
+From b6a4d289499ac4c4def48401edadd775eccc387c Mon Sep 17 00:00:00 2001
+From: Martin Jansa <[email protected]>
+Date: Sat, 29 Sep 2012 11:38:03 +0200
+Subject: [PATCH 9/9] 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 <[email protected]>
+---
+ 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..4b7a2a5 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++;
++		return EQUAL;
++	}
++	/* should these be here to support deprecated designations; dpkg does */
++	else if(!strncmp(*str, "<", 1)){
++		*str++;
++		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++;
++		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
+
meta/recipes-devtools/opkg/opkg/0010-pkg_depends-fix-version_constraints_satisfied.patch new file +37 -0
new file mode 100644
index 0000000..ffcbc4b
@@ -0,0 +1,37 @@
+From 02d96ebf8c6cdbe3402506ad041bbb4806179273 Mon Sep 17 00:00:00 2001
+From: Martin Jansa <[email protected]>
+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 <[email protected]>
+---
+ 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 4b7a2a5..58c4a99 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 == LATER) && 
++	    (comparison == 0))
+ 	return 1;
+     else if((depends->constraint == LATER_EQUAL) &&
+ 	    (comparison >= 0))
+-- 
+1.7.12
+
meta/recipes-devtools/opkg/opkg_svn.bb +3 -1
index 820a224..d89a3f6 100644
@@ -9,6 +9,8 @@ SRC_URI = "svn://opkg.googlecode.com/svn;module=trunk;protocol=http \
   file://0006-detect-circular-dependencies.patch \
   file://0007-merge-newpkg-provides-even-when-oldpkg-provides-exis.patch \
   file://0008-select_higher_version.patch \
+  file://0009-pkg_depends-fix-version-constraints.patch \
+  file://0010-pkg_depends-fix-version_constraints_satisfied.patch \
 "
 
 S = "${WORKDIR}/trunk"
@@ -16,4 +18,4 @@ S = "${WORKDIR}/trunk"
 SRCREV = "633"
 PV = "0.1.8+svnr${SRCPV}"
 
-PR = "${INC_PR}.4"
+PR = "${INC_PR}.5"
Signature · 1 line
1.7.12
#9 lore raw

PATCH v2 1/1 opkg: fix version constraints in conflicts, depends, replaces

* http://code.google.com/p/opkg/issues/detail?id=94

---
 .../0009-pkg_depends-fix-version-constraints.patch | 188 +++++++++++++++++++++
 ...depends-fix-version_constraints_satisfied.patch |  37 ++++
 meta/recipes-devtools/opkg/opkg_svn.bb             |   4 +-
 3 files changed, 228 insertions(+), 1 deletion(-)
 create mode 100644 meta/recipes-devtools/opkg/opkg/0009-pkg_depends-fix-version-constraints.patch
 create mode 100644 meta/recipes-devtools/opkg/opkg/0010-pkg_depends-fix-version_constraints_satisfied.patch
meta/recipes-devtools/opkg/opkg/0009-pkg_depends-fix-version-constraints.patch new file +188 -0
new file mode 100644
index 0000000..27df307
@@ -0,0 +1,188 @@
+From b6a4d289499ac4c4def48401edadd775eccc387c Mon Sep 17 00:00:00 2001
+From: Martin Jansa <[email protected]>
+Date: Sat, 29 Sep 2012 11:38:03 +0200
+Subject: [PATCH 9/9] 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 <[email protected]>
+---
+ 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..4b7a2a5 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++;
++		return EQUAL;
++	}
++	/* should these be here to support deprecated designations; dpkg does */
++	else if(!strncmp(*str, "<", 1)){
++		*str++;
++		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++;
++		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
+
meta/recipes-devtools/opkg/opkg/0010-pkg_depends-fix-version_constraints_satisfied.patch new file +37 -0
new file mode 100644
index 0000000..841b508
@@ -0,0 +1,37 @@
+From 51a45a02a32064c14e0d4d6ef41c1a6276432b29 Mon Sep 17 00:00:00 2001
+From: Martin Jansa <[email protected]>
+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 <[email protected]>
+---
+ 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 4b7a2a5..a67579a 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
+
meta/recipes-devtools/opkg/opkg_svn.bb +3 -1
index 820a224..d89a3f6 100644
@@ -9,6 +9,8 @@ SRC_URI = "svn://opkg.googlecode.com/svn;module=trunk;protocol=http \
   file://0006-detect-circular-dependencies.patch \
   file://0007-merge-newpkg-provides-even-when-oldpkg-provides-exis.patch \
   file://0008-select_higher_version.patch \
+  file://0009-pkg_depends-fix-version-constraints.patch \
+  file://0010-pkg_depends-fix-version_constraints_satisfied.patch \
 "
 
 S = "${WORKDIR}/trunk"
@@ -16,4 +18,4 @@ S = "${WORKDIR}/trunk"
 SRCREV = "633"
 PV = "0.1.8+svnr${SRCPV}"
 
-PR = "${INC_PR}.4"
+PR = "${INC_PR}.5"
Signature · 1 line
1.7.12
#10 lore raw

Re: [PATCHv2] opkg: fix version constraints in conflicts, depends, replaces

Quoted 1 line · Martin Jansa

* http://code.google.com/p/opkg/issues/detail?id=94

It needs a bit more testing, because for some reason I got

|  * satisfy_dependencies_for: Cannot satisfy the following dependencies for packagegroup-shr-minimal-x:
|  * 	xserver-xorg (= = 2:1.11.2-r11) *

armv4t/Package looks ok
Package: xserver-xorg-module-exa
Version: 2:1.11.2-r11
Depends: xserver-xorg (= 2:1.11.2-r11), libc6 (>= 2.16)

and it works on target..

Quoted 269 lines
---
 .../0009-pkg_depends-fix-version-constraints.patch | 188 +++++++++++++++++++++
 ...depends-fix-version_constraints_satisfied.patch |  37 ++++
 meta/recipes-devtools/opkg/opkg_svn.bb             |   4 +-
 3 files changed, 228 insertions(+), 1 deletion(-)
 create mode 100644 meta/recipes-devtools/opkg/opkg/0009-pkg_depends-fix-version-constraints.patch
 create mode 100644 meta/recipes-devtools/opkg/opkg/0010-pkg_depends-fix-version_constraints_satisfied.patch
meta/recipes-devtools/opkg/opkg/0009-pkg_depends-fix-version-constraints.patch new file +188 -0
new file mode 100644
index 0000000..27df307
@@ -0,0 +1,188 @@
+From b6a4d289499ac4c4def48401edadd775eccc387c Mon Sep 17 00:00:00 2001
+From: Martin Jansa <[email protected]>
+Date: Sat, 29 Sep 2012 11:38:03 +0200
+Subject: [PATCH 9/9] 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 <[email protected]>
+---
+ 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..4b7a2a5 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++;
++		return EQUAL;
++	}
++	/* should these be here to support deprecated designations; dpkg does */
++	else if(!strncmp(*str, "<", 1)){
++		*str++;
++		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++;
++		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
+
meta/recipes-devtools/opkg/opkg/0010-pkg_depends-fix-version_constraints_satisfied.patch new file +37 -0
new file mode 100644
index 0000000..841b508
@@ -0,0 +1,37 @@
+From 51a45a02a32064c14e0d4d6ef41c1a6276432b29 Mon Sep 17 00:00:00 2001
+From: Martin Jansa <[email protected]>
+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 <[email protected]>
+---
+ 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 4b7a2a5..a67579a 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
+
meta/recipes-devtools/opkg/opkg_svn.bb +3 -1
index 820a224..d89a3f6 100644
@@ -9,6 +9,8 @@ SRC_URI = "svn://opkg.googlecode.com/svn;module=trunk;protocol=http \
   file://0006-detect-circular-dependencies.patch \
   file://0007-merge-newpkg-provides-even-when-oldpkg-provides-exis.patch \
   file://0008-select_higher_version.patch \
+  file://0009-pkg_depends-fix-version-constraints.patch \
+  file://0010-pkg_depends-fix-version_constraints_satisfied.patch \
 "
 
 S = "${WORKDIR}/trunk"
@@ -16,4 +18,4 @@ S = "${WORKDIR}/trunk"
 SRCREV = "633"
 PV = "0.1.8+svnr${SRCPV}"
 
-PR = "${INC_PR}.4"
+PR = "${INC_PR}.5"
Signature · 1 line
1.7.12
Signature · 1 line
Martin 'JaMa' Jansa     jabber: [email protected]
#11 lore raw

Re: [PATCHv2] opkg: fix version constraints in conflicts, depends, replaces

Quoted 8 lines · Martin Jansa
Quoted 1 line · Martin Jansa

* http://code.google.com/p/opkg/issues/detail?id=94

It needs a bit more testing, because for some reason I got

|  * satisfy_dependencies_for: Cannot satisfy the following dependencies for packagegroup-shr-minimal-x:
|  * 	xserver-xorg (= = 2:1.11.2-r11) *
Quoted 6 lines

armv4t/Package looks ok
Package: xserver-xorg-module-exa
Version: 2:1.11.2-r11
Depends: xserver-xorg (= 2:1.11.2-r11), libc6 (>= 2.16)

and it works on target..

Found it and updated patch in upstream bug tracker, will send v3 after rebuilding from scratch..

Cheers,

Quoted 271 lines
Quoted 268 lines
---
 .../0009-pkg_depends-fix-version-constraints.patch | 188 +++++++++++++++++++++
 ...depends-fix-version_constraints_satisfied.patch |  37 ++++
 meta/recipes-devtools/opkg/opkg_svn.bb             |   4 +-
 3 files changed, 228 insertions(+), 1 deletion(-)
 create mode 100644 meta/recipes-devtools/opkg/opkg/0009-pkg_depends-fix-version-constraints.patch
 create mode 100644 meta/recipes-devtools/opkg/opkg/0010-pkg_depends-fix-version_constraints_satisfied.patch
meta/recipes-devtools/opkg/opkg/0009-pkg_depends-fix-version-constraints.patch new file +188 -0
new file mode 100644
index 0000000..27df307
@@ -0,0 +1,188 @@
+From b6a4d289499ac4c4def48401edadd775eccc387c Mon Sep 17 00:00:00 2001
+From: Martin Jansa <[email protected]>
+Date: Sat, 29 Sep 2012 11:38:03 +0200
+Subject: [PATCH 9/9] 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 <[email protected]>
+---
+ 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..4b7a2a5 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++;
++		return EQUAL;
++	}
++	/* should these be here to support deprecated designations; dpkg does */
++	else if(!strncmp(*str, "<", 1)){
++		*str++;
++		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++;
++		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
+
meta/recipes-devtools/opkg/opkg/0010-pkg_depends-fix-version_constraints_satisfied.patch new file +37 -0
new file mode 100644
index 0000000..841b508
@@ -0,0 +1,37 @@
+From 51a45a02a32064c14e0d4d6ef41c1a6276432b29 Mon Sep 17 00:00:00 2001
+From: Martin Jansa <[email protected]>
+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 <[email protected]>
+---
+ 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 4b7a2a5..a67579a 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
+
meta/recipes-devtools/opkg/opkg_svn.bb +3 -1
index 820a224..d89a3f6 100644
@@ -9,6 +9,8 @@ SRC_URI = "svn://opkg.googlecode.com/svn;module=trunk;protocol=http \
   file://0006-detect-circular-dependencies.patch \
   file://0007-merge-newpkg-provides-even-when-oldpkg-provides-exis.patch \
   file://0008-select_higher_version.patch \
+  file://0009-pkg_depends-fix-version-constraints.patch \
+  file://0010-pkg_depends-fix-version_constraints_satisfied.patch \
 "
 
 S = "${WORKDIR}/trunk"
@@ -16,4 +18,4 @@ S = "${WORKDIR}/trunk"
 SRCREV = "633"
 PV = "0.1.8+svnr${SRCPV}"
 
-PR = "${INC_PR}.4"
+PR = "${INC_PR}.5"
Signature · 1 line
1.7.12
Signature · 1 line
Martin 'JaMa' Jansa     jabber: [email protected]
Signature · 1 line
Martin 'JaMa' Jansa     jabber: [email protected]
#12 lore raw

PATCH v3 1/1 opkg: fix version constraints in conflicts, depends, replaces

* http://code.google.com/p/opkg/issues/detail?id=94

---
 .../0009-pkg_depends-fix-version-constraints.patch | 188 +++++++++++++++++++++
 ...depends-fix-version_constraints_satisfied.patch |  37 ++++
 meta/recipes-devtools/opkg/opkg_svn.bb             |   4 +-
 3 files changed, 228 insertions(+), 1 deletion(-)
 create mode 100644 meta/recipes-devtools/opkg/opkg/0009-pkg_depends-fix-version-constraints.patch
 create mode 100644 meta/recipes-devtools/opkg/opkg/0010-pkg_depends-fix-version_constraints_satisfied.patch
meta/recipes-devtools/opkg/opkg/0009-pkg_depends-fix-version-constraints.patch new file +188 -0
new file mode 100644
index 0000000..f7aa4ea
@@ -0,0 +1,188 @@
+From b93ce2249751e0d90dab38e91691a6e9f33c3512 Mon Sep 17 00:00:00 2001
+From: Martin Jansa <[email protected]>
+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 <[email protected]>
+---
+ 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
+
meta/recipes-devtools/opkg/opkg/0010-pkg_depends-fix-version_constraints_satisfied.patch new file +37 -0
new file mode 100644
index 0000000..a13d658
@@ -0,0 +1,37 @@
+From e9add8fe4a63ef14aba8bd238ddde84d5470b611 Mon Sep 17 00:00:00 2001
+From: Martin Jansa <[email protected]>
+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 <[email protected]>
+---
+ 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
+
meta/recipes-devtools/opkg/opkg_svn.bb +3 -1
index 820a224..d89a3f6 100644
@@ -9,6 +9,8 @@ SRC_URI = "svn://opkg.googlecode.com/svn;module=trunk;protocol=http \
   file://0006-detect-circular-dependencies.patch \
   file://0007-merge-newpkg-provides-even-when-oldpkg-provides-exis.patch \
   file://0008-select_higher_version.patch \
+  file://0009-pkg_depends-fix-version-constraints.patch \
+  file://0010-pkg_depends-fix-version_constraints_satisfied.patch \
 "
 
 S = "${WORKDIR}/trunk"
@@ -16,4 +18,4 @@ S = "${WORKDIR}/trunk"
 SRCREV = "633"
 PV = "0.1.8+svnr${SRCPV}"
 
-PR = "${INC_PR}.4"
+PR = "${INC_PR}.5"
Signature · 1 line
1.7.12
Applied
#13 lore raw

Re: [PATCHv3] opkg: fix version constraints in conflicts, depends, replaces

Quoted 11 lines · Martin Jansa

* http://code.google.com/p/opkg/issues/detail?id=94

---
  .../0009-pkg_depends-fix-version-constraints.patch | 188 +++++++++++++++++++++
  ...depends-fix-version_constraints_satisfied.patch |  37 ++++
  meta/recipes-devtools/opkg/opkg_svn.bb             |   4 +-
  3 files changed, 228 insertions(+), 1 deletion(-)

create mode 100644 meta/recipes-devtools/opkg/opkg/0009-pkg_depends-fix-version-constraints.patch create mode 100644 meta/recipes-devtools/opkg/opkg/0010-pkg_depends-fix-version_constraints_satisfied.patch

Merged into OE-Core

Thanks
Sau!

Quoted 257 lines
meta/recipes-devtools/opkg/opkg/0009-pkg_depends-fix-version-constraints.patch new file +188 -0
new file mode 100644
index 0000000..f7aa4ea
@@ -0,0 +1,188 @@
+From b93ce2249751e0d90dab38e91691a6e9f33c3512 Mon Sep 17 00:00:00 2001
+From: Martin Jansa <[email protected]>
+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 <[email protected]>
+---
+ 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
+
meta/recipes-devtools/opkg/opkg/0010-pkg_depends-fix-version_constraints_satisfied.patch new file +37 -0
new file mode 100644
index 0000000..a13d658
@@ -0,0 +1,37 @@
+From e9add8fe4a63ef14aba8bd238ddde84d5470b611 Mon Sep 17 00:00:00 2001
+From: Martin Jansa <[email protected]>
+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 <[email protected]>
+---
+ 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
+
meta/recipes-devtools/opkg/opkg_svn.bb +3 -1
index 820a224..d89a3f6 100644
@@ -9,6 +9,8 @@ SRC_URI = "svn://opkg.googlecode.com/svn;module=trunk;protocol=http \
    file://0006-detect-circular-dependencies.patch \
    file://0007-merge-newpkg-provides-even-when-oldpkg-provides-exis.patch \
    file://0008-select_higher_version.patch \
+  file://0009-pkg_depends-fix-version-constraints.patch \
+  file://0010-pkg_depends-fix-version_constraints_satisfied.patch \
  "
 
  S = "${WORKDIR}/trunk"
@@ -16,4 +18,4 @@ S = "${WORKDIR}/trunk"
  SRCREV = "633"
  PV = "0.1.8+svnr${SRCPV}"
 
-PR = "${INC_PR}.4"
+PR = "${INC_PR}.5"