diff options
Diffstat (limited to 'yocto-poky/bitbake/lib/bb/tinfoil.py')
-rw-r--r-- | yocto-poky/bitbake/lib/bb/tinfoil.py | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/yocto-poky/bitbake/lib/bb/tinfoil.py b/yocto-poky/bitbake/lib/bb/tinfoil.py new file mode 100644 index 0000000000..1ea46d8eec --- /dev/null +++ b/yocto-poky/bitbake/lib/bb/tinfoil.py @@ -0,0 +1,104 @@ +# tinfoil: a simple wrapper around cooker for bitbake-based command-line utilities +# +# Copyright (C) 2012 Intel Corporation +# Copyright (C) 2011 Mentor Graphics Corporation +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +import logging +import warnings +import os +import sys + +import bb.cache +import bb.cooker +import bb.providers +import bb.utils +from bb.cooker import state, BBCooker, CookerFeatures +from bb.cookerdata import CookerConfiguration, ConfigParameters +import bb.fetch2 + +class Tinfoil: + def __init__(self, output=sys.stdout, tracking=False): + # Needed to avoid deprecation warnings with python 2.6 + warnings.filterwarnings("ignore", category=DeprecationWarning) + + # Set up logging + self.logger = logging.getLogger('BitBake') + console = logging.StreamHandler(output) + bb.msg.addDefaultlogFilter(console) + format = bb.msg.BBLogFormatter("%(levelname)s: %(message)s") + if output.isatty(): + format.enable_color() + console.setFormatter(format) + self.logger.addHandler(console) + + self.config = CookerConfiguration() + configparams = TinfoilConfigParameters(parse_only=True) + self.config.setConfigParameters(configparams) + self.config.setServerRegIdleCallback(self.register_idle_function) + features = [] + if tracking: + features.append(CookerFeatures.BASEDATASTORE_TRACKING) + self.cooker = BBCooker(self.config, features) + self.config_data = self.cooker.data + bb.providers.logger.setLevel(logging.ERROR) + self.cooker_data = None + + def register_idle_function(self, function, data): + pass + + def parseRecipes(self): + sys.stderr.write("Parsing recipes..") + self.logger.setLevel(logging.WARNING) + + try: + while self.cooker.state in (state.initial, state.parsing): + self.cooker.updateCache() + except KeyboardInterrupt: + self.cooker.shutdown() + self.cooker.updateCache() + sys.exit(2) + + self.logger.setLevel(logging.INFO) + sys.stderr.write("done.\n") + + self.cooker_data = self.cooker.recipecache + + def prepare(self, config_only = False): + if not self.cooker_data: + if config_only: + self.cooker.parseConfiguration() + self.cooker_data = self.cooker.recipecache + else: + self.parseRecipes() + + def shutdown(self): + self.cooker.shutdown(force=True) + self.cooker.post_serve() + self.cooker.unlockBitbake() + +class TinfoilConfigParameters(ConfigParameters): + + def __init__(self, **options): + self.initial_options = options + super(TinfoilConfigParameters, self).__init__() + + def parseCommandLine(self, argv=sys.argv): + class DummyOptions: + def __init__(self, initial_options): + for key, val in initial_options.items(): + setattr(self, key, val) + + return DummyOptions(self.initial_options), None |