File indexing completed on 2024-05-12 03:53:40
0001 # -*- coding: utf-8 -*- 0002 # 0003 # SPDX-FileCopyrightText: 2014 Aurélien Gâteau <agateau@kde.org> 0004 # 0005 # SPDX-License-Identifier: BSD-2-Clause 0006 0007 from functools import reduce 0008 0009 class Framework(object): 0010 """ 0011 A framework has a tier, a name, a collection of targets it provides. 0012 For each target it provides, it knows which targets they depend on. 0013 0014 It also has a list of frameworks it depends on, for framework-to-framework 0015 dependencies. This is useful for cases when a framework depends on macros 0016 provided by another framework. 0017 """ 0018 def __init__(self, tier, name): 0019 self.tier = tier 0020 self.name = name 0021 0022 # A dict of target => set([targets]) 0023 self._target_dict = {} 0024 0025 # A list of other frameworks (not targets!) this framework depends on. 0026 self._fw_list = [] 0027 0028 def add_target(self, target): 0029 # Add a new target provided by this framework 0030 assert target not in self._target_dict 0031 self._target_dict[target] = set() 0032 0033 def add_target_dependency(self, target, dep): 0034 # Add a new dependency target to a target provided by this framework 0035 assert target in self._target_dict 0036 self._target_dict[target].add(dep) 0037 0038 def get_targets(self): 0039 return self._target_dict.keys() 0040 0041 def has_target(self, target): 0042 return target in self._target_dict 0043 0044 def get_all_target_dependencies(self): 0045 deps = self._target_dict.values() 0046 if not deps: 0047 return set() 0048 return reduce(lambda x,y: x.union(y), deps) 0049 0050 def get_dependencies_for_target(self, target): 0051 return self._target_dict[target] 0052 0053 def add_extra_framework(self, name): 0054 # Add a framework this framework depends on because of a 0055 # framework-to-framework dependency 0056 self._fw_list.append(name) 0057 0058 def get_extra_frameworks(self): 0059 # Returns frameworks this framework depends on because of a 0060 # framework-to-framework dependency 0061 return self._fw_list 0062 0063 def __repr__(self): 0064 return self.name