def exec_func_shell(function, d, runfile, logfile, cwd=None, fakeroot=False): """Execute a shell function from the metadata Note on directory behavior. The 'dirs' varflag should contain a list of the directories you need created prior to execution. The last item in the list is where we will chdir/cd to. """ with open(runfile, 'w') as script: script.write('#!/bin/sh -e\n') if logger.getEffectiveLevel() <= logging.DEBUG: script.write("set -x\n") data.emit_env(script, d) script.write("%s\n" % function) os.fchmod(script.fileno(), 0775) env = { 'PATH': d.getVar('PATH', True), 'LANG': 'C', } if fakeroot: cmd = ['fakeroot', runfile] else: cmd = runfile try: bb.process.run(cmd, env=env, cwd=cwd, shell=False, stdin=NULL, log=logfile) except bb.process.CmdError: raise FuncFailed(function, logfile.name)
def exec_func_shell(func, d): """Execute a shell BB 'function' Returns true if execution was successful. For this, it creates a bash shell script in the tmp dectory, writes the local data into it and finally executes. The output of the shell will end in a log file and stdout. Note on directory behavior. The 'dirs' varflag should contain a list of the directories you need created prior to execution. The last item in the list is where we will chdir/cd to. """ import sys deps = data.getVarFlag(func, 'deps', d) check = data.getVarFlag(func, 'check', d) interact = data.getVarFlag(func, 'interactive', d) if check in globals(): if globals()[check](func, deps): return global logfile t = data.getVar('T', d, 1) if not t: return 0 mkdirhier(t) logfile = "%s/log.%s.%s" % (t, func, str(os.getpid())) runfile = "%s/run.%s.%s" % (t, func, str(os.getpid())) f = open(runfile, "w") f.write("#!/bin/sh -e\n") if bb.msg.debug_level['default'] > 0: f.write("set -x\n") data.emit_env(f, d) f.write("cd %s\n" % os.getcwd()) if func: f.write("%s\n" % func) f.close() os.chmod(runfile, 0775) if not func: bb.msg.error(bb.msg.domain.Build, "Function not specified") raise FuncFailed() # open logs si = file('/dev/null', 'r') try: if bb.msg.debug_level['default'] > 0: so = os.popen("tee \"%s\"" % logfile, "w") else: so = file(logfile, 'w') except OSError, e: bb.msg.error(bb.msg.domain.Build, "opening log file: %s" % e) pass
def exec_func_shell(func, d, flags): """Execute a shell BB 'function' Returns true if execution was successful. For this, it creates a bash shell script in the tmp dectory, writes the local data into it and finally executes. The output of the shell will end in a log file and stdout. Note on directory behavior. The 'dirs' varflag should contain a list of the directories you need created prior to execution. The last item in the list is where we will chdir/cd to. """ import sys deps = flags['deps'] check = flags['check'] interact = flags['interactive'] if check in globals(): if globals()[check](func, deps): return global logfile t = data.getVar('T', d, 1) if not t: return 0 mkdirhier(t) logfile = "%s/log.%s.%s" % (t, func, str(os.getpid())) runfile = "%s/run.%s.%s" % (t, func, str(os.getpid())) f = open(runfile, "w") f.write("#!/bin/sh -e\n") if bb.msg.debug_level['default'] > 0: f.write("set -x\n") data.emit_env(f, d) f.write("cd %s\n" % os.getcwd()) if func: f.write("%s\n" % func) f.close() os.chmod(runfile, 0775) if not func: bb.msg.error(bb.msg.domain.Build, "Function not specified") raise FuncFailed() # open logs si = file('/dev/null', 'r') try: if bb.msg.debug_level['default'] > 0: so = os.popen("tee \"%s\"" % logfile, "w") else: so = file(logfile, 'w') except OSError, e: bb.msg.error(bb.msg.domain.Build, "opening log file: %s" % e) pass
def exec_func_shell(func, d, runfile, logfile, flags): """Execute a shell BB 'function' Returns true if execution was successful. For this, it creates a bash shell script in the tmp dectory, writes the local data into it and finally executes. The output of the shell will end in a log file and stdout. Note on directory behavior. The 'dirs' varflag should contain a list of the directories you need created prior to execution. The last item in the list is where we will chdir/cd to. """ deps = flags['deps'] check = flags['check'] if check in globals(): if globals()[check](func, deps): return f = open(runfile, "w") f.write("#!/bin/sh -e\n") if bb.msg.debug_level['default'] > 0: f.write("set -x\n") data.emit_env(f, d) f.write("cd %s\n" % os.getcwd()) if func: f.write("%s\n" % func) f.close() os.chmod(runfile, 0775) if not func: bb.msg.error(bb.msg.domain.Build, "Function not specified") raise FuncFailed("Function not specified for exec_func_shell") # execute function if flags['fakeroot']: maybe_fakeroot = "PATH=\"%s\" fakeroot " % bb.data.getVar("PATH", d, 1) else: maybe_fakeroot = '' lang_environment = "LC_ALL=C " ret = os.system('%s%ssh -e %s' % (lang_environment, maybe_fakeroot, runfile)) if ret == 0: return bb.msg.error(bb.msg.domain.Build, "Function %s failed" % func) raise FuncFailed("function %s failed" % func, logfile)
except Exception, e: bb.msg.error(bb.msg.domain.Parsing, "%s" % e) raise class dummywrite: def __init__(self): self.writebuf = "" def write(self, output): self.writebuf = self.writebuf + output # emit variables and shell functions try: data.update_data(envdata) wb = dummywrite() data.emit_env(wb, envdata, True) bb.msg.plain(wb.writebuf) except Exception, e: bb.msg.fatal(bb.msg.domain.Parsing, "%s" % e) # emit the metadata which isnt valid shell data.expandKeys(envdata) for e in envdata.keys(): if data.getVarFlag(e, 'python', envdata): bb.msg.plain("\npython %s () {\n%s}\n" % (e, data.getVar(e, envdata, 1))) def generateDepTreeData(self, pkgs_to_build, task): """ Create a dependency tree of pkgs_to_build, returning the data. """
def environment( self, params ): """Dump out the outer BitBake environment (see bbread)""" data.emit_env(sys.__stdout__, make.cfg, True)
def environment( self, params ): """Dump out the outer BitBake environment (see bbread)""" data.emit_env(sys.__stdout__, cooker.configuration.data, True)
fn = taskdata.fn_index[fnid] else: envdata = self.configuration.data if fn: try: envdata = self.bb_cache.loadDataFull(fn, self.configuration.data) except IOError, e: bb.msg.fatal(bb.msg.domain.Parsing, "Unable to read %s: %s" % (fn, e)) except Exception, e: bb.msg.fatal(bb.msg.domain.Parsing, "%s" % e) # emit variables and shell functions try: data.update_data( envdata ) data.emit_env(sys.__stdout__, envdata, True) except Exception, e: bb.msg.fatal(bb.msg.domain.Parsing, "%s" % e) # emit the metadata which isnt valid shell data.expandKeys( envdata ) for e in envdata.keys(): if data.getVarFlag( e, 'python', envdata ): sys.__stdout__.write("\npython %s () {\n%s}\n" % (e, data.getVar(e, envdata, 1))) def generateDotGraph( self, pkgs_to_build, ignore_deps ): """ Generate a task dependency graph. pkgs_to_build A list of packages that needs to be built ignore_deps A list of names where processing of dependencies should be stopped. e.g. dependencies that get
raise except Exception, e: bb.msg.error(bb.msg.domain.Parsing, "%s" % e) raise class dummywrite: def __init__(self): self.writebuf = "" def write(self, output): self.writebuf = self.writebuf + output # emit variables and shell functions try: data.update_data(envdata) wb = dummywrite() data.emit_env(wb, envdata, True) bb.msg.plain(wb.writebuf) except Exception, e: bb.msg.fatal(bb.msg.domain.Parsing, "%s" % e) # emit the metadata which isnt valid shell data.expandKeys(envdata) for e in envdata.keys(): if data.getVarFlag( e, 'python', envdata ): bb.msg.plain("\npython %s () {\n%s}\n" % (e, data.getVar(e, envdata, 1))) def generateDepTreeData(self, pkgs_to_build, task): """ Create a dependency tree of pkgs_to_build, returning the data. """ # Need files parsed
def showEnvironment( self ): """Show the outer or per-package environment""" if self.configuration.buildfile: self.cb = None self.bb_cache = bb.cache.init(self) try: self.configuration.data = self.bb_cache.loadDataFull(self.configuration.buildfile, self.configuration.data) except IOError, e: bb.msg.fatal(bb.msg.domain.Parsing, "Unable to read %s: %s" % ( self.configuration.buildfile, e )) except Exception, e: bb.msg.fatal(bb.msg.domain.Parsing, "%s" % e) # emit variables and shell functions try: data.update_data( self.configuration.data ) data.emit_env(sys.__stdout__, self.configuration.data, True) except Exception, e: bb.msg.fatal(bb.msg.domain.Parsing, "%s" % e) # emit the metadata which isnt valid shell data.expandKeys( self.configuration.data ) for e in self.configuration.data.keys(): if data.getVarFlag( e, 'python', self.configuration.data ): sys.__stdout__.write("\npython %s () {\n%s}\n" % (e, data.getVar(e, self.configuration.data, 1))) def generateDotGraph( self, pkgs_to_build, ignore_deps ): """ Generate a task dependency graph. pkgs_to_build A list of packages that needs to be built ignore_deps A list of names where processing of dependencies should be stopped. e.g. dependencies that get