From: duplo Date: Tue, 20 Apr 2010 15:25:24 +0000 (+0000) Subject: Move createBertosProject as BProject method X-Git-Tag: 2.5.0~423 X-Git-Url: https://codewiz.org/gitweb?a=commitdiff_plain;h=c812b6cd63000c7b7b2b8a84a07dceb017199dde;p=bertos.git Move createBertosProject as BProject method git-svn-id: https://src.develer.com/svnoss/bertos/trunk@3485 38d2e660-2303-0410-9eaa-f027e97ec537 --- diff --git a/wizard/BEditingDialog.py b/wizard/BEditingDialog.py index 10dcd24f..2569a852 100644 --- a/wizard/BEditingDialog.py +++ b/wizard/BEditingDialog.py @@ -39,7 +39,7 @@ import os from PyQt4.QtCore import * from PyQt4.QtGui import * -from bertos_utils import bertosVersion, getToolchainName, createBertosProject +from bertos_utils import bertosVersion, getToolchainName from BToolchainPage import BToolchainPage from BVersionPage import BVersionPage @@ -157,7 +157,7 @@ class BEditingDialog(QDialog): def apply(self): try: qApp.setOverrideCursor(QCursor(Qt.WaitCursor)) - createBertosProject(self.module_page.project, edit=True) + QApplication.instance().project.createBertosProject(edit=True) finally: qApp.restoreOverrideCursor() self.accept() diff --git a/wizard/BFinalPage.py b/wizard/BFinalPage.py index ec767a70..ecfbf63a 100644 --- a/wizard/BFinalPage.py +++ b/wizard/BFinalPage.py @@ -59,7 +59,7 @@ class BFinalPage(BWizardPage): """ try: QApplication.instance().setOverrideCursor(Qt.WaitCursor) - bertos_utils.createBertosProject(self.project) + self.project.createBertosProject() finally: QApplication.instance().restoreOverrideCursor() self._plugin_dict = {} diff --git a/wizard/BProject.py b/wizard/BProject.py index e6eda0ce..f5bc900d 100644 --- a/wizard/BProject.py +++ b/wizard/BProject.py @@ -37,6 +37,8 @@ import os import fnmatch import copy import pickle +import shutil +import copytree import DefineException @@ -48,7 +50,11 @@ from bertos_utils import ( # Utility functions isBertosDir, getTagSet, getInfos, updateConfigurationValues, loadConfigurationInfos, loadDefineLists, loadModuleDefinition, - getCommentList, + getCommentList, sub, + + # Project creation functions + projectFileGenerator, versionFileGenerator, makefileGenerator, + userMkGenerator, mkGenerator, loadPlugin, # Custom exceptions ParseError, SupportedException @@ -259,6 +265,106 @@ class BProject(object): #-------------------------------------------------------------------------# + def createBertosProject(self, edit=False): + directory = self.infos["PROJECT_PATH"] + sources_dir = self.infos["SOURCES_PATH"] + old_sources_dir = self.infos.get("OLD_SOURCES_PATH", None) + if not edit: + if os.path.isdir(directory): + shutil.rmtree(directory, True) + os.makedirs(directory) + # Write the project file + f = open(directory + "/project.bertos", "w") + f.write(projectFileGenerator(self)) + f.close() + # VERSION file + version_file = open(os.path.join(const.DATA_DIR, "vtemplates/VERSION"), "r").read() + open(directory + "/VERSION", "w").write(versionFileGenerator(self, version_file)) + # Destination source dir + srcdir = directory + "/bertos" + if not edit: + # If not in editing mode it copies all the bertos sources in the /bertos subdirectory of the project + shutil.rmtree(srcdir, True) + copytree.copytree(sources_dir + "/bertos", srcdir, ignore_list=const.IGNORE_LIST) + elif old_sources_dir: + # If in editing mode it merges the current bertos sources with the selected ones + # TODO: implement the three way merge algotihm + # + mergeSources(srcdir, sources_dir, old_sources_dir) + # Destination makefile + makefile = directory + "/Makefile" + makefile = open(os.path.join(const.DATA_DIR, "mktemplates/Makefile"), 'r').read() + makefile = makefileGenerator(self, makefile) + open(directory + "/Makefile", "w").write(makefile) + # Destination project dir + # prjdir = directory + "/" + os.path.basename(directory) + prjdir = os.path.join(directory, self.infos["PROJECT_NAME"]) + if not edit: + shutil.rmtree(prjdir, True) + os.mkdir(prjdir) + # Destination hw files + hwdir = prjdir + "/hw" + if not edit: + shutil.rmtree(hwdir, True) + os.mkdir(hwdir) + # Copy all the hw files + for module, information in self.infos["MODULES"].items(): + for hwfile in information["hw"]: + string = open(sources_dir + "/" + hwfile, "r").read() + hwfile_path = hwdir + "/" + os.path.basename(hwfile) + if not edit or not os.path.exists(hwfile_path): + # If not in editing mode it copies all the hw files. If in + # editing mode it copies only the files that don't exist yet + open(hwdir + "/" + os.path.basename(hwfile), "w").write(string) + # Destination configurations files + cfgdir = prjdir + "/cfg" + if not edit: + shutil.rmtree(cfgdir, True) + os.mkdir(cfgdir) + # Set properly the autoenabled parameters + for module, information in self.infos["MODULES"].items(): + if "configuration" in information and information["configuration"] != "": + configurations = self.infos["CONFIGURATIONS"] + configuration = configurations[information["configuration"]] + for start, parameter in configuration["paramlist"]: + if "type" in configuration[parameter]["informations"] and configuration[parameter]["informations"]["type"] == "autoenabled": + configuration[parameter]["value"] = "1" if information["enabled"] else "0" + self.infos["CONFIGURATIONS"] = configurations + # Copy all the configuration files + for configuration, information in self.infos["CONFIGURATIONS"].items(): + string = open(sources_dir + "/" + configuration, "r").read() + for start, parameter in information["paramlist"]: + infos = information[parameter] + value = infos["value"] + if "unsigned" in infos["informations"] and infos["informations"]["unsigned"]: + value += "U" + if "long" in infos["informations"] and infos["informations"]["long"]: + value += "L" + string = sub(string, parameter, value) + f = open(cfgdir + "/" + os.path.basename(configuration), "w") + f.write(string) + f.close() + if not edit: + # Destination user mk file (only on project creation) + makefile = open(os.path.join(const.DATA_DIR, "mktemplates/template.mk"), "r").read() + # Deadly performances loss was here :( + makefile = userMkGenerator(self, makefile) + open(prjdir + "/" + os.path.basename(prjdir) + ".mk", "w").write(makefile) + # Destination wizard mk file + makefile = open(os.path.join(const.DATA_DIR, "mktemplates/template_wiz.mk"), "r").read() + makefile = mkGenerator(self, makefile) + open(prjdir + "/" + os.path.basename(prjdir) + "_wiz.mk", "w").write(makefile) + # Destination main.c file + if not edit: + main = open(os.path.join(const.DATA_DIR, "srctemplates/main.c"), "r").read() + open(prjdir + "/main.c", "w").write(main) + # Files for selected plugins + relevants_files = {} + for plugin in self.infos["OUTPUT"]: + module = loadPlugin(plugin) + relevants_files[plugin] = module.createProject(self) + self.infos["RELEVANT_FILES"] = relevants_files + 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 ed9a0db2..3957b674 100644 --- a/wizard/bertos_utils.py +++ b/wizard/bertos_utils.py @@ -121,106 +121,6 @@ def projectFileGenerator(project_info): project_data["WIZARD_VERSION"] = WIZARD_VERSION return pickle.dumps(project_data) -def createBertosProject(project_info, edit=False): - directory = project_info.info("PROJECT_PATH") - sources_dir = project_info.info("SOURCES_PATH") - old_sources_dir = project_info.info("OLD_SOURCES_PATH") - if not edit: - if os.path.isdir(directory): - shutil.rmtree(directory, True) - os.makedirs(directory) - # Write the project file - f = open(directory + "/project.bertos", "w") - f.write(projectFileGenerator(project_info)) - f.close() - # VERSION file - version_file = open(os.path.join(const.DATA_DIR, "vtemplates/VERSION"), "r").read() - open(directory + "/VERSION", "w").write(versionFileGenerator(project_info, version_file)) - # Destination source dir - srcdir = directory + "/bertos" - if not edit: - # If not in editing mode it copies all the bertos sources in the /bertos subdirectory of the project - shutil.rmtree(srcdir, True) - copytree.copytree(sources_dir + "/bertos", srcdir, ignore_list=const.IGNORE_LIST) - elif old_sources_dir: - # If in editing mode it merges the current bertos sources with the selected ones - # TODO: implement the three way merge algotihm - # - mergeSources(srcdir, sources_dir, old_sources_dir) - # Destination makefile - makefile = directory + "/Makefile" - makefile = open(os.path.join(const.DATA_DIR, "mktemplates/Makefile"), 'r').read() - makefile = makefileGenerator(project_info, makefile) - open(directory + "/Makefile", "w").write(makefile) - # Destination project dir - # prjdir = directory + "/" + os.path.basename(directory) - prjdir = os.path.join(directory, project_info.info("PROJECT_NAME")) - if not edit: - shutil.rmtree(prjdir, True) - os.mkdir(prjdir) - # Destination hw files - hwdir = prjdir + "/hw" - if not edit: - shutil.rmtree(hwdir, True) - os.mkdir(hwdir) - # Copy all the hw files - for module, information in project_info.info("MODULES").items(): - for hwfile in information["hw"]: - string = open(sources_dir + "/" + hwfile, "r").read() - hwfile_path = hwdir + "/" + os.path.basename(hwfile) - if not edit or not os.path.exists(hwfile_path): - # If not in editing mode it copies all the hw files. If in - # editing mode it copies only the files that don't exist yet - open(hwdir + "/" + os.path.basename(hwfile), "w").write(string) - # Destination configurations files - cfgdir = prjdir + "/cfg" - if not edit: - shutil.rmtree(cfgdir, True) - os.mkdir(cfgdir) - # Set properly the autoenabled parameters - for module, information in project_info.info("MODULES").items(): - if "configuration" in information and information["configuration"] != "": - configurations = project_info.info("CONFIGURATIONS") - configuration = configurations[information["configuration"]] - for start, parameter in configuration["paramlist"]: - if "type" in configuration[parameter]["informations"] and configuration[parameter]["informations"]["type"] == "autoenabled": - configuration[parameter]["value"] = "1" if information["enabled"] else "0" - project_info.setInfo("CONFIGURATIONS", configurations) - # Copy all the configuration files - for configuration, information in project_info.info("CONFIGURATIONS").items(): - string = open(sources_dir + "/" + configuration, "r").read() - for start, parameter in information["paramlist"]: - infos = information[parameter] - value = infos["value"] - if "unsigned" in infos["informations"] and infos["informations"]["unsigned"]: - value += "U" - if "long" in infos["informations"] and infos["informations"]["long"]: - value += "L" - string = sub(string, parameter, value) - f = open(cfgdir + "/" + os.path.basename(configuration), "w") - f.write(string) - f.close() - if not edit: - # Destination user mk file (only on project creation) - makefile = open(os.path.join(const.DATA_DIR, "mktemplates/template.mk"), "r").read() - # Deadly performances loss was here :( - makefile = userMkGenerator(project_info, makefile) - open(prjdir + "/" + os.path.basename(prjdir) + ".mk", "w").write(makefile) - # Destination wizard mk file - makefile = open(os.path.join(const.DATA_DIR, "mktemplates/template_wiz.mk"), "r").read() - makefile = mkGenerator(project_info, makefile) - open(prjdir + "/" + os.path.basename(prjdir) + "_wiz.mk", "w").write(makefile) - # Destination main.c file - if not edit: - main = open(os.path.join(const.DATA_DIR, "srctemplates/main.c"), "r").read() - open(prjdir + "/main.c", "w").write(main) - # Files for selected plugins - relevants_files = {} - for plugin in project_info.info("OUTPUT"): - module = loadPlugin(plugin) - relevants_files[plugin] = module.createProject(project_info) - project_info.setInfo("RELEVANT_FILES", relevants_files) - def loadPlugin(plugin): """ Returns the given plugin module.