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.debug2("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 eval(self, data): """ Include the file and evaluate the statements """ s = data.expand(self.what_file) logger.debug2("CONF %s:%s: including %s", self.filename, self.lineno, s) # TODO: Cache those includes... maybe not here though if self.force: bb.parse.ConfHandler.include(self.filename, s, self.lineno, data, "include required") else: bb.parse.ConfHandler.include(self.filename, s, self.lineno, data, False)