aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/scripts
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@redhat.com>2019-10-17 12:47:37 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2019-10-22 20:48:24 +0300
commit1ed70e22b9e42b5710e52252ce76212d79737186 (patch)
treebf5fd6b1b69a33ce26b3bcdbc38c8e80a45933ff /mesonbuild/scripts
parentcce172432be30233e9876264c259342d2a2006ad (diff)
downloadmeson-1ed70e22b9e42b5710e52252ce76212d79737186.zip
meson-1ed70e22b9e42b5710e52252ce76212d79737186.tar.gz
meson-1ed70e22b9e42b5710e52252ce76212d79737186.tar.bz2
Add source tags targets
Diffstat (limited to 'mesonbuild/scripts')
-rw-r--r--mesonbuild/scripts/tags.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/mesonbuild/scripts/tags.py b/mesonbuild/scripts/tags.py
new file mode 100644
index 0000000..431bb5f
--- /dev/null
+++ b/mesonbuild/scripts/tags.py
@@ -0,0 +1,51 @@
+# Copyright 2019 The Meson development team
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import os
+import subprocess
+from pathlib import Path
+
+
+def ls_as_bytestream():
+ if os.path.exists('.git'):
+ return subprocess.run(['git', 'ls-tree', '-r', '--name-only', 'HEAD'],
+ stdout=subprocess.PIPE).stdout
+
+ files = [str(p) for p in Path('.').glob('**/*')
+ if not p.is_dir() and
+ not next((x for x in p.parts if x.startswith('.')), None)]
+ return '\n'.join(files).encode()
+
+
+def cscope():
+ ls = b'\n'.join([b'"%s"' % f for f in ls_as_bytestream().split()])
+ return subprocess.run(['cscope', '-v', '-b', '-i-'], input=ls).returncode
+
+
+def ctags():
+ ls = ls_as_bytestream()
+ return subprocess.run(['ctags', '-L-'], input=ls).returncode
+
+
+def etags():
+ ls = ls_as_bytestream()
+ return subprocess.run(['etags', '-'], input=ls).returncode
+
+
+def run(args):
+ tool_name = args[0]
+ srcdir_name = args[1]
+ os.chdir(srcdir_name)
+ assert tool_name in ['cscope', 'ctags', 'etags']
+ return globals()[tool_name]()