aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/astinterpreter.py
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/astinterpreter.py')
-rw-r--r--mesonbuild/astinterpreter.py41
1 files changed, 31 insertions, 10 deletions
diff --git a/mesonbuild/astinterpreter.py b/mesonbuild/astinterpreter.py
index 247f7d9..4a42053 100644
--- a/mesonbuild/astinterpreter.py
+++ b/mesonbuild/astinterpreter.py
@@ -20,7 +20,7 @@ from . import environment
from .interpreterbase import InterpreterException
-import os
+import os, sys
class DontCareObject(interpreterbase.InterpreterObject):
pass
@@ -40,6 +40,8 @@ class MockCustomTarget(interpreterbase.InterpreterObject):
class MockRunTarget(interpreterbase.InterpreterObject):
pass
+ADD_SOURCE = 0
+
class AstInterpreter(interpreterbase.InterpreterBase):
def __init__(self, source_root, subdir):
super().__init__(source_root, subdir)
@@ -86,28 +88,33 @@ class AstInterpreter(interpreterbase.InterpreterBase):
'is_variable' : self.func_is_variable,
})
- def func_do_nothing(self, *args, **kwargs):
+ def func_do_nothing(self, node, args, kwargs):
return True
def method_call(self, node):
return True
- def func_executable(self, *args, **kwargs):
+ def func_executable(self, node, args, kwargs):
+ if args[0] == self.targetname:
+ if self.operation == ADD_SOURCE:
+ self.add_source_to_target(node, args, kwargs)
+ else:
+ raise NotImplementedError('Bleep bloop')
return MockExecutable()
- def func_static_lib(self, *args, **kwargs):
+ def func_static_lib(self, node, args, kwargs):
return MockStaticLibrary()
- def func_shared_lib(self, *args, **kwargs):
+ def func_shared_lib(self, node, args, kwargs):
return MockSharedLibrary()
- def func_library(self, *args, **kwargs):
- return self.func_shared_lib(*args, **kwargs)
+ def func_library(self, node, args, kwargs):
+ return self.func_shared_lib(node, args, kwargs)
- def func_custom_target(self, *args, **kwargs):
+ def func_custom_target(self, node, args, kwargs):
return MockCustomTarget()
- def func_run_target(self, *args, **kwargs):
+ def func_run_target(self, node, args, kwargs):
return MockRunTarget()
def func_subdir(self, node, args, kwargs):
@@ -144,12 +151,26 @@ class AstInterpreter(interpreterbase.InterpreterBase):
def evaluate_indexing(self, node):
return 0
- def dump(self):
+ def transform(self):
self.load_root_meson_file()
self.sanity_check_ast()
self.parse_project()
self.run()
print('AST here')
+ def add_source(self, targetname, filename):
+ self.operation = ADD_SOURCE
+ self.targetname = targetname
+ self.filename = filename
+ self.transform()
+
def unknown_function_called(self, func_name):
mlog.warning('Unknown function called: ' + func_name)
+
+ def add_source_to_target(self, node, args, kwargs):
+ namespan = node.args.arguments[0].bytespan
+ buildfilename = os.path.join(self.source_root, self.subdir, environment.build_filename)
+ raw_data = open(buildfilename, 'r').read()
+ updated = raw_data[0:namespan[1]] + (", '%s'" % self.filename) + raw_data[namespan[1]:]
+ open(buildfilename, 'w').write(updated)
+ sys.exit(0)