diff options
author | Xavier Claessens <xavier.claessens@collabora.com> | 2018-05-13 10:36:58 -0400 |
---|---|---|
committer | Nirbheek Chauhan <nirbheek.chauhan@gmail.com> | 2018-06-06 20:02:37 +0000 |
commit | 5af98d16b93139f11f8b42cc0c4d613548dd1d69 (patch) | |
tree | 00ca08712ece3f064cd9ae4117681f73929f96c2 /mesonbuild/interpreter.py | |
parent | 218ed2de89c3729e9d8d6a5d8e80e0a9461714ca (diff) | |
download | meson-5af98d16b93139f11f8b42cc0c4d613548dd1d69.zip meson-5af98d16b93139f11f8b42cc0c4d613548dd1d69.tar.gz meson-5af98d16b93139f11f8b42cc0c4d613548dd1d69.tar.bz2 |
Delay backend creation until project() is parsed
The project() function could have a different value for the backend
option in its default_options kwargs.
Also set backend options, passing them in command line had no effect
previously.
Diffstat (limited to 'mesonbuild/interpreter.py')
-rw-r--r-- | mesonbuild/interpreter.py | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index 0dbe8ca..c513823 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -1754,7 +1754,7 @@ permitted_kwargs = {'add_global_arguments': {'language'}, class Interpreter(InterpreterBase): - def __init__(self, build, backend, subproject='', subdir='', subproject_dir='subprojects', + def __init__(self, build, backend=None, subproject='', subdir='', subproject_dir='subprojects', modules = None, default_project_options=[]): super().__init__(build.environment.get_source_dir(), subdir) self.an_unpicklable_object = mesonlib.an_unpicklable_object @@ -2256,6 +2256,36 @@ to directly access options of other subprojects.''') newoptions = [defopt] + self.environment.cmd_line_options.projectoptions self.environment.cmd_line_options.projectoptions = newoptions + def set_backend(self): + # The backend is already set when parsing subprojects + if self.backend is not None: + return + backend = self.coredata.get_builtin_option('backend') + if backend == 'ninja': + from .backend import ninjabackend + self.backend = ninjabackend.NinjaBackend(self.build) + elif backend == 'vs': + from .backend import vs2010backend + self.backend = vs2010backend.autodetect_vs_version(self.build) + self.coredata.set_builtin_option('backend', self.backend.name) + mlog.log('Auto detected Visual Studio backend:', mlog.bold(self.backend.name)) + elif backend == 'vs2010': + from .backend import vs2010backend + self.backend = vs2010backend.Vs2010Backend(self.build) + elif backend == 'vs2015': + from .backend import vs2015backend + self.backend = vs2015backend.Vs2015Backend(self.build) + elif backend == 'vs2017': + from .backend import vs2017backend + self.backend = vs2017backend.Vs2017Backend(self.build) + elif backend == 'xcode': + from .backend import xcodebackend + self.backend = xcodebackend.XCodeBackend(self.build) + else: + raise InterpreterException('Unknown backend "%s".' % backend) + + self.coredata.init_backend_options(backend, self.environment.cmd_line_options.projectoptions) + @stringArgs @permittedKwargs(permitted_kwargs['project']) def func_project(self, node, args, kwargs): @@ -2277,6 +2307,7 @@ to directly access options of other subprojects.''') ) oi.process(self.option_file) self.build.environment.merge_options(oi.options) + self.set_backend() self.active_projectname = proj_name self.project_version = kwargs.get('version', 'undefined') if self.build.project_version is None: |