-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()
- # 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("mktemplates/Makefile").read()
- makefile = makefileGenerator(project_info, makefile)
- open(directory + "/Makefile", "w").write(makefile)
- # Destination project dir
- prjdir = directory + "/" + os.path.basename(directory)
- 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("mktemplates/template.mk", "r").read()
- makefile = mkGenerator(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 = 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()
- 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)
-