diff options
author | Denys Dmytriyenko <denis@denix.org> | 2009-03-17 14:32:59 -0400 |
---|---|---|
committer | Denys Dmytriyenko <denis@denix.org> | 2009-03-17 14:32:59 -0400 |
commit | 709c4d66e0b107ca606941b988bad717c0b45d9b (patch) | |
tree | 37ee08b1eb308f3b2b6426d5793545c38396b838 /recipes/ipkg-utils | |
parent | fa6cd5a3b993f16c27de4ff82b42684516d433ba (diff) |
rename packages/ to recipes/ per earlier agreement
See links below for more details:
http://thread.gmane.org/gmane.comp.handhelds.openembedded/21326
http://thread.gmane.org/gmane.comp.handhelds.openembedded/21816
Signed-off-by: Denys Dmytriyenko <denis@denix.org>
Acked-by: Mike Westerhof <mwester@dls.net>
Acked-by: Philip Balister <philip@balister.org>
Acked-by: Khem Raj <raj.khem@gmail.com>
Acked-by: Marcin Juszkiewicz <hrw@openembedded.org>
Acked-by: Koen Kooi <koen@openembedded.org>
Acked-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
Diffstat (limited to 'recipes/ipkg-utils')
11 files changed, 716 insertions, 0 deletions
diff --git a/recipes/ipkg-utils/ipkg-link/link-vfat-libs.patch b/recipes/ipkg-utils/ipkg-link/link-vfat-libs.patch new file mode 100644 index 0000000000..7f495f9f4c --- /dev/null +++ b/recipes/ipkg-utils/ipkg-link/link-vfat-libs.patch @@ -0,0 +1,34 @@ +--- ipkg-utils/ipkg-link.orig 2006-04-05 00:08:28.518992136 +0200 ++++ ipkg-utils/ipkg-link 2006-04-05 00:08:40.399186072 +0200 +@@ -58,6 +58,31 @@ + `ln -s "$PREFIX$line" "$line"` + fi + fi ++ ++ # The next function checks whether the _source_ file (ie: /media/card/something) ++ # does actually exist. If it doesn't, it could by a library symlink (ie: libsomething.0.1 -> libsomething.0) ++ # Since VFAT & friends do not support symlinks, these library links would not exist after installation ++ # and trying to symlink them into the rootfs with ipkg-link results in unconnected symlinks in the rootfs. ++ # So we use the real lib file in /media/card/whatever and create all needed symlinks in the rootfs ++ # using the real file as source. ++ ++ if [ ! -e "$PREFIX$line" ]; then ++ if ( echo "$line" | grep -q "lib" ) ; then ++ libsearchfile=$(echo $line | sed -e "s#[a-z0-9/.]*/##g") ++ libfoundfiles=$(find $PREFIX -name "$libsearchfile*") ++ ++ for liblinkfile in $libfoundfiles; do ++ echo "Linking $line to $liblinkfile" ++ # link will be pointing to nowhere ++ if test -L $line; then ++ rm -f $line ++ fi ++ ln -s $liblinkfile $line ++ done ++ else ++ echo "WARNING: Source file [$PREFIX$line] is missing!" ++ fi ++ fi + done + } + diff --git a/recipes/ipkg-utils/ipkg-link_1.6+cvs20050404.bb b/recipes/ipkg-utils/ipkg-link_1.6+cvs20050404.bb new file mode 100644 index 0000000000..35e5ba1086 --- /dev/null +++ b/recipes/ipkg-utils/ipkg-link_1.6+cvs20050404.bb @@ -0,0 +1,20 @@ +SECTION = "base" +DESCRIPTION = "Itsy Package Manager utilities link script" +LICENSE = "GPL" +CONFLICTS = "ipkg-utils" +SRCDATE = "20050404" +PR = "r4" + +SRC_URI = "${HANDHELDS_CVS};module=ipkg-utils \ + file://link-vfat-libs.patch;patch=1" + +S = "${WORKDIR}/ipkg-utils" + +do_compile() { + : +} + +do_install() { + install -d ${D}${bindir} + install -m 0755 ipkg-link ${D}${bindir} +} diff --git a/recipes/ipkg-utils/ipkg-utils-native_1.6+cvs20050404.bb b/recipes/ipkg-utils/ipkg-utils-native_1.6+cvs20050404.bb new file mode 100644 index 0000000000..758814fa04 --- /dev/null +++ b/recipes/ipkg-utils/ipkg-utils-native_1.6+cvs20050404.bb @@ -0,0 +1,17 @@ +require ipkg-utils_${PV}.bb + +RDEPENDS = "" +PR = "r21" + +inherit native + +# Avoid circular dependencies from package_ipk.bbclass +PACKAGES = "" +FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/ipkg-utils" +INSTALL += "arfile.py" + +do_stage() { + for i in ${INSTALL}; do + install -m 0755 $i ${STAGING_BINDIR} + done +} diff --git a/recipes/ipkg-utils/ipkg-utils/arfile_even_alignment.patch b/recipes/ipkg-utils/ipkg-utils/arfile_even_alignment.patch new file mode 100644 index 0000000000..3ab133fb15 --- /dev/null +++ b/recipes/ipkg-utils/ipkg-utils/arfile_even_alignment.patch @@ -0,0 +1,11 @@ +--- ipkg-utils/arfile.py.orig 2008-06-11 21:07:01.000000000 -0500 ++++ ipkg-utils/arfile.py 2008-06-14 19:56:04.000000000 -0500 +@@ -86,6 +86,8 @@ + return FileSection(self.f, self.f.tell(), size) + + # Skip data and loop ++ if size % 2: ++ size = size + 1 + data = self.f.seek(size, 1) + # print hex(f.tell()) + diff --git a/recipes/ipkg-utils/ipkg-utils/fields_tweaks.patch b/recipes/ipkg-utils/ipkg-utils/fields_tweaks.patch new file mode 100644 index 0000000000..2b08e47ad0 --- /dev/null +++ b/recipes/ipkg-utils/ipkg-utils/fields_tweaks.patch @@ -0,0 +1,70 @@ +--- + Makefile | 2 ++ + ipkg-list-fields | 13 +++++++++++++ + ipkg.py | 8 +++++++- + 3 files changed, 22 insertions(+), 1 deletion(-) + +Index: ipkg-utils/Makefile +=================================================================== +--- ipkg-utils.orig/Makefile 2007-06-13 22:45:47.000000000 +0100 ++++ ipkg-utils/Makefile 2007-06-13 22:46:50.000000000 +0100 +@@ -15,6 +15,8 @@ install: ${UTILS} + python setup.py install + chmod agu+rx ipkg-make-index + cp -f ipkg-make-index $(PREFIX)/bin ++ chmod agu+rx ipkg-list-fields ++ cp -f ipkg-list-fields $(PREFIX)/bin + + binary: build + mkdir -p ipkg-build-binary/usr/bin +Index: ipkg-utils/ipkg-list-fields +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ ipkg-utils/ipkg-list-fields 2007-06-13 22:43:32.000000000 +0100 +@@ -0,0 +1,13 @@ ++#!/usr/bin/python ++ ++import sys, ipkg ++ ++def usage(): ++ sys.stderr.write("%s ipk\n" % (sys.argv[0],)) ++ sys.exit(-1) ++ ++if (len(sys.argv) < 2): ++ usage() ++ ++print ipkg.Package(sys.argv[1]) ++ +Index: ipkg-utils/ipkg.py +=================================================================== +--- ipkg-utils.orig/ipkg.py 2007-06-13 22:44:50.000000000 +0100 ++++ ipkg-utils/ipkg.py 2007-06-13 22:39:44.000000000 +0100 +@@ -139,6 +139,9 @@ class Package: + self.installed_size = None + self.filename = None + self.isdeb = 0 ++ self.homepage = None ++ self.oe = None ++ self.priority = None + self.fn = fn + + if fn: +@@ -211,7 +214,7 @@ class Package: + elif self.__dict__.has_key(name): + self.__dict__[name] = value + else: +- #print "Lost field %s, %s" % (name,value) ++ print "Lost field %s, %s" % (name,value) + pass + + if line and line[0] == '\n': +@@ -402,6 +405,9 @@ class Package: + if self.filename: out = out + "Filename: %s\n" % (self.filename) + if self.source: out = out + "Source: %s\n" % (self.source) + if self.description: out = out + "Description: %s\n" % (self.description) ++ if self.oe: out = out + "OE: %s\n" % (self.oe) ++ if self.homepage: out = out + "HomePage: %s\n" % (self.homepage) ++ if self.priority: out = out + "Priority: %s\n" % (self.priority) + out = out + "\n" + + return out diff --git a/recipes/ipkg-utils/ipkg-utils/ipkg-env.patch b/recipes/ipkg-utils/ipkg-utils/ipkg-env.patch new file mode 100644 index 0000000000..7d3025dc6f --- /dev/null +++ b/recipes/ipkg-utils/ipkg-utils/ipkg-env.patch @@ -0,0 +1,54 @@ +diff -Nur ipkg-utils.orig/ipkg-list-fields ipkg-utils/ipkg-list-fields +--- ipkg-utils.orig/ipkg-list-fields 2009-01-17 21:52:36.000000000 +0100 ++++ ipkg-utils/ipkg-list-fields 2009-01-17 21:55:08.000000000 +0100 +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/env python + + import sys, ipkg + +diff -Nur ipkg-utils.orig/ipkg-make-index ipkg-utils/ipkg-make-index +--- ipkg-utils.orig/ipkg-make-index 2009-01-17 21:52:36.000000000 +0100 ++++ ipkg-utils/ipkg-make-index 2009-01-17 21:55:13.000000000 +0100 +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/env python + # $Id: ipkg-make-index,v 1.22 2005/03/03 16:39:04 jamey Exp $ + + import sys, os, posixpath +diff -Nur ipkg-utils.orig/ipkg-show-deps ipkg-utils/ipkg-show-deps +--- ipkg-utils.orig/ipkg-show-deps 2009-01-17 21:52:36.000000000 +0100 ++++ ipkg-utils/ipkg-show-deps 2009-01-17 21:55:21.000000000 +0100 +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/env python + # $Id: ipkg-show-deps,v 1.2 2004/03/06 13:08:33 pb Exp $ + + import sys, os, posixpath +diff -Nur ipkg-utils.orig/ipkg-unbuild ipkg-utils/ipkg-unbuild +--- ipkg-utils.orig/ipkg-unbuild 2009-01-17 21:52:35.000000000 +0100 ++++ ipkg-utils/ipkg-unbuild 2009-01-17 21:55:24.000000000 +0100 +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/env python + + import sys, os, re + +diff -Nur ipkg-utils.orig/ipkg-update-index ipkg-utils/ipkg-update-index +--- ipkg-utils.orig/ipkg-update-index 2009-01-17 21:52:36.000000000 +0100 ++++ ipkg-utils/ipkg-update-index 2009-01-17 21:55:29.000000000 +0100 +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python2.1 ++#!/usr/bin/env python + + import sys, os + from glob import glob +diff -Nur ipkg-utils.orig/ipkg-upload ipkg-utils/ipkg-upload +--- ipkg-utils.orig/ipkg-upload 2009-01-17 21:52:36.000000000 +0100 ++++ ipkg-utils/ipkg-upload 2009-01-17 21:55:33.000000000 +0100 +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/env python + + import sys, os, os.path, re + diff --git a/recipes/ipkg-utils/ipkg-utils/ipkg-make-index-track-stamps.patch b/recipes/ipkg-utils/ipkg-utils/ipkg-make-index-track-stamps.patch new file mode 100644 index 0000000000..ad6df4f2e9 --- /dev/null +++ b/recipes/ipkg-utils/ipkg-utils/ipkg-make-index-track-stamps.patch @@ -0,0 +1,88 @@ +--- + ipkg-make-index | 31 +++++++++++++++++++++++++++---- + 1 file changed, 27 insertions(+), 4 deletions(-) + +Index: ipkg-utils/ipkg-make-index +=================================================================== +--- ipkg-utils.orig/ipkg-make-index 2007-05-26 23:45:56.000000000 +0100 ++++ ipkg-utils/ipkg-make-index 2007-05-26 23:47:25.000000000 +0100 +@@ -40,6 +40,7 @@ def to_locale(filename, locale): + old_filename = None + packages_filename = None + filelist_filename = "Packages.filelist" ++stamplist_filename = "Packages.stamps" + opt_s = 0 + opt_m = 0 + (opts, remaining_args) = getopt.getopt(sys.argv[1:], "hl:p:vsmr:L:") +@@ -50,6 +51,7 @@ for (optkey, optval) in opts: + opt_s = 1 + if optkey == '-p': + packages_filename = optval ++ stamplist_filename = optval + ".stamps" + if optkey == '-l': + filelist_filename = optval + if optkey == '-v': +@@ -72,6 +74,7 @@ old_pkg_hash = {} + if packages_filename and not old_filename and os.path.exists(packages_filename): + old_filename = packages_filename + ++pkgsStamps = {} + if old_filename: + if (verbose): + sys.stderr.write("Reading package list from " + old_filename + "\n") +@@ -80,6 +83,14 @@ if old_filename: + for k in old_packages.packages.keys(): + p = old_packages.packages[k] + old_pkg_hash[p.filename] = p ++ try: ++ f = open(stamplist_filename, "r") ++ for l in f: ++ l = l.strip() ++ s, f = l.split(" ", 1) ++ pkgsStamps[f] = int(s) ++ except IOError: ++ pass + + if (verbose): + sys.stderr.write("Reading in all the package info from %s\n" % (pkg_dir, )) +@@ -87,11 +98,17 @@ files=glob(pkg_dir + '/*.ipk') + glob(pk + files.sort() + for filename in files: + basename = os.path.basename(filename) ++ pkg = None ++ fnameStat = os.stat(filename) + if old_pkg_hash.has_key(basename): +- if (verbose): ++ if pkgsStamps.has_key(basename) and fnameStat.st_mtime == pkgsStamps[basename]: ++ if (verbose): + sys.stderr.write("Found %s in Packages\n" % (filename,)) +- pkg = old_pkg_hash[basename] +- else: ++ pkg = old_pkg_hash[basename] ++ else: ++ sys.stderr.write("Found %s in Packages, but mtime differs - re-reading\n" % (filename,)) ++ ++ if not pkg: + if (verbose): + sys.stderr.write("Reading info for package %s\n" % (filename,)) + pkg = ipkg.Package(filename) +@@ -101,6 +118,7 @@ for filename in files: + else: + old_filename = "" + s = packages.add_package(pkg) ++ pkgsStamps[basename] = fnameStat.st_mtime + if s == 0: + if old_filename: + # old package was displaced by newer +@@ -114,6 +132,11 @@ for filename in files: + if opt_s: + print filename + ++pkgsStampsFile = open(stamplist_filename, "w") ++for f in pkgsStamps.keys(): ++ pkgsStampsFile.write("%d %s\n" % (pkgsStamps[f], f)) ++pkgsStampsFile.close() ++ + if opt_s: + sys.exit(0) + diff --git a/recipes/ipkg-utils/ipkg-utils/ipkg-py-sane-vercompare.patch b/recipes/ipkg-utils/ipkg-utils/ipkg-py-sane-vercompare.patch new file mode 100644 index 0000000000..00ee391405 --- /dev/null +++ b/recipes/ipkg-utils/ipkg-utils/ipkg-py-sane-vercompare.patch @@ -0,0 +1,51 @@ +Only in ipkg-utils: ipkg-py-sane-vercompare.patch +diff -ur ipkg-utils.org/ipkg.py ipkg-utils/ipkg.py +--- ipkg-utils.org/ipkg.py 2005-01-08 18:08:52.000000000 +0000 ++++ ipkg-utils/ipkg.py 2007-04-04 11:52:46.000000000 +0000 +@@ -48,9 +48,9 @@ + self.epoch = epoch + self.version = version + +- def _versioncompare(self, ref): +- selfversion = self.version +- refversion = ref.version ++ def _versioncompare(self, selfversion, refversion): ++ if not selfversion: selfversion = "" ++ if not refversion: refversion = "" + while 1: + ## first look for non-numeric version component + selfm = re.match('([^0-9]*)(.*)', selfversion) +@@ -89,7 +89,18 @@ + elif (self.epoch < ref.epoch): + return -1 + else: +- return self._versioncompare(ref) ++ self_ver_comps = re.match(r"(.+?)(-r.+)?$", self.version) ++ ref_ver_comps = re.match(r"(.+?)(-r.+)?$", ref.version) ++ #print (self_ver_comps.group(1), self_ver_comps.group(2)) ++ #print (ref_ver_comps.group(1), ref_ver_comps.group(2)) ++ r = self._versioncompare(self_ver_comps.group(1), ref_ver_comps.group(1)) ++ if r == 0: ++ r = self._versioncompare(self_ver_comps.group(2), ref_ver_comps.group(2)) ++ #print "compare: %s vs %s = %d" % (self, ref, r) ++ return r ++ ++ def __str__(self): ++ return str(self.epoch) + ":" + self.version + + def parse_version(versionstr): + epoch = 0 +@@ -445,6 +456,13 @@ + return self.packages[key] + + if __name__ == "__main__": ++ ++ assert Version(0, "1.2.2-r1").compare(Version(0, "1.2.3-r0")) == -1 ++ assert Version(0, "1.2.2-r0").compare(Version(0, "1.2.2+cvs20070308-r0")) == -1 ++ assert Version(0, "1.2.2+cvs20070308").compare(Version(0, "1.2.2-r0")) == 1 ++ assert Version(0, "1.2.2-r0").compare(Version(0, "1.2.2-r0")) == 0 ++ assert Version(0, "1.2.2-r5").compare(Version(0, "1.2.2-r0")) == 1 ++ + package = Package() + + package.set_package("FooBar") diff --git a/recipes/ipkg-utils/ipkg-utils/ipkg-py-tarfile.patch b/recipes/ipkg-utils/ipkg-utils/ipkg-py-tarfile.patch new file mode 100644 index 0000000000..10fdbe3901 --- /dev/null +++ b/recipes/ipkg-utils/ipkg-utils/ipkg-py-tarfile.patch @@ -0,0 +1,316 @@ +Index: ipkg-utils/arfile.py +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ ipkg-utils/arfile.py 2008-05-30 15:33:49.000000000 +0100 +@@ -0,0 +1,124 @@ ++""" ++arfile - A module to parse GNU ar archives. ++ ++Copyright (c) 2006-7 Paul Sokolovsky ++This file is released under the terms ++of GNU General Public License v2 or later. ++""" ++import sys ++import os ++import tarfile ++ ++ ++class FileSection: ++ "A class which allows to treat portion of file as separate file object." ++ ++ def __init__(self, f, offset, size): ++ self.f = f ++ self.offset = offset ++ self.size = size ++ self.seek(0, 0) ++ ++ def seek(self, offset, whence = 0): ++# print "seek(%x, %d)" % (offset, whence) ++ if whence == 0: ++ return self.f.seek(offset + self.offset, whence) ++ elif whence == 1: ++ return self.f.seek(offset, whence) ++ elif whence == 2: ++ return self.f.seek(self.offset + self.size + offset, 0) ++ else: ++ assert False ++ ++ def tell(self): ++# print "tell()" ++ return self.f.tell() - self.offset ++ ++ def read(self, size = -1): ++# print "read(%d)" % size ++ return self.f.read(size) ++ ++class ArFile: ++ ++ def __init__(self, f): ++ self.f = f ++ self.directory = {} ++ self.directoryRead = False ++ ++ signature = self.f.readline() ++ assert signature == "!<arch>\n" ++ self.directoryOffset = self.f.tell() ++ ++ def open(self, fname): ++ if self.directory.has_key(fname): ++ return FileSection(self.f, self.directory[fname][-1], int(self.directory[fname][5])) ++ ++ if self.directoryRead: ++ raise IOError, (2, "AR member not found: " + fname) ++ ++ f = self._scan(fname) ++ if f == None: ++ raise IOError, (2, "AR member not found: " + fname) ++ return f ++ ++ ++ def _scan(self, fname): ++ self.f.seek(self.directoryOffset, 0) ++ ++ while True: ++ l = self.f.readline() ++ if not l: ++ self.directoryRead = True ++ return None ++ ++ if l == "\n": ++ l = self.f.readline() ++ if not l: break ++ descriptor = l.split() ++# print descriptor ++ size = int(descriptor[5]) ++ memberName = descriptor[0][:-1] ++ self.directory[memberName] = descriptor + [self.f.tell()] ++# print "read:", memberName ++ if memberName == fname or (memberName.startswith("`") and memberName[1:] == fname): ++ # Record directory offset to start from next time ++ self.directoryOffset = self.f.tell() + size ++ return FileSection(self.f, self.f.tell(), size) ++ ++ # Skip data and loop ++ data = self.f.seek(size, 1) ++# print hex(f.tell()) ++ ++ ++if __name__ == "__main__": ++ if None: ++ f = open(sys.argv[1], "rb") ++ ++ ar = ArFile(f) ++ tarStream = ar.open("data.tar.gz") ++ print "--------" ++ tarStream = ar.open("data.tar.gz") ++ print "--------" ++ tarStream = ar.open("control.tar.gz") ++ print "--------" ++ tarStream = ar.open("control.tar.gz2") ++ ++ sys.exit(0) ++ ++ ++ dir = "." ++ if len(sys.argv) > 1: ++ dir = sys.argv[1] ++ for f in os.listdir(dir): ++ if not f.endswith(".ipk"): continue ++ ++ print "=== %s ===" % f ++ f = open(dir + "/" + f, "rb") ++ ++ ar = ArFile(f) ++ tarStream = ar.open("control.tar.gz") ++ tarf = tarfile.open("control.tar.gz", "r", tarStream) ++ #tarf.list() ++ ++ f2 = tarf.extractfile("control") ++ print f2.read() +Index: ipkg-utils/ipkg.py +=================================================================== +--- ipkg-utils.orig/ipkg.py 2008-05-30 15:33:49.000000000 +0100 ++++ ipkg-utils/ipkg.py 2008-05-30 15:35:58.000000000 +0100 +@@ -41,6 +41,8 @@ + import string + import commands + from stat import ST_SIZE ++import arfile ++import tarfile + + class Version: + """A class for holding parsed package version information.""" +@@ -131,78 +133,63 @@ + self.section = None + self.filename_header = None + self.file_list = [] +- self.md5 = None ++ # md5 is lazy attribute, computed on demand ++ #self.md5 = None + self.size = None + self.installed_size = None + self.filename = None + self.isdeb = 0 ++ self.fn = fn + + if fn: + # see if it is deb format +- f = open(fn, "r") ++ f = open(fn, "rb") + magic = f.read(4) +- f.close() ++ f.seek(0, 0) + if (magic == "!<ar"): + self.isdeb = 1 + +- # compute the MD5. +- f = open(fn, "r") +- sum = md5.new() +- while 1: +- data = f.read(1024) +- if not data: break +- sum.update(data) +- f.close() +- if sys.version[:1] > '2': +- # when using Python 2.0 or newer +- self.md5 = sum.hexdigest() +- else: +- self.md5 = string.join(map((lambda x:"%02x" % ord(x)),sum.digest()),'') + stat = os.stat(fn) +- self.size = stat[ST_SIZE] ++ self.size = stat[ST_SIZE] + self.filename = os.path.basename(fn) + ## sys.stderr.write(" extracting control.tar.gz from %s\n"% (fn,)) +- if self.isdeb: +- control = os.popen("ar p "+fn+" control.tar.gz | tar xfzO - './control'","r") +- else: +- control = os.popen("tar xfzO "+fn+" 'control.tar.gz' | tar xfzO - './control'","r") +- line = control.readline() +- while 1: +- if not line: break +- line = string.rstrip(line) +- lineparts = re.match(r'([\w-]*?):\s*(.*)', line) +- if lineparts: +- name = string.lower(lineparts.group(1)) +- value = lineparts.group(2) +- while 1: +- line = control.readline() +- if not line: break +- if line[0] != ' ': break +- line = string.rstrip(line) +- value = value + '\n' + line +- # don't allow package to override its own filename +- if name == "filename": +- self.filename_header = value +- else: +- if self.__dict__.has_key(name): +- self.__dict__[name] = value +- else: +- line = control.readline() ++ if self.isdeb: ++ ar = arfile.ArFile(f) ++ tarStream = ar.open("control.tar.gz") ++ tarf = tarfile.open("control.tar.gz", "r", tarStream) ++ ++ try: ++ control = tarf.extractfile("control") ++ except KeyError: ++ control = tarf.extractfile("./control") ++ else: ++ control = os.popen("tar --wildcards -xzO -f " + fn + " '*control.tar.gz' | tar xfzO - './control'", "r") ++ ++ self.read_control(control) + control.close() +- if self.isdeb: +- data = os.popen("ar p "+fn+" data.tar.gz | tar tfz -","r") +- else: +- data = os.popen("tar xfzO "+fn+" '*data.tar.gz' | tar tfz -","r") +- while 1: +- line = data.readline() +- if not line: break +- self.file_list.append(string.rstrip(line)) +- data.close() + + self.scratch_dir = None + self.file_dir = None + self.meta_dir = None + ++ def __getattr__(self, name): ++ if name == "md5": ++ self._computeFileMD5() ++ return self.md5 ++ else: ++ raise AttributeError, name ++ ++ def _computeFileMD5(self): ++ # compute the MD5. ++ f = open(self.fn, "rb") ++ sum = md5.new() ++ while 1: ++ data = f.read(1024) ++ if not data: break ++ sum.update(data) ++ f.close() ++ self.md5 = sum.hexdigest() ++ + def read_control(self, control): + import os + +@@ -221,9 +208,15 @@ + value = value + '\n' + line + if name == 'size': + self.size = int(value) ++ elif name == 'md5sum': ++ self.md5 = value + elif self.__dict__.has_key(name): + self.__dict__[name] = value +- if line[0] == '\n': ++ else: ++ #print "Lost field %s, %s" % (name,value) ++ pass ++ ++ if line and line[0] == '\n': + return # consumes one blank line at end of package descriptoin + else: + line = control.readline() +@@ -314,7 +307,27 @@ + return self.section + + def get_file_list(self): +- return self.file_list ++ if not self.fn: ++ return [] ++ ++ if self.isdeb: ++ f = open(self.fn, "rb") ++ ar = arfile.ArFile(f) ++ tarStream = ar.open("data.tar.gz") ++ tarf = tarfile.open("data.tar.gz", "r", tarStream) ++ self.file_list = tarf.getnames() ++ f.close() ++ else: ++ f = os.popen("tar xfzO " + self.fn + " '*data.tar.gz' | tar tfz -","r") ++ while 1: ++ line = f.readline() ++ if not line: break ++ self.file_list.append(string.rstrip(line)) ++ f.close() ++ ++ # Make sure that filelist has consistent format regardless of tar version ++ self.file_list = map(lambda a: ["./", ""][a.startswith("./")] + a, self.file_list) ++ return self.file_list + + def write_package(self, dirname): + buf = self.render_control() +Index: ipkg-utils/setup.py +=================================================================== +--- ipkg-utils.orig/setup.py 2005-03-03 16:40:17.000000000 +0000 ++++ ipkg-utils/setup.py 2008-05-30 15:33:49.000000000 +0100 +@@ -16,6 +16,6 @@ + platforms = 'POSIX', + keywords = 'ipkg familiar', + url = 'http://www.handhelds.org/sources.html/', +- py_modules = [ 'ipkg' ], ++ py_modules = [ 'ipkg', 'arfile' ], + scripts = ['ipkg-compare-indexes', 'ipkg-make-index', 'ipkg-update-index', 'ipkg-build', 'ipkg-unbuild', 'ipkg-upload'] + ) diff --git a/recipes/ipkg-utils/ipkg-utils/ipkg-utils-fix.patch b/recipes/ipkg-utils/ipkg-utils/ipkg-utils-fix.patch new file mode 100644 index 0000000000..b3e0d62cd9 --- /dev/null +++ b/recipes/ipkg-utils/ipkg-utils/ipkg-utils-fix.patch @@ -0,0 +1,20 @@ +--- + ipkg.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Index: ipkg-utils/ipkg.py +=================================================================== +--- ipkg-utils.orig/ipkg.py 2007-05-26 23:49:05.000000000 +0100 ++++ ipkg-utils/ipkg.py 2007-05-26 23:49:23.000000000 +0100 +@@ -152,9 +152,9 @@ class Package: + self.filename = os.path.basename(fn) + ## sys.stderr.write(" extracting control.tar.gz from %s\n"% (fn,)) + if self.isdeb: +- control = os.popen("ar p "+fn+" control.tar.gz | tar xfzO - '*control'","r") ++ control = os.popen("ar p "+fn+" control.tar.gz | tar xfzO - './control'","r") + else: +- control = os.popen("tar xfzO "+fn+" '*control.tar.gz' | tar xfzO - '*control'","r") ++ control = os.popen("tar xfzO "+fn+" 'control.tar.gz' | tar xfzO - './control'","r") + line = control.readline() + while 1: + if not line: break diff --git a/recipes/ipkg-utils/ipkg-utils_1.6+cvs20050404.bb b/recipes/ipkg-utils/ipkg-utils_1.6+cvs20050404.bb new file mode 100644 index 0000000000..8baffd24c7 --- /dev/null +++ b/recipes/ipkg-utils/ipkg-utils_1.6+cvs20050404.bb @@ -0,0 +1,35 @@ +DESCRIPTION = "Itsy Package Manager utilities" +SECTION = "base" +PRIORITY = "optional" +LICENSE = "GPL" +CONFLICTS = "ipkg-link" +RDEPENDS = "python" +SRCDATE = "20050404" +PR = "r23" + +SRC_URI = "${HANDHELDS_CVS};module=ipkg-utils \ + file://ipkg-utils-fix.patch;patch=1 \ + file://ipkg-py-sane-vercompare.patch;patch=1 \ + file://ipkg-py-tarfile.patch;patch=1 \ + file://arfile_even_alignment.patch;patch=1 \ + file://ipkg-make-index-track-stamps.patch;patch=1 \ + file://fields_tweaks.patch;patch=1 \ + file://ipkg-env.patch;patch=1 \ + " + +S = "${WORKDIR}/ipkg-utils" + +INSTALL = "ipkg-build ipkg-deb-unbuild ipkg-unbuild ipkg-compare-versions ipkg-upload ipkg-make-index ipkg-link ipkg.py ipkg-list-fields" + +do_compile() { + oe_runmake ipkg-compare-versions +} + +do_install() { + install -d ${D}${bindir} + for i in ${INSTALL} + do + install -m 0755 $i ${D}${bindir} + done +} + |