aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/rewriter.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2017-07-15 08:40:36 -0400
committerJussi Pakkanen <jpakkane@gmail.com>2017-08-02 22:00:09 +0300
commit0dd9ace5ccbae7c48f2675dfe387e6b7e778f664 (patch)
tree96058ce560c2675389a066c0b3d44343c3448c3f /mesonbuild/rewriter.py
parentc2e40650e8b0b74e1800e563c5a3774501bc6477 (diff)
downloadmeson-0dd9ace5ccbae7c48f2675dfe387e6b7e778f664.zip
meson-0dd9ace5ccbae7c48f2675dfe387e6b7e778f664.tar.gz
meson-0dd9ace5ccbae7c48f2675dfe387e6b7e778f664.tar.bz2
Turned rewriter into an internal module.
Diffstat (limited to 'mesonbuild/rewriter.py')
-rwxr-xr-xmesonbuild/rewriter.py65
1 files changed, 65 insertions, 0 deletions
diff --git a/mesonbuild/rewriter.py b/mesonbuild/rewriter.py
new file mode 100755
index 0000000..b88c5ef
--- /dev/null
+++ b/mesonbuild/rewriter.py
@@ -0,0 +1,65 @@
+#!/usr/bin/env python3
+# Copyright 2016 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.
+
+# This class contains the basic functionality needed to run any interpreter
+# or an interpreter-based tool.
+
+# This tool is used to manipulate an existing Meson build definition.
+#
+# - add a file to a target
+# - remove files from a target
+# - move targets
+# - reindent?
+
+import mesonbuild.astinterpreter
+from mesonbuild.mesonlib import MesonException
+from mesonbuild import mlog
+import sys, traceback
+import argparse
+
+parser = argparse.ArgumentParser()
+
+parser.add_argument('--sourcedir', default='.',
+ help='Path to source directory.')
+parser.add_argument('--target', default=None,
+ help='Name of target to edit.')
+parser.add_argument('--filename', default=None,
+ help='Name of source file to add or remove to target.')
+parser.add_argument('commands', nargs='+')
+
+def run(args):
+ options = parser.parse_args(args)
+ if options.target is None or options.filename is None:
+ sys.exit("Must specify both target and filename.")
+ print('This tool is highly experimental, use with care.')
+ rewriter = mesonbuild.astinterpreter.AstInterpreter(options.sourcedir, '')
+ try:
+ if options.commands[0] == 'add':
+ rewriter.add_source(options.target, options.filename)
+ elif options.commands[0] == 'remove':
+ rewriter.remove_source(options.target, options.filename)
+ else:
+ sys.exit('Unknown command: ' + options.commands[0])
+ except Exception as e:
+ if isinstance(e, MesonException):
+ if hasattr(e, 'file') and hasattr(e, 'lineno') and hasattr(e, 'colno'):
+ mlog.log(mlog.red('\nMeson encountered an error in file %s, line %d, column %d:' % (e.file, e.lineno, e.colno)))
+ else:
+ mlog.log(mlog.red('\nMeson encountered an error:'))
+ mlog.log(e)
+ else:
+ traceback.print_exc()
+ return 1
+ return 0