1*10465441SEvalZero# 2*10465441SEvalZero# File : package.py 3*10465441SEvalZero# This file is part of RT-Thread RTOS 4*10465441SEvalZero# COPYRIGHT (C) 2006 - 2015, RT-Thread Development Team 5*10465441SEvalZero# 6*10465441SEvalZero# This program is free software; you can redistribute it and/or modify 7*10465441SEvalZero# it under the terms of the GNU General Public License as published by 8*10465441SEvalZero# the Free Software Foundation; either version 2 of the License, or 9*10465441SEvalZero# (at your option) any later version. 10*10465441SEvalZero# 11*10465441SEvalZero# This program is distributed in the hope that it will be useful, 12*10465441SEvalZero# but WITHOUT ANY WARRANTY; without even the implied warranty of 13*10465441SEvalZero# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14*10465441SEvalZero# GNU General Public License for more details. 15*10465441SEvalZero# 16*10465441SEvalZero# You should have received a copy of the GNU General Public License along 17*10465441SEvalZero# with this program; if not, write to the Free Software Foundation, Inc., 18*10465441SEvalZero# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19*10465441SEvalZero# 20*10465441SEvalZero# Change Logs: 21*10465441SEvalZero# Date Author Notes 22*10465441SEvalZero# 2015-04-10 Bernard First version 23*10465441SEvalZero# 24*10465441SEvalZero 25*10465441SEvalZero# this script is used to build group with package.json instead of SConscript 26*10465441SEvalZeroimport os 27*10465441SEvalZerofrom building import * 28*10465441SEvalZero 29*10465441SEvalZerodef ExtendPackageVar(package, var): 30*10465441SEvalZero v = [] 31*10465441SEvalZero if var not in package: 32*10465441SEvalZero return v 33*10465441SEvalZero 34*10465441SEvalZero for item in package[var]: 35*10465441SEvalZero v = v + [item] 36*10465441SEvalZero 37*10465441SEvalZero return v 38*10465441SEvalZero 39*10465441SEvalZerodef BuildPackage(package): 40*10465441SEvalZero import json 41*10465441SEvalZero f = open(package) 42*10465441SEvalZero package_json = f.read() 43*10465441SEvalZero 44*10465441SEvalZero # get package.json path 45*10465441SEvalZero cwd = os.path.dirname(package) 46*10465441SEvalZero 47*10465441SEvalZero package = json.loads(package_json) 48*10465441SEvalZero 49*10465441SEvalZero # check package name 50*10465441SEvalZero if 'name' not in package: 51*10465441SEvalZero return [] 52*10465441SEvalZero 53*10465441SEvalZero # get depends 54*10465441SEvalZero depend = ExtendPackageVar(package, 'depends') 55*10465441SEvalZero 56*10465441SEvalZero src = [] 57*10465441SEvalZero if 'source_files' in package: 58*10465441SEvalZero for src_file in package['source_files']: 59*10465441SEvalZero src_file = os.path.join(cwd, src_file) 60*10465441SEvalZero src += Glob(src_file) 61*10465441SEvalZero 62*10465441SEvalZero CPPPATH = [] 63*10465441SEvalZero if 'CPPPATH' in package: 64*10465441SEvalZero for path in package['CPPPATH']: 65*10465441SEvalZero if path.startswith('/') and os.path.isdir(path): 66*10465441SEvalZero CPPPATH = CPPPATH + [path] 67*10465441SEvalZero else: 68*10465441SEvalZero CPPPATH = CPPPATH + [os.path.join(cwd, path)] 69*10465441SEvalZero 70*10465441SEvalZero CPPDEFINES = ExtendPackageVar(package, 'CPPDEFINES') 71*10465441SEvalZero 72*10465441SEvalZero objs = DefineGroup(package['name'], src, depend = depend, CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES) 73*10465441SEvalZero 74*10465441SEvalZero return objs 75