diff options
59 files changed, 1622 insertions, 111 deletions
diff --git a/classes/sip.bbclass b/classes/sip.bbclass index 7e049bc65a..adf179b130 100644 --- a/classes/sip.bbclass +++ b/classes/sip.bbclass @@ -1,6 +1,11 @@ -DEPENDS_prepend = "sip-native python-sip " +# Build Class for Sip based Python Bindings +# (C) Michael 'Mickey' Lauer <mickey@Vanille.de> +# -#EXTRA_SIPTAGS = "-tWS_QWS -tQtPE_1_6_0 -tQt_2_3_1" +DEPENDS =+ "sip-native python-sip" + +# default stuff, do not uncomment +# EXTRA_SIPTAGS = "-tWS_QWS -tQtPE_1_6_0 -tQt_2_3_1" sip_do_generate() { if [ -z "${SIP_MODULES}" ]; then diff --git a/classes/sip4.bbclass b/classes/sip4.bbclass index d58c2d6381..ca2b1dae20 100644 --- a/classes/sip4.bbclass +++ b/classes/sip4.bbclass @@ -1,5 +1,10 @@ -DEPENDS_prepend = "sip4-native " -RDEPENDS_append = "python-sip4" +# Build Class for Sip based Python Bindings +# (C) Michael 'Mickey' Lauer <mickey@Vanille.de> +# +DEPENDS =+ "sip4-native" +RDEPENDS += "python-sip4" + +# default stuff, do not uncomment # EXTRA_SIPTAGS = "-tWS_X11 -tQt_4_1_1" sip4_do_generate() { diff --git a/conf/machine/jornada6xx.conf b/conf/machine/jornada6xx.conf index 03fa7faa62..5aa492f57d 100644 --- a/conf/machine/jornada6xx.conf +++ b/conf/machine/jornada6xx.conf @@ -2,9 +2,7 @@ #@NAME: HP Jornada 680 #@DESCRIPTION: Machine configuration for the HITACHI SH3 based HP Jornada 6xx palmtop computer -TARGET_ARCH = "sh" +TARGET_ARCH = "sh3" IPKG_ARCHS = "all ${TARGET_ARCH} ${MACHINE}" -PREFERRED_VERSION_glibc = "2.3.4" -PREFERRED_VERSION_glibc-initial = "2.3.4" include conf/machine/include/tune-sh3.conf diff --git a/conf/machine/lite5200.conf b/conf/machine/lite5200.conf index 8df7b51d69..68efccef32 100644 --- a/conf/machine/lite5200.conf +++ b/conf/machine/lite5200.conf @@ -1,18 +1,10 @@ TARGET_ARCH = "powerpc" -TARGET_OS = "linux" IPKG_ARCHS = "all ppc ${MACHINE}" UBOOT_MACHINE = "Lite5200" SERIAL_CONSOLE="38400 ttyS0" -DISTRO = "familiar" TARGET_PREFIX = powerpc-603e-linux-gnu- -ASSUME_PROVIDED += "virtual/${TARGET_PREFIX}gcc virtual/libc" -PREFERRED_PROVIDERS += "virtual/qte:qte virtual/libqpe:libqpe-opie" -PREFERRED_PROVIDERS += " virtual/libsdl:libsdl-qpe" -PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}gcc-initial:gcc-cross-initial" -PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}gcc:gcc-cross" -PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}g++:gcc-cross" IMAGE_FSTYPES = "jffs2 tar.bz2" diff --git a/conf/machine/nokia770.conf b/conf/machine/nokia770.conf index b6fba3498d..d24324a598 100644 --- a/conf/machine/nokia770.conf +++ b/conf/machine/nokia770.conf @@ -13,7 +13,7 @@ XSERVER = "xserver-kdrive-omap" GUI_MACHINE_CLASS = "bigscreen" # Use tune-arm926 per default. Machine independent feeds should be built with tune-strongarm. -include conf/machine/include/tune-arm926ejs.conf +#include conf/machine/include/tune-arm926ejs.conf #size of the root partition (yes, it is 123 MB) @@ -21,7 +21,6 @@ ROOT_FLASH_SIZE = "123" EXTRA_IMAGECMD_jffs2_nokia770 = "--pad --little-endian --eraseblock=0x20000" # serial console port on devboard rev. B3 -#SERIAL_CONSOLE = "115200 tts/0" SERIAL_CONSOLE = "115200 ttyS0" PREFERRED_PROVIDER_virtual/kernel = "linux-nokia770" @@ -29,24 +28,7 @@ PREFERRED_PROVIDER_virtual/kernel = "linux-nokia770" BOOTSTRAP_EXTRA_RDEPENDS += "sysfsutils nokia770-init \ apm ppp wireless-tools console-tools" -# NFS Modules -#BOOTSTRAP_EXTRA_RDEPENDS += "kernel-module-nfs kernel-module-lockd kernel-module-sunrpc" -# Crypto Modules -#BOOTSTRAP_EXTRA_RDEPENDS += "kernel-module-des kernel-module-md5" -# SMB and CRAMFS -#BOOTSTRAP_EXTRA_RDEPENDS += "kernel-module-smbfs kernel-module-cramfs" -# Serial Modules -#BOOTSTRAP_EXTRA_RDEPENDS += "kernel-module-8250 " -# Bluetooth Modules -#BOOTSTRAP_EXTRA_RDEPENDS += "kernel-module-bluetooth kernel-module-l2cap kernel-module-rfcomm kernel-module-hci-vhci \ -# kernel-module-bnep kernel-module-hidp kernel-module-hci-uart kernel-module-sco" -# PPP Modules -#BOOTSTRAP_EXTRA_RDEPENDS += "kernel-module-ppp-generic kernel-module-ppp-async" - -#USB Gadget Modules -#BOOTSTRAP_EXTRA_RDEPENDS += "kernel-module-gadgetfs kernel-module-g-file-storage kernel-module-g-serial \ -# kernel-module-g-ether" - +#use this if you are using the nokia initfs ROOTFS_POSTPROCESS_COMMAND += " remove_init_link; " diff --git a/contrib/qa/.mtn2git_empty b/contrib/qa/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/contrib/qa/.mtn2git_empty diff --git a/contrib/qa/ipkg-diff/.mtn2git_empty b/contrib/qa/ipkg-diff/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/contrib/qa/ipkg-diff/.mtn2git_empty diff --git a/contrib/qa/ipkg-diff/README b/contrib/qa/ipkg-diff/README new file mode 100644 index 0000000000..7ddc4419cd --- /dev/null +++ b/contrib/qa/ipkg-diff/README @@ -0,0 +1,12 @@ +A Small utility to diff two directories of Itsy Packages. + +This utility will take two directories hopefully containing +Itsy Packages (ipk) and compare the ipks. It will find deleted +and new packages but will also compare packages with the same +name. And check file types, sizes, control files. And one time +it will be able to find upgrades and scan them as well. + +(this script is meant to be hacky, hacky, hacky and to do the + job) + +The only pattern applied is a Anti-Pattern: Time pressure diff --git a/contrib/qa/ipkg-diff/ipkg-diff b/contrib/qa/ipkg-diff/ipkg-diff new file mode 100644 index 0000000000..276b8b2e1e --- /dev/null +++ b/contrib/qa/ipkg-diff/ipkg-diff @@ -0,0 +1,134 @@ +#!/usr/bin/env python +# License of this file: +# Copy, Modify, Change, Sell it at your will. +# +# There is absolutely no warranty with this file +# +# (C) Copyright 2006 Holger Hans Peter Freyther + + + +def check_dir(name, error): + """ + Check if the given directory exists, if not error + is printed and the application is left. + """ + import os, sys + import stat + if not os.path.isdir(name): + print error + sys.exit(-1) + + +def find_packages(dir): + import os + contents = os.listdir(dir) + ipks = [] + for f in contents: + (root,ext) = os.path.splitext(f) + if ext == ".ipk": + ipks.append( f ) + return ipks + +def diff_dirs( old_ipks, new_ipks ): + """ + We will return three lists. The first one will + contain the files that are only in a, the second + the files in both directories and the third one + will + """ + only_old = [ i for i in old_ipks if i not in new_ipks] + both = [ i for i in old_ipks if i in new_ipks ] + only_new = [ i for i in new_ipks if i not in old_ipks] + + return only_old, both, only_new + +def diff_packages( old, new ): + def compare( name, version, method, txt ): + """ + Compare package with name and version with method + and print error message + """ + try: + if not method( old[package_name][version], new[package_name][version] ): + print txt + except: + print "Error with %s %s and '%s'" % (package_name,version, txt) + + for package_name in old.keys(): + for version in old[package_name].keys(): + print "Comparing %s %s" % (package_name, version) + compare( package_name, version, lambda x,y: x.get_maintainer() == y.get_maintainer(), "Maintainer is different" ) + compare( package_name, version, lambda x,y: x.get_architecture() == y.get_architecture(), "Architecture is different" ) + compare( package_name, version, lambda x,y: x.get_description() == y.get_description(), "Description is different" ) + compare( package_name, version, lambda x,y: x.get_depends() == y.get_depends(), "Depends are different" ) + compare( package_name, version, lambda x,y: x.get_provides() == y.get_provides(), "Provides are different" ) + compare( package_name, version, lambda x,y: x.get_conflicts() == y.get_conflicts(), "Provides are different" ) + compare( package_name, version, lambda x,y: x.get_suggests() == y.get_suggests(), "Suggests are different" ) + compare( package_name, version, lambda x,y: x.get_source() == y.get_source(), "Source is different" ) + compare( package_name, version, lambda x,y: x.get_section() == y.get_section(), "Section is different" ) + compare( package_name, version, lambda x,y: x.get_file_list() == y.get_file_list(), "Filelist is different" ) + compare( package_name, version, lambda x,y: x.md5 == y.md5, "MD5 is different" ) + +def print_result_start( old, both, new ): + """ + Print the findings of ipkg-diff + """ + print "ipkg-diff diff report" + print "%d packages found" % (len(old)+len(both)+len(new)) + print "# of old/removed packages: %d" % len(old) + print "# of new packages: %d" % len(new) + print "# of possible changed packages: %d" % len(both) + print "" + + if len(old) > 0: + for i in old: + print "Vanished ipk: %s" % i + + if len(new) > 0: + for i in new: + print "New ipk: %s" % i + + +def parse_packages(dir, package_names): + import ipkg, os + packages = {} + + for package in package_names: + p = ipkg.Package(os.path.join(dir, package)) + + if not p.get_package() in packages: + packages[p.get_package()] = {} + packages[p.get_package()][p.get_version()] = p + + return packages + + +if __name__ == "__main__": + import os,sys + + # sanity + if len(sys.argv) != 3: + print "ipkg-diff OLD NEW" + sys.exit(-2) + + # check dirs + check_dir(sys.argv[1], "Source Directory does not exist") + check_dir(sys.argv[2], "Dest Directory does not exists") + + # find packages + old_ipks = find_packages(sys.argv[1]) + new_ipks = find_packages(sys.argv[2]) + + # find removed and new files + only_old, both, only_new = diff_dirs( old_ipks, new_ipks ) + + # print a summary header + print_result_start( only_old, both, only_new ) + + # start diffing the content by parsing the packages + print "Loading Content into memory" + old_packages = parse_packages(sys.argv[1], both ) + new_packages = parse_packages(sys.argv[2], both ) + + diff_packages( old_packages, new_packages ) diff --git a/contrib/qa/ipkg-diff/ipkg.py b/contrib/qa/ipkg-diff/ipkg.py new file mode 100644 index 0000000000..02aab229ee --- /dev/null +++ b/contrib/qa/ipkg-diff/ipkg.py @@ -0,0 +1,462 @@ +#!/usr/bin/env python +# Copyright (C) 2001 Alexander S. Guy <a7r@andern.org> +# Andern Research Labs +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. */ +# +# Copyright 2001, Russell Nelson <ipkg.py@russnelson.com> +# Added reading in of packages. +# Added missing package information fields. +# Changed render_control() to __repr__(). +# +# Current Issues: +# The API doesn't validate package information fields. It should be +# throwing exceptions in the right places. +# Executions of tar could silently fail. +# Executions of tar *do* fail, and loudly, because you have to specify a full filename, +# and tar complains if any files are missing, and the ipkg spec doesn't require +# people to say "./control.tar.gz" or "./control" when they package files. +# It would be much better to require ./control or disallow ./control (either) +# rather than letting people pick. Some freedoms aren't worth their cost. + +import tempfile +import os +import sys +import glob +import md5 +import re +import string +import commands +from stat import ST_SIZE + +class Version: + """A class for holding parsed package version information.""" + def __init__(self, epoch, version): + self.epoch = epoch + self.version = version + + def _versioncompare(self, ref): + selfversion = self.version + refversion = ref.version + while 1: + ## first look for non-numeric version component + selfm = re.match('([^0-9]*)(.*)', selfversion) + #print 'selfm', selfm.groups() + (selfalpha, selfversion) = selfm.groups() + refm = re.match('([^0-9]*)(.*)', refversion) + #print 'refm', refm.groups() + (refalpha, refversion) = refm.groups() + if (selfalpha > refalpha): + return 1 + elif (selfalpha < refalpha): + return -1 + ## now look for numeric version component + (selfnum, selfversion) = re.match('([0-9]*)(.*)', selfversion).groups() + (refnum, refversion) = re.match('([0-9]*)(.*)', refversion).groups() + #print 'selfnum', selfnum, selfversion + #print 'refnum', refnum, refversion + if (selfnum != ''): + selfnum = int(selfnum) + else: + selfnum = -1 + if (refnum != ''): + refnum = int(refnum) + else: + refnum = -1 + if (selfnum > refnum): + return 1 + elif (selfnum < refnum): + return -1 + if selfversion == '' and refversion == '': + return 0 + + def compare(self, ref): + if (self.epoch > ref.epoch): + return 1 + elif (self.epoch < ref.epoch): + return -1 + else: + return self._versioncompare(ref) + +def parse_version(versionstr): + epoch = 0 + # check for epoch + m = re.match('([0-9]*):(.*)', versionstr) + if m: + (epochstr, versionstr) = m.groups() + epoch = int(epochstr) + return Version(epoch, versionstr) + +class Package: + """A class for creating objects to manipulate (e.g. create) ipkg + packages.""" + def __init__(self, fn=None): + self.package = None + self.version = 'none' + self.parsed_version = None + self.architecture = None + self.maintainer = None + self.source = None + self.description = None + self.depends = None + self.provides = None + self.replaces = None + self.conflicts = None + self.recommends = None + self.suggests = None + self.section = None + self.filename_header = None + self.file_list = [] + self.md5 = None + self.size = None + self.installed_size = None + self.filename = None + self.isdeb = 0 + + if fn: + # see if it is deb format + f = open(fn, "r") + magic = f.read(4) + f.close() + 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.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() + 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 read_control(self, control): + import os + + 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 + value = value + '\n' + line + if name == 'size': + self.size = int(value) + elif self.__dict__.has_key(name): + self.__dict__[name] = value + if line[0] == '\n': + return # consumes one blank line at end of package descriptoin + else: + line = control.readline() + pass + return + + def _setup_scratch_area(self): + self.scratch_dir = "%s/%sipkg" % (tempfile.gettempdir(), + tempfile.gettempprefix()) + self.file_dir = "%s/files" % (self.scratch_dir) + self.meta_dir = "%s/meta" % (self.scratch_dir) + + os.mkdir(self.scratch_dir) + os.mkdir(self.file_dir) + os.mkdir(self.meta_dir) + + def set_package(self, package): + self.package = package + + def get_package(self): + return self.package + + def set_version(self, version): + self.version = version + self.parsed_version = parse_version(version) + + def get_version(self): + return self.version + + def set_architecture(self, architecture): + self.architecture = architecture + + def get_architecture(self): + return self.architecture + + def set_maintainer(self, maintainer): + self.maintainer = maintainer + + def get_maintainer(self): + return self.maintainer + + def set_source(self, source): + self.source = source + + def get_source(self): + return self.source + + def set_description(self, description): + self.description = description + + def get_description(self): + return self.description + + def set_depends(self, depends): + self.depends = depends + + def get_depends(self, depends): + return self.depends + + def set_provides(self, provides): + self.provides = provides + + def get_provides(self, provides): + return self.provides + + def set_replaces(self, replaces): + self.replaces = replaces + + def get_replaces(self, replaces): + return self.replaces + + def set_conflicts(self, conflicts): + self.conflicts = conflicts + + def get_conflicts(self, conflicts): + return self.conflicts + + def set_suggests(self, suggests): + self.suggests = suggests +< |
