[OE-core] [PATCHv2] opkg: fix version constraints in conflicts, depends, replaces
Martin Jansa
martin.jansa at gmail.com
Sun Sep 30 12:53:20 UTC 2012
On Sun, Sep 30, 2012 at 11:06:35AM +0200, Martin Jansa wrote:
> On Sat, Sep 29, 2012 at 07:19:16PM +0200, Martin Jansa wrote:
> > * 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..
Found it and updated patch in upstream bug tracker, will send v3 after
rebuilding from scratch..
Cheers,
> > Signed-off-by: Martin Jansa <Martin.Jansa at gmail.com>
> > ---
> > .../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
> >
> > diff --git a/meta/recipes-devtools/opkg/opkg/0009-pkg_depends-fix-version-constraints.patch b/meta/recipes-devtools/opkg/opkg/0009-pkg_depends-fix-version-constraints.patch
> > new file mode 100644
> > index 0000000..27df307
> > --- /dev/null
> > +++ b/meta/recipes-devtools/opkg/opkg/0009-pkg_depends-fix-version-constraints.patch
> > @@ -0,0 +1,188 @@
> > +From b6a4d289499ac4c4def48401edadd775eccc387c Mon Sep 17 00:00:00 2001
> > +From: Martin Jansa <Martin.Jansa at gmail.com>
> > +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 <Martin.Jansa at gmail.com>
> > +---
> > + libopkg/pkg.c | 36 +++++++++++--------------
> > + libopkg/pkg_depends.c | 73 +++++++++++++++++++++++++++++----------------------
> > + libopkg/pkg_depends.h | 1 +
> > + 3 files changed, 59 insertions(+), 51 deletions(-)
> > +
> > +diff --git a/libopkg/pkg.c b/libopkg/pkg.c
> > +index 255c673..1e98b9c 100644
> > +--- a/libopkg/pkg.c
> > ++++ b/libopkg/pkg.c
> > +@@ -968,28 +968,24 @@ pkg_version_satisfied(pkg_t *it, pkg_t *ref, const char *op)
> > + int r;
> > +
> > + r = pkg_compare_versions(it, ref);
> > ++ char *op2 = op;
> > ++ enum version_constraint constraint = str_to_constraint(&op2);
> > +
> > +- if (strcmp(op, "<=") == 0 || strcmp(op, "<") == 0) {
> > +- return r <= 0;
> > +- }
> > +-
> > +- if (strcmp(op, ">=") == 0 || strcmp(op, ">") == 0) {
> > +- return r >= 0;
> > +- }
> > +-
> > +- if (strcmp(op, "<<") == 0) {
> > +- return r < 0;
> > +- }
> > +-
> > +- if (strcmp(op, ">>") == 0) {
> > +- return r > 0;
> > +- }
> > +-
> > +- if (strcmp(op, "=") == 0) {
> > +- return r == 0;
> > ++ switch (constraint)
> > ++ {
> > ++ case EARLIER_EQUAL:
> > ++ return r <= 0;
> > ++ case LATER_EQUAL:
> > ++ return r >= 0;
> > ++ case EARLIER:
> > ++ return r < 0;
> > ++ case LATER:
> > ++ return r > 0;
> > ++ case EQUAL:
> > ++ return r == 0;
> > ++ case NONE:
> > ++ opkg_msg(ERROR, "Unknown operator: %s.\n", op);
> > + }
> > +-
> > +- opkg_msg(ERROR, "Unknown operator: %s.\n", op);
> > + return 0;
> > + }
> > +
> > +diff --git a/libopkg/pkg_depends.c b/libopkg/pkg_depends.c
> > +index a72eed7..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
> > +
> > diff --git a/meta/recipes-devtools/opkg/opkg/0010-pkg_depends-fix-version_constraints_satisfied.patch b/meta/recipes-devtools/opkg/opkg/0010-pkg_depends-fix-version_constraints_satisfied.patch
> > new file mode 100644
> > index 0000000..841b508
> > --- /dev/null
> > +++ b/meta/recipes-devtools/opkg/opkg/0010-pkg_depends-fix-version_constraints_satisfied.patch
> > @@ -0,0 +1,37 @@
> > +From 51a45a02a32064c14e0d4d6ef41c1a6276432b29 Mon Sep 17 00:00:00 2001
> > +From: Martin Jansa <Martin.Jansa at gmail.com>
> > +Date: Sat, 29 Sep 2012 18:56:01 +0200
> > +Subject: [PATCH 10/10] pkg_depends: fix version_constraints_satisfied
> > +
> > +* with
> > + Package: a
> > + Version: 1
> > + and
> > + Conflicts: a (<< 1)
> > + we have comparison == 0, but constraint EARLIER is not satisfied!
> > +
> > +Upstream-Status: Submitted
> > +http://code.google.com/p/opkg/issues/detail?id=94
> > +
> > +Signed-off-by: Martin Jansa <Martin.Jansa at gmail.com>
> > +---
> > + libopkg/pkg_depends.c | 3 ++-
> > + 1 file changed, 2 insertions(+), 1 deletion(-)
> > +
> > +diff --git a/libopkg/pkg_depends.c b/libopkg/pkg_depends.c
> > +index 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
> > +
> > diff --git a/meta/recipes-devtools/opkg/opkg_svn.bb b/meta/recipes-devtools/opkg/opkg_svn.bb
> > index 820a224..d89a3f6 100644
> > --- a/meta/recipes-devtools/opkg/opkg_svn.bb
> > +++ b/meta/recipes-devtools/opkg/opkg_svn.bb
> > @@ -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"
> > --
> > 1.7.12
> >
>
> --
> Martin 'JaMa' Jansa jabber: Martin.Jansa at gmail.com
--
Martin 'JaMa' Jansa jabber: Martin.Jansa at gmail.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20120930/33e2a903/attachment-0002.sig>
More information about the Openembedded-core
mailing list