From 1f95de43aa6f24d2684e40b1d9e1a60689f7651d Mon Sep 17 00:00:00 2001 From: Bernard Xiong Date: Fri, 10 Apr 2015 06:35:59 +0000 Subject: [PATCH] [tools] Add package.json as building script --- tools/building.py | 5 ++++ tools/package.py | 74 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 tools/package.py diff --git a/tools/building.py b/tools/building.py index d95cf3672f..c4702de82d 100644 --- a/tools/building.py +++ b/tools/building.py @@ -595,6 +595,11 @@ def GlobSubDir(sub_dir, ext_name): dst.append(os.path.relpath(item, sub_dir)) return dst +def PackageSConscript(package): + from package import BuildPackage + + return BuildPackage(package) + def file_path_exist(path, *args): return os.path.exists(os.path.join(path, *args)) diff --git a/tools/package.py b/tools/package.py new file mode 100644 index 0000000000..55b318b2a3 --- /dev/null +++ b/tools/package.py @@ -0,0 +1,74 @@ +# +# File : package.py +# This file is part of RT-Thread RTOS +# COPYRIGHT (C) 2006 - 2015, RT-Thread Development Team +# +# This program 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 Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Change Logs: +# Date Author Notes +# 2015-04-10 Bernard First version +# + +# this script is used to build group with package.json instead of SConscript +import os +from building import * + +def ExtendPackageVar(package, var): + v = [] + if not package.has_key(var): + return v + + for item in package[var]: + v = v + [item] + + return v + +def BuildPackage(package): + import json + f = file(package) + package_json = f.read() + + # get package.json path + cwd = os.path.dirname(package) + + package = json.loads(package_json) + + # check package name + if not package.has_key('name'): + return [] + + # get depends + depend = ExtendPackageVar(package, 'depends') + + src = [] + if package.has_key('source_files'): + for src_file in package['source_files']: + src_file = os.path.join(cwd, src_file) + src += Glob(src_file) + + CPPPATH = [] + if package.has_key('CPPPATH'): + for path in package['CPPPATH']: + if path.startswith('/') and os.path.isdir(path): + CPPPATH = CPPPATH + [path] + else: + CPPPATH = CPPPATH + [os.path.join(cwd, path)] + + CPPDEFINES = ExtendPackageVar(package, 'CPPDEFINES') + + objs = DefineGroup(package['name'], src, depend = depend, CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES) + + return objs