From caa730dbc7128c09b5a5b883aa2ad97fe23e799d Mon Sep 17 00:00:00 2001 From: duplo Date: Tue, 27 Apr 2010 08:53:15 +0000 Subject: [PATCH] More logic into makefiles generation functions git-svn-id: https://src.develer.com/svnoss/bertos/trunk@3522 38d2e660-2303-0410-9eaa-f027e97ec537 --- wizard/BProject.py | 21 ++++-------------- wizard/bertos_utils.py | 16 +++++++++----- wizard/compatibility.py | 49 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 23 deletions(-) create mode 100644 wizard/compatibility.py diff --git a/wizard/BProject.py b/wizard/BProject.py index cacca853..0ac6965b 100644 --- a/wizard/BProject.py +++ b/wizard/BProject.py @@ -78,6 +78,7 @@ class BProject(object): def loadBertosProject(self, project_file, info_dict): project_dir = os.path.dirname(project_file) project_data = pickle.loads(open(project_file, "r").read()) + updateProject(project_data) # If PROJECT_NAME is not defined it use the directory name as PROJECT_NAME # NOTE: this can throw an Exception if the user has changed the directory containing the project self.infos["PROJECT_NAME"] = project_data.get("PROJECT_NAME", os.path.basename(project_dir)) @@ -91,13 +92,6 @@ class BProject(object): # In projects created with older versions of the Wizard this metadata doesn't exist self.infos["PROJECT_SRC_PATH"] = os.path.join(self.infos["PROJECT_PATH"], self.infos["PROJECT_NAME"]) - wizard_version = project_data.get("WIZARD_VERSION", 0) - if wizard_version == 0: - # Ignore the BERTOS_PATH inside the project file for older project - project_data["BERTOS_PATH"] = project_dir - elif wizard_version == 1: - # Use SOURCES_PATH instead of BERTOS_PATH for backward compatibility - project_data["BERTOS_PATH"] = project_data["SOURCES_PATH"] linked_sources_path = project_data["BERTOS_PATH"] sources_abspath = os.path.abspath(os.path.join(project_dir, linked_sources_path)) project_data["BERTOS_PATH"] = sources_abspath @@ -394,20 +388,13 @@ class BProject(object): f.close() def _writeMakefile(self, filename): - makefile = open(os.path.join(const.DATA_DIR, "mktemplates/Makefile"), "r").read() - makefile = makefileGenerator(self, makefile) - open(filename, "w").write(makefile) + makefileGenerator(self, filename) def _writeUserMkFile(self, filename): - makefile = open(os.path.join(const.DATA_DIR, "mktemplates/template.mk"), "r").read() - # Deadly performances loss was here :( - makefile = userMkGenerator(self, makefile) - open(filename, "w").write(makefile) + userMkGenerator(self, filename) def _writeWizardMkFile(self, filename): - makefile = open(os.path.join(const.DATA_DIR, "mktemplates/template_wiz.mk"), "r").read() - makefile = mkGenerator(self, makefile) - open(filename, "w").write(makefile) + mkGenerator(self, filename) def _writeMainFile(self, filename): main = open(os.path.join(const.DATA_DIR, "srctemplates/main.c"), "r").read() diff --git a/wizard/bertos_utils.py b/wizard/bertos_utils.py index 217fe05a..4589de3b 100644 --- a/wizard/bertos_utils.py +++ b/wizard/bertos_utils.py @@ -138,19 +138,22 @@ def versionFileGenerator(project_info, version_file): version = bertosVersion(project_info.info("BERTOS_PATH")) return version_file.replace('$version', version) -def userMkGenerator(project_info, makefile): +def userMkGenerator(project_info, destination): + makefile = open(os.path.join(const.DATA_DIR, "mktemplates/template.mk"), "r").read() + # Deadly performances loss was here :( 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 + open(destination, "w").write(makefile) -def mkGenerator(project_info, makefile): +def mkGenerator(project_info, destination): """ Generates the mk file for the current project. """ + makefile = open(os.path.join(const.DATA_DIR, "mktemplates/template_wiz.mk"), "r").read() mk_data = {} mk_data["$pname"] = project_info.info("PROJECT_NAME") mk_data["$cpuclockfreq"] = project_info.info("SELECTED_FREQ") @@ -166,16 +169,17 @@ def mkGenerator(project_info, makefile): for key in mk_data: while makefile.find(key) != -1: makefile = makefile.replace(key, mk_data[key]) - return makefile + open(destination, "w").write(makefile) -def makefileGenerator(project_info, makefile): +def makefileGenerator(project_info, destination): """ Generate the Makefile for the current project. """ + makefile = open(os.path.join(const.DATA_DIR, "mktemplates/Makefile"), "r").read() # TODO write a general function that works for both the mk file and the Makefile while makefile.find("$pname") != -1: makefile = makefile.replace("$pname", project_info.info("PROJECT_NAME")) - return makefile + open(destination, "w").write(makefile) def csrcGenerator(project_info): modules = project_info.info("MODULES") diff --git a/wizard/compatibility.py b/wizard/compatibility.py new file mode 100644 index 00000000..8f1b0742 --- /dev/null +++ b/wizard/compatibility.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python +# encoding: utf-8 +# +# This file is part of slimqc. +# +# 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 2010 Develer S.r.l. (http://www.develer.com/) +# +# $Id$ +# +# Author: Lorenzo Berni +# + +def updateProject(project_data): + """ + Update incrementally the project_data loaded from a BeRTOS Wizard project + file. + """ + wizard_version = project_data.get("WIZARD_VERSION", 0) + if wizard_version < 1: + # Ignore the BERTOS_PATH inside the project file for older project + project_data["SOURCES_PATH"] = project_dir + if wizard_version < 2: + # Use SOURCES_PATH instead of BERTOS_PATH for backward compatibility + project_data["BERTOS_PATH"] = project_data["SOURCES_PATH"] + return project_data + -- 2.25.1