diff options
| author | Grissiom <[email protected]> | 2013-06-19 17:57:22 +0800 |
|---|---|---|
| committer | Grissiom <[email protected]> | 2013-06-19 18:02:03 +0800 |
| commit | 3ee4a1850635f7d36bbbc78eecbf15364ecb14e6 (patch) | |
| tree | 91232da4c7ef4aa5ca4dae435e33b1290dc7114f /tools/cscope.py | |
| parent | ce176ee1d6ff3bc0902335601af8b1a17cdac3ff (diff) | |
tools: add an option to generate cscope database
When --cscope option is given to Scons, it will generate a cscope
cross-reference database in current directory, which is useful in
Vim(and other cscope-aware text editors). For example, `scons -s
--cscope` will do nothing except generating the database. You can use
this option with other options together.
It is inspired by the `make cscope` of Linux.
Diffstat (limited to 'tools/cscope.py')
| -rw-r--r-- | tools/cscope.py | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/tools/cscope.py b/tools/cscope.py new file mode 100644 index 0000000000..18568b4c35 --- /dev/null +++ b/tools/cscope.py @@ -0,0 +1,37 @@ +import os + +def _get_src(project): + li = [] + for group in project: + for f in group['src']: + li.append(os.path.normpath(f.rfile().abspath)) + return li + +def _get_header_dir(dirp): + li = [] + for root, dirs, files in os.walk(dirp): + for d in dirs: + fpath = os.path.join(root, d) + li.extend(_get_header_dir(fpath)) + + for f in files: + if f[-2:] == '.h': + fpath = os.path.join(root, f) + li.append(os.path.normpath(fpath)) + return li + +def _get_header(project): + li = [] + for g in project: + for d in g.get('CPPPATH', []): + li.extend(_get_header_dir(d)) + return li + +def CscopeDatabase(project): + files = set(_get_src(project) + _get_header(project)) + with open('cscope.files', 'w') as db: + db.write('-k\n-q\n') + db.write('\n'.join(files)) + db.flush() # let cscope see the full content + os.system('cscope -b') + |
