Martin Jansa : xserver-xorg: use EXTENDPKGV instead of PV in RCONFLICTS_${PN}-module-exa
A message that is not in the archive (sent off-list or not yet received): 20120927142926.CA9C5103AC@opal
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=ed0216d29fc4355c5220f3ad51df04a63cacb0c3Author: Martin Jansa <[email protected]> Date: Sat Sep 22 19:13:14 2012 +0200xserver-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
Signed-off-by Martin Jansa <[email protected]>--
* 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
Signed-off-by Richard Purdie <[email protected]>---
.../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@@ -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]
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=ed0216d29fc4355c5220f3ad51df04a63cacb0c3Author: Martin Jansa <[email protected]> Date: Sat Sep 22 19:13:14 2012 +0200xserver-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
Signed-off-by Martin Jansa <[email protected]>--
* 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
Signed-off-by Richard Purdie <[email protected]>---
.../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@@ -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-commitsSignature · 1 line
Martin 'JaMa' Jansa jabber: [email protected]
Signature · 1 line
Martin 'JaMa' Jansa jabber: [email protected]
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=ed0216d29fc4355c5220f3ad51df04a63cacb0c3Author: Martin Jansa <[email protected]> Date: Sat Sep 22 19:13:14 2012 +0200xserver-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
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=ed0216d29fc4355c5220f3ad51df04a63cacb0c3Author: Martin Jansa <[email protected]> Date: Sat Sep 22 19:13:14 2012 +0200xserver-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.
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 :/
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
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]
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
@@ -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
@@ -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
@@ -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
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
@@ -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
@@ -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
@@ -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
Re: [PATCHv2] opkg: fix version constraints in conflicts, depends, replaces
Quoted 1 line · Martin Jansa
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
Signed-off-by Martin Jansa <[email protected]>--- .../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.patchmeta/recipes-devtools/opkg/opkg/0009-pkg_depends-fix-version-constraints.patch new file +188
-0@@ -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@@ -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@@ -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]
Re: [PATCHv2] opkg: fix version constraints in conflicts, depends, replaces
Quoted 8 lines · Martin Jansa
Quoted 1 line · Martin Jansa
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
Signed-off-by Martin Jansa <[email protected]>--- .../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.patchmeta/recipes-devtools/opkg/opkg/0009-pkg_depends-fix-version-constraints.patch new file +188
-0@@ -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@@ -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@@ -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.12Signature · 1 line
Martin 'JaMa' Jansa jabber: [email protected]
Signature · 1 line
Martin 'JaMa' Jansa jabber: [email protected]
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
@@ -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
@@ -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
@@ -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
Saul Wold
AppliedRe: [PATCHv3] opkg: fix version constraints in conflicts, depends, replaces
Quoted 11 lines · Martin Jansa
* http://code.google.com/p/opkg/issues/detail?id=94
Signed-off-by Martin Jansa <[email protected]>--- .../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.patchcreate mode 100644meta/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@@ -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@@ -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@@ -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"