symbian-qemu-0.9.1-12/python-2.6.1/Tools/freeze/checkextensions.py
author johnathan.white@2718R8BGH51.accenture.com
Mon, 08 Mar 2010 18:45:03 +0000
changeset 46 b6935a90ca64
parent 1 2fb8b9db1c86
permissions -rw-r--r--
Modify framebuffer and NGA framebuffer to read screen size from board model dtb file. Optimise memory usuage of frame buffer Add example minigui application with hooks to profiler (which writes results to S:\). Modified NGA framebuffer to run its own dfc queue at high priority

# Check for a module in a set of extension directories.
# An extension directory should contain a Setup file
# and one or more .o files or a lib.a file.

import os
import parsesetup

def checkextensions(unknown, extensions):
    files = []
    modules = []
    edict = {}
    for e in extensions:
        setup = os.path.join(e, 'Setup')
        liba = os.path.join(e, 'lib.a')
        if not os.path.isfile(liba):
            liba = None
        edict[e] = parsesetup.getsetupinfo(setup), liba
    for mod in unknown:
        for e in extensions:
            (mods, vars), liba = edict[e]
            if not mods.has_key(mod):
                continue
            modules.append(mod)
            if liba:
                # If we find a lib.a, use it, ignore the
                # .o files, and use *all* libraries for
                # *all* modules in the Setup file
                if liba in files:
                    break
                files.append(liba)
                for m in mods.keys():
                    files = files + select(e, mods, vars,
                                           m, 1)
                break
            files = files + select(e, mods, vars, mod, 0)
            break
    return files, modules

def select(e, mods, vars, mod, skipofiles):
    files = []
    for w in mods[mod]:
        w = treatword(w)
        if not w:
            continue
        w = expandvars(w, vars)
        for w in w.split():
            if skipofiles and w[-2:] == '.o':
                continue
            # Assume $var expands to absolute pathname
            if w[0] not in ('-', '$') and w[-2:] in ('.o', '.a'):
                w = os.path.join(e, w)
            if w[:2] in ('-L', '-R') and w[2:3] != '$':
                w = w[:2] + os.path.join(e, w[2:])
            files.append(w)
    return files

cc_flags = ['-I', '-D', '-U']
cc_exts = ['.c', '.C', '.cc', '.c++']

def treatword(w):
    if w[:2] in cc_flags:
        return None
    if w[:1] == '-':
        return w # Assume loader flag
    head, tail = os.path.split(w)
    base, ext = os.path.splitext(tail)
    if ext in cc_exts:
        tail = base + '.o'
        w = os.path.join(head, tail)
    return w

def expandvars(str, vars):
    i = 0
    while i < len(str):
        i = k = str.find('$', i)
        if i < 0:
            break
        i = i+1
        var = str[i:i+1]
        i = i+1
        if var == '(':
            j = str.find(')', i)
            if j < 0:
                break
            var = str[i:j]
            i = j+1
        if vars.has_key(var):
            str = str[:k] + vars[var] + str[i:]
            i = k
    return str