def include_single_file(parentfn, fn, lineno, data, error_out): """ Helper function for include() which does not expand or split its parameters. """ if parentfn == fn: # prevent infinite recursion return None if not os.path.isabs(fn): dname = os.path.dirname(parentfn) bbpath = "%s:%s" % (dname, data.getVar("BBPATH")) abs_fn, attempts = bb.utils.which(bbpath, fn, history=True) if abs_fn and bb.parse.check_dependency(data, abs_fn): logger.warning("Duplicate inclusion for %s in %s" % (abs_fn, data.getVar('FILE'))) for af in attempts: bb.parse.mark_dependency(data, af) if abs_fn: fn = abs_fn elif bb.parse.check_dependency(data, fn): logger.warning("Duplicate inclusion for %s in %s" % (fn, data.getVar('FILE'))) try: bb.parse.handle(fn, data, True) except (IOError, OSError) as exc: if exc.errno == errno.ENOENT: if error_out: raise ParseError("Could not %s file %s" % (error_out, fn), parentfn, lineno) logger.debug(2, "CONF file '%s' not found", fn) else: if error_out: raise ParseError("Could not %s file %s: %s" % (error_out, fn, exc.strerror), parentfn, lineno) else: raise ParseError("Error parsing %s: %s" % (fn, exc.strerror), parentfn, lineno)
def feeder(lineno, s, fn, statements): m = __config_regexp__.match(s) if m: groupd = m.groupdict() ast.handleData(statements, fn, lineno, groupd) return m = __include_regexp__.match(s) if m: ast.handleInclude(statements, fn, lineno, m, False) return m = __require_regexp__.match(s) if m: ast.handleInclude(statements, fn, lineno, m, True) return m = __export_regexp__.match(s) if m: ast.handleExport(statements, fn, lineno, m) return m = __unset_regexp__.match(s) if m: ast.handleUnset(statements, fn, lineno, m) return m = __unset_flag_regexp__.match(s) if m: ast.handleUnsetFlag(statements, fn, lineno, m) return raise ParseError("unparsed line: '%s'" % s, fn, lineno)
def include(oldfn, fn, lineno, data, error_out): """ error_out: A string indicating the verb (e.g. "include", "inherit") to be used in a ParseError that will be raised if the file to be included could not be included. Specify False to avoid raising an error in this case. """ if oldfn == fn: # prevent infinite recursion return None import bb fn = data.expand(fn) oldfn = data.expand(oldfn) if not os.path.isabs(fn): dname = os.path.dirname(oldfn) bbpath = "%s:%s" % (dname, data.getVar("BBPATH", True)) abs_fn = bb.utils.which(bbpath, fn) if abs_fn: fn = abs_fn from bb.parse import handle try: ret = handle(fn, data, True) except IOError: if error_out: raise ParseError("Could not %(error_out)s file %(fn)s" % vars(), oldfn, lineno) logger.debug(2, "CONF file '%s' not found", fn)
def include(oldfn, fn, data, error_out): """ error_out If True a ParseError will be reaised if the to be included """ if oldfn == fn: # prevent infinate recursion return None import bb fn = bb.data.expand(fn, data) oldfn = bb.data.expand(oldfn, data) if not os.path.isabs(fn): dname = os.path.dirname(oldfn) bbpath = "%s:%s" % (dname, bb.data.getVar("BBPATH", data, 1)) abs_fn = bb.which(bbpath, fn) if abs_fn: fn = abs_fn from bb.parse import handle try: ret = handle(fn, data, True) except IOError: if error_out: raise ParseError("Could not %(error_out)s file %(fn)s" % vars()) bb.msg.debug(2, bb.msg.domain.Parsing, "CONF file '%s' not found" % fn)
def include(parentfn, fn, lineno, data, error_out): """ error_out: A string indicating the verb (e.g. "include", "inherit") to be used in a ParseError that will be raised if the file to be included could not be included. Specify False to avoid raising an error in this case. """ if parentfn == fn: # prevent infinite recursion return None fn = data.expand(fn) parentfn = data.expand(parentfn) if not os.path.isabs(fn): dname = os.path.dirname(parentfn) bbpath = "%s:%s" % (dname, data.getVar("BBPATH", True)) abs_fn, attempts = bb.utils.which(bbpath, fn, history=True) if abs_fn and bb.parse.check_dependency(data, abs_fn): logger.warn("Duplicate inclusion for %s in %s" % (abs_fn, data.getVar('FILE', True))) for af in attempts: bb.parse.mark_dependency(data, af) if abs_fn: fn = abs_fn elif bb.parse.check_dependency(data, fn): logger.warn("Duplicate inclusion for %s in %s" % (fn, data.getVar('FILE', True))) try: ret = bb.parse.handle(fn, data, True) except (IOError, OSError): if error_out: raise ParseError("Could not %(error_out)s file %(fn)s" % vars(), parentfn, lineno) logger.debug(2, "CONF file '%s' not found", fn) bb.parse.mark_dependency(data, fn)
def feeder(lineno, s, fn, data): def getFunc(groupd, key, data): if 'flag' in groupd and groupd['flag'] != None: return bb.data.getVarFlag(key, groupd['flag'], data) else: return bb.data.getVar(key, data) m = __config_regexp__.match(s) if m: groupd = m.groupdict() key = groupd["var"] if "exp" in groupd and groupd["exp"] != None: bb.data.setVarFlag(key, "export", 1, data) if "ques" in groupd and groupd["ques"] != None: val = getFunc(groupd, key, data) if val == None: val = groupd["value"] elif "colon" in groupd and groupd["colon"] != None: e = data.createCopy() bb.data.update_data(e) val = bb.data.expand(groupd["value"], e) elif "append" in groupd and groupd["append"] != None: val = "%s %s" % ((getFunc(groupd, key, data) or ""), groupd["value"]) elif "prepend" in groupd and groupd["prepend"] != None: val = "%s %s" % (groupd["value"], (getFunc(groupd, key, data) or "")) elif "postdot" in groupd and groupd["postdot"] != None: val = "%s%s" % ((getFunc(groupd, key, data) or ""), groupd["value"]) elif "predot" in groupd and groupd["predot"] != None: val = "%s%s" % (groupd["value"], (getFunc(groupd, key, data) or "")) else: val = groupd["value"] if 'flag' in groupd and groupd['flag'] != None: bb.msg.debug(3, bb.msg.domain.Parsing, "setVarFlag(%s, %s, %s, data)" % (key, groupd['flag'], val)) bb.data.setVarFlag(key, groupd['flag'], val, data) else: bb.data.setVar(key, val, data) return m = __include_regexp__.match(s) if m: s = bb.data.expand(m.group(1), data) bb.msg.debug(3, bb.msg.domain.Parsing, "CONF %s:%d: including %s" % (fn, lineno, s)) include(fn, s, data, False) return m = __require_regexp__.match(s) if m: s = bb.data.expand(m.group(1), data) include(fn, s, data, "include required") return m = __export_regexp__.match(s) if m: bb.data.setVarFlag(m.group(1), "export", 1, data) return raise ParseError("%s:%d: unparsed line: '%s'" % (fn, lineno, s));
def vars_from_file(mypkg, d): if not mypkg: return (None, None, None) if mypkg in __pkgsplit_cache__: return __pkgsplit_cache__[mypkg] myfile = os.path.splitext(os.path.basename(mypkg)) parts = myfile[0].split('_') __pkgsplit_cache__[mypkg] = parts if len(parts) > 3: raise ParseError("Unable to generate default variables from the filename: %s (too many underscores)" % mypkg) exp = 3 - len(parts) tmplist = [] while exp != 0: exp -= 1 tmplist.append(None) parts.extend(tmplist) return parts
def include(oldfn, fn, data, error_out): """ error_out If True a ParseError will be reaised if the to be included """ if oldfn == fn: # prevent infinate recursion return None import bb fn = bb.data.expand(fn, data) oldfn = bb.data.expand(oldfn, data) from bb.parse import handle try: ret = handle(fn, data, True) except IOError: if error_out: raise ParseError("Could not %(error_out)s file %(fn)s" % vars() ) bb.msg.debug(2, bb.msg.domain.Parsing, "CONF file '%s' not found" % fn)