X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=wizard%2FBProject.py;h=c2f6613a5f5fe0557ae8837f2bace3dc1f7e3e04;hb=c5e8d9f38c306b38703845124dc9c26fc13f8755;hp=0fc1b7f7f366d2f1da3186ead4e291c96dbd7a66;hpb=44987672fae5ddd002f48595a29ccdf2702a33d8;p=bertos.git diff --git a/wizard/BProject.py b/wizard/BProject.py index 0fc1b7f7..c2f6613a 100644 --- a/wizard/BProject.py +++ b/wizard/BProject.py @@ -53,7 +53,7 @@ from bertos_utils import ( getCommentList, sub, # Project creation functions - projectFileGenerator, versionFileGenerator, loadPlugin, + projectFileGenerator, versionFileGenerator, loadPlugin, mergeSources, # Custom exceptions @@ -89,7 +89,7 @@ class BProject(object): project_src_path = os.path.join(project_dir, project_data.get("PROJECT_SRC_PATH", project_data["PROJECT_NAME"])) if project_src_path: self.infos["PROJECT_SRC_PATH"] = project_src_path - + else: # In projects created with older versions of the Wizard this metadata doesn't exist self.infos["PROJECT_SRC_PATH"] = os.path.join(self.infos["PROJECT_PATH"], self.infos["PROJECT_NAME"]) @@ -98,9 +98,9 @@ class BProject(object): linked_sources_path = project_data["BERTOS_PATH"] sources_abspath = os.path.abspath(os.path.join(project_dir, linked_sources_path)) project_data["BERTOS_PATH"] = sources_abspath - + self._loadBertosSourceStuff(project_data["BERTOS_PATH"], info_dict.get("BERTOS_PATH", None)) - + self.infos["PRESET"] = project_data.get("PRESET", False) # For those projects that don't have a VERSION file create a dummy one. @@ -162,7 +162,6 @@ class BProject(object): project_data = pickle.loads(open(project_file, "r").read()) self.loadSourceTree() self._loadCpuStuff(project_data["CPU_NAME"], project_data["SELECTED_FREQ"]) - self._loadToolchainStuff(project_data["TOOLCHAIN"]) # NOTE: this is a HACK!!! # TODO: find a better way to reuse loadModuleData @@ -200,7 +199,7 @@ class BProject(object): """ # NOTE: this method does nothing (for now). preset_path = os.path.join(self.infos["BERTOS_PATH"], const.PREDEFINED_BOARDS_DIR) - preset_tree = {} + preset_tree = {"children": []} if os.path.exists(preset_path): preset_tree = self._loadProjectPresetTree(preset_path) self.infos["PRESET_TREE"] = preset_tree @@ -227,7 +226,10 @@ class BProject(object): def _loadPresetInfo(self, preset_spec_file): D = {} - execfile(preset_spec_file, {}, D) + try: + execfile(preset_spec_file, {}, D) + except IOError, e: + pass return D def loadModuleData(self, edit=False): @@ -249,7 +251,7 @@ class BProject(object): information["depends"] = () information["depends"] += (filename.split(".")[0],) information["category"] = os.path.basename(path) - + # Hack to remove 'bertos/' from the configuration file path. # # The new module information format substitute paths like 'bertos/cfg/config_file.h' @@ -263,14 +265,17 @@ class BProject(object): cfg_file_path = os.path.join(self.bertos_srcdir, configuration) configuration_info[configuration] = loadConfigurationInfos(cfg_file_path) except ParseError, err: - raise DefineException.ConfigurationDefineException(self.infos["BERTOS_PATH"] + "/" + configuration, err.line_number, err.line) + raise DefineException.ConfigurationDefineException(cfg_file_path, err.line_number, err.line) if edit: try: path = self.infos["PROJECT_SRC_PATH"] cfg_file_path = os.path.join(path, configuration) - configuration_info[configuration] = updateConfigurationValues(configuration_info[configuration], cfg_file_path) + configuration_info[configuration] = updateConfigurationValues(configuration_info[configuration], loadConfigurationInfos(cfg_file_path)) except ParseError, err: - raise DefineException.ConfigurationDefineException(configuration.replace("bertos", path)) + raise DefineException.ConfigurationDefineException(cfg_file_path, err.line_number, err.line) + except IOError, err: + # The wizard can't find the file, use the default configuration + pass module_info_dict.update(module_dict) configuration_info_dict.update(configuration_info) if to_be_parsed: @@ -356,9 +361,9 @@ class BProject(object): # Copy all the files and dirs except cfg/hw/*.mk self._writeCustomSrcFiles() - + # Copy the hw files - self._writeHwFiles(self.src_hwdir, self.hwdir) + self._writeAllPresetHwFiles(self.src_hwdir, self.hwdir) # Copyt the new *_user.mk file self._writeUserMkFileFromPreset() @@ -402,8 +407,9 @@ class BProject(object): self.infos["RELEVANT_FILES"] = relevants_files def _writeVersionFile(self, filename): - version_file = open(os.path.join(const.DATA_DIR, "vtemplates/VERSION"), "r").read() - open(filename, "w").write(versionFileGenerator(self, version_file)) + if not self.edit or self.old_srcdir: + version_file = open(os.path.join(const.DATA_DIR, "vtemplates/VERSION"), "r").read() + open(filename, "w").write(versionFileGenerator(self, version_file)) def _writeProjectFile(self, filename): f = open(filename, "w") @@ -429,6 +435,8 @@ class BProject(object): def _writeHwFiles(self, source_dir, destination_dir): for module, information in self.infos["MODULES"].items(): for hwfile in information["hw"]: + if hwfile == "": + continue string = open(source_dir + "/" + hwfile, "r").read() hwfile_path = destination_dir + "/" + os.path.basename(hwfile) if not self.edit or not os.path.exists(hwfile_path): @@ -436,6 +444,20 @@ class BProject(object): # editing mode it copies only the files that don't exist yet open(os.path.join(destination_dir,os.path.basename(hwfile)), "w").write(string) + def _writeAllPresetHwFiles(self, source_dir, destination_dir): + """ + Copy all but directories contained into the preset hw directory. + It's needed because some presets need custom hw files not defined with + Wizard directives into modules... + """ + source_dir = os.path.join(source_dir, "hw") + for f in os.listdir(source_dir): + abspath = os.path.join(source_dir, f) + if not os.path.isdir(abspath): + # Exlude directories from the copy! + hw_file = open(os.path.join(source_dir, f), 'r').read() + open(os.path.join(destination_dir, f), 'w').write(hw_file) + def _writeCfgFiles(self, source_dir, destination_dir): for configuration, information in self.infos["CONFIGURATIONS"].items(): string = open(source_dir + "/" + configuration, "r").read()