aboutsummaryrefslogtreecommitdiff
path: root/interpreter.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2015-03-09 17:16:32 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2015-03-09 17:16:32 +0200
commit6e6ac02eaf265c6688c528175bce71ea45549ca7 (patch)
tree4f1436e628289ac43b950be8a73c64ac5382e730 /interpreter.py
parent3f46cd7fb30e3a478c44cac565d2ae12c72a0c25 (diff)
downloadmeson-6e6ac02eaf265c6688c528175bce71ea45549ca7.zip
meson-6e6ac02eaf265c6688c528175bce71ea45549ca7.tar.gz
meson-6e6ac02eaf265c6688c528175bce71ea45549ca7.tar.bz2
Major refactoring to move Qt5 from core into a module. Rules are written but moc/uic/rrc are not generated yet.
Diffstat (limited to 'interpreter.py')
-rw-r--r--interpreter.py48
1 files changed, 31 insertions, 17 deletions
diff --git a/interpreter.py b/interpreter.py
index 064a2e9..d9a845c 100644
--- a/interpreter.py
+++ b/interpreter.py
@@ -382,9 +382,9 @@ class GeneratedObjectsHolder(InterpreterObject):
self.held_object = held_object
class BuildTargetHolder(InterpreterObject):
- def __init__(self, targetttype, name, subdir, is_cross, sources, objects, environment, kwargs):
+ def __init__(self, target):
super().__init__()
- self.held_object = targetttype(name, subdir, is_cross, sources, objects, environment, kwargs)
+ self.held_object = target
self.methods.update({'extract_objects' : self.extract_objects_method})
def is_cross(self):
@@ -395,16 +395,16 @@ class BuildTargetHolder(InterpreterObject):
return GeneratedObjectsHolder(gobjs)
class ExecutableHolder(BuildTargetHolder):
- def __init__(self, name, subdir, is_cross, sources, objects, environment, kwargs):
- super().__init__(build.Executable, name, subdir, is_cross, sources, objects, environment, kwargs)
+ def __init__(self, target):
+ super().__init__(target)
class StaticLibraryHolder(BuildTargetHolder):
- def __init__(self, name, subdir, is_cross, sources, objects, environment, kwargs):
- super().__init__(build.StaticLibrary, name, subdir, is_cross, sources, objects, environment, kwargs)
+ def __init__(self, target):
+ super().__init__(target)
class SharedLibraryHolder(BuildTargetHolder):
- def __init__(self, name, subdir, is_cross, sources, objects, environment, kwargs):
- super().__init__(build.SharedLibrary, name, subdir, is_cross, sources, objects, environment, kwargs)
+ def __init__(self, target):
+ super().__init__(target)
class JarHolder(BuildTargetHolder):
def __init__(self, name, subdir, is_cross, sources, objects, environment, kwargs):
@@ -600,7 +600,7 @@ class ModuleHolder(InterpreterObject):
def __init__(self, modname, interpreter):
InterpreterObject.__init__(self)
self.modname = modname
- self.m = importlib.import_module('modules.' + modname)
+ self.m = importlib.import_module('modules.' + modname).initialize()
self.interpreter = interpreter
def method_call(self, method_name, args, kwargs):
@@ -612,6 +612,7 @@ class ModuleHolder(InterpreterObject):
state.build_to_src = os.path.relpath(self.interpreter.environment.get_source_dir(),
self.interpreter.environment.get_build_dir())
state.subdir = self.interpreter.subdir
+ state.environment = self.interpreter.environment
value = fn(state, args, kwargs)
return self.interpreter.module_method_callback(value)
@@ -784,6 +785,11 @@ class Interpreter():
outvalues.append(CustomTargetHolder(v))
elif isinstance(v, int) or isinstance(v, str):
outvalues.append(v)
+ elif isinstance(v, build.Executable):
+ if v.name in self.build.targets:
+ raise InterpreterException('Tried to create target %s which already exists.' % v.name)
+ self.build.targets[v.name] = v
+ outvalues.append(ExecutableHolder(v))
else:
raise InterpreterException('Module returned a value of unknown type.')
if len(outvalues) == 1 and unwrap_single:
@@ -852,7 +858,9 @@ class Interpreter():
if not isinstance(modname, str):
raise InvalidCode('Argument to import was not a string')
if not modname in self.modules:
- self.modules[modname] = ModuleHolder(modname, self)
+ mh = mh = ModuleHolder(modname, self)
+ self.modules[modname] = mh
+ self.build.modules[modname] = mh.m
return self.modules[modname]
def set_variable(self, varname, variable):
@@ -1434,6 +1442,8 @@ class Interpreter():
return args
if isinstance(args, InterpreterObject):
return args
+ if isinstance(args, int):
+ return args
result = []
for a in args:
if isinstance(a, list):
@@ -1445,7 +1455,7 @@ class Interpreter():
result.append(a)
return result
- def build_target(self, node, args, kwargs, targetclass):
+ def build_target(self, node, args, kwargs, targetholder):
args = self.flatten(args)
name = args[0]
sources = args[1:]
@@ -1472,15 +1482,19 @@ class Interpreter():
if name in self.build.targets:
raise InvalidCode('Tried to create target "%s", but a target of that name already exists.' % name)
self.check_sources_exist(os.path.join(self.source_root, self.subdir), sources)
- l = targetclass(name, self.subdir, is_cross, sources, objs, self.environment, kwargs)
+ if isinstance(targetholder, ExecutableHolder):
+ targetclass = build.Executable
+ elif isinstance(targetholder, SharedLibraryHolder):
+ targetclass = build.SharedLibrary
+ elif isinstance(targetholder, StaticLibraryHolder):
+ targetclass = build.StaticLibrary
+ else:
+ raise RuntimeError('Unreachable code')
+ target = targetclass(name, self.subdir, is_cross, sources, objs, self.environment, kwargs)
+ l = targetholder(target)
self.build.targets[name] = l.held_object
if name not in self.coredata.target_guids:
self.coredata.target_guids[name] = str(uuid.uuid4()).upper()
- if self.environment.is_cross_build() and l.is_cross:
- txt = ' cross build '
- else:
- txt = ' build '
- displayname = os.path.join(l.held_object.subdir, name)
self.global_args_frozen = True
return l