]> code.ossystems Code Review - openembedded-core.git/commitdiff
Update classes to use lib/oe
authorJoshua Lock <josh@linux.intel.com>
Wed, 5 May 2010 15:17:07 +0000 (16:17 +0100)
committerJoshua Lock <josh@linux.intel.com>
Thu, 6 May 2010 11:53:16 +0000 (12:53 +0100)
Adapt modifications from upstream to make Poky classes use lib/oe for the
common Python functionality.

Signed-off-by: Joshua Lock <josh@linux.intel.com>
meta/classes/base.bbclass
meta/classes/insane.bbclass
meta/classes/patch.bbclass
meta/classes/utils.bbclass

index d17f485c02973b16d6f275f3cc0fe0b5ed5bb181..5594bb72d3281eec56b3077feb1fbf43486c8420 100644 (file)
@@ -8,6 +8,32 @@ inherit utils
 inherit utility-tasks
 inherit metadata_scm
 
+python sys_path_eh () {
+    if isinstance(e, bb.event.ConfigParsed):
+        import sys
+        import os
+        import time
+
+        bbpath = e.data.getVar("BBPATH", True).split(":")
+        sys.path[0:0] = [os.path.join(dir, "lib") for dir in bbpath]
+
+        def inject(name, value):
+            """Make a python object accessible from everywhere for the metadata"""
+            if hasattr(bb.utils, "_context"):
+                bb.utils._context[name] = value
+            else:
+                __builtins__[name] = value
+
+        import oe.path
+        import oe.utils
+        inject("bb", bb)
+        inject("sys", sys)
+        inject("time", time)
+        inject("oe", oe)
+}
+
+addhandler sys_path_eh
+
 die() {
        oefatal "$*"
 }
index d8cc6792839c93cb20479530de9e8f5fc007624d..6d82e4df8891fa870805485d46af746ed558a602 100644 (file)
@@ -75,87 +75,6 @@ def package_qa_get_machine_dict():
 
        }
 
-# factory for a class, embedded in a method
-def package_qa_get_elf(path, bits32):
-    class ELFFile:
-        EI_NIDENT = 16
-
-        EI_CLASS      = 4
-        EI_DATA       = 5
-        EI_VERSION    = 6
-        EI_OSABI      = 7
-        EI_ABIVERSION = 8
-
-        # possible values for EI_CLASS
-        ELFCLASSNONE = 0
-        ELFCLASS32   = 1
-        ELFCLASS64   = 2
-
-        # possible value for EI_VERSION
-        EV_CURRENT   = 1
-
-        # possible values for EI_DATA
-        ELFDATANONE  = 0
-        ELFDATA2LSB  = 1
-        ELFDATA2MSB  = 2
-
-        def my_assert(self, expectation, result):
-            if not expectation == result:
-                #print "'%x','%x' %s" % (ord(expectation), ord(result), self.name)
-                raise Exception("This does not work as expected")
-
-        def __init__(self, name):
-            self.name = name
-
-        def open(self):
-            self.file = file(self.name, "r")
-            self.data = self.file.read(ELFFile.EI_NIDENT+4)
-
-            self.my_assert(len(self.data), ELFFile.EI_NIDENT+4)
-            self.my_assert(self.data[0], chr(0x7f) )
-            self.my_assert(self.data[1], 'E')
-            self.my_assert(self.data[2], 'L')
-            self.my_assert(self.data[3], 'F')
-            if bits32 :
-                self.my_assert(self.data[ELFFile.EI_CLASS], chr(ELFFile.ELFCLASS32))
-            else:
-                self.my_assert(self.data[ELFFile.EI_CLASS], chr(ELFFile.ELFCLASS64))
-            self.my_assert(self.data[ELFFile.EI_VERSION], chr(ELFFile.EV_CURRENT) )
-
-            self.sex = self.data[ELFFile.EI_DATA]
-            if self.sex == chr(ELFFile.ELFDATANONE):
-                raise Exception("self.sex == ELFDATANONE")
-            elif self.sex == chr(ELFFile.ELFDATA2LSB):
-                self.sex = "<"
-            elif self.sex == chr(ELFFile.ELFDATA2MSB):
-                self.sex = ">"
-            else:
-                raise Exception("Unknown self.sex")
-
-        def osAbi(self):
-            return ord(self.data[ELFFile.EI_OSABI])
-
-        def abiVersion(self):
-            return ord(self.data[ELFFile.EI_ABIVERSION])
-
-        def isLittleEndian(self):
-            return self.sex == "<"
-
-        def isBigEngian(self):
-            return self.sex == ">"
-
-        def machine(self):
-            """
-            We know the sex stored in self.sex and we
-            know the position
-            """
-            import struct
-            (a,) = struct.unpack(self.sex+"H", self.data[18:20])
-            return a
-
-    return ELFFile(path)
-
-
 # Known Error classes
 # 0 - non dev contains .so
 # 1 - package contains a dangerous RPATH
index 098bb92b899bf7efcf524c35fa169f2289c5a929..b8207680badb796c142fd7596adb90ce775ed198 100644 (file)
 # Point to an empty file so any user's custom settings don't break things
 QUILTRCFILE ?= "${STAGING_BINDIR_NATIVE}/quiltrc"
 
-def patch_init(d):
-       class NotFoundError(Exception):
-               def __init__(self, path):
-                       self.path = path
-               def __str__(self):
-                       return "Error: %s not found." % self.path
-
-       def md5sum(fname):
-               # when we move to Python 2.5 as minimal supported
-               # we can kill that try/except as hashlib is 2.5+
-               try:
-                       import hashlib
-                       m = hashlib.md5()
-               except ImportError:
-                       import md5
-                       m = md5.new()
-
-               try:
-                       f = file(fname, 'rb')
-               except IOError:
-                       raise NotFoundError(fname)
-
-               while True:
-                       d = f.read(8096)
-                       if not d:
-                               break
-                       m.update(d)
-               f.close()
-               return m.hexdigest()
-
-       class CmdError(Exception):
-               def __init__(self, exitstatus, output):
-                       self.status = exitstatus
-                       self.output = output
-
-               def __str__(self):
-                       return "Command Error: exit status: %d  Output:\n%s" % (self.status, self.output)
-
-
-       def runcmd(args, dir = None):
-               import commands
-
-               if dir:
-                       olddir = os.path.abspath(os.curdir)
-                       if not os.path.exists(dir):
-                               raise NotFoundError(dir)
-                       os.chdir(dir)
-                       # print("cwd: %s -> %s" % (olddir, dir))
-
-               try:
-                       args = [ commands.mkarg(str(arg)) for arg in args ]
-                       cmd = " ".join(args)
-                       # print("cmd: %s" % cmd)
-                       (exitstatus, output) = commands.getstatusoutput(cmd)
-                       if exitstatus != 0:
-                               raise CmdError(exitstatus >> 8, output)
-                       return output
-
-               finally:
-                       if dir:
-                               os.chdir(olddir)
-
-       class PatchError(Exception):
-               def __init__(self, msg):
-                       self.msg = msg
-
-               def __str__(self):
-                       return "Patch Error: %s" % self.msg
-
-       class PatchSet(object):
-               defaults = {
-                       "strippath": 1
-               }
-
-               def __init__(self, dir, d):
-                       self.dir = dir
-                       self.d = d
-                       self.patches = []
-                       self._current = None
-
-               def current(self):
-                       return self._current
-
-               def Clean(self):
-                       """
-                       Clean out the patch set.  Generally includes unapplying all
-                       patches and wiping out all associated metadata.
-                       """
-                       raise NotImplementedError()
-
-               def Import(self, patch, force):
-                       if not patch.get("file"):
-                               if not patch.get("remote"):
-                                       raise PatchError("Patch file must be specified in patch import.")
-                               else:
-                                       patch["file"] = bb.fetch.localpath(patch["remote"], self.d)
-
-                       for param in PatchSet.defaults:
-                               if not patch.get(param):
-                                       patch[param] = PatchSet.defaults[param]
-
-                       if patch.get("remote"):
-                               patch["file"] = bb.data.expand(bb.fetch.localpath(patch["remote"], self.d), self.d)
-
-                       patch["filemd5"] = md5sum(patch["file"])
-
-               def Push(self, force):
-                       raise NotImplementedError()
-
-               def Pop(self, force):
-                       raise NotImplementedError()
-
-               def Refresh(self, remote = None, all = None):
-                       raise NotImplementedError()
-
-
-       class PatchTree(PatchSet):
-               def __init__(self, dir, d):
-                       PatchSet.__init__(self, dir, d)
-
-               def Import(self, patch, force = None):
-                       """"""
-                       PatchSet.Import(self, patch, force)
-
-                       if self._current is not None:
-                               i = self._current + 1
-                       else:
-                               i = 0
-                       self.patches.insert(i, patch)
-
-               def _applypatch(self, patch, force = False, reverse = False, run = True):
-                       shellcmd = ["cat", patch['file'], "|", "patch", "-p", patch['strippath']]
-                       if reverse:
-                               shellcmd.append('-R')
-
-                       if not run:
-                               return "sh" + "-c" + " ".join(shellcmd)
-
-                       if not force:
-                               shellcmd.append('--dry-run')
-
-                       output = runcmd(["sh", "-c", " ".join(shellcmd)], self.dir)
-
-                       if force:
-                               return
-
-                       shellcmd.pop(len(shellcmd) - 1)
-                       output = runcmd(["sh", "-c", " ".join(shellcmd)], self.dir)
-                       return output
-
-               def Push(self, force = False, all = False, run = True):
-                       if all:
-                               for i in self.patches:
-                                       if self._current is not None:
-                                               self._current = self._current + 1
-                                       else:
-                                               self._current = 0
-                                       bb.note("applying patch %s" % i)
-                                       self._applypatch(i, force)
-                       else:
-                               if self._current is not None:
-                                       self._current = self._current + 1
-                               else:
-                                       self._current = 0
-                               bb.note("applying patch %s" % self.patches[self._current])
-                               return self._applypatch(self.patches[self._current], force)
-
-
-               def Pop(self, force = None, all = None):
-                       if all:
-                               for i in self.patches:
-                                       self._applypatch(i, force, True)
-                       else:
-                               self._applypatch(self.patches[self._current], force, True)
-
-               def Clean(self):
-                       """"""
-
-       class GitApplyTree(PatchTree):
-               def __init__(self, dir, d):
-                       PatchTree.__init__(self, dir, d)
-
-               def _applypatch(self, patch, force = False, reverse = False, run = True):
-                       shellcmd = ["git", "--git-dir=.", "apply", "-p%s" % patch['strippath']]
-
-                       if reverse:
-                               shellcmd.append('-R')
-
-                       shellcmd.append(patch['file'])
-
-                       if not run:
-                               return "sh" + "-c" + " ".join(shellcmd)
-
-                       return runcmd(["sh", "-c", " ".join(shellcmd)], self.dir)
-
-
-       class QuiltTree(PatchSet):
-               def _runcmd(self, args, run = True):
-                       quiltrc = bb.data.getVar('QUILTRCFILE', self.d, 1)
-                       if not run:
-                               return ["quilt"] + ["--quiltrc"] + [quiltrc] + args
-                       runcmd(["quilt"] + ["--quiltrc"] + [quiltrc] + args, self.dir)
-
-               def _quiltpatchpath(self, file):
-                       return os.path.join(self.dir, "patches", os.path.basename(file))
-
-
-               def __init__(self, dir, d):
-                       PatchSet.__init__(self, dir, d)
-                       self.initialized = False
-                       p = os.path.join(self.dir, 'patches')
-                       if not os.path.exists(p):
-                               os.makedirs(p)
-
-               def Clean(self):
-                       try:
-                               self._runcmd(["pop", "-a", "-f"])
-                       except Exception:
-                               pass
-                       self.initialized = True
-
-               def InitFromDir(self):
-                       # read series -> self.patches
-                       seriespath = os.path.join(self.dir, 'patches', 'series')
-                       if not os.path.exists(self.dir):
-                               raise Exception("Error: %s does not exist." % self.dir)
-                       if os.path.exists(seriespath):
-                               series = file(seriespath, 'r')
-                               for line in series.readlines():
-                                       patch = {}
-                                       parts = line.strip().split()
-                                       patch["quiltfile"] = self._quiltpatchpath(parts[0])
-                                       patch["quiltfilemd5"] = md5sum(patch["quiltfile"])
-                                       if len(parts) > 1:
-                                               patch["strippath"] = parts[1][2:]
-                                       self.patches.append(patch)
-                               series.close()
-
-                               # determine which patches are applied -> self._current
-                               try:
-                                       output = runcmd(["quilt", "applied"], self.dir)
-                               except CmdError:
-                                       import sys
-                                       if sys.exc_value.output.strip() == "No patches applied":
-                                               return
-                                       else:
-                                               raise sys.exc_value
-                               output = [val for val in output.split('\n') if not val.startswith('#')]
-                               for patch in self.patches:
-                                       if os.path.basename(patch["quiltfile"]) == output[-1]:
-                                               self._current = self.patches.index(patch)
-                       self.initialized = True
-
-               def Import(self, patch, force = None):
-                       if not self.initialized:
-                               self.InitFromDir()
-                       PatchSet.Import(self, patch, force)
-
-                       args = ["import", "-p", patch["strippath"]]
-                       if force:
-                               args.append("-f")
-                               args.append("-dn")
-                       args.append(patch["file"])
-
-                       self._runcmd(args)
-
-                       patch["quiltfile"] = self._quiltpatchpath(patch["file"])
-                       patch["quiltfilemd5"] = md5sum(patch["quiltfile"])
-
-                       # TODO: determine if the file being imported:
-                       #          1) is already imported, and is the same
-                       #          2) is already imported, but differs
-
-                       self.patches.insert(self._current or 0, patch)
-
-
-               def Push(self, force = False, all = False, run = True):
-                       # quilt push [-f]
-
-                       args = ["push"]
-                       if force:
-                               args.append("-f")
-                       if all:
-                               args.append("-a")
-                       if not run:
-                               return self._runcmd(args, run)
-
-                       self._runcmd(args)
-
-                       if self._current is not None:
-                               self._current = self._current + 1
-                       else:
-                               self._current = 0
-
-               def Pop(self, force = None, all = None):
-                       # quilt pop [-f]
-                       args = ["pop"]
-                       if force:
-                               args.append("-f")
-                       if all:
-                               args.append("-a")
-
-                       self._runcmd(args)
-
-                       if self._current == 0:
-                               self._current = None
-
-                       if self._current is not None:
-                               self._current = self._current - 1
-
-               def Refresh(self, **kwargs):
-                       if kwargs.get("remote"):
-                               patch = self.patches[kwargs["patch"]]
-                               if not patch:
-                                       raise PatchError("No patch found at index %s in patchset." % kwargs["patch"])
-                               (type, host, path, user, pswd, parm) = bb.decodeurl(patch["remote"])
-                               if type == "file":
-                                       import shutil
-                                       if not patch.get("file") and patch.get("remote"):
-                                               patch["file"] = bb.fetch.localpath(patch["remote"], self.d)
-
-                                       shutil.copyfile(patch["quiltfile"], patch["file"])
-                               else:
-                                       raise PatchError("Unable to do a remote refresh of %s, unsupported remote url scheme %s." % (os.path.basename(patch["quiltfile"]), type))
-                       else:
-                               # quilt refresh
-                               args = ["refresh"]
-                               if kwargs.get("quiltfile"):
-                                       args.append(os.path.basename(kwargs["quiltfile"]))
-                               elif kwargs.get("patch"):
-                                       args.append(os.path.basename(self.patches[kwargs["patch"]]["quiltfile"]))
-                               self._runcmd(args)
-
-       class Resolver(object):
-               def __init__(self, patchset):
-                       raise NotImplementedError()
-
-               def Resolve(self):
-                       raise NotImplementedError()
-
-               def Revert(self):
-                       raise NotImplementedError()
-
-               def Finalize(self):
-                       raise NotImplementedError()
-
-       class NOOPResolver(Resolver):
-               def __init__(self, patchset):
-                       self.patchset = patchset
-
-               def Resolve(self):
-                       olddir = os.path.abspath(os.curdir)
-                       os.chdir(self.patchset.dir)
-                       try:
-                               self.patchset.Push()
-                       except Exception:
-                               import sys
-                               os.chdir(olddir)
-                               raise sys.exc_value
-
-       # Patch resolver which relies on the user doing all the work involved in the
-       # resolution, with the exception of refreshing the remote copy of the patch
-       # files (the urls).
-       class UserResolver(Resolver):
-               def __init__(self, patchset):
-                       self.patchset = patchset
-
-               # Force a push in the patchset, then drop to a shell for the user to
-               # resolve any rejected hunks
-               def Resolve(self):
-
-                       olddir = os.path.abspath(os.curdir)
-                       os.chdir(self.patchset.dir)
-                       try:
-                               self.patchset.Push(False)
-                       except CmdError, v:
-                               # Patch application failed
-                               patchcmd = self.patchset.Push(True, False, False)
-                               t = bb.data.getVar('T', d, 1)
-                               if not t:
-                                       bb.msg.fatal(bb.msg.domain.Build, "T not set")
-                               bb.mkdirhier(t)
-                               import random
-                               rcfile = "%s/bashrc.%s.%s" % (t, str(os.getpid()), random.random())
-                               f = open(rcfile, "w")
-                               f.write("echo '*** Manual patch resolution mode ***'\n")
-                               f.write("echo 'Dropping to a shell, so patch rejects can be fixed manually.'\n")
-                               f.write("echo 'Run \"quilt refresh\" when patch is corrected, press CTRL+D to exit.'\n")
-                               f.write("echo ''\n")
-                               f.write(" ".join(patchcmd) + "\n")
-                               f.write("#" + bb.data.getVar('TERMCMDRUN', d, 1))
-                               f.close()
-                               os.chmod(rcfile, 0775)
-                               bb.utils.build_environment(d)
-                               os.environ['TERMWINDOWTITLE'] = "Bitbake: Please fix patch rejects manually"
-                               os.environ['TERMRCFILE'] = rcfile
-                               bb.debug(bb.data.getVar('TERMCMDRUN', d, 1))
-                               rc = os.system(bb.data.getVar('TERMCMDRUN', d, 1))
-                               if os.WIFEXITED(rc) and os.WEXITSTATUS(rc) != 0:
-                                       bb.msg.fatal(bb.msg.domain.Build, ("Cannot proceed with manual patch resolution - '%s' not found. " \
-                                           + "Check TERMCMDRUN variable.") % bb.data.getVar('TERMCMDRUN', d, 1))
-
-                               # Construct a new PatchSet after the user's changes, compare the
-                               # sets, checking patches for modifications, and doing a remote
-                               # refresh on each.
-                               oldpatchset = self.patchset
-                               self.patchset = oldpatchset.__class__(self.patchset.dir, self.patchset.d)
-                               self.patchset.InitFromDir()
-
-                               for patch in self.patchset.patches:
-                                       oldpatch = None
-                                       for opatch in oldpatchset.patches:
-                                               if opatch["quiltfile"] == patch["quiltfile"]:
-                                                       oldpatch = opatch
-
-                                       if oldpatch:
-                                               patch["remote"] = oldpatch["remote"]
-                                               if patch["quiltfile"] == oldpatch["quiltfile"]:
-                                                       if patch["quiltfilemd5"] != oldpatch["quiltfilemd5"]:
-                                                               bb.note("Patch %s has changed, updating remote url %s" % (os.path.basename(patch["quiltfile"]), patch["remote"]))
-                                                               # user change?  remote refresh
-                                                               self.patchset.Refresh(remote=True, patch=self.patchset.patches.index(patch))
-                                                       else:
-                                                               # User did not fix the problem.  Abort.
-                                                               raise PatchError("Patch application failed, and user did not fix and refresh the patch.")
-                       except Exception:
-                               os.chdir(olddir)
-                               raise
-                       os.chdir(olddir)
-
-       g = globals()
-       g["PatchSet"] = PatchSet
-       g["PatchTree"] = PatchTree
-       g["QuiltTree"] = QuiltTree
-       g["GitApplyTree"] = GitApplyTree
-       g["Resolver"] = Resolver
-       g["UserResolver"] = UserResolver
-       g["NOOPResolver"] = NOOPResolver
-       g["NotFoundError"] = NotFoundError
-       g["CmdError"] = CmdError
-       g["PatchError"] = PatchError
-
-addtask patch after do_unpack
-do_patch[dirs] = "${WORKDIR}"
-
 PATCHDEPENDENCY = "${PATCHTOOL}-native:do_populate_sysroot"
-do_patch[depends] = "${PATCHDEPENDENCY}"
 
 python patch_do_patch() {
-       patch_init(d)
+        import oe.patch
 
        src_uri = (bb.data.getVar('SRC_URI', d, 1) or '').split()
        if not src_uri:
                return
 
        patchsetmap = {
-               "patch": PatchTree,
-               "quilt": QuiltTree,
-               "git": GitApplyTree,
+               "patch": oe.patch.PatchTree,
+               "quilt": oe.patch.QuiltTree,
+               "git": oe.patch.GitApplyTree,
        }
 
        cls = patchsetmap[bb.data.getVar('PATCHTOOL', d, 1) or 'quilt']
 
        resolvermap = {
-               "noop": NOOPResolver,
-               "user": UserResolver,
+               "noop": oe.patch.NOOPResolver,
+               "user": oe.patch.UserResolver,
        }
 
        rcls = resolvermap[bb.data.getVar('PATCHRESOLVE', d, 1) or 'noop']
@@ -558,9 +110,12 @@ python patch_do_patch() {
                try:
                        patchset.Import({"file":unpacked, "remote":url, "strippath": pnum}, True)
                        resolver.Resolve()
-               except:
+               except Exception:
                        import sys
                        raise bb.build.FuncFailed(str(sys.exc_value))
 }
 
+addtask patch after do_unpack
+do_patch[dirs] = "${WORKDIR}"
+do_patch[depends] = "${PATCHDEPENDENCY}"
 EXPORT_FUNCTIONS do_patch
index c2d323235bfb7d0114db180680aa5f8f924f49a2..f37b565da2d13e06a5bc515a1848762a0c08fd4a 100644 (file)
@@ -1,12 +1,42 @@
-# like os.path.join but doesn't treat absolute RHS specially
+# For compatibility
 def base_path_join(a, *p):
-    path = a
-    for b in p:
-        if path == '' or path.endswith('/'):
-            path +=  b
-        else:
-            path += '/' + b
-    return path
+    return oe.path.join(a, *p)
+
+def base_path_relative(src, dest):
+    return oe.path.relative(src, dest)
+
+def base_path_out(path, d):
+    return oe.path.format_display(path, d)
+
+def base_read_file(filename):
+    return oe.utils.read_file(filename)
+
+def base_ifelse(condition, iftrue = True, iffalse = False):
+    return oe.utils.ifelse(condition, iftrue, iffalse)
+
+def base_conditional(variable, checkvalue, truevalue, falsevalue, d):
+    return oe.utils.conditional(variable, checkvalue, truevalue, falsevalue, d)
+
+def base_less_or_equal(variable, checkvalue, truevalue, falsevalue, d):
+    return oe.utils.less_or_equal(variable, checkvalue, truevalue, falsevalue, d)
+
+def base_version_less_or_equal(variable, checkvalue, truevalue, falsevalue, d):
+    return oe.utils.version_less_or_equal(variable, checkvalue, truevalue, falsevalue, d)
+
+def base_contains(variable, checkvalues, truevalue, falsevalue, d):
+    return oe.utils.contains(variable, checkvalues, truevalue, falsevalue, d)
+
+def base_both_contain(variable1, variable2, checkvalue, d):
+    return oe.utils.both_contain(variable1, variable2, checkvalue, d)
+
+def base_prune_suffix(var, suffixes, d):
+    return oe.utils.prune_suffix(var, suffixes, d)
+
+def oe_filter(f, str, d):
+    return oe.utils.str_filter(f, str, d)
+
+def oe_filter_out(f, str, d):
+    return oe.utils.str_filter_out(f, str, d)
 
 # for MD5/SHA handling
 def base_chk_load_parser(config_path):
@@ -80,67 +110,6 @@ def base_chk_file(parser, pn, pv, src_uri, localpath, data):
 
     return True
 
-def base_read_file(filename):
-       try:
-               f = file( filename, "r" )
-       except IOError, reason:
-               return "" # WARNING: can't raise an error now because of the new RDEPENDS handling. This is a bit ugly. :M:
-       else:
-               return f.read().strip()
-       return None
-
-def base_conditional(variable, checkvalue, truevalue, falsevalue, d):
-       if bb.data.getVar(variable,d,1) == checkvalue:
-               return truevalue
-       else:
-               return falsevalue
-
-def base_less_or_equal(variable, checkvalue, truevalue, falsevalue, d):
-       if float(bb.data.getVar(variable,d,1)) <= float(checkvalue):
-               return truevalue
-       else:
-               return falsevalue
-
-def base_version_less_or_equal(variable, checkvalue, truevalue, falsevalue, d):
-    result = bb.vercmp(bb.data.getVar(variable,d,True), checkvalue)
-    if result <= 0:
-        return truevalue
-    else:
-        return falsevalue
-
-def base_contains(variable, checkvalues, truevalue, falsevalue, d):
-       matches = 0
-       if type(checkvalues).__name__ == "str":
-               checkvalues = [checkvalues]
-       for value in checkvalues:
-               if bb.data.getVar(variable,d,1).find(value) != -1:      
-                       matches = matches + 1
-       if matches == len(checkvalues):
-               return truevalue                
-       return falsevalue
-
-def base_both_contain(variable1, variable2, checkvalue, d):
-       if bb.data.getVar(variable1,d,1).find(checkvalue) != -1 and bb.data.getVar(variable2,d,1).find(checkvalue) != -1:
-               return checkvalue
-       else:
-               return ""
-
-def base_prune_suffix(var, suffixes, d):
-    # See if var ends with any of the suffixes listed and 
-    # remove it if found
-    for suffix in suffixes:
-        if var.endswith(suffix):
-            return var.replace(suffix, "")
-    return var
-
-def oe_filter(f, str, d):
-       from re import match
-       return " ".join(filter(lambda x: match(f, x, 0), str.split()))
-
-def oe_filter_out(f, str, d):
-       from re import match
-       return " ".join(filter(lambda x: not match(f, x, 0), str.split()))
-
 oe_soinstall() {
        # Purpose: Install shared library file and
        #          create the necessary links