X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=wizard%2Fbertos_utils.py;h=3957b6746b7b28e57bf3ac9aee53770040c59502;hb=e28fc9dfd2361aecf99ecb8f3f256a8776e266d3;hp=4c6c3317c5469620ab4c263c52663438923ef874;hpb=4b0ca7f4b9df26e052b13a9d6b99f693047b63cc;p=bertos.git diff --git a/wizard/bertos_utils.py b/wizard/bertos_utils.py index 4c6c3317..3957b674 100644 --- a/wizard/bertos_utils.py +++ b/wizard/bertos_utils.py @@ -56,18 +56,6 @@ def isBertosDir(directory): def bertosVersion(directory): return open(directory + "/VERSION").readline().strip() -def setEnabledModules(project_info, enabled_modules): - modules = project_info.info("MODULES") - files = {} - for module, information in modules.items(): - information["enabled"] = module in enabled_modules - if information["enabled"]: - for dependency in information["depends"]: - if not dependency in modules: - files[dependency] = files.get(dependency, 0) + 1 - project_info.setInfo("MODULES", modules) - project_info.setInfo("FILES", files) - def enabledModules(project_info): enabled_modules = [] for name, module in project_info.info("MODULES").items(): @@ -133,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. @@ -357,21 +245,32 @@ def findModuleFiles(module, project_info): cfiles = [] sfiles = [] # .c files related to the module and the cpu architecture - for filename, path in project_info.searchFiles(module + ".c") + \ - project_info.searchFiles(module + "_" + project_info.info("CPU_INFOS")["TOOLCHAIN"] + ".c"): + for filename, path in project_info.searchFiles(module + ".c"): path = path.replace(project_info.info("SOURCES_PATH") + os.sep, "") path = replaceSeparators(path) cfiles.append(path + "/" + filename) # .s files related to the module and the cpu architecture for filename, path in project_info.searchFiles(module + ".s") + \ - project_info.searchFiles(module + "_" + project_info.info("CPU_INFOS")["TOOLCHAIN"] + ".s") + \ - project_info.searchFiles(module + ".S") + \ - project_info.searchFiles(module + "_" + project_info.info("CPU_INFOS")["TOOLCHAIN"] + ".S"): + project_info.searchFiles(module + ".S"): path = path.replace(project_info.info("SOURCES_PATH") + os.sep, "") path = replaceSeparators(path) sfiles.append(path + "/" + filename) # .c and .s files related to the module and the cpu tags - for tag in project_info.info("CPU_INFOS")["CPU_TAGS"]: + tags = project_info.info("CPU_INFOS")["CPU_TAGS"] + + # Awful, but secure check for version + # TODO: split me in a method/function + try: + version_string = bertosVersion(project_info.info("SOURCES_PATH")) + version_list = [int(i) for i in version_string.split()[-1].split('.')] + if version_list < [2, 5]: + # For older versions of BeRTOS add the toolchain to the tags + tags.append(project_info.info("CPU_INFOS")["TOOLCHAIN"]) + except ValueError: + # If the version file hasn't a valid version number do nothing + pass + + for tag in tags: for filename, path in project_info.searchFiles(module + "_" + tag + ".c"): path = path.replace(project_info.info("SOURCES_PATH") + os.sep, "") if os.sep != "/":