X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=wizard%2Fbertos_utils.py;h=00b687d788c5510b97b830bfdf6e022faf990e8f;hb=4ad4f4c9a51a8347c362617dc6d1bd1de57b9a26;hp=17794579e0ca8ab6e950c4d03ba4cf8bd6aa742f;hpb=912352d333ac869de55ea4945c03a49d163f6da4;p=bertos.git diff --git a/wizard/bertos_utils.py b/wizard/bertos_utils.py index 17794579..00b687d7 100644 --- a/wizard/bertos_utils.py +++ b/wizard/bertos_utils.py @@ -1,8 +1,32 @@ #!/usr/bin/env python # encoding: utf-8 # +# This file is part of BeRTOS. +# +# Bertos is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# +# As a special exception, you may use this file as part of a free software +# library without restriction. Specifically, if other files instantiate +# templates or use macros or inline functions from this file, or you compile +# this file and link it with other files to produce an executable, this +# file does not by itself cause the resulting executable to be covered by +# the GNU General Public License. This exception does not however +# invalidate any other reasons why the executable file might be covered by +# the GNU General Public License. +# # Copyright 2008 Develer S.r.l. (http://www.develer.com/) -# All rights reserved. # # $Id$ # @@ -19,7 +43,7 @@ import copytree import pickle import const -from plugins import codelite_project +import plugins import DefineException def isBertosDir(directory): @@ -70,7 +94,7 @@ def createBertosProject(project_info): configurations = project_info.info("CONFIGURATIONS") configuration = configurations[information["configuration"]] for start, parameter in configuration["paramlist"]: - if "type" in configuration[parameter] and configuration[parameter]["type"] == "autoenabled": + if "type" in configuration[parameter]["informations"] and configuration[parameter]["informations"]["type"] == "autoenabled": configuration[parameter]["value"] = "1" project_info.setInfo("CONFIGURATIONS", configurations) # Copy all the configuration files @@ -94,10 +118,19 @@ def createBertosProject(project_info): # 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"): - codelite_project.createProject(project_info) - + # 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. + """ + return getattr(__import__("plugins", {}, {}, [plugin]), plugin) + def mkGenerator(project_info, makefile): """ Generates the mk file for the current project. @@ -115,8 +148,8 @@ def mkGenerator(project_info, makefile): 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["$cppasrc"], mk_data["$cxxsrc"], 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["$prefix"] = replaceSeparators(project_info.info("TOOLCHAIN")["path"].split("gcc")[0]) + mk_data["$suffix"] = replaceSeparators(project_info.info("TOOLCHAIN")["path"].split("gcc")[1]) mk_data["$main"] = os.path.basename(project_info.info("PROJECT_PATH")) + "/main.c" for key in mk_data: while makefile.find(key) != -1: @@ -195,7 +228,7 @@ def csrcGenerator(project_info): cppasrc = " \\\n\t".join(cppasrc) + " \\" cxxsrc = " \\\n\t".join(cxxsrc) + " \\" 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()]) + constants = "\n".join([os.path.basename(project_info.info("PROJECT_PATH")) + "_" + key + " = " + unicode(value) for key, value in constants.items()]) return csrc, pcsrc, cppasrc, cxxsrc, asrc, constants def findModuleFiles(module, project_info): @@ -206,8 +239,7 @@ def findModuleFiles(module, project_info): 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") + os.sep, "") - if os.sep != "/": - path = replaceSeparators(path) + path = replaceSeparators(path) cfiles.append(path + "/" + filename) # .s files related to the module and the cpu architecture for filename, path in findDefinitions(module + ".s", project_info) + \ @@ -215,8 +247,7 @@ def findModuleFiles(module, 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") + os.sep, "") - if os.sep != "/": - path = replaceSeparators(path) + 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"]: @@ -228,8 +259,7 @@ def findModuleFiles(module, project_info): for filename, path in findDefinitions(module + "_" + tag + ".s", project_info) + \ findDefinitions(module + "_" + tag + ".S", project_info): path = path.replace(project_info.info("SOURCES_PATH") + os.sep, "") - if os.sep != "/": - path = replaceSeparators(path) + path = replaceSeparators(path) sfiles.append(path + "/" + filename) return cfiles, sfiles @@ -237,8 +267,9 @@ 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, "/") + if os.sep != "/": + while path.find(os.sep) != -1: + path = path.replace(os.sep, "/") return path def getSystemPath(): @@ -384,7 +415,7 @@ def loadModuleDefinition(first_comment): return to_be_parsed, module_dict def isSupported(project, module=None, property_id=None): - if module is None and property_id is not None: + if not module and property_id: item = project.info("CONFIGURATIONS")[property_id[0]][property_id[1]]["informations"] else: item = project.info("MODULES")[module]