# 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 import bb.fetch2 class Tinfoil: def __init__(self): # 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(sys.stdout) format = bb.msg.BBLogFormatter("%(levelname)s: %(message)s") console.setFormatter(format) self.logger.addHandler(console) initialenv = os.environ.copy() bb.utils.clean_environment() self.config = TinfoilConfig(parse_only=True) self.cooker = bb.cooker.BBCooker(self.config, self.register_idle_function) self.config_data = self.cooker.configuration.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.status def prepare(self, config_only = False): if not self.cooker_data: if config_only: self.cooker.parseConfiguration() self.cooker_data = self.cooker.status else: self.parseRecipes() class TinfoilConfig(object): def __init__(self, **options): self.pkgs_to_build = [] self.debug_domains = [] self.extra_assume_provided = [] self.file = [] self.debug = 0 self.__dict__.update(options) def __getattr__(self, attribute): try: return super(TinfoilConfig, self).__getattribute__(attribute) except AttributeError: return None