X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=wizard%2Fbertos_utils.py;h=3ba5cfcc15d3a021e9ac405822af35d995bba0cb;hb=b8a137380f022b894587295607cc4dc3f0e7fb00;hp=5fbd69145ca71e8e0fb721da7ba73a5df3ff77c3;hpb=cf36efa296379eb024dd593fc2806a42093e6c97;p=bertos.git diff --git a/wizard/bertos_utils.py b/wizard/bertos_utils.py index 5fbd6914..3ba5cfcc 100644 --- a/wizard/bertos_utils.py +++ b/wizard/bertos_utils.py @@ -47,6 +47,8 @@ import plugins import DefineException import BProject +from _wizard_version import WIZARD_VERSION + from LoadException import VersionException, ToolchainException def isBertosDir(directory): @@ -56,15 +58,23 @@ def bertosVersion(directory): return open(directory + "/VERSION").readline().strip() def loadBertosProject(project_file, info_dict): + project_dir = os.path.dirname(project_file) project_data = pickle.loads(open(project_file, "r").read()) project_info = BProject.BProject() project_info.setInfo("PROJECT_PATH", os.path.dirname(project_file)) + # Check for the Wizard version + wizard_version = project_data.get("WIZARD_VERSION", 0) + if not wizard_version: + project_data["SOURCES_PATH"] = project_dir if "SOURCES_PATH" in info_dict: project_data["SOURCES_PATH"] = info_dict["SOURCES_PATH"] if os.path.exists(project_data["SOURCES_PATH"]): project_info.setInfo("SOURCES_PATH", project_data["SOURCES_PATH"]) else: raise VersionException(project_info) + if not isBertosDir(os.path.dirname(project_file)): + version_file = open(os.path.join(const.DATA_DIR, "vtemplates/VERSION"), "r").read() + open(os.path.join(project_dir, "VERSION"), "w").write(version_file.replace("$version", "").strip()) loadSourceTree(project_info) cpu_name = project_data["CPU_NAME"] project_info.setInfo("CPU_NAME", cpu_name) @@ -135,11 +145,14 @@ def projectFileGenerator(project_info): if information["enabled"]: enabled_modules.append(module) project_data["ENABLED_MODULES"] = enabled_modules - project_data["SOURCES_PATH"] = project_info.info("SOURCES_PATH") + # Use the local BeRTOS version instead of the original one + # project_data["SOURCES_PATH"] = project_info.info("SOURCES_PATH") + project_data["SOURCES_PATH"] = directory project_data["TOOLCHAIN"] = project_info.info("TOOLCHAIN") project_data["CPU_NAME"] = project_info.info("CPU_NAME") project_data["SELECTED_FREQ"] = project_info.info("SELECTED_FREQ") project_data["OUTPUT"] = project_info.info("OUTPUT") + project_data["WIZARD_VERSION"] = WIZARD_VERSION return pickle.dumps(project_data) def createBertosProject(project_info, edit=False): @@ -154,6 +167,9 @@ def createBertosProject(project_info, edit=False): 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: @@ -220,7 +236,8 @@ def createBertosProject(project_info, edit=False): if not edit: # Destination user mk file (only on project creation) makefile = open(os.path.join(const.DATA_DIR, "mktemplates/template.mk"), "r").read() - makefile = mkGenerator(project_info, makefile) + # 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() @@ -242,7 +259,19 @@ def loadPlugin(plugin): Returns the given plugin module. """ return getattr(__import__("plugins", {}, {}, [plugin]), plugin) - + +def versionFileGenerator(project_info, version_file): + version = bertosVersion(project_info.info("SOURCES_PATH")) + return version_file.replace('$version', version) + +def userMkGenerator(project_info, makefile): + mk_data = {} + mk_data["$pname"] = os.path.basename(project_info.info("PROJECT_PATH")) + for key in mk_data: + while makefile.find(key) != -1: + makefile = makefile.replace(key, mk_data[key]) + return makefile + def mkGenerator(project_info, makefile): """ Generates the mk file for the current project. @@ -430,16 +459,27 @@ def getToolchainName(toolchain_info): return name def loadSourceTree(project): - fileList = [f for f in os.walk(project.info("SOURCES_PATH"))] + # Index only the SOURCES_PATH/bertos content + bertos_sources_dir = os.path.join(project.info("SOURCES_PATH"), 'bertos') + if os.path.exists(bertos_sources_dir): + fileList = [f for f in os.walk(bertos_sources_dir)] + else: + fileList = [] project.setInfo("FILE_LIST", fileList) +_cached_queries = {} + def findDefinitions(ftype, project): + definitions = _cached_queries.get(ftype, None) + if definitions is not None: + return definitions L = project.info("FILE_LIST") definitions = [] for element in L: for filename in element[2]: if fnmatch.fnmatch(filename, ftype): definitions.append((filename, element[0])) + _cached_queries[ftype] = definitions return definitions def loadCpuInfos(project):