Ejemplo n.º 1
0
def handle(fn, d, include):
    global __func_start_regexp__, __inherit_regexp__, __export_func_regexp__, __addtask_regexp__, __addhandler_regexp__, __infunc__, __body__, __residue__
    __body__ = []
    __infunc__ = ""
    __classname__ = ""
    __residue__ = []


    if include == 0:
        bb.msg.debug(2, bb.msg.domain.Parsing, "BB " + fn + ": handle(data)")
    else:
        bb.msg.debug(2, bb.msg.domain.Parsing, "BB " + fn + ": handle(data, include)")

    (root, ext) = os.path.splitext(os.path.basename(fn))
    base_name = "%s%s" % (root,ext)
    init(d)

    if ext == ".bbclass":
        __classname__ = root
        classes.append(__classname__)
        __inherit_cache = data.getVar('__inherit_cache', d) or []
        if not fn in __inherit_cache:
            __inherit_cache.append(fn)
            data.setVar('__inherit_cache', __inherit_cache, d)

    if include != 0:
        oldfile = data.getVar('FILE', d)
    else:
        oldfile = None

    abs_fn = resolve_file(fn, d)

    if include:
        bb.parse.mark_dependency(d, abs_fn)

    # actual loading
    statements = get_statements(fn, abs_fn, base_name)

    # DONE WITH PARSING... time to evaluate
    if ext != ".bbclass":
        data.setVar('FILE', fn, d)

    statements.eval(d)

    if ext == ".bbclass":
        classes.remove(__classname__)
    else:
        if include == 0:
            return ast.multi_finalize(fn, d)

    if oldfile:
        bb.data.setVar("FILE", oldfile, d)

    # we have parsed the bb class now
    if ext == ".bbclass" or ext == ".inc":
        bb.methodpool.get_parsed_dict()[base_name] = 1

    return d
Ejemplo n.º 2
0
def handle(fn, data, include):
    init(data)

    if include == 0:
        oldfile = None
    else:
        oldfile = data.getVar("FILE", False)

    abs_fn = resolve_file(fn, data)
    f = open(abs_fn, "r")

    if include:
        bb.parse.mark_dependency(data, abs_fn)

    statements = ast.StatementGroup()
    lineno = 0
    while True:
        lineno = lineno + 1
        s = f.readline()
        if not s:
            break
        w = s.strip()
        # skip empty lines
        if not w:
            continue
        s = s.rstrip()
        while s[-1] == "\\":
            s2 = f.readline().strip()
            lineno = lineno + 1
            if (not s2 or s2 and s2[0] != "#") and s[0] == "#":
                bb.fatal(
                    "There is a confusing multiline, partially commented expression on line %s of file %s (%s).\nPlease clarify whether this is all a comment or should be parsed."
                    % (lineno, fn, s)
                )
            s = s[:-1] + s2
        # skip comments
        if s[0] == "#":
            continue
        feeder(lineno, s, abs_fn, statements)

    # DONE WITH PARSING... time to evaluate
    data.setVar("FILE", abs_fn)
    statements.eval(data)
    if oldfile:
        data.setVar("FILE", oldfile)

    f.close()

    for f in confFilters:
        f(fn, data)

    return data
Ejemplo n.º 3
0
def handle(fn, data, include):
    init(data)

    if include == 0:
        oldfile = None
    else:
        oldfile = data.getVar('FILE', False)

    abs_fn = resolve_file(fn, data)
    f = open(abs_fn, 'r')

    if include:
        bb.parse.mark_dependency(data, abs_fn)

    statements = ast.StatementGroup()
    lineno = 0
    while True:
        lineno = lineno + 1
        s = f.readline()
        if not s:
            break
        w = s.strip()
        # skip empty lines
        if not w:
            continue
        s = s.rstrip()
        while s[-1] == '\\':
            s2 = f.readline().strip()
            lineno = lineno + 1
            if (not s2 or s2 and s2[0] != "#") and s[0] == "#":
                bb.fatal(
                    "There is a confusing multiline, partially commented expression on line %s of file %s (%s).\nPlease clarify whether this is all a comment or should be parsed."
                    % (lineno, fn, s))
            s = s[:-1] + s2
        # skip comments
        if s[0] == '#':
            continue
        feeder(lineno, s, abs_fn, statements)

    # DONE WITH PARSING... time to evaluate
    data.setVar('FILE', abs_fn)
    statements.eval(data)
    if oldfile:
        data.setVar('FILE', oldfile)

    f.close()

    for f in confFilters:
        f(fn, data)

    return data
Ejemplo n.º 4
0
def handle(fn, data, include):
    init(data)

    if include == 0:
        oldfile = None
    else:
        oldfile = data.getVar("FILE")

    abs_fn = resolve_file(fn, data)
    f = open(abs_fn, "r")

    if include:
        bb.parse.mark_dependency(data, abs_fn)

    statements = ast.StatementGroup()
    lineno = 0
    while True:
        lineno = lineno + 1
        s = f.readline()
        if not s:
            break
        w = s.strip()
        if not w:
            continue  # skip empty lines
        s = s.rstrip()
        if s[0] == "#":
            continue  # skip comments
        while s[-1] == "\\":
            s2 = f.readline().strip()
            lineno = lineno + 1
            s = s[:-1] + s2
        feeder(lineno, s, fn, statements)

    # DONE WITH PARSING... time to evaluate
    data.setVar("FILE", abs_fn)
    statements.eval(data)
    if oldfile:
        data.setVar("FILE", oldfile)

    return data
Ejemplo n.º 5
0
def handle(fn, data, include):
    init(data)

    if include == 0:
        oldfile = None
    else:
        oldfile = data.getVar('FILE')

    abs_fn = resolve_file(fn, data)
    f = open(abs_fn, 'r')

    if include:
        bb.parse.mark_dependency(data, abs_fn)

    statements = ast.StatementGroup()
    lineno = 0
    while True:
        lineno = lineno + 1
        s = f.readline()
        if not s: break
        w = s.strip()
        if not w: continue          # skip empty lines
        s = s.rstrip()
        if s[0] == '#': continue    # skip comments
        while s[-1] == '\\':
            s2 = f.readline().strip()
            lineno = lineno + 1
            s = s[:-1] + s2
        feeder(lineno, s, fn, statements)

    # DONE WITH PARSING... time to evaluate
    data.setVar('FILE', abs_fn)
    statements.eval(data)
    if oldfile:
        data.setVar('FILE', oldfile)

    for f in confFilters:
        f(fn, data)

    return data
Ejemplo n.º 6
0
def handle(fn, data, include):
    init(data)

    if include == 0:
        oldfile = None
    else:
        oldfile = bb.data.getVar('FILE', data)

    abs_fn = resolve_file(fn, data)
    f = open(abs_fn, 'r')

    if include:
        bb.parse.mark_dependency(data, abs_fn)

    statements = ast.StatementGroup()
    lineno = 0
    while 1:
        lineno = lineno + 1
        s = f.readline()
        if not s: break
        w = s.strip()
        if not w: continue          # skip empty lines
        s = s.rstrip()
        if s[0] == '#': continue    # skip comments
        while s[-1] == '\\':
            s2 = f.readline()[:-1].strip()
            lineno = lineno + 1
            s = s[:-1] + s2
        feeder(lineno, s, fn, statements)

    # DONE WITH PARSING... time to evaluate
    bb.data.setVar('FILE', fn, data)
    statements.eval(data)
    if oldfile:
        bb.data.setVar('FILE', oldfile, data)

    return data
Ejemplo n.º 7
0
def handle(fn, data, include):
    init(data)

    if include == 0:
        oldfile = None
    else:
        oldfile = data.getVar('FILE')

    abs_fn = resolve_file(fn, data)
    f = open(abs_fn, 'r')

    if include:
        bb.parse.mark_dependency(data, abs_fn)

    statements = ast.StatementGroup()
    lineno = 0
    while True:
        lineno = lineno + 1
        s = f.readline()
        if not s:
            break
        w = s.strip()
        # skip empty lines
        if not w:
            continue
        s = s.rstrip()
        if s[0] == '#': continue    # skip comments
        def strip_comments(_s):
            c1 = re.findall('\".*\"', _s) # used for check
            v = _s.split('#')
            if len(v) > 1: # we found some comments
                _v = v[-1]
                del v[-1]
                _s = '#'.join(v).rstrip('#')
                if re.findall('\".*\"', _s) != c1:
                    # we remove the expr, roll back
                    return '%s#%s' % (_s, _v.rstrip())
                return strip_comments(_s)
            else:
                return '#'.join(v).rstrip('[# ]')
        s = strip_comments(s)
        while s[-1] == '\\':
            s2 = f.readline().strip()
            lineno = lineno + 1
            if (not s2 or s2 and s2[0] != "#") and s[0] == "#" :
                bb.fatal("There is a confusing multiline, partially commented expression on line %s of file %s (%s).\nPlease clarify whether this is all a comment or should be parsed." % (lineno, fn, s))
            s = s[:-1] + s2
        # skip comments
        if s[0] == '#':
            continue
        feeder(lineno, s, fn, statements)

    # DONE WITH PARSING... time to evaluate
    data.setVar('FILE', abs_fn)
    statements.eval(data)
    if oldfile:
        data.setVar('FILE', oldfile)

    f.close()

    for f in confFilters:
        f(fn, data)

    return data