|
|
|
@ -305,29 +305,35 @@ class GeneratedListHolder(InterpreterObject): |
|
|
|
|
class Build(InterpreterObject): |
|
|
|
|
def __init__(self): |
|
|
|
|
InterpreterObject.__init__(self) |
|
|
|
|
self.methods.update({'name' : self.get_name_method, |
|
|
|
|
self.methods.update({'name' : self.name_method, |
|
|
|
|
'endian' : self.endian_method, |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
def get_name_method(self, args, kwargs): |
|
|
|
|
def name_method(self, args, kwargs): |
|
|
|
|
return platform.system().lower() |
|
|
|
|
|
|
|
|
|
# This currently returns data for the current environment. |
|
|
|
|
# It should return info for the target host. |
|
|
|
|
class Host(InterpreterObject): |
|
|
|
|
def __init__(self, envir): |
|
|
|
|
def endian_method(self, args, kwargs): |
|
|
|
|
return sys.byteorder |
|
|
|
|
|
|
|
|
|
# This class will provide both host_machine and |
|
|
|
|
# target_machine |
|
|
|
|
class CrossMachineInfo(InterpreterObject): |
|
|
|
|
def __init__(self, cross_info): |
|
|
|
|
InterpreterObject.__init__(self) |
|
|
|
|
self.environment = envir |
|
|
|
|
self.methods.update({'name' : self.get_name_method, |
|
|
|
|
'is_big_endian' : self.is_big_endian_method, |
|
|
|
|
self.info = cross_info |
|
|
|
|
self.methods.update({'name' : self.name_method, |
|
|
|
|
'cpu' : self.cpu_method, |
|
|
|
|
'endian' : self.endian_method, |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
def get_name_method(self, args, kwargs): |
|
|
|
|
if self.environment.is_cross_build(): |
|
|
|
|
return self.environment.cross_info.config['hostmachine']['name'] |
|
|
|
|
return platform.system().lower() |
|
|
|
|
def name_method(self, args, kwargs): |
|
|
|
|
return self.info['name'] |
|
|
|
|
|
|
|
|
|
def is_big_endian_method(self, args, kwargs): |
|
|
|
|
return sys.byteorder != 'little' |
|
|
|
|
def cpu_method(self, args, kwargs): |
|
|
|
|
return self.info['cpu'] |
|
|
|
|
|
|
|
|
|
def endian_method(self, args, kwargs): |
|
|
|
|
return self.info['endian'] |
|
|
|
|
|
|
|
|
|
class IncludeDirsHolder(InterpreterObject): |
|
|
|
|
def __init__(self, curdir, dirs): |
|
|
|
@ -778,7 +784,7 @@ class Interpreter(): |
|
|
|
|
self.subproject_dir = subproject_dir |
|
|
|
|
option_file = os.path.join(self.source_root, self.subdir, 'meson_options.txt') |
|
|
|
|
if os.path.exists(option_file): |
|
|
|
|
oi = optinterpreter.OptionInterpreter(self.subproject,\ |
|
|
|
|
oi = optinterpreter.OptionInterpreter(self.subproject, \ |
|
|
|
|
self.build.environment.cmd_line_options) |
|
|
|
|
oi.process(option_file) |
|
|
|
|
self.build.environment.merge_options(oi.options) |
|
|
|
@ -797,8 +803,20 @@ class Interpreter(): |
|
|
|
|
self.sanity_check_ast() |
|
|
|
|
self.variables = {} |
|
|
|
|
self.builtin = {} |
|
|
|
|
self.builtin['build'] = Build() |
|
|
|
|
self.builtin['host'] = Host(build.environment) |
|
|
|
|
self.builtin['build_machine'] = Build() |
|
|
|
|
if not self.build.environment.is_cross_build(): |
|
|
|
|
self.builtin['host_machine'] = self.builtin['build_machine'] |
|
|
|
|
self.builtin['target_machine'] = self.builtin['build_machine'] |
|
|
|
|
else: |
|
|
|
|
cross_info = self.build.environment.cross_info |
|
|
|
|
if cross_info.has_host(): |
|
|
|
|
self.builtin['host_machine'] = CrossMachineInfo(cross_info.config['host_machine']) |
|
|
|
|
else: |
|
|
|
|
self.builtin['host_machine'] = self.builtin['build_machine'] |
|
|
|
|
if cross_info.has_target(): |
|
|
|
|
self.builtin['target_machine'] = CrossMachineInfo(cross_info.config['target_machine']) |
|
|
|
|
else: |
|
|
|
|
self.builtin['target_machine'] = self.builtin['host_machine'] |
|
|
|
|
self.builtin['meson'] = MesonMain(build, self) |
|
|
|
|
self.environment = build.environment |
|
|
|
|
self.build_func_dict() |
|
|
|
@ -1155,7 +1173,7 @@ class Interpreter(): |
|
|
|
|
|
|
|
|
|
@stringArgs |
|
|
|
|
def func_project(self, node, args, kwargs): |
|
|
|
|
if len(args)< 2: |
|
|
|
|
if len(args) < 2: |
|
|
|
|
raise InvalidArguments('Not enough arguments to project(). Needs at least the project name and one language') |
|
|
|
|
if list(kwargs.keys()) != ['subproject_dir'] and len(kwargs) != 0: |
|
|
|
|
raise InvalidArguments('project() only accepts the keyword argument "subproject_dir"') |
|
|
|
@ -1504,7 +1522,7 @@ class Interpreter(): |
|
|
|
|
|
|
|
|
|
@stringArgs |
|
|
|
|
def func_install_subdir(self, node, args, kwargs): |
|
|
|
|
if len(args ) != 1: |
|
|
|
|
if len(args) != 1: |
|
|
|
|
raise InvalidArguments('Install_subdir requires exactly one argument.') |
|
|
|
|
if not 'install_dir' in kwargs: |
|
|
|
|
raise InvalidArguments('Missing keyword argument install_dir') |
|
|
|
|