aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/interpreter.py
diff options
context:
space:
mode:
authorXavier Claessens <xavier.claessens@collabora.com>2018-05-13 10:36:58 -0400
committerNirbheek Chauhan <nirbheek.chauhan@gmail.com>2018-06-06 20:02:37 +0000
commit5af98d16b93139f11f8b42cc0c4d613548dd1d69 (patch)
tree00ca08712ece3f064cd9ae4117681f73929f96c2 /mesonbuild/interpreter.py
parent218ed2de89c3729e9d8d6a5d8e80e0a9461714ca (diff)
downloadmeson-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.py33
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: