import glob
import re
import shutil
+import pickle
import const
-import codelite_project
+from plugins import codelite_project
import DefineException
def isBertosDir(directory):
if not os.path.isdir(directory):
os.mkdir(directory)
f = open(directory + "/project.bertos", "w")
- f.write(repr(project_info))
+ f.write(pickle.dumps(project_info))
f.close()
- ## Destination source dir
+ # Destination source dir
srcdir = directory + "/bertos"
shutil.rmtree(srcdir, True)
shutil.copytree(sources_dir + "/bertos", srcdir)
- ## Destination makefile
+ # Destination makefile
makefile = directory + "/Makefile"
if os.path.exists(makefile):
os.remove(makefile)
makefile = open("mktemplates/Makefile").read()
makefile = makefileGenerator(project_info, makefile)
open(directory + "/Makefile", "w").write(makefile)
- ## Destination project dir
+ # Destination project dir
prjdir = directory + "/" + os.path.basename(directory)
shutil.rmtree(prjdir, True)
os.mkdir(prjdir)
- ## Destination configurations files
+ # Destination configurations files
cfgdir = prjdir + "/cfg"
shutil.rmtree(cfgdir, True)
os.mkdir(cfgdir)
f = open(cfgdir + "/" + os.path.basename(configuration), "w")
f.write(string)
f.close()
- ## Destinatio mk file
+ # Destinatio mk file
makefile = open("mktemplates/template.mk", "r").read()
makefile = mkGenerator(project_info, makefile)
open(prjdir + "/" + os.path.basename(prjdir) + ".mk", "w").write(makefile)
- ## Destination main.c file
+ # Destination main.c file
main = open("srctemplates/main.c", "r").read()
open(prjdir + "/main.c", "w").write(main)
+ # Codelite project files
if "codelite" in project_info.info("OUTPUT"):
- workspace = codeliteWorkspaceGenerator(project_info)
- open(directory + "/" + os.path.basename(prjdir) + ".workspace", "w").write(workspace)
- project = codeliteProjectGenerator(project_info)
- open(directory + "/" + os.path.basename(prjdir) + ".project", "w").write(project)
+ codelite_project.createProject(project_info)
def mkGenerator(project_info, makefile):
"""
"""
mk_data = {}
mk_data["$pname"] = os.path.basename(project_info.info("PROJECT_PATH"))
+ mk_data["$cpuflag"] = project_info.info("CPU_INFOS")["CPU_FLAG_NAME"]
mk_data["$cpuname"] = project_info.info("CPU_INFOS")["CORE_CPU"]
mk_data["$cflags"] = " ".join(project_info.info("CPU_INFOS")["C_FLAGS"])
mk_data["$ldflags"] = " ".join(project_info.info("CPU_INFOS")["LD_FLAGS"])
+ mk_data["$cppflags"] = " ".join(project_info.info("CPU_INFOS")["CPP_FLAGS"])
+ mk_data["$cppaflags"] = " ".join(project_info.info("CPU_INFOS")["CPPA_FLAGS"])
+ mk_data["$cxxflags"] = " ".join(project_info.info("CPU_INFOS")["CXX_FLAGS"])
+ mk_data["$asflags"] = " ".join(project_info.info("CPU_INFOS")["AS_FLAGS"])
+ mk_data["$arflags"] = " ".join(project_info.info("CPU_INFOS")["AR_FLAGS"])
mk_data["$csrc"], mk_data["$pcsrc"], mk_data["$asrc"], mk_data["$constants"] = csrcGenerator(project_info)
mk_data["$prefix"] = project_info.info("TOOLCHAIN")["path"].split("gcc")[0]
mk_data["$suffix"] = project_info.info("TOOLCHAIN")["path"].split("gcc")[1]
- mk_data["$cross"] = project_info.info("TOOLCHAIN")["path"].split("gcc")[0]
mk_data["$main"] = os.path.basename(project_info.info("PROJECT_PATH")) + "/main.c"
for key in mk_data:
while makefile.find(key) != -1:
"""
Generate the Makefile for the current project.
"""
- # TODO: write a general function that works for both the mk file and the Makefile
+ # TODO write a general function that works for both the mk file and the Makefile
while makefile.find("project_name") != -1:
makefile = makefile.replace("project_name", os.path.basename(project_info.info("PROJECT_PATH")))
return makefile
harvard = True
else:
harvard = False
- ## file to be included in CSRC variable
+ # file to be included in CSRC variable
csrc = []
- ## file to be included in PCSRC variable
+ # file to be included in PCSRC variable
pcsrc = []
- ## files to be included in CPPASRC variable
+ # files to be included in CPPASRC variable
asrc = []
- ## constants to be included at the beginning of the makefile
+ # constants to be included at the beginning of the makefile
constants = {}
for module, information in modules.items():
module_files = set([])
dependency_files = set([])
- ## assembly sources
+ # assembly sources
asm_files = set([])
if information["enabled"]:
if "constants" in information:
asrc = " \\\n\t".join(asrc) + " \\"
constants = "\n".join([os.path.basename(project_info.info("PROJECT_PATH")) + "_" + key + " = " + str(value) for key, value in constants.items()])
return csrc, pcsrc, asrc, constants
-
+
def findModuleFiles(module, project_info):
- ## Find the files related to the selected module
+ # Find the files related to the selected module
cfiles = []
sfiles = []
- ## .c files related to the module and the cpu architecture
+ # .c files related to the module and the cpu architecture
for filename, path in findDefinitions(module + ".c", project_info) + \
findDefinitions(module + "_" + project_info.info("CPU_INFOS")["TOOLCHAIN"] + ".c", project_info):
- path = path.replace(project_info.info("SOURCES_PATH") + "/", "")
+ path = path.replace(project_info.info("SOURCES_PATH") + os.sep, "")
+ if os.sep != "/":
+ path = replaceSeparators(path)
cfiles.append(path + "/" + filename)
- ## .s files related to the module and the cpu architecture
+ # .s files related to the module and the cpu architecture
for filename, path in findDefinitions(module + ".s", project_info) + \
findDefinitions(module + "_" + project_info.info("CPU_INFOS")["TOOLCHAIN"] + ".s", project_info) + \
findDefinitions(module + ".S", project_info) + \
findDefinitions(module + "_" + project_info.info("CPU_INFOS")["TOOLCHAIN"] + ".S", project_info):
- path = path.replace(project_info.info("SOURCES_PATH") + "/", "")
+ path = path.replace(project_info.info("SOURCES_PATH") + os.sep, "")
+ if os.sep != "/":
+ path = replaceSeparators(path)
sfiles.append(path + "/" + filename)
- ## .c and .s files related to the module and the cpu tags
+ # .c and .s files related to the module and the cpu tags
for tag in project_info.info("CPU_INFOS")["CPU_TAGS"]:
for filename, path in findDefinitions(module + "_" + tag + ".c", project_info):
- path = path.replace(project_info.info("SOURCES_PATH") + "/", "")
+ path = path.replace(project_info.info("SOURCES_PATH") + os.sep, "")
+ if os.sep != "/":
+ path = replaceSeparators(path)
cfiles.append(path + "/" + filename)
for filename, path in findDefinitions(module + "_" + tag + ".s", project_info) + \
findDefinitions(module + "_" + tag + ".S", project_info):
- path = path.replace(project_info.info("SOURCES_PATH") + "/", "")
+ path = path.replace(project_info.info("SOURCES_PATH") + os.sep, "")
+ if os.sep != "/":
+ path = replaceSeparators(path)
sfiles.append(path + "/" + filename)
return cfiles, sfiles
-def codeliteProjectGenerator(project_info):
- template = open("cltemplates/bertos.project").read()
- filelist = "\n".join(codelite_project.clFiles(codelite_project.findSources(project_info.info("PROJECT_PATH")), project_info.info("PROJECT_PATH")))
- while template.find("$filelist") != -1:
- template = template.replace("$filelist", filelist)
- project_name = os.path.basename(project_info.info("PROJECT_PATH"))
- while template.find("$project") != -1:
- template = template.replace("$project", project_name)
- return template
-
-def codeliteWorkspaceGenerator(project_info):
- template = open("cltemplates/bertos.workspace").read()
- project_name = os.path.basename(project_info.info("PROJECT_PATH"))
- while template.find("$project") != -1:
- template = template.replace("$project", project_name)
- return template
-
+def replaceSeparators(path):
+ """
+ Replace the separators in the given path with unix standard separator.
+ """
+ while path.find(os.sep) != -1:
+ path = path.replace(os.sep, "/")
+ return path
+
def getSystemPath():
path = os.environ["PATH"]
if os.name == "nt":
define_list[key] = (value,)
return define_list
-def getDescriptionInformations(comment):
- """
- Take the doxygen comment and strip the wizard informations, returning the tuple
- (comment, wizard_information)
+def getDescriptionInformations(comment):
+ """
+ Take the doxygen comment and strip the wizard informations, returning the tuple
+ (comment, wizard_information)
"""
brief = ""
description = ""
project.setInfo("LISTS", list_info_dict)
project.setInfo("CONFIGURATIONS", configuration_info_dict)
project.setInfo("FILES", file_dict)
-
+
def formatParamNameValue(text):
"""
Take the given string and return a tuple with the name of the parameter in the first position