|
|
|
@ -48,6 +48,14 @@ def stringifyUserArguments(args): |
|
|
|
|
raise InvalidArguments('Function accepts only strings, integers, lists and lists thereof.') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ObjectHolder: |
|
|
|
|
def __init__(self, obj): |
|
|
|
|
self.held_object = obj |
|
|
|
|
|
|
|
|
|
def __repr__(self): |
|
|
|
|
return '<Holder: {!r}>'.format(self.held_object) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TryRunResultHolder(InterpreterObject): |
|
|
|
|
def __init__(self, res): |
|
|
|
|
super().__init__() |
|
|
|
@ -117,17 +125,18 @@ class RunProcess(InterpreterObject): |
|
|
|
|
def stderr_method(self, args, kwargs): |
|
|
|
|
return self.stderr |
|
|
|
|
|
|
|
|
|
class ConfigureFileHolder(InterpreterObject): |
|
|
|
|
class ConfigureFileHolder(InterpreterObject, ObjectHolder): |
|
|
|
|
|
|
|
|
|
def __init__(self, subdir, sourcename, targetname, configuration_data): |
|
|
|
|
InterpreterObject.__init__(self) |
|
|
|
|
self.held_object = build.ConfigureFile(subdir, sourcename, targetname, configuration_data) |
|
|
|
|
ObjectHolder.__init__(self, build.ConfigureFile(subdir, sourcename, |
|
|
|
|
targetname, configuration_data)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class EnvironmentVariablesHolder(MutableInterpreterObject): |
|
|
|
|
class EnvironmentVariablesHolder(MutableInterpreterObject, ObjectHolder): |
|
|
|
|
def __init__(self): |
|
|
|
|
super().__init__() |
|
|
|
|
self.held_object = build.EnvironmentVariables() |
|
|
|
|
MutableInterpreterObject.__init__(self) |
|
|
|
|
ObjectHolder.__init__(self, build.EnvironmentVariables()) |
|
|
|
|
self.methods.update({'set': self.set_method, |
|
|
|
|
'append': self.append_method, |
|
|
|
|
'prepend': self.prepend_method, |
|
|
|
@ -158,11 +167,11 @@ class EnvironmentVariablesHolder(MutableInterpreterObject): |
|
|
|
|
self.add_var(self.held_object.prepend, args, kwargs) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ConfigurationDataHolder(MutableInterpreterObject): |
|
|
|
|
class ConfigurationDataHolder(MutableInterpreterObject, ObjectHolder): |
|
|
|
|
def __init__(self): |
|
|
|
|
super().__init__() |
|
|
|
|
MutableInterpreterObject.__init__(self) |
|
|
|
|
self.used = False # These objects become immutable after use in configure_file. |
|
|
|
|
self.held_object = build.ConfigurationData() |
|
|
|
|
ObjectHolder.__init__(self, build.ConfigurationData()) |
|
|
|
|
self.methods.update({'set': self.set_method, |
|
|
|
|
'set10': self.set10_method, |
|
|
|
|
'set_quoted': self.set_quoted_method, |
|
|
|
@ -242,10 +251,10 @@ class ConfigurationDataHolder(MutableInterpreterObject): |
|
|
|
|
# Interpreter objects can not be pickled so we must have |
|
|
|
|
# these wrappers. |
|
|
|
|
|
|
|
|
|
class DependencyHolder(InterpreterObject): |
|
|
|
|
class DependencyHolder(InterpreterObject, ObjectHolder): |
|
|
|
|
def __init__(self, dep): |
|
|
|
|
InterpreterObject.__init__(self) |
|
|
|
|
self.held_object = dep |
|
|
|
|
ObjectHolder.__init__(self, dep) |
|
|
|
|
self.methods.update({'found': self.found_method, |
|
|
|
|
'type_name': self.type_name_method, |
|
|
|
|
'version': self.version_method, |
|
|
|
@ -272,10 +281,10 @@ class DependencyHolder(InterpreterObject): |
|
|
|
|
raise InterpreterException('Variable name must be a string.') |
|
|
|
|
return self.held_object.get_pkgconfig_variable(varname) |
|
|
|
|
|
|
|
|
|
class InternalDependencyHolder(InterpreterObject): |
|
|
|
|
class InternalDependencyHolder(InterpreterObject, ObjectHolder): |
|
|
|
|
def __init__(self, dep): |
|
|
|
|
InterpreterObject.__init__(self) |
|
|
|
|
self.held_object = dep |
|
|
|
|
ObjectHolder.__init__(self, dep) |
|
|
|
|
self.methods.update({'found': self.found_method, |
|
|
|
|
'version': self.version_method, |
|
|
|
|
}) |
|
|
|
@ -286,10 +295,10 @@ class InternalDependencyHolder(InterpreterObject): |
|
|
|
|
def version_method(self, args, kwargs): |
|
|
|
|
return self.held_object.get_version() |
|
|
|
|
|
|
|
|
|
class ExternalProgramHolder(InterpreterObject): |
|
|
|
|
class ExternalProgramHolder(InterpreterObject, ObjectHolder): |
|
|
|
|
def __init__(self, ep): |
|
|
|
|
InterpreterObject.__init__(self) |
|
|
|
|
self.held_object = ep |
|
|
|
|
ObjectHolder.__init__(self, ep) |
|
|
|
|
self.methods.update({'found': self.found_method, |
|
|
|
|
'path': self.path_method}) |
|
|
|
|
|
|
|
|
@ -308,10 +317,10 @@ class ExternalProgramHolder(InterpreterObject): |
|
|
|
|
def get_name(self): |
|
|
|
|
return self.held_object.get_name() |
|
|
|
|
|
|
|
|
|
class ExternalLibraryHolder(InterpreterObject): |
|
|
|
|
class ExternalLibraryHolder(InterpreterObject, ObjectHolder): |
|
|
|
|
def __init__(self, el): |
|
|
|
|
InterpreterObject.__init__(self) |
|
|
|
|
self.held_object = el |
|
|
|
|
ObjectHolder.__init__(self, el) |
|
|
|
|
self.methods.update({'found': self.found_method}) |
|
|
|
|
|
|
|
|
|
def found(self): |
|
|
|
@ -332,11 +341,11 @@ class ExternalLibraryHolder(InterpreterObject): |
|
|
|
|
def get_exe_args(self): |
|
|
|
|
return self.held_object.get_exe_args() |
|
|
|
|
|
|
|
|
|
class GeneratorHolder(InterpreterObject): |
|
|
|
|
class GeneratorHolder(InterpreterObject, ObjectHolder): |
|
|
|
|
def __init__(self, interpreter, args, kwargs): |
|
|
|
|
super().__init__() |
|
|
|
|
InterpreterObject.__init__(self) |
|
|
|
|
self.interpreter = interpreter |
|
|
|
|
self.held_object = build.Generator(args, kwargs) |
|
|
|
|
ObjectHolder.__init__(self, build.Generator(args, kwargs)) |
|
|
|
|
self.methods.update({'process': self.process_method}) |
|
|
|
|
|
|
|
|
|
def process_method(self, args, kwargs): |
|
|
|
@ -345,13 +354,13 @@ class GeneratorHolder(InterpreterObject): |
|
|
|
|
return GeneratedListHolder(gl) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class GeneratedListHolder(InterpreterObject): |
|
|
|
|
class GeneratedListHolder(InterpreterObject, ObjectHolder): |
|
|
|
|
def __init__(self, arg1, extra_args=[]): |
|
|
|
|
super().__init__() |
|
|
|
|
InterpreterObject.__init__(self) |
|
|
|
|
if isinstance(arg1, GeneratorHolder): |
|
|
|
|
self.held_object = build.GeneratedList(arg1.held_object, extra_args) |
|
|
|
|
ObjectHolder.__init__(self, build.GeneratedList(arg1.held_object, extra_args)) |
|
|
|
|
else: |
|
|
|
|
self.held_object = arg1 |
|
|
|
|
ObjectHolder.__init__(self, arg1) |
|
|
|
|
|
|
|
|
|
def __repr__(self): |
|
|
|
|
r = '<{}: {!r}>' |
|
|
|
@ -360,14 +369,15 @@ class GeneratedListHolder(InterpreterObject): |
|
|
|
|
def add_file(self, a): |
|
|
|
|
self.held_object.add_file(a) |
|
|
|
|
|
|
|
|
|
class BuildMachine(InterpreterObject): |
|
|
|
|
class BuildMachine(InterpreterObject, ObjectHolder): |
|
|
|
|
def __init__(self, compilers): |
|
|
|
|
self.compilers = compilers |
|
|
|
|
InterpreterObject.__init__(self) |
|
|
|
|
self.held_object = environment.MachineInfo(environment.detect_system(), |
|
|
|
|
environment.detect_cpu_family(self.compilers), |
|
|
|
|
environment.detect_cpu(self.compilers), |
|
|
|
|
sys.byteorder) |
|
|
|
|
held_object = environment.MachineInfo(environment.detect_system(), |
|
|
|
|
environment.detect_cpu_family(self.compilers), |
|
|
|
|
environment.detect_cpu(self.compilers), |
|
|
|
|
sys.byteorder) |
|
|
|
|
ObjectHolder.__init__(self, held_object) |
|
|
|
|
self.methods.update({'system': self.system_method, |
|
|
|
|
'cpu_family': self.cpu_family_method, |
|
|
|
|
'cpu': self.cpu_method, |
|
|
|
@ -388,7 +398,7 @@ class BuildMachine(InterpreterObject): |
|
|
|
|
|
|
|
|
|
# This class will provide both host_machine and |
|
|
|
|
# target_machine |
|
|
|
|
class CrossMachineInfo(InterpreterObject): |
|
|
|
|
class CrossMachineInfo(InterpreterObject, ObjectHolder): |
|
|
|
|
def __init__(self, cross_info): |
|
|
|
|
InterpreterObject.__init__(self) |
|
|
|
|
minimum_cross_info = {'cpu', 'cpu_family', 'endian', 'system'} |
|
|
|
@ -397,10 +407,11 @@ class CrossMachineInfo(InterpreterObject): |
|
|
|
|
'Machine info is currently {}\n'.format(cross_info) + |
|
|
|
|
'but is missing {}.'.format(minimum_cross_info - set(cross_info))) |
|
|
|
|
self.info = cross_info |
|
|
|
|
self.held_object = environment.MachineInfo(cross_info['system'], |
|
|
|
|
cross_info['cpu_family'], |
|
|
|
|
cross_info['cpu'], |
|
|
|
|
cross_info['endian']) |
|
|
|
|
minfo = environment.MachineInfo(cross_info['system'], |
|
|
|
|
cross_info['cpu_family'], |
|
|
|
|
cross_info['cpu'], |
|
|
|
|
cross_info['endian']) |
|
|
|
|
ObjectHolder.__init__(self, minfo) |
|
|
|
|
self.methods.update({'system': self.system_method, |
|
|
|
|
'cpu': self.cpu_method, |
|
|
|
|
'cpu_family': self.cpu_family_method, |
|
|
|
@ -419,10 +430,10 @@ class CrossMachineInfo(InterpreterObject): |
|
|
|
|
def endian_method(self, args, kwargs): |
|
|
|
|
return self.held_object.endian |
|
|
|
|
|
|
|
|
|
class IncludeDirsHolder(InterpreterObject): |
|
|
|
|
class IncludeDirsHolder(InterpreterObject, ObjectHolder): |
|
|
|
|
def __init__(self, idobj): |
|
|
|
|
super().__init__() |
|
|
|
|
self.held_object = idobj |
|
|
|
|
InterpreterObject.__init__(self) |
|
|
|
|
ObjectHolder.__init__(self, idobj) |
|
|
|
|
|
|
|
|
|
class Headers(InterpreterObject): |
|
|
|
|
|
|
|
|
@ -447,10 +458,10 @@ class Headers(InterpreterObject): |
|
|
|
|
def get_custom_install_dir(self): |
|
|
|
|
return self.custom_install_dir |
|
|
|
|
|
|
|
|
|
class DataHolder(InterpreterObject): |
|
|
|
|
class DataHolder(InterpreterObject, ObjectHolder): |
|
|
|
|
def __init__(self, data): |
|
|
|
|
super().__init__() |
|
|
|
|
self.held_object = data |
|
|
|
|
InterpreterObject.__init__(self) |
|
|
|
|
ObjectHolder.__init__(self, data) |
|
|
|
|
|
|
|
|
|
def get_source_subdir(self): |
|
|
|
|
return self.held_object.source_subdir |
|
|
|
@ -495,20 +506,20 @@ class Man(InterpreterObject): |
|
|
|
|
def get_sources(self): |
|
|
|
|
return self.sources |
|
|
|
|
|
|
|
|
|
class GeneratedObjectsHolder(InterpreterObject): |
|
|
|
|
class GeneratedObjectsHolder(InterpreterObject, ObjectHolder): |
|
|
|
|
def __init__(self, held_object): |
|
|
|
|
super().__init__() |
|
|
|
|
self.held_object = held_object |
|
|
|
|
InterpreterObject.__init__(self) |
|
|
|
|
ObjectHolder.__init__(self, held_object) |
|
|
|
|
|
|
|
|
|
class TargetHolder(InterpreterObject): |
|
|
|
|
def __init__(self): |
|
|
|
|
super().__init__() |
|
|
|
|
class TargetHolder(InterpreterObject, ObjectHolder): |
|
|
|
|
def __init__(self, target, interp): |
|
|
|
|
InterpreterObject.__init__(self) |
|
|
|
|
ObjectHolder.__init__(self, target) |
|
|
|
|
self.interpreter = interp |
|
|
|
|
|
|
|
|
|
class BuildTargetHolder(TargetHolder): |
|
|
|
|
def __init__(self, target, interp): |
|
|
|
|
super().__init__() |
|
|
|
|
self.held_object = target |
|
|
|
|
self.interpreter = interp |
|
|
|
|
super().__init__(target, interp) |
|
|
|
|
self.methods.update({'extract_objects': self.extract_objects_method, |
|
|
|
|
'extract_all_objects': self.extract_all_objects_method, |
|
|
|
|
'get_id': self.get_id_method, |
|
|
|
@ -566,16 +577,14 @@ class JarHolder(BuildTargetHolder): |
|
|
|
|
def __init__(self, target, interp): |
|
|
|
|
super().__init__(target, interp) |
|
|
|
|
|
|
|
|
|
class CustomTargetIndexHolder(InterpreterObject): |
|
|
|
|
class CustomTargetIndexHolder(InterpreterObject, ObjectHolder): |
|
|
|
|
def __init__(self, object_to_hold): |
|
|
|
|
super().__init__() |
|
|
|
|
self.held_object = object_to_hold |
|
|
|
|
InterpreterObject.__init__(self) |
|
|
|
|
ObjectHolder.__init__(self, object_to_hold) |
|
|
|
|
|
|
|
|
|
class CustomTargetHolder(TargetHolder): |
|
|
|
|
def __init__(self, object_to_hold, interp): |
|
|
|
|
super().__init__() |
|
|
|
|
self.held_object = object_to_hold |
|
|
|
|
self.interpreter = interp |
|
|
|
|
def __init__(self, target, interp): |
|
|
|
|
super().__init__(target, interp) |
|
|
|
|
self.methods.update({'full_path': self.full_path_method, |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
@ -596,10 +605,10 @@ class CustomTargetHolder(TargetHolder): |
|
|
|
|
def __delitem__(self, index): |
|
|
|
|
raise InterpreterException('Cannot delete a member of a CustomTarget') |
|
|
|
|
|
|
|
|
|
class RunTargetHolder(InterpreterObject): |
|
|
|
|
class RunTargetHolder(InterpreterObject, ObjectHolder): |
|
|
|
|
def __init__(self, name, command, args, dependencies, subdir): |
|
|
|
|
super().__init__() |
|
|
|
|
self.held_object = build.RunTarget(name, command, args, dependencies, subdir) |
|
|
|
|
InterpreterObject.__init__(self) |
|
|
|
|
ObjectHolder.__init__(self, build.RunTarget(name, command, args, dependencies, subdir)) |
|
|
|
|
|
|
|
|
|
def __repr__(self): |
|
|
|
|
r = '<{} {}: {}>' |
|
|
|
@ -625,11 +634,11 @@ class Test(InterpreterObject): |
|
|
|
|
def get_name(self): |
|
|
|
|
return self.name |
|
|
|
|
|
|
|
|
|
class SubprojectHolder(InterpreterObject): |
|
|
|
|
class SubprojectHolder(InterpreterObject, ObjectHolder): |
|
|
|
|
|
|
|
|
|
def __init__(self, subinterpreter): |
|
|
|
|
super().__init__() |
|
|
|
|
self.held_object = subinterpreter |
|
|
|
|
InterpreterObject.__init__(self) |
|
|
|
|
ObjectHolder.__init__(self, subinterpreter) |
|
|
|
|
self.methods.update({'get_variable': self.get_variable_method, |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
@ -1056,11 +1065,11 @@ ModuleState = namedtuple('ModuleState', [ |
|
|
|
|
'man', 'global_args', 'project_args', 'build_machine', 'host_machine', |
|
|
|
|
'target_machine']) |
|
|
|
|
|
|
|
|
|
class ModuleHolder(InterpreterObject): |
|
|
|
|
class ModuleHolder(InterpreterObject, ObjectHolder): |
|
|
|
|
def __init__(self, modname, module, interpreter): |
|
|
|
|
InterpreterObject.__init__(self) |
|
|
|
|
ObjectHolder.__init__(self, module) |
|
|
|
|
self.modname = modname |
|
|
|
|
self.held_object = module |
|
|
|
|
self.interpreter = interpreter |
|
|
|
|
|
|
|
|
|
def method_call(self, method_name, args, kwargs): |
|
|
|
|