From b5a19ef64dc7a61915bf05510a975dd9d1dce2ee Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 19 Feb 2008 00:33:18 +0000 Subject: ipkg: Partially fix broken version comparisions --- .../ipkg/files/update_version_comparision.patch | 82 ++++++++++++++++++++++ packages/ipkg/ipkg-native_0.99.163.bb | 3 +- packages/ipkg/ipkg.inc | 1 + packages/ipkg/ipkg_0.99.163.bb | 2 +- 4 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 packages/ipkg/files/update_version_comparision.patch (limited to 'packages/ipkg') diff --git a/packages/ipkg/files/update_version_comparision.patch b/packages/ipkg/files/update_version_comparision.patch new file mode 100644 index 0000000000..9f617ef9f0 --- /dev/null +++ b/packages/ipkg/files/update_version_comparision.patch @@ -0,0 +1,82 @@ +Update the version comparision to a more recent one from dpkg. This +means it now recognises 0.0-foo > 0.0+foo as it should. + +Index: ipkg-0.99.163/pkg.c +=================================================================== +--- ipkg-0.99.163.orig/pkg.c 2008-02-18 11:24:45.000000000 +0000 ++++ ipkg-0.99.163/pkg.c 2008-02-19 00:24:50.000000000 +0000 +@@ -1128,43 +1130,37 @@ + return r; + } + +-int verrevcmp(const char *val, const char *ref) +-{ +- int vc, rc; +- long vl, rl; +- const char *vp, *rp; +- const char *vsep, *rsep; +- +- if (!val) val= ""; +- if (!ref) ref= ""; +- for (;;) { +- vp= val; while (*vp && !isdigit(*vp)) vp++; +- rp= ref; while (*rp && !isdigit(*rp)) rp++; +- for (;;) { +- vc= (val == vp) ? 0 : *val++; +- rc= (ref == rp) ? 0 : *ref++; +- if (!rc && !vc) break; +- if (vc && !isalpha(vc)) vc += 256; /* assumes ASCII character set */ +- if (rc && !isalpha(rc)) rc += 256; +- if (vc != rc) return vc - rc; +- } +- val= vp; +- ref= rp; +- vl=0; if (isdigit(*vp)) vl= strtol(val,(char**)&val,10); +- rl=0; if (isdigit(*rp)) rl= strtol(ref,(char**)&ref,10); +- if (vl != rl) return vl - rl; +- +- vc = *val; +- rc = *ref; +- vsep = strchr(".-", vc); +- rsep = strchr(".-", rc); +- if (vsep && !rsep) return -1; +- if (!vsep && rsep) return +1; +- +- if (!*val && !*ref) return 0; +- if (!*val) return -1; +- if (!*ref) return +1; +- } ++/* assume ascii; warning: evaluates x multiple times! */ ++#define order(x) ((x) == '~' ? -1 \ ++ : isdigit((x)) ? 0 \ ++ : !(x) ? 0 \ ++ : isalpha((x)) ? (x) \ ++ : (x) + 256) ++ ++static int verrevcmp(const char *val, const char *ref) { ++ if (!val) val= ""; ++ if (!ref) ref= ""; ++ ++ while (*val || *ref) { ++ int first_diff= 0; ++ ++ while ( (*val && !isdigit(*val)) || (*ref && !isdigit(*ref)) ) { ++ int vc= order(*val), rc= order(*ref); ++ if (vc != rc) return vc - rc; ++ val++; ref++; ++ } ++ ++ while ( *val == '0' ) val++; ++ while ( *ref == '0' ) ref++; ++ while (isdigit(*val) && isdigit(*ref)) { ++ if (!first_diff) first_diff= *val - *ref; ++ val++; ref++; ++ } ++ if (isdigit(*val)) return 1; ++ if (isdigit(*ref)) return -1; ++ if (first_diff) return first_diff; ++ } ++ return 0; + } + + int pkg_version_satisfied(pkg_t *it, pkg_t *ref, const char *op) diff --git a/packages/ipkg/ipkg-native_0.99.163.bb b/packages/ipkg/ipkg-native_0.99.163.bb index 7a95b28159..163eba62e2 100644 --- a/packages/ipkg/ipkg-native_0.99.163.bb +++ b/packages/ipkg/ipkg-native_0.99.163.bb @@ -2,11 +2,12 @@ S = "${WORKDIR}/ipkg-${PV}" #require ipkg_${PV}.bb require ipkg-native.inc -PR = "r4" +PR = "r5" inherit autotools pkgconfig native SRC_URI = "http://www.handhelds.org/pub/packages/ipkg/ipkg-${PV}.tar.gz \ + file://update_version_comparision.patch;patch=1 \ file://is-processing.patch;patch=1 \ file://1-pkg-parse--Optimize-inefficient-parsing.patch;patch=1 \ file://2-pkg-vec--Optimize-gross-inefficiency.patch;patch=1 \ diff --git a/packages/ipkg/ipkg.inc b/packages/ipkg/ipkg.inc index 9154572f08..980a4265bd 100644 --- a/packages/ipkg/ipkg.inc +++ b/packages/ipkg/ipkg.inc @@ -10,6 +10,7 @@ FILES_libipkg = "${libdir}/*.so.*" AUTO_LIBNAME_PKGS = "libipkg" SRC_URI = "${HANDHELDS_CVS};module=familiar/dist/ipkg;tag=${@'V' + bb.data.getVar('PV',d,1).replace('.', '-')} \ + file://update_version_comparision.patch;patch=1 \ file://ipkg-configure \ file://terse.patch;patch=1" diff --git a/packages/ipkg/ipkg_0.99.163.bb b/packages/ipkg/ipkg_0.99.163.bb index fccfe8d53f..f2d7652b89 100644 --- a/packages/ipkg/ipkg_0.99.163.bb +++ b/packages/ipkg/ipkg_0.99.163.bb @@ -1,5 +1,5 @@ include ipkg.inc -PR = "r6" +PR = "r7" S = "${WORKDIR}/ipkg-${PV}" -- cgit 1.2.3-korg From 77dae1e21672ceae799faab554cb0277047d33c1 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 19 Feb 2008 00:53:36 +0000 Subject: ipkg: Enable debian revision comparing --- packages/ipkg/files/enable_debversion.patch | 111 +++++++++++++++++++++ .../ipkg/files/update_version_comparision.patch | 2 + packages/ipkg/ipkg-native_0.99.163.bb | 3 +- packages/ipkg/ipkg.inc | 1 + packages/ipkg/ipkg_0.99.163.bb | 2 +- 5 files changed, 117 insertions(+), 2 deletions(-) create mode 100644 packages/ipkg/files/enable_debversion.patch (limited to 'packages/ipkg') diff --git a/packages/ipkg/files/enable_debversion.patch b/packages/ipkg/files/enable_debversion.patch new file mode 100644 index 0000000000..e9c3a7a1d4 --- /dev/null +++ b/packages/ipkg/files/enable_debversion.patch @@ -0,0 +1,111 @@ +OE makes heavy use of the revision field so it makes sense to +enable it. We don't want the familiar stuff though so patch that +out. + +RP - 19/02/2008 + +Index: ipkg-0.99.163/pkg.c +=================================================================== +--- ipkg-0.99.163.orig/pkg.c 2008-02-19 00:35:03.000000000 +0000 ++++ ipkg-0.99.163/pkg.c 2008-02-19 00:36:02.000000000 +0000 +@@ -1118,15 +1118,11 @@ + return r; + } + +-#ifdef USE_DEBVERSION + r = verrevcmp(pkg->revision, ref_pkg->revision); + if (r) { + return r; + } + +- r = verrevcmp(pkg->familiar_revision, ref_pkg->familiar_revision); +-#endif +- + return r; + } + +@@ -1240,10 +1236,7 @@ + { + char *complete_version; + char *epoch_str; +-#ifdef USE_DEBVERSION + char *revision_str; +- char *familiar_revision_str; +-#endif + + if (pkg->epoch) { + sprintf_alloc(&epoch_str, "%d:", pkg->epoch); +@@ -1251,33 +1244,18 @@ + epoch_str = strdup(""); + } + +-#ifdef USE_DEBVERSION + if (pkg->revision && strlen(pkg->revision)) { + sprintf_alloc(&revision_str, "-%s", pkg->revision); + } else { + revision_str = strdup(""); + } + +- if (pkg->familiar_revision && strlen(pkg->familiar_revision)) { +- sprintf_alloc(&familiar_revision_str, "-fam%s", pkg->familiar_revision); +- } else { +- familiar_revision_str = strdup(""); +- } +-#endif + +-#ifdef USE_DEBVERSION +- sprintf_alloc(&complete_version, "%s%s%s%s", +- epoch_str, pkg->version, revision_str, familiar_revision_str); +-#else +- sprintf_alloc(&complete_version, "%s%s", +- epoch_str, pkg->version); +-#endif ++ sprintf_alloc(&complete_version, "%s%s%s", ++ epoch_str, pkg->version, revision_str); + + free(epoch_str); +-#ifdef USE_DEBVERSION + free(revision_str); +- free(familiar_revision_str); +-#endif + + return complete_version; + } +Index: ipkg-0.99.163/pkg_parse.c +=================================================================== +--- ipkg-0.99.163.orig/pkg_parse.c 2008-02-19 00:35:03.000000000 +0000 ++++ ipkg-0.99.163/pkg_parse.c 2008-02-19 00:38:42.000000000 +0000 +@@ -105,9 +105,7 @@ + int parseVersion(pkg_t *pkg, char *raw) + { + char *colon, *eepochcolon; +-#ifdef USE_DEBVERSION + char *hyphen; +-#endif + unsigned long epoch; + + if (!*raw) { +@@ -149,23 +147,12 @@ + } + strcpy(pkg->version, raw); + +-#ifdef USE_DEBVERSION + hyphen= strrchr(pkg->version,'-'); + + if (hyphen) { + *hyphen++= 0; +- if (strncmp("fam", hyphen, 3) == 0) { +- pkg->familiar_revision=hyphen+3; +- hyphen= strrchr(pkg->version,'-'); +- if (hyphen) { +- *hyphen++= 0; +- pkg->revision = hyphen; +- } +- } else { + pkg->revision = hyphen; +- } + } +-#endif + + /* + fprintf(stderr,"Parsed version: %lu, %s, %s, %s\n", diff --git a/packages/ipkg/files/update_version_comparision.patch b/packages/ipkg/files/update_version_comparision.patch index 9f617ef9f0..b0d0df525b 100644 --- a/packages/ipkg/files/update_version_comparision.patch +++ b/packages/ipkg/files/update_version_comparision.patch @@ -1,6 +1,8 @@ Update the version comparision to a more recent one from dpkg. This means it now recognises 0.0-foo > 0.0+foo as it should. +RP - 19/02/2008 + Index: ipkg-0.99.163/pkg.c =================================================================== --- ipkg-0.99.163.orig/pkg.c 2008-02-18 11:24:45.000000000 +0000 diff --git a/packages/ipkg/ipkg-native_0.99.163.bb b/packages/ipkg/ipkg-native_0.99.163.bb index 163eba62e2..dd9ff16b65 100644 --- a/packages/ipkg/ipkg-native_0.99.163.bb +++ b/packages/ipkg/ipkg-native_0.99.163.bb @@ -2,12 +2,13 @@ S = "${WORKDIR}/ipkg-${PV}" #require ipkg_${PV}.bb require ipkg-native.inc -PR = "r5" +PR = "r6" inherit autotools pkgconfig native SRC_URI = "http://www.handhelds.org/pub/packages/ipkg/ipkg-${PV}.tar.gz \ file://update_version_comparision.patch;patch=1 \ + file://enable_debversion.patch;patch=1 \ file://is-processing.patch;patch=1 \ file://1-pkg-parse--Optimize-inefficient-parsing.patch;patch=1 \ file://2-pkg-vec--Optimize-gross-inefficiency.patch;patch=1 \ diff --git a/packages/ipkg/ipkg.inc b/packages/ipkg/ipkg.inc index 980a4265bd..ee5da71c22 100644 --- a/packages/ipkg/ipkg.inc +++ b/packages/ipkg/ipkg.inc @@ -11,6 +11,7 @@ AUTO_LIBNAME_PKGS = "libipkg" SRC_URI = "${HANDHELDS_CVS};module=familiar/dist/ipkg;tag=${@'V' + bb.data.getVar('PV',d,1).replace('.', '-')} \ file://update_version_comparision.patch;patch=1 \ + file://enable_debversion.patch;patch=1 \ file://ipkg-configure \ file://terse.patch;patch=1" diff --git a/packages/ipkg/ipkg_0.99.163.bb b/packages/ipkg/ipkg_0.99.163.bb index f2d7652b89..f546f6e6c8 100644 --- a/packages/ipkg/ipkg_0.99.163.bb +++ b/packages/ipkg/ipkg_0.99.163.bb @@ -1,5 +1,5 @@ include ipkg.inc -PR = "r7" +PR = "r8" S = "${WORKDIR}/ipkg-${PV}" -- cgit 1.2.3-korg