From e5652672a648b1a8b77e497f1dfc7239c382811f Mon Sep 17 00:00:00 2001 From: duplo Date: Wed, 31 Mar 2010 12:13:24 +0000 Subject: [PATCH] Change loadModuleData function to be a BProject method. git-svn-id: https://src.develer.com/svnoss/bertos/trunk@3346 38d2e660-2303-0410-9eaa-f027e97ec537 --- wizard/BEditingDialog.py | 2 +- wizard/BModulePage.py | 2 +- wizard/BProject.py | 68 ++++++++++++++++++++++++++++++++++++++-- wizard/bertos_utils.py | 53 ------------------------------- 4 files changed, 68 insertions(+), 57 deletions(-) diff --git a/wizard/BEditingDialog.py b/wizard/BEditingDialog.py index 622c795b..db2fcf11 100644 --- a/wizard/BEditingDialog.py +++ b/wizard/BEditingDialog.py @@ -135,7 +135,7 @@ class BEditingDialog(QDialog): enabled_modules = bertos_utils.enabledModules(dialog.version_page.project()) old_configuration = dialog.version_page.projectInfo("CONFIGURATIONS") dialog.version_page.project().loadSourceTree() - bertos_utils.loadModuleData(dialog.version_page.project()) + qApp.project.loadModuleData(dialog.version_page.project()) new_configuration = dialog.version_page.projectInfo("CONFIGURATIONS") merged_configuration = {} for conf in new_configuration: diff --git a/wizard/BModulePage.py b/wizard/BModulePage.py index 3d7fa2fc..88bfa2d7 100644 --- a/wizard/BModulePage.py +++ b/wizard/BModulePage.py @@ -224,7 +224,7 @@ class BModulePage(BWizardPage): and not self.projectInfo("LISTS") \ and not self.projectInfo("CONFIGURATIONS"): try: - bertos_utils.loadModuleData(self.project()) + self.project().loadModuleData(self.project()) except ModuleDefineException, e: self.exceptionOccurred(self.tr("Error parsing line '%2' in file %1").arg(e.path).arg(e.line)) except EnumDefineException, e: diff --git a/wizard/BProject.py b/wizard/BProject.py index 5e4a6bda..2eb1bdcf 100644 --- a/wizard/BProject.py +++ b/wizard/BProject.py @@ -38,7 +38,17 @@ import fnmatch import copy import pickle -from bertos_utils import isBertosDir, loadCpuInfos, getTagSet, loadModuleData, setEnabledModules +import DefineException + +from bertos_utils import ( + # Utility functions + isBertosDir, loadCpuInfos, getTagSet, setEnabledModules, + loadConfigurationInfos, loadDefineLists, loadModuleDefinition, + getCommentList, updateConfigurationValues, + + # Custom exceptions + ParseError, SupportedException + ) class BProject(object): """ @@ -99,9 +109,63 @@ class BProject(object): raise ToolchainException(self) self.infos["SELECTED_FREQ"] = project_data["SELECTED_FREQ"] self.infos["OUTPUT"] = project_data["OUTPUT"] - loadModuleData(self, True) + self.loadModuleData(True) setEnabledModules(self, project_data["ENABLED_MODULES"]) + 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 filename, path in self.findDefinitions("*_" + self.infos["CPU_INFOS"]["TOOLCHAIN"] + ".h"): + comment_list = getCommentList(open(path + "/" + filename, "r").read()) + list_info_dict.update(loadDefineLists(comment_list)) + 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 + + def setInfo(self, key, value): """ Store the given value with the name key. diff --git a/wizard/bertos_utils.py b/wizard/bertos_utils.py index 84a88257..c33e9c8a 100644 --- a/wizard/bertos_utils.py +++ b/wizard/bertos_utils.py @@ -578,59 +578,6 @@ def getDefinitionBlocks(text): block.append(([comment], define, start)) return block -def loadModuleData(project_info, edit=False): - module_info_dict = {} - list_info_dict = {} - configuration_info_dict = {} - file_dict = {} - for filename, path in project_info.findDefinitions("*.h") + project_info.findDefinitions("*.c") + project_info.findDefinitions("*.s") + project_info.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(project_info.info("SOURCES_PATH") + "/" + configuration) - except ParseError, err: - raise DefineException.ConfigurationDefineException(project_info.info("SOURCES_PATH") + "/" + configuration, err.line_number, err.line) - if edit: - try: - path = project_info.info("PROJECT_NAME") - directory = project_info.info("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 filename, path in project_info.findDefinitions("*_" + project_info.info("CPU_INFOS")["TOOLCHAIN"] + ".h"): - comment_list = getCommentList(open(path + "/" + filename, "r").read()) - list_info_dict.update(loadDefineLists(comment_list)) - for tag in project_info.info("CPU_INFOS")["CPU_TAGS"]: - for filename, path in project_info.findDefinitions("*_" + tag + ".h"): - comment_list = getCommentList(open(path + "/" + filename, "r").read()) - list_info_dict.update(loadDefineLists(comment_list)) - project_info.setInfo("MODULES", module_info_dict) - project_info.setInfo("LISTS", list_info_dict) - project_info.setInfo("CONFIGURATIONS", configuration_info_dict) - project_info.setInfo("FILES", file_dict) - def formatParamNameValue(text): """ Take the given string and return a tuple with the name of the parameter in the first position -- 2.25.1