aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/environment.py
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2020-02-06 09:10:01 -0800
committerDylan Baker <dylan@pnwbakers.com>2020-07-30 19:34:37 -0700
commita6164ca5a81224b7ed672401a47260f498f06e44 (patch)
treec79d79a3e701c8ce995bfbd104468e71dd45ce4a /mesonbuild/environment.py
parentcc201a539674babf46f726859587afb5ed6a6867 (diff)
downloadmeson-a6164ca5a81224b7ed672401a47260f498f06e44.zip
meson-a6164ca5a81224b7ed672401a47260f498f06e44.tar.gz
meson-a6164ca5a81224b7ed672401a47260f498f06e44.tar.bz2
Allow setting project options from cross or native files
This allows adding a `[project options]` section to a cross or native file that contains the options defined for a project in it's meson_option.txt file.
Diffstat (limited to 'mesonbuild/environment.py')
-rw-r--r--mesonbuild/environment.py19
1 files changed, 19 insertions, 0 deletions
diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py
index a82c8f8..c872aee 100644
--- a/mesonbuild/environment.py
+++ b/mesonbuild/environment.py
@@ -553,6 +553,9 @@ class Environment:
# architecture, just the build and host architectures
paths = PerMachineDefaultable()
+ # We only need one of these as project options are not per machine
+ user_options = {}
+
## Setup build machine defaults
# Will be fully initialized later using compilers later.
@@ -565,12 +568,26 @@ class Environment:
## Read in native file(s) to override build machine configuration
+ def load_user_options():
+ for section in config.keys():
+ if section.endswith('project options'):
+ if ':' in section:
+ project = section.split(':')[0]
+ else:
+ project = ''
+ user_options[project] = config.get(section, {})
+
if self.coredata.config_files is not None:
config = coredata.parse_machine_files(self.coredata.config_files)
binaries.build = BinaryTable(config.get('binaries', {}))
paths.build = Directories(**config.get('paths', {}))
properties.build = Properties(config.get('properties', {}))
+ # Don't run this if there are any cross files, we don't want to use
+ # the native values if we're doing a cross build
+ if not self.coredata.cross_files:
+ load_user_options()
+
## Read in cross file(s) to override host machine configuration
if self.coredata.cross_files:
@@ -582,6 +599,7 @@ class Environment:
if 'target_machine' in config:
machines.target = MachineInfo.from_literal(config['target_machine'])
paths.host = Directories(**config.get('paths', {}))
+ load_user_options()
## "freeze" now initialized configuration, and "save" to the class.
@@ -589,6 +607,7 @@ class Environment:
self.binaries = binaries.default_missing()
self.properties = properties.default_missing()
self.paths = paths.default_missing()
+ self.user_options = user_options
exe_wrapper = self.lookup_binary_entry(MachineChoice.HOST, 'exe_wrapper')
if exe_wrapper is not None: