# # isafw.py - Main classes for ISA FW # # Copyright (c) 2015 - 2016, Intel Corporation # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of Intel Corporation nor the names of its contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. from __future__ import absolute_import, print_function import sys import traceback try: # absolute import import isafw.isaplugins as isaplugins except ImportError: # relative import when installing as separate modules import isaplugins try: from bb import error except ImportError: error = print __all__ = [ 'ISA_package', 'ISA_pkg_list', 'ISA_kernel', 'ISA_filesystem', 'ISA_config', 'ISA', ] # classes for representing objects for ISA plugins # source package class ISA_package: # pkg name (mandatory argument) name = "" # full version (mandatory argument) version = "" licenses = [] # list of licences for all subpackages aliases = [] # list of alias names for packages if exist source_files = [] # list of strings of source files patch_files = [] # list of patch files to be applied path_to_sources = "" # path to the source files # package list class ISA_pkg_list: # image name (mandatory argument) img_name = "" # path to the pkg list file (mandatory argument) path_to_list = "" # kernel class ISA_kernel: # image name (mandatory argument) img_name = "" # path to the kernel config file (mandatory argument) path_to_config = "" # filesystem class ISA_filesystem: # image name (mandatory argument) img_name = "" type = "" # filesystem type # path to the fs location (mandatory argument) path_to_fs = "" # configuration of ISAFW # if both whitelist and blacklist is empty, all avaliable plugins will be used # if whitelist has entries, then only whitelisted plugins will be used from a set of avaliable plugins # if blacklist has entries, then the specified plugins won't be used even # if avaliable and even if specified in whitelist class ISA_config: plugin_whitelist = "" # comma separated list of plugins to whitelist plugin_blacklist = "" # comma separated list of plugins to blacklist cacert = None # If set, a CA certificate file that replaces the system default one reportdir = "" # location of produced reports logdir = "" # location of produced logs timestamp = "" # timestamp of the build provided by build system full_reports = False # produce full reports for plugins, False by default machine = "" # name of machine build is produced for la_plugin_image_whitelist = ""# whitelist of images for violating license checks la_plugin_image_blacklist = ""# blacklist of images for violating license checks arch = "" # target architecture class ISA: def call_plugins(self, methodname, *parameters, **keywords): for name in isaplugins.__all__: plugin = getattr(isaplugins, name) method = getattr(plugin, methodname, None) if not method: # Not having init() is an error, everything else is optional. if methodname == "init": error("No init() defined for plugin %s.\n" "Skipping this plugin." % (methodname, plugin.getPluginName())) continue if self.ISA_config.plugin_whitelist and plugin.getPluginName() not in self.ISA_config.plugin_whitelist: continue if self.ISA_config.plugin_blacklist and plugin.getPluginName() in self.ISA_config.plugin_blacklist: continue try: method(*parameters, **keywords) except: error("Exception in plugin %s %s():\n%s" % (plugin.getPluginName(), methodname, traceback.format_exc())) def __init__(self, ISA_config): self.ISA_config = ISA_config self.call_plugins("init", ISA_config) def process_package(self, ISA_package): self.call_plugins("process_package", ISA_package) def process_pkg_list(self, ISA_pkg_list): self.call_plugins("process_pkg_list", ISA_pkg_list) def process_kernel(self, ISA_kernel): self.call_plugins("process_kernel", ISA_kernel) def process_filesystem(self, ISA_filesystem): self.call_plugins("process_filesystem", ISA_filesystem) def process_report(self): self.call_plugins("process_report")