diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2016-11-20 01:59:16 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2016-11-20 01:59:16 +0200 |
commit | 805847c4a0b081779fc376930f16c0c51032d9ce (patch) | |
tree | 75d4ea70a32a19b7b6ed92b1f3927f86ce97522f /mesonbuild/astinterpreter.py | |
parent | 87340136900be1442a4c408a00a08afed02e1873 (diff) | |
download | meson-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.py | 22 |
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])) |