1# 2# File : cscope.py 3# This file is part of RT-Thread RTOS 4# COPYRIGHT (C) 2006 - 2015, RT-Thread Development Team 5# 6# This program is free software; you can redistribute it and/or modify 7# it under the terms of the GNU General Public License as published by 8# the Free Software Foundation; either version 2 of the License, or 9# (at your option) any later version. 10# 11# This program is distributed in the hope that it will be useful, 12# but WITHOUT ANY WARRANTY; without even the implied warranty of 13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14# GNU General Public License for more details. 15# 16# You should have received a copy of the GNU General Public License along 17# with this program; if not, write to the Free Software Foundation, Inc., 18# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19# 20# Change Logs: 21# Date Author Notes 22# 2015-01-20 Bernard Add copyright information 23# 24 25import os 26 27def _get_src(project): 28 li = [] 29 for group in project: 30 for f in group['src']: 31 li.append(os.path.normpath(f.rfile().abspath)) 32 return li 33 34def _get_header_dir(dirp): 35 li = [] 36 for root, dirs, files in os.walk(dirp): 37 for d in dirs: 38 fpath = os.path.join(root, d) 39 li.extend(_get_header_dir(fpath)) 40 41 for f in files: 42 if f[-2:] == '.h': 43 fpath = os.path.join(root, f) 44 li.append(os.path.normpath(fpath)) 45 return li 46 47def _get_header(project): 48 li = [] 49 for g in project: 50 for d in g.get('CPPPATH', []): 51 li.extend(_get_header_dir(d)) 52 return li 53 54def CscopeDatabase(project): 55 files = set(_get_src(project) + _get_header(project)) 56 with open('cscope.files', 'w') as db: 57 db.write('-k\n-q\n') 58 db.write('\n'.join(files)) 59 db.flush() # let cscope see the full content 60 os.system('cscope -b') 61 62