+ # NOTE: this method does nothing (for now).
+ preset_path = os.path.join(self.infos["SOURCES_PATH"], const.PREDEFINED_BOARDS_DIR)
+ preset_tree = {}
+ if os.path.exists(preset_path):
+ preset_tree = self._loadProjectPresetTree(preset_path)
+ self.infos["PRESET_TREE"] = preset_tree
+
+ def _loadProjectPresetTree(self, path):
+ _tree = {}
+ _tree['info'] = self._loadPresetInfo(os.path.join(path, const.PREDEFINED_BOARD_SPEC_FILE))
+ _tree['info']['filename'] = os.path.basename(path)
+ _tree['info']['path'] = path
+ _tree['children'] = []
+ entries = set(os.listdir(path))
+ for entry in entries:
+ _path = os.path.join(path, entry)
+ if os.path.isdir(_path):
+ sub_entries = set(os.listdir(_path))
+ if const.PREDEFINED_BOARD_SPEC_FILE in sub_entries:
+ _tree['children'].append(self._loadProjectPresetTree(_path))
+ # Add into the info dict the dir type (dir/project)
+ if _tree['children']:
+ _tree['info']['type'] = 'dir'
+ else:
+ _tree['info']['type'] = 'project'
+ return _tree
+
+ def _loadPresetInfo(self, preset_spec_file):
+ D = {}
+ execfile(preset_spec_file, {}, D)
+ return D
+
+ def loadModuleData(self, edit=False):
+ module_info_dict = {}
+ list_info_dict = {}
+ configuration_info_dict = {}
+ file_dict = {}
+ for filename, path in self.findDefinitions("*.h") + self.findDefinitions("*.c") + self.findDefinitions("*.s") + self.findDefinitions("*.S"):
+ comment_list = getCommentList(open(path + "/" + filename, "r").read())
+ if len(comment_list) > 0:
+ module_info = {}
+ configuration_info = {}
+ try:
+ to_be_parsed, module_dict = loadModuleDefinition(comment_list[0])
+ except ParseError, err:
+ raise DefineException.ModuleDefineException(path, err.line_number, err.line)
+ for module, information in module_dict.items():
+ if "depends" not in information:
+ information["depends"] = ()
+ information["depends"] += (filename.split(".")[0],)
+ information["category"] = os.path.basename(path)
+ if "configuration" in information and len(information["configuration"]):
+ configuration = module_dict[module]["configuration"]
+ try:
+ configuration_info[configuration] = loadConfigurationInfos(self.infos["SOURCES_PATH"] + "/" + configuration)
+ except ParseError, err:
+ raise DefineException.ConfigurationDefineException(self.infos["SOURCES_PATH"] + "/" + configuration, err.line_number, err.line)
+ if edit:
+ try:
+ path = self.infos["PROJECT_NAME"]
+ directory = self.infos["PROJECT_PATH"]
+ user_configuration = loadConfigurationInfos(directory + "/" + configuration.replace("bertos", path))
+ configuration_info[configuration] = updateConfigurationValues(configuration_info[configuration], user_configuration)
+ except ParseError, err:
+ raise DefineException.ConfigurationDefineException(directory + "/" + configuration.replace("bertos", path))
+ module_info_dict.update(module_dict)
+ configuration_info_dict.update(configuration_info)
+ if to_be_parsed:
+ try:
+ list_dict = loadDefineLists(comment_list[1:])
+ list_info_dict.update(list_dict)
+ except ParseError, err:
+ raise DefineException.EnumDefineException(path, err.line_number, err.line)
+ for tag in self.infos["CPU_INFOS"]["CPU_TAGS"]:
+ for filename, path in self.findDefinitions("*_" + tag + ".h"):
+ comment_list = getCommentList(open(path + "/" + filename, "r").read())
+ list_info_dict.update(loadDefineLists(comment_list))
+ self.infos["MODULES"] = module_info_dict
+ self.infos["LISTS"] = list_info_dict
+ self.infos["CONFIGURATIONS"] = configuration_info_dict
+ self.infos["FILES"] = file_dict