aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/astinterpreter.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2016-11-20 01:59:16 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2016-11-20 01:59:16 +0200
commit805847c4a0b081779fc376930f16c0c51032d9ce (patch)
tree75d4ea70a32a19b7b6ed92b1f3927f86ce97522f /mesonbuild/astinterpreter.py
parent87340136900be1442a4c408a00a08afed02e1873 (diff)
downloadmeson-805847c4a0b081779fc376930f16c0c51032d9ce.zip
meson-805847c4a0b081779fc376930f16c0c51032d9ce.tar.gz
meson-805847c4a0b081779fc376930f16c0c51032d9ce.tar.bz2
Can remove source files from targets. But in a super hacky way.
Diffstat (limited to 'mesonbuild/astinterpreter.py')
-rw-r--r--mesonbuild/astinterpreter.py22
1 files changed, 22 insertions, 0 deletions
diff --git a/mesonbuild/astinterpreter.py b/mesonbuild/astinterpreter.py
index 4a42053..29a7932 100644
--- a/mesonbuild/astinterpreter.py
+++ b/mesonbuild/astinterpreter.py
@@ -41,6 +41,7 @@ class MockRunTarget(interpreterbase.InterpreterObject):
pass
ADD_SOURCE = 0
+REMOVE_SOURCE = 1
class AstInterpreter(interpreterbase.InterpreterBase):
def __init__(self, source_root, subdir):
@@ -98,6 +99,8 @@ class AstInterpreter(interpreterbase.InterpreterBase):
if args[0] == self.targetname:
if self.operation == ADD_SOURCE:
self.add_source_to_target(node, args, kwargs)
+ elif self.operation == REMOVE_SOURCE:
+ self.remove_source_from_target(node, args, kwargs)
else:
raise NotImplementedError('Bleep bloop')
return MockExecutable()
@@ -164,6 +167,12 @@ class AstInterpreter(interpreterbase.InterpreterBase):
self.filename = filename
self.transform()
+ def remove_source(self, targetname, filename):
+ self.operation = REMOVE_SOURCE
+ self.targetname = targetname
+ self.filename = filename
+ self.transform()
+
def unknown_function_called(self, func_name):
mlog.warning('Unknown function called: ' + func_name)
@@ -174,3 +183,16 @@ class AstInterpreter(interpreterbase.InterpreterBase):
updated = raw_data[0:namespan[1]] + (", '%s'" % self.filename) + raw_data[namespan[1]:]
open(buildfilename, 'w').write(updated)
sys.exit(0)
+
+ def remove_source_from_target(self, node, args, kwargs):
+ for i in range(len(args)):
+ if self.filename == args[i]:
+ namespan = node.args.arguments[i].bytespan
+ # SUPER HACK! Should track bytespans of commas instead.
+ namespan = (namespan[0]-2, namespan[1])
+ buildfilename = os.path.join(self.source_root, self.subdir, environment.build_filename)
+ raw_data = open(buildfilename, 'r').read()
+ updated = raw_data[0:namespan[0]] + raw_data[namespan[1]:]
+ open(buildfilename, 'w').write(updated)
+ sys.exit(0)
+ sys.exit('Could not find source %s in target %s.' % (self.filename, args[0]))