summaryrefslogtreecommitdiff
path: root/packages/ipkg
diff options
context:
space:
mode:
authorMarcin Juszkiewicz <hrw@openembedded.org>2007-08-09 08:41:19 +0000
committerMarcin Juszkiewicz <hrw@openembedded.org>2007-08-09 08:41:19 +0000
commit9d829ed05c295df608b4fc108eb1c628fd06fd39 (patch)
treec1b27cfe4498f8abef1a61325922906f3e6a32ff /packages/ipkg
parent1434b204e16e87b7f59f074f3036d5dcbcf0116f (diff)
parent6ccac10beeaaa02a86081bd6179fd57c208ad6b1 (diff)
merge of '76e1e69496801009ea0aa69c84f76e858978ab99'
and 'db976a98427dd6a195e2cf167e225de2d0206aea'
Diffstat (limited to 'packages/ipkg')
-rw-r--r--packages/ipkg/files/1-pkg-parse--Optimize-inefficient-parsing.patch227
-rw-r--r--packages/ipkg/files/2-pkg-vec--Optimize-gross-inefficiency.patch65
-rw-r--r--packages/ipkg/files/is-processing.patch60
-rw-r--r--packages/ipkg/ipkg-0.99.153/fix-bug1393.patch19
-rw-r--r--packages/ipkg/ipkg-0.99.155/upgrade-message-garbage.patch14
-rw-r--r--packages/ipkg/ipkg-collateral.bb4
-rw-r--r--packages/ipkg/ipkg-collateral/oplinux-uclibc/.mtn2git_empty (renamed from packages/ipkg/ipkg-0.99.153/.mtn2git_empty)0
-rw-r--r--packages/ipkg/ipkg-collateral/oplinux-uclibc/dest3
-rw-r--r--packages/ipkg/ipkg-collateral/oplinux/.mtn2git_empty (renamed from packages/ipkg/ipkg-0.99.155/.mtn2git_empty)0
-rw-r--r--packages/ipkg/ipkg-collateral/oplinux/dest3
-rw-r--r--packages/ipkg/ipkg-native_0.99.152.bb3
-rw-r--r--packages/ipkg/ipkg-native_0.99.153.bb3
-rw-r--r--packages/ipkg/ipkg-native_0.99.154.bb3
-rw-r--r--packages/ipkg/ipkg-native_0.99.159.bb3
-rw-r--r--packages/ipkg/ipkg-native_0.99.163.bb8
-rw-r--r--packages/ipkg/ipkg_0.99.152.bb2
-rw-r--r--packages/ipkg/ipkg_0.99.153.bb8
-rw-r--r--packages/ipkg/ipkg_0.99.154.bb2
-rw-r--r--packages/ipkg/ipkg_0.99.155.bb3
-rw-r--r--packages/ipkg/ipkg_0.99.159.bb2
-rw-r--r--packages/ipkg/ipkg_0.99.163.bb7
21 files changed, 367 insertions, 72 deletions
diff --git a/packages/ipkg/files/1-pkg-parse--Optimize-inefficient-parsing.patch b/packages/ipkg/files/1-pkg-parse--Optimize-inefficient-parsing.patch
new file mode 100644
index 0000000000..e7632b11d1
--- /dev/null
+++ b/packages/ipkg/files/1-pkg-parse--Optimize-inefficient-parsing.patch
@@ -0,0 +1,227 @@
+# HG changeset patch
+# User pfalcon@localhost
+# Date 1178334771 0
+# Node ID e4c99830ba0d55813e1774bd6d41039ca640d6a6
+# Parent d324eba24e79a0a86df7978f0511e4632a2732c7
+pkg_parse: Optimize inefficient parsing.
+
+Instead of expensively probing all fields in row, dispatch based on the
+first letter of the field. Tests show ~12 times reduction in number of calls
+to low-level parsing functions.
+
+diff -r d324eba24e79 -r e4c99830ba0d pkg_parse.c
+--- a/pkg_parse.c Fri May 04 23:22:33 2007 +0000
++++ b/pkg_parse.c Sat May 05 03:12:51 2007 +0000
+@@ -241,87 +241,116 @@ int pkg_parse_raw(pkg_t *pkg, char ***ra
+
+ for (lines = *raw; *lines; lines++) {
+ /* fprintf(stderr, "PARSING %s\n", *lines);*/
+- if(isGenericFieldType("Package:", *lines))
+- pkg->name = parseGenericFieldType("Package", *lines);
+- else if(isGenericFieldType("Architecture:", *lines))
+- pkg->architecture = parseGenericFieldType("Architecture", *lines);
+- else if(isGenericFieldType("Filename:", *lines))
+- pkg->filename = parseGenericFieldType("Filename", *lines);
+- else if(isGenericFieldType("Section:", *lines))
+- pkg->section = parseGenericFieldType("Section", *lines);
+- else if(isGenericFieldType("MD5sum:", *lines))
+- pkg->md5sum = parseGenericFieldType("MD5sum", *lines);
+- /* The old ipkg wrote out status files with the wrong case for MD5sum,
+- let's parse it either way */
+- else if(isGenericFieldType("MD5Sum:", *lines))
+- pkg->md5sum = parseGenericFieldType("MD5Sum", *lines);
+- else if(isGenericFieldType("Size:", *lines))
+- pkg->size = parseGenericFieldType("Size", *lines);
+- else if(isGenericFieldType("Source:", *lines))
+- pkg->source = parseGenericFieldType("Source", *lines);
+- else if(isGenericFieldType("Installed-Size:", *lines))
+- pkg->installed_size = parseGenericFieldType("Installed-Size", *lines);
+- else if(isGenericFieldType("Installed-Time:", *lines)) {
+- char *time_str = parseGenericFieldType("Installed-Time", *lines);
+- pkg->installed_time = strtoul(time_str, NULL, 0);
+- } else if(isGenericFieldType("Priority:", *lines))
+- pkg->priority = parseGenericFieldType("Priority", *lines);
+- else if(isGenericFieldType("Essential:", *lines)) {
+- char *essential_value;
+- essential_value = parseGenericFieldType("Essential", *lines);
+- if (strcmp(essential_value, "yes") == 0) {
+- pkg->essential = 1;
+- }
+- free(essential_value);
+- }
+- else if(isGenericFieldType("Status", *lines))
+- parseStatus(pkg, *lines);
+- else if(isGenericFieldType("Version", *lines))
+- parseVersion(pkg, *lines);
+- else if(isGenericFieldType("Maintainer", *lines))
+- pkg->maintainer = parseGenericFieldType("Maintainer", *lines);
+- else if(isGenericFieldType("Conffiles", *lines)){
+- parseConffiles(pkg, *lines);
+- reading_conffiles = 1;
+- }
+- else if(isGenericFieldType("Description", *lines)) {
+- pkg->description = parseGenericFieldType("Description", *lines);
+- reading_conffiles = 0;
+- reading_description = 1;
+- }
+-
+- else if(isGenericFieldType("Provides", *lines)){
++ switch (**lines) {
++ case 'P':
++ if(isGenericFieldType("Package:", *lines))
++ pkg->name = parseGenericFieldType("Package", *lines);
++ else if(isGenericFieldType("Priority:", *lines))
++ pkg->priority = parseGenericFieldType("Priority", *lines);
++ else if(isGenericFieldType("Provides", *lines)){
+ /* Here we add the internal_use to align the off by one problem between provides_str and provides */
+- provide = (char * ) malloc(strlen(*lines)+ 35 ); /* Preparing the space for the new ipkg_internal_use_only */
+- if ( alterProvidesLine(*lines,provide) ){
+- return EINVAL;
+- }
+- pkg->provides_str = parseDependsString( provide, &pkg->provides_count);
++ provide = (char * ) malloc(strlen(*lines)+ 35 ); /* Preparing the space for the new ipkg_internal_use_only */
++ if ( alterProvidesLine(*lines,provide) ){
++ return EINVAL;
++ }
++ pkg->provides_str = parseDependsString( provide, &pkg->provides_count);
+ /* Let's try to hack a bit here.
+ The idea is that if a package has no Provides, we would add one generic, to permit the check of dependencies
+ in alot of other places. We will remove it before writing down the status database */
+- pkg_false_provides=0;
+- free(provide);
+- }
+-
+- else if(isGenericFieldType("Depends", *lines))
+- pkg->depends_str = parseDependsString(*lines, &pkg->depends_count);
+- else if(isGenericFieldType("Pre-Depends", *lines))
+- pkg->pre_depends_str = parseDependsString(*lines, &pkg->pre_depends_count);
+- else if(isGenericFieldType("Recommends", *lines))
+- pkg->recommends_str = parseDependsString(*lines, &pkg->recommends_count);
+- else if(isGenericFieldType("Suggests", *lines))
+- pkg->suggests_str = parseDependsString(*lines, &pkg->suggests_count);
+- /* Abhaya: support for conflicts */
+- else if(isGenericFieldType("Conflicts", *lines))
+- pkg->conflicts_str = parseDependsString(*lines, &pkg->conflicts_count);
+- else if(isGenericFieldType("Replaces", *lines))
+- pkg->replaces_str = parseDependsString(*lines, &pkg->replaces_count);
+- else if(line_is_blank(*lines)) {
+- lines++;
+- break;
+- }
+- else if(**lines == ' '){
++ pkg_false_provides=0;
++ free(provide);
++ }
++ else if(isGenericFieldType("Pre-Depends", *lines))
++ pkg->pre_depends_str = parseDependsString(*lines, &pkg->pre_depends_count);
++ break;
++
++ case 'A':
++ if(isGenericFieldType("Architecture:", *lines))
++ pkg->architecture = parseGenericFieldType("Architecture", *lines);
++ break;
++
++ case 'F':
++ if(isGenericFieldType("Filename:", *lines))
++ pkg->filename = parseGenericFieldType("Filename", *lines);
++ break;
++
++ case 'S':
++ if(isGenericFieldType("Section:", *lines))
++ pkg->section = parseGenericFieldType("Section", *lines);
++ else if(isGenericFieldType("Size:", *lines))
++ pkg->size = parseGenericFieldType("Size", *lines);
++ else if(isGenericFieldType("Source:", *lines))
++ pkg->source = parseGenericFieldType("Source", *lines);
++ else if(isGenericFieldType("Status", *lines))
++ parseStatus(pkg, *lines);
++ else if(isGenericFieldType("Suggests", *lines))
++ pkg->suggests_str = parseDependsString(*lines, &pkg->suggests_count);
++ break;
++
++ case 'M':
++ if(isGenericFieldType("MD5sum:", *lines))
++ pkg->md5sum = parseGenericFieldType("MD5sum", *lines);
++ /* The old ipkg wrote out status files with the wrong case for MD5sum,
++ let's parse it either way */
++ else if(isGenericFieldType("MD5Sum:", *lines))
++ pkg->md5sum = parseGenericFieldType("MD5Sum", *lines);
++ else if(isGenericFieldType("Maintainer", *lines))
++ pkg->maintainer = parseGenericFieldType("Maintainer", *lines);
++ break;
++
++ case 'I':
++ if(isGenericFieldType("Installed-Size:", *lines))
++ pkg->installed_size = parseGenericFieldType("Installed-Size", *lines);
++ else if(isGenericFieldType("Installed-Time:", *lines)) {
++ char *time_str = parseGenericFieldType("Installed-Time", *lines);
++ pkg->installed_time = strtoul(time_str, NULL, 0);
++ }
++ break;
++
++ case 'E':
++ if(isGenericFieldType("Essential:", *lines)) {
++ char *essential_value;
++ essential_value = parseGenericFieldType("Essential", *lines);
++ if (strcmp(essential_value, "yes") == 0) {
++ pkg->essential = 1;
++ }
++ free(essential_value);
++ }
++ break;
++
++ case 'V':
++ if(isGenericFieldType("Version", *lines))
++ parseVersion(pkg, *lines);
++ break;
++
++ case 'C':
++ if(isGenericFieldType("Conffiles", *lines)){
++ parseConffiles(pkg, *lines);
++ reading_conffiles = 1;
++ }
++ else if(isGenericFieldType("Conflicts", *lines))
++ pkg->conflicts_str = parseDependsString(*lines, &pkg->conflicts_count);
++ break;
++
++ case 'D':
++ if(isGenericFieldType("Description", *lines)) {
++ pkg->description = parseGenericFieldType("Description", *lines);
++ reading_conffiles = 0;
++ reading_description = 1;
++ }
++ else if(isGenericFieldType("Depends", *lines))
++ pkg->depends_str = parseDependsString(*lines, &pkg->depends_count);
++ break;
++
++ case 'R':
++ if(isGenericFieldType("Recommends", *lines))
++ pkg->recommends_str = parseDependsString(*lines, &pkg->recommends_count);
++ else if(isGenericFieldType("Replaces", *lines))
++ pkg->replaces_str = parseDependsString(*lines, &pkg->replaces_count);
++
++ break;
++
++ case ' ':
+ if(reading_description) {
+ /* we already know it's not blank, so the rest of description */
+ pkg->description = realloc(pkg->description,
+@@ -332,8 +361,18 @@ int pkg_parse_raw(pkg_t *pkg, char ***ra
+ }
+ else if(reading_conffiles)
+ parseConffiles(pkg, *lines);
++
++ break;
++
++ default:
++ if(line_is_blank(*lines)) {
++ lines++;
++ goto out;
++ }
+ }
+ }
++out:;
++
+ *raw = lines;
+ /* If the ipk has not a Provides line, we insert our false line */
+ if ( pkg_false_provides==1)
diff --git a/packages/ipkg/files/2-pkg-vec--Optimize-gross-inefficiency.patch b/packages/ipkg/files/2-pkg-vec--Optimize-gross-inefficiency.patch
new file mode 100644
index 0000000000..3c5cac49dc
--- /dev/null
+++ b/packages/ipkg/files/2-pkg-vec--Optimize-gross-inefficiency.patch
@@ -0,0 +1,65 @@
+# HG changeset patch
+# User pfalcon@localhost
+# Date 1178812057 0
+# Node ID eff4450fdea2f8210a4fc927bd35ae2562d2eced
+# Parent e4c99830ba0d55813e1774bd6d41039ca640d6a6
+pkg_vec: Optimize gross inefficiency.
+
+This module tries to implement *unique* vector (without duplicating
+objects), and does this by iterating thru all already existing elements.
+Thus, complexity of adding N elements was O(N^2). However, there're no grave
+reasons to do uniqueness at all:
+1. First of all, if feeds are correct, there won't be duplicates.
+2. Then, even if there will be, there won't be serious problems like
+segfaults.
+3. Finally, for quite a few operations vectors is constructed from a
+hashtable, thus uniqueness is guaranteed (which reduces possible cases of
+non-uniqueness to values of Depends: and friends).
+
+All an all, remove dup check, and make ipkg work order of magnitude faster
+on a feed with few thousands of packages.
+
+diff -r e4c99830ba0d -r eff4450fdea2 pkg_vec.c
+--- a/pkg_vec.c Sat May 05 03:12:51 2007 +0000
++++ b/pkg_vec.c Thu May 10 15:47:37 2007 +0000
+@@ -104,6 +104,7 @@ void pkg_vec_insert(pkg_vec_t *vec, cons
+ int i;
+ int found = 0;
+
++#if 0
+ /* look for a duplicate pkg by name, version, and architecture */
+ for (i = 0; i < vec->len; i++)
+ if ((strcmp(pkg->name, vec->pkgs[i]->name) == 0)
+@@ -112,6 +113,7 @@ void pkg_vec_insert(pkg_vec_t *vec, cons
+ found = 1;
+ break;
+ }
++#endif
+
+ /* we didn't find one, add it */
+ if(!found){
+@@ -191,6 +193,7 @@ void abstract_pkg_vec_insert(abstract_pk
+ {
+ int i;
+
++#if 0
+ /* look for a duplicate pkg by name */
+ for(i = 0; i < vec->len; i++)
+ if (strcmp(pkg->name, vec->pkgs[i]->name) == 0)
+@@ -198,12 +201,15 @@ void abstract_pkg_vec_insert(abstract_pk
+
+ /* we didn't find one, add it */
+ if(i == vec->len){
++#endif
+ vec->pkgs =
+ (abstract_pkg_t **)
+ realloc(vec->pkgs, (vec->len + 1) * sizeof(abstract_pkg_t *));
+ vec->pkgs[vec->len] = pkg;
+ vec->len++;
+- }
++#if 0
++ }
++#endif
+ }
+
+ abstract_pkg_t * abstract_pkg_vec_get(abstract_pkg_vec_t *vec, int i)
diff --git a/packages/ipkg/files/is-processing.patch b/packages/ipkg/files/is-processing.patch
index 779933ba1c..45ede41668 100644
--- a/packages/ipkg/files/is-processing.patch
+++ b/packages/ipkg/files/is-processing.patch
@@ -1,6 +1,6 @@
diff -Nur ipkg-0.99.163.orig/ipkg_install.c ipkg-0.99.163/ipkg_install.c
--- ipkg-0.99.163.orig/ipkg_install.c 2006-03-30 21:50:24.000000000 +0800
-+++ ipkg-0.99.163/ipkg_install.c 2006-08-10 09:30:40.000000000 +0800
++++ ipkg-0.99.163/ipkg_install.c 2007-03-15 08:01:20.000000000 +0800
@@ -211,6 +211,7 @@
anyone ever wants to make a nice libipkg. */
@@ -9,9 +9,35 @@ diff -Nur ipkg-0.99.163.orig/ipkg_install.c ipkg-0.99.163/ipkg_install.c
return ipkg_install_pkg(conf, new,0);
}
+diff -Nur ipkg-0.99.163.orig/libbb/unzip.c ipkg-0.99.163/libbb/unzip.c
+--- ipkg-0.99.163.orig/libbb/unzip.c 2006-02-06 16:13:02.000000000 +0800
++++ ipkg-0.99.163/libbb/unzip.c 2007-03-15 08:03:45.000000000 +0800
+@@ -1028,13 +1028,15 @@
+ */
+ extern void gz_close(int gunzip_pid)
+ {
+- if (kill(gunzip_pid, SIGTERM) == -1) {
+- error_msg_and_die("*** Couldnt kill old gunzip process *** aborting");
+- }
++ if (kill(gunzip_pid, 0) == 0) {
++ if (kill(gunzip_pid, SIGTERM) == -1) {
++ error_msg_and_die("*** Couldnt kill old gunzip process *** aborting");
++ }
+
+- if (waitpid(gunzip_pid, NULL, 0) == -1) {
+- printf("Couldnt wait ?");
++ if (waitpid(gunzip_pid, NULL, 0) == -1) {
++ printf("Couldnt wait ?");
++ }
+ }
+- free(window);
+- free(crc_table);
++ free(window);
++ free(crc_table);
+ }
diff -Nur ipkg-0.99.163.orig/pkg.c ipkg-0.99.163/pkg.c
--- ipkg-0.99.163.orig/pkg.c 2006-04-21 04:29:28.000000000 +0800
-+++ ipkg-0.99.163/pkg.c 2006-08-10 09:35:06.000000000 +0800
++++ ipkg-0.99.163/pkg.c 2007-03-20 15:11:32.845064480 +0800
@@ -33,6 +33,7 @@
#include "xsystem.h"
#include "ipkg_conf.h"
@@ -98,7 +124,32 @@ diff -Nur ipkg-0.99.163.orig/pkg.c ipkg-0.99.163/pkg.c
}
} else if (strcasecmp(field, "MD5sum") == 0) {
/* MD5sum */
-@@ -1016,6 +1049,12 @@
+@@ -871,6 +904,24 @@
+ }
+ temp[0]='\0';
+ snprintf(temp, (strlen(pkg->size)+8), "Size: %s\n", pkg->size);
++ } else {
++ if ( pkg->local_filename ) {
++ struct stat buf;
++ memset(&buf, 0, sizeof(struct stat));
++
++ if ( stat(pkg->local_filename, &buf) == 0 ) {
++
++ sprintf_alloc(&pkg->size, "%d", buf.st_size);
++ temp = (char *)realloc(temp, strlen(pkg->size)+8);
++ if ( temp == NULL ){
++ fprintf(stderr, "%s: out of memory\n", __FUNCTION__);
++ return NULL;
++ }
++ temp[0]='\0';
++ snprintf(temp, (strlen(pkg->size)+8), "Size: %s\n", pkg->size);
++ }
++ }
++
+ }
+ } else if (strcasecmp(field, "Source") == 0) {
+ /* Source */
+@@ -1016,6 +1067,12 @@
pkg_print_field(pkg, file, "Essential"); /* @@@@ should be removed in future release. */
pkg_print_field(pkg, file, "Architecture");
pkg_print_field(pkg, file, "Conffiles");
@@ -113,7 +164,7 @@ diff -Nur ipkg-0.99.163.orig/pkg.c ipkg-0.99.163/pkg.c
}
diff -Nur ipkg-0.99.163.orig/pkg.h ipkg-0.99.163/pkg.h
--- ipkg-0.99.163.orig/pkg.h 2006-05-30 16:31:08.000000000 +0800
-+++ ipkg-0.99.163/pkg.h 2006-08-10 09:19:14.000000000 +0800
++++ ipkg-0.99.163/pkg.h 2007-03-15 08:01:20.000000000 +0800
@@ -176,6 +176,10 @@
int arch_priority;
/* Adding this flag, to "force" ipkg to choose a "provided_by_hand" package, if there are multiple choice */
@@ -125,3 +176,4 @@ diff -Nur ipkg-0.99.163.orig/pkg.h ipkg-0.99.163/pkg.h
};
pkg_t *pkg_new(void);
+
diff --git a/packages/ipkg/ipkg-0.99.153/fix-bug1393.patch b/packages/ipkg/ipkg-0.99.153/fix-bug1393.patch
deleted file mode 100644
index 86af6b1d8e..0000000000
--- a/packages/ipkg/ipkg-0.99.153/fix-bug1393.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-patch added into upstream bugzilla:
-http://handhelds.org/~bugzilla/show_bug.cgi?id=1393
-Index: pkg_hash.c
-===================================================================
-RCS file: /cvs/familiar/dist/ipkg/C/pkg_hash.c,v
-retrieving revision 1.71
-diff -u -r1.71 pkg_hash.c
---- C/pkg_hash.c 29 Jul 2005 20:19:39 -0000 1.71
-+++ C/pkg_hash.c 2 Sep 2005 13:23:08 -0000
-@@ -216,7 +216,8 @@
- pkg_t *maybe = vec->pkgs[i];
- ipkg_message(conf, IPKG_DEBUG, " %s arch=%s arch_priority=%d \n",
- maybe->name, maybe->architecture, maybe->arch_priority);
-- if (maybe->arch_priority > 0) {
-+ if ((maybe->arch_priority > 0)
-+ && ((constraint_fcn == NULL) || constraint_fcn(maybe, cdata))) {
- max_count++;
- abstract_pkg_vec_insert(matching_apkgs, maybe->parent);
- pkg_vec_insert(matching_pkgs, maybe);
diff --git a/packages/ipkg/ipkg-0.99.155/upgrade-message-garbage.patch b/packages/ipkg/ipkg-0.99.155/upgrade-message-garbage.patch
deleted file mode 100644
index 6e79f79341..0000000000
--- a/packages/ipkg/ipkg-0.99.155/upgrade-message-garbage.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-Prevent the output of spurious extra characters from
-the stack. This patch is in the manner of the rest of
-the code, there is no good reason for this.
-
---- C/ipkg_install.c 1970-01-01 00:00:00.000000000 +0000
-+++ C/ipkg_install.c 1970-01-01 00:00:00.000000000 +0000
-@@ -723,6 +723,7 @@ static int ipkg_install_check_downgrade(
- return rc;
- } else {
- char message_out[15] ;
-+ memset(message_out,'\x0',15);
- if ( message )
- strncpy( message_out,"Upgrading ",strlen("Upgrading ") );
- else
diff --git a/packages/ipkg/ipkg-collateral.bb b/packages/ipkg/ipkg-collateral.bb
index ec45a10e2d..244d29d08a 100644
--- a/packages/ipkg/ipkg-collateral.bb
+++ b/packages/ipkg/ipkg-collateral.bb
@@ -1,8 +1,8 @@
DESCRIPTION = "ipkg configuration files"
SECTION = "base"
LICENSE = "MIT"
-PR = "r5"
-PACKAGE_ARCH = "all"
+PR = "r7"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
SRC_URI = " \
file://ipkg.conf.comments \
diff --git a/packages/ipkg/ipkg-0.99.153/.mtn2git_empty b/packages/ipkg/ipkg-collateral/oplinux-uclibc/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/ipkg/ipkg-0.99.153/.mtn2git_empty
+++ b/packages/ipkg/ipkg-collateral/oplinux-uclibc/.mtn2git_empty
diff --git a/packages/ipkg/ipkg-collateral/oplinux-uclibc/dest b/packages/ipkg/ipkg-collateral/oplinux-uclibc/dest
new file mode 100644
index 0000000000..b786746b63
--- /dev/null
+++ b/packages/ipkg/ipkg-collateral/oplinux-uclibc/dest
@@ -0,0 +1,3 @@
+dest root /
+dest ram /tmp
+dest smbfs /tmp/smbfs
diff --git a/packages/ipkg/ipkg-0.99.155/.mtn2git_empty b/packages/ipkg/ipkg-collateral/oplinux/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/ipkg/ipkg-0.99.155/.mtn2git_empty
+++ b/packages/ipkg/ipkg-collateral/oplinux/.mtn2git_empty
diff --git a/packages/ipkg/ipkg-collateral/oplinux/dest b/packages/ipkg/ipkg-collateral/oplinux/dest
new file mode 100644
index 0000000000..b786746b63
--- /dev/null
+++ b/packages/ipkg/ipkg-collateral/oplinux/dest
@@ -0,0 +1,3 @@
+dest root /
+dest ram /tmp
+dest smbfs /tmp/smbfs
diff --git a/packages/ipkg/ipkg-native_0.99.152.bb b/packages/ipkg/ipkg-native_0.99.152.bb
deleted file mode 100644
index f2deb33fba..0000000000
--- a/packages/ipkg/ipkg-native_0.99.152.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-require ipkg_${PV}.bb
-require ipkg-native.inc
-PR = "r1"
diff --git a/packages/ipkg/ipkg-native_0.99.153.bb b/packages/ipkg/ipkg-native_0.99.153.bb
deleted file mode 100644
index f2deb33fba..0000000000
--- a/packages/ipkg/ipkg-native_0.99.153.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-require ipkg_${PV}.bb
-require ipkg-native.inc
-PR = "r1"
diff --git a/packages/ipkg/ipkg-native_0.99.154.bb b/packages/ipkg/ipkg-native_0.99.154.bb
deleted file mode 100644
index f2deb33fba..0000000000
--- a/packages/ipkg/ipkg-native_0.99.154.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-require ipkg_${PV}.bb
-require ipkg-native.inc
-PR = "r1"
diff --git a/packages/ipkg/ipkg-native_0.99.159.bb b/packages/ipkg/ipkg-native_0.99.159.bb
deleted file mode 100644
index f2deb33fba..0000000000
--- a/packages/ipkg/ipkg-native_0.99.159.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-require ipkg_${PV}.bb
-require ipkg-native.inc
-PR = "r1"
diff --git a/packages/ipkg/ipkg-native_0.99.163.bb b/packages/ipkg/ipkg-native_0.99.163.bb
index bf060f89fe..13609c9037 100644
--- a/packages/ipkg/ipkg-native_0.99.163.bb
+++ b/packages/ipkg/ipkg-native_0.99.163.bb
@@ -2,9 +2,13 @@ S = "${WORKDIR}/ipkg-${PV}"
#require ipkg_${PV}.bb
require ipkg-native.inc
-PR = "r1"
+PR = "r2"
inherit autotools pkgconfig native
-SRC_URI = "http://www.handhelds.org/pub/packages/ipkg/ipkg-${PV}.tar.gz"
+SRC_URI = "http://www.handhelds.org/pub/packages/ipkg/ipkg-${PV}.tar.gz \
+ 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_0.99.152.bb b/packages/ipkg/ipkg_0.99.152.bb
deleted file mode 100644
index 0d10a29c3f..0000000000
--- a/packages/ipkg/ipkg_0.99.152.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require ipkg.inc
-PR = "r3"
diff --git a/packages/ipkg/ipkg_0.99.153.bb b/packages/ipkg/ipkg_0.99.153.bb
deleted file mode 100644
index 5852b6afc4..0000000000
--- a/packages/ipkg/ipkg_0.99.153.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-DEFAULT_PREFERENCE = "-1"
-
-require ipkg.inc
-
-PR = "r4"
-
-SRC_URI += "file://fix-bug1393.patch;patch=1"
-
diff --git a/packages/ipkg/ipkg_0.99.154.bb b/packages/ipkg/ipkg_0.99.154.bb
deleted file mode 100644
index 20a1996658..0000000000
--- a/packages/ipkg/ipkg_0.99.154.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require ipkg.inc
-PR = "r4"
diff --git a/packages/ipkg/ipkg_0.99.155.bb b/packages/ipkg/ipkg_0.99.155.bb
deleted file mode 100644
index e5ff6dc4c2..0000000000
--- a/packages/ipkg/ipkg_0.99.155.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-require ipkg.inc
-PR = "r2"
-SRC_URI += "file://upgrade-message-garbage.patch;patch=1"
diff --git a/packages/ipkg/ipkg_0.99.159.bb b/packages/ipkg/ipkg_0.99.159.bb
deleted file mode 100644
index 8455050622..0000000000
--- a/packages/ipkg/ipkg_0.99.159.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require ipkg.inc
-PR = "r1"
diff --git a/packages/ipkg/ipkg_0.99.163.bb b/packages/ipkg/ipkg_0.99.163.bb
index de3562d603..c5972a7c53 100644
--- a/packages/ipkg/ipkg_0.99.163.bb
+++ b/packages/ipkg/ipkg_0.99.163.bb
@@ -1,11 +1,14 @@
include ipkg.inc
-PR = "r2"
+PR = "r4"
S = "${WORKDIR}/ipkg-${PV}"
SRC_URI = "http://www.handhelds.org/pub/packages/ipkg/ipkg-${PV}.tar.gz \
file://terse.patch;patch=1 \
- file://is-processing.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 \
+ "
do_stage() {
oe_libinstall -so libipkg ${STAGING_LIBDIR}