def insert_method(modulename, code, fn): """ Add code of a module should be added. The methods will be simply added, no checking will be done """ comp = better_compile(code, modulename, fn ) better_exec(comp, None, code, fn)
def exec_func_python(func, d, runfile, logfile, cwd=None): """Execute a python BB 'function'""" bbfile = d.getVar('FILE', True) olddir = os.getcwd() code = _functionfmt.format(function=func, body=d.getVar(func, True)) bb.utils.mkdirhier(os.path.dirname(runfile)) with open(runfile, 'w') as script: script.write(code) if cwd: os.chdir(cwd) handler = logging.StreamHandler(logfile) handler.setFormatter(logformatter) bblogger.addHandler(handler) try: comp = utils.better_compile(code, func, bbfile) utils.better_exec(comp, {"d": d}, code, bbfile) except: if sys.exc_info()[0] in (bb.parse.SkipPackage, bb.build.FuncFailed): raise raise FuncFailed(func, None) finally: bblogger.removeHandler(handler) os.chdir(olddir)
def exec_func_python(func, d, runfile, cwd=None): """Execute a python BB 'function'""" bbfile = d.getVar("FILE", True) code = _functionfmt.format(function=func, body=d.getVar(func, True)) bb.utils.mkdirhier(os.path.dirname(runfile)) with open(runfile, "w") as script: script.write(code) if cwd: try: olddir = os.getcwd() except OSError: olddir = None os.chdir(cwd) try: comp = utils.better_compile(code, func, bbfile) utils.better_exec(comp, {"d": d}, code, bbfile) except: if sys.exc_info()[0] in (bb.parse.SkipPackage, bb.build.FuncFailed): raise raise FuncFailed(func, None) finally: if cwd and olddir: try: os.chdir(olddir) except OSError: pass
def exec_func_python(func, d, runfile, cwd=None): """Execute a python BB 'function'""" bbfile = d.getVar('FILE', True) code = _functionfmt.format(function=func, body=d.getVar(func, True)) bb.utils.mkdirhier(os.path.dirname(runfile)) with open(runfile, 'w') as script: bb.data.emit_func_python(func, script, d) if cwd: try: olddir = os.getcwd() except OSError: olddir = None os.chdir(cwd) bb.debug(2, "Executing python function %s" % func) try: comp = utils.better_compile(code, func, bbfile) utils.better_exec(comp, {"d": d}, code, bbfile) except (bb.parse.SkipRecipe, bb.build.FuncFailed): raise except: raise FuncFailed(func, None) finally: bb.debug(2, "Python function %s finished" % func) if cwd and olddir: try: os.chdir(olddir) except OSError: pass
def exec_func_python(func, d, runfile, cwd=None): """Execute a python BB 'function'""" bbfile = d.getVar('FILE', True) code = _functionfmt.format(function=func, body=d.getVar(func, True)) bb.utils.mkdirhier(os.path.dirname(runfile)) with open(runfile, 'w') as script: script.write(code) if cwd: try: olddir = os.getcwd() except OSError: olddir = None os.chdir(cwd) bb.debug(2, "Executing python function %s" % func) try: comp = utils.better_compile(code, func, bbfile) utils.better_exec(comp, {"d": d}, code, bbfile) except (bb.parse.SkipRecipe, bb.build.FuncFailed): raise except: raise FuncFailed(func, None) finally: bb.debug(2, "Python function %s finished" % func) if cwd and olddir: try: os.chdir(olddir) except OSError: pass
def exec_func_python(func, d, runfile, cwd=None): """Execute a python BB 'function'""" code = _functionfmt.format(function=func) bb.utils.mkdirhier(os.path.dirname(runfile)) with open(runfile, 'w') as script: bb.data.emit_func_python(func, script, d) if cwd: try: olddir = os.getcwd() except OSError as e: bb.warn("%s: Cannot get cwd: %s" % (func, e)) olddir = None os.chdir(cwd) bb.debug(2, "Executing python function %s" % func) try: text = "def %s(d):\n%s" % (func, d.getVar(func, False)) fn = d.getVarFlag(func, "filename", False) lineno = int(d.getVarFlag(func, "lineno", False)) bb.methodpool.insert_method(func, text, fn, lineno - 1) comp = utils.better_compile(code, func, "exec_python_func() autogenerated") utils.better_exec(comp, {"d": d}, code, "exec_python_func() autogenerated") finally: bb.debug(2, "Python function %s finished" % func) if cwd and olddir: try: os.chdir(olddir) except OSError as e: bb.warn("%s: Cannot restore cwd %s: %s" % (func, olddir, e))
def insert_method(modulename, code, fn, lineno): """ Add code of a module should be added. The methods will be simply added, no checking will be done """ comp = better_compile(code, modulename, fn, lineno=lineno) better_exec(comp, None, code, fn)
def exec_func_python(func, d, runfile, cwd=None): """Execute a python BB 'function'""" bbfile = d.getVar('FILE', True) code = _functionfmt.format(function=func, body=d.getVar(func, True)) bb.utils.mkdirhier(os.path.dirname(runfile)) with open(runfile, 'w') as script: script.write(code) if cwd: try: olddir = os.getcwd() except OSError: olddir = None os.chdir(cwd) try: comp = utils.better_compile(code, func, bbfile) utils.better_exec(comp, {"d": d}, code, bbfile) except: if sys.exc_info()[0] in (bb.parse.SkipPackage, bb.build.FuncFailed): raise raise FuncFailed(func, None) finally: if cwd and olddir: try: os.chdir(olddir) except OSError: pass
def exec_func_python(func, d): """Execute a python BB 'function'""" import re, os bbfile = bb.data.getVar('FILE', d, 1) tmp = "def " + func + "():\n%s" % data.getVar(func, d) tmp += '\n' + func + '()' comp = utils.better_compile(tmp, func, bbfile) prevdir = os.getcwd() g = {} # globals g['d'] = d utils.better_exec(comp, g, tmp, bbfile) if os.path.exists(prevdir): os.chdir(prevdir)
def insert_method(modulename, code, fn): """ Add code of a module should be added. The methods will be simply added, no checking will be done """ comp = better_compile(code, modulename, fn ) better_exec(comp, None, code, fn) # now some instrumentation code = comp.co_names for name in code: if name in ['None', 'False']: continue elif name in _parsed_fns and not _parsed_fns[name] == modulename: error( "Error Method already seen: %s in' %s' now in '%s'" % (name, _parsed_fns[name], modulename)) else: _parsed_fns[name] = modulename
def insert_method(modulename, code, fn): """ Add code of a module should be added. The methods will be simply added, no checking will be done """ comp = better_compile(code, "<bb>", fn ) better_exec(comp, __builtins__, code, fn) # now some instrumentation code = comp.co_names for name in code: if name in ['None', 'False']: continue elif name in _parsed_fns and not _parsed_fns[name] == modulename: error( "Error Method already seen: %s in' %s' now in '%s'" % (name, _parsed_fns[name], modulename)) else: _parsed_fns[name] = modulename
def insert_method(modulename, code, fn): """ Add code of a module should be added. The methods will be simply added, no checking will be done """ comp = better_compile(code, modulename, fn ) better_exec(comp, None, code, fn) # now some instrumentation code = comp.co_names for name in code: if name in ['None', 'False']: continue elif name in _parsed_fns and not _parsed_fns[name] == modulename: error("The function %s defined in %s was already declared in %s. BitBake has a global python function namespace so shared functions should be declared in a common include file rather than being duplicated, or if the functions are different, please use different function names." % (name, modulename, _parsed_fns[name])) else: _parsed_fns[name] = modulename
def insert_method(modulename, code, fn): """ Add code of a module should be added. The methods will be simply added, no checking will be done """ comp = better_compile(code, modulename, fn) better_exec(comp, None, code, fn) # now some instrumentation code = comp.co_names for name in code: if name in ['None', 'False']: continue elif name in _parsed_fns and not _parsed_fns[name] == modulename: error( "The function %s defined in %s was already declared in %s. BitBake has a global python function namespace so shared functions should be declared in a common include file rather than being duplicated, or if the functions are different, please use different function names." % (name, modulename, _parsed_fns[name])) else: _parsed_fns[name] = modulename
def exec_func_python(func, d, runfile, cwd=None, pythonexception=False): """Execute a python BB 'function'""" code = _functionfmt.format(function=func) bb.utils.mkdirhier(os.path.dirname(runfile)) with open(runfile, 'w') as script: bb.data.emit_func_python(func, script, d) if cwd: try: olddir = os.getcwd() except OSError: olddir = None os.chdir(cwd) bb.debug(2, "Executing python function %s" % func) try: text = "def %s(d):\n%s" % (func, d.getVar(func, False)) fn = d.getVarFlag(func, "filename", False) lineno = int(d.getVarFlag(func, "lineno", False)) bb.methodpool.insert_method(func, text, fn, lineno - 1) comp = utils.better_compile(code, func, "exec_python_func() autogenerated") utils.better_exec(comp, {"d": d}, code, "exec_python_func() autogenerated", pythonexception=pythonexception) except (bb.parse.SkipRecipe, bb.build.FuncFailed): raise except: if pythonexception: raise raise FuncFailed(func, None) finally: bb.debug(2, "Python function %s finished" % func) if cwd and olddir: try: os.chdir(olddir) except OSError: pass
def exec_func_python(func, d, runfile, logfile): """Execute a python BB 'function'""" import re, os bbfile = bb.data.getVar('FILE', d, 1) tmp = "def " + func + "(d):\n%s" % data.getVar(func, d) tmp += '\n' + func + '(d)' f = open(runfile, "w") f.write(tmp) comp = utils.better_compile(tmp, func, bbfile) try: utils.better_exec(comp, {"d": d}, tmp, bbfile) except: (t, value, tb) = sys.exc_info() if t in [bb.parse.SkipPackage, bb.build.FuncFailed]: raise bb.msg.error(bb.msg.domain.Build, "Function %s failed" % func) raise FuncFailed("function %s failed" % func, logfile)
def exec_func_python(func, d, runfile, logfile): """Execute a python BB 'function'""" import re, os bbfile = bb.data.getVar('FILE', d, 1) tmp = "def " + func + "(d):\n%s" % data.getVar(func, d) tmp += '\n' + func + '(d)' f = open(runfile, "w") f.write(tmp) comp = utils.better_compile(tmp, func, bbfile) try: utils.better_exec(comp, {"d": d}, tmp, bbfile) except: (t,value,tb) = sys.exc_info() if t in [bb.parse.SkipPackage, bb.build.FuncFailed]: raise bb.msg.error(bb.msg.domain.Build, "Function %s failed" % func) raise FuncFailed("function %s failed" % func, logfile)
def exec_func_python(func, d, runfile, cwd=None, pythonexception=False): """Execute a python BB 'function'""" code = _functionfmt.format(function=func) bb.utils.mkdirhier(os.path.dirname(runfile)) with open(runfile, 'w') as script: bb.data.emit_func_python(func, script, d) if cwd: try: olddir = os.getcwd() except OSError as e: bb.warn("%s: Cannot get cwd: %s" % (func, e)) olddir = None os.chdir(cwd) bb.debug(2, "Executing python function %s" % func) try: text = "def %s(d):\n%s" % (func, d.getVar(func, False)) fn = d.getVarFlag(func, "filename", False) lineno = int(d.getVarFlag(func, "lineno", False)) bb.methodpool.insert_method(func, text, fn, lineno - 1) comp = utils.better_compile(code, func, "exec_python_func() autogenerated") utils.better_exec(comp, {"d": d}, code, "exec_python_func() autogenerated", pythonexception=pythonexception) except (bb.parse.SkipRecipe, bb.build.FuncFailed): raise except Exception as e: if pythonexception: raise logger.error(str(e)) raise FuncFailed(func, None) finally: bb.debug(2, "Python function %s finished" % func) if cwd and olddir: try: os.chdir(olddir) except OSError as e: bb.warn("%s: Cannot restore cwd %s: %s" % (func, olddir, e))
def exec_func_python(func, d, runfile, cwd=None): """Execute a python BB 'function'""" code = _functionfmt.format(function=func) bb.utils.mkdirhier(os.path.dirname(runfile)) with open(runfile, 'w') as script: bb.data.emit_func_python(func, script, d) if cwd: try: olddir = os.getcwd() except OSError as e: bb.warn("%s: Cannot get cwd: %s" % (func, e)) olddir = None os.chdir(cwd) bb.debug(2, "Executing python function %s" % func) try: text = "def %s(d):\n%s" % (func, d.getVar(func, False)) fn = d.getVarFlag(func, "filename", False) lineno = int(d.getVarFlag(func, "lineno", False)) bb.methodpool.insert_method(func, text, fn, lineno - 1) comp = utils.better_compile(code, func, "exec_func_python() autogenerated") utils.better_exec(comp, {"d": d}, code, "exec_func_python() autogenerated") finally: # We want any stdout/stderr to be printed before any other log messages to make debugging # more accurate. In some cases we seem to lose stdout/stderr entirely in logging tests without this. sys.stdout.flush() sys.stderr.flush() bb.debug(2, "Python function %s finished" % func) if cwd and olddir: try: os.chdir(olddir) except OSError as e: bb.warn("%s: Cannot restore cwd %s: %s" % (func, olddir, e))