X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=wizard%2Fbertos_utils.py;h=5c03074d25876a37399c87ffb194daccc38025ce;hb=ad53b3429de000659e3daa00f3e9be56413e9944;hp=c0c9ecb2a3d367047aee9a19b7eddbca8bea2c41;hpb=e72e844998a9b7e63e56d6c1ccc3ada8f5dad4d6;p=bertos.git diff --git a/wizard/bertos_utils.py b/wizard/bertos_utils.py index c0c9ecb2..5c03074d 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: @@ -167,7 +183,7 @@ def createBertosProject(project_info, edit=False): mergeSources(srcdir, sources_dir, old_sources_dir) # Destination makefile makefile = directory + "/Makefile" - makefile = open("mktemplates/Makefile").read() + 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 @@ -219,16 +235,17 @@ def createBertosProject(project_info, edit=False): f.close() if not edit: # Destination user mk file (only on project creation) - makefile = open("mktemplates/template.mk", "r").read() - makefile = mkGenerator(project_info, makefile) + 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("mktemplates/template_wiz.mk", "r").read() + 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("srctemplates/main.c", "r").read() + 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 = {} @@ -242,7 +259,20 @@ 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")) + mk_data["$main"] = os.path.basename(project_info.info("PROJECT_PATH")) + "/main.c" + 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. @@ -307,8 +337,7 @@ def csrcGenerator(project_info): for file in information["hw"]: if file.endswith(".c"): module_files |= set([hwdir + "/" + os.path.basename(file)]) - for file_dependency in information["depends"]: - if file_dependency in files: + for file_dependency in information["depends"] + tuple(files.keys()): dependencyCFiles, dependencySFiles = findModuleFiles(file_dependency, project_info) dependency_files |= set(dependencyCFiles) asm_files |= set(dependencySFiles) @@ -431,16 +460,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): @@ -713,10 +753,10 @@ def loadConfigurationInfos(path): if (type(configuration_infos[name]["informations"]["conditional_deps"]) == str or type(configuration_infos[name]["informations"]["conditional_deps"]) == unicode): configuration_infos[name]["informations"]["conditional_deps"] = (configuration_infos[name]["informations"]["conditional_deps"], ) - elif type(configurations_infos[name]["informations"]["conditional_deps"]) == tuple: + elif type(configuration_infos[name]["informations"]["conditional_deps"]) == tuple: pass else: - configurations_infos[name]["informations"]["conditional_deps"] = () + configuration_infos[name]["informations"]["conditional_deps"] = () configuration_infos[name]["description"] = description configuration_infos[name]["brief"] = brief return configuration_infos