From b6bfe1420517aa5aa190e17dca40ea70f09effd9 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 16 Aug 2010 16:37:29 +0100 Subject: bitbake: Switch to use subprocess for forking tasks and FAKEROOTENV to run shell and python under a fakeroot environment Signed-off-by: Richard Purdie --- bitbake/bin/bitbake-runtask | 77 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100755 bitbake/bin/bitbake-runtask (limited to 'bitbake/bin/bitbake-runtask') diff --git a/bitbake/bin/bitbake-runtask b/bitbake/bin/bitbake-runtask new file mode 100755 index 000000000..417f3949c --- /dev/null +++ b/bitbake/bin/bitbake-runtask @@ -0,0 +1,77 @@ +#!/usr/bin/env python + +import os +import sys +import warnings +sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(sys.argv[0])), 'lib')) + +class BBConfiguration(object): + """ + Manages build options and configurations for one run + """ + + def __init__(self): + setattr(self, "data", {}) + setattr(self, "file", []) + setattr(self, "cmd", None) + +_warnings_showwarning = warnings.showwarning +def _showwarning(message, category, filename, lineno, file=None, line=None): + """Display python warning messages using bb.msg""" + if file is not None: + if _warnings_showwarning is not None: + _warnings_showwarning(message, category, filename, lineno, file, line) + else: + s = warnings.formatwarning(message, category, filename, lineno) + s = s.split("\n")[0] + bb.msg.warn(None, s) + +warnings.showwarning = _showwarning +warnings.simplefilter("ignore", DeprecationWarning) + +import bb.event + +# Need to map our I/O correctly. Currently stdout is a pipe to +# the server expecting events. We save this and map stdout to stderr. + +eventfd = os.dup(sys.stdout.fileno()) +bb.event.worker_pipe = os.fdopen(eventfd, 'w', 0) +# Replace those fds with our own +os.dup2(sys.stderr.fileno(), sys.stdout.fileno()) + +# Save out the PID so that the event can include it the +# events +bb.event.worker_pid = os.getpid() +bb.event.usestdout = False + + +import bb.cooker + +cooker = bb.cooker.BBCooker(BBConfiguration(), None) +buildfile = sys.argv[1] +taskname = sys.argv[2] + +cooker.parseConfiguration() + +cooker.bb_cache = bb.cache.init(cooker) +cooker.status = bb.cache.CacheData() + +(fn, cls) = cooker.bb_cache.virtualfn2realfn(buildfile) +buildfile = cooker.matchFile(fn) +fn = cooker.bb_cache.realfn2virtual(buildfile, cls) + +cooker.buildSetVars() + +# Load data into the cache for fn and parse the loaded cache data +the_data = cooker.bb_cache.loadDataFull(fn, cooker.get_file_appends(fn), cooker.configuration.data) +cooker.bb_cache.setData(fn, buildfile, the_data) +cooker.bb_cache.handle_data(fn, cooker.status) + +if taskname.endswith("_setscene"): + the_data.setVarFlag(taskname, "quieterrors", "1") + +ret = 0 +if sys.argv[3] != "True": + ret = bb.build.exec_task(taskname, the_data) +sys.exit(ret) + -- cgit v1.2.3