summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2025-03-04 08:24:08 -0800
committerEli Schwartz <eschwartz93@gmail.com>2025-03-10 14:14:25 -0400
commit251f74dcf3fea706ed373b717257f82592b6a1de (patch)
tree5ee2906048dc2bb552be08e040d332e9dfc7d8fb
parent4fa52925459dac650bf053715987ee7beb3b23c1 (diff)
downloadmeson-251f74dcf3fea706ed373b717257f82592b6a1de.tar.gz
coredata: remove get_option_for_subproject
This is just a wrapper around `OptionStore.get_option_for`, but without taking an `OptionKey`. This complicates the subproject passing, since `OptionKey` is designed to encapsulate the option name and subproject.
-rw-r--r--mesonbuild/compilers/compilers.py10
-rw-r--r--mesonbuild/compilers/cpp.py8
-rw-r--r--mesonbuild/compilers/cuda.py4
-rw-r--r--mesonbuild/compilers/mixins/elbrus.py6
-rw-r--r--mesonbuild/compilers/objc.py4
-rw-r--r--mesonbuild/compilers/objcpp.py4
-rw-r--r--mesonbuild/coredata.py8
7 files changed, 19 insertions, 25 deletions
diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py
index f0744f80b..a73697cdd 100644
--- a/mesonbuild/compilers/compilers.py
+++ b/mesonbuild/compilers/compilers.py
@@ -280,10 +280,12 @@ def are_asserts_disabled(target: 'BuildTarget', env: 'Environment') -> bool:
(env.coredata.get_option_for_target(target, 'b_ndebug') == 'if-release' and
env.coredata.get_option_for_target(target, 'buildtype') in {'release', 'plain'}))
+
def are_asserts_disabled_for_subproject(subproject: str, env: 'Environment') -> bool:
- return (env.coredata.get_option_for_subproject('b_ndebug', subproject) == 'true' or
- (env.coredata.get_option_for_subproject('b_ndebug', subproject) == 'if-release' and
- env.coredata.get_option_for_subproject('buildtype', subproject) in {'release', 'plain'}))
+ key = OptionKey('b_ndebug', subproject)
+ return (env.coredata.optstore.get_value_for(key) == 'true' or
+ (env.coredata.optstore.get_value_for(key) == 'if-release' and
+ env.coredata.optstore.get_value_for(key.evolve(name='buildtype')) in {'release', 'plain'}))
def get_base_compile_args(target: 'BuildTarget', compiler: 'Compiler', env: 'Environment') -> T.List[str]:
@@ -1400,7 +1402,7 @@ class Compiler(HoldableObject, metaclass=abc.ABCMeta):
if target:
return env.coredata.get_option_for_target(target, key)
else:
- return env.coredata.get_option_for_subproject(key, subproject)
+ return env.coredata.optstore.get_value_for(key.evolve(subproject=subproject))
def _update_language_stds(self, opts: MutableKeyedOptionDictType, value: T.List[str]) -> None:
key = self.form_compileropt_key('std')
diff --git a/mesonbuild/compilers/cpp.py b/mesonbuild/compilers/cpp.py
index b21a62e44..cbb91e439 100644
--- a/mesonbuild/compilers/cpp.py
+++ b/mesonbuild/compilers/cpp.py
@@ -764,11 +764,11 @@ class VisualStudioLikeCPPCompilerMixin(CompilerMixinBase):
def get_option_link_args(self, target: 'BuildTarget', env: 'Environment', subproject: T.Optional[str] = None) -> T.List[str]:
# need a typeddict for this
- key = self.form_compileropt_key('winlibs')
+ key = self.form_compileropt_key('winlibs').evolve(subproject=subproject)
if target:
value = env.coredata.get_option_for_target(target, key)
else:
- value = env.coredata.get_option_for_subproject(key, subproject)
+ value = env.coredata.optstore.get_value_for(key)
return T.cast('T.List[str]', value)[:]
def _get_options_impl(self, opts: 'MutableKeyedOptionDictType', cpp_stds: T.List[str]) -> 'MutableKeyedOptionDictType':
@@ -845,11 +845,11 @@ class CPP11AsCPP14Mixin(CompilerMixinBase):
# which means setting the C++ standard version to C++14, in compilers that support it
# (i.e., after VS2015U3)
# if one is using anything before that point, one cannot set the standard.
- stdkey = self.form_compileropt_key('std')
+ stdkey = self.form_compileropt_key('std').evolve(subproject=subproject)
if target is not None:
std = env.coredata.get_option_for_target(target, stdkey)
else:
- std = env.coredata.get_option_for_subproject(stdkey, subproject)
+ std = env.coredata.optstore.get_value_for(stdkey)
if std in {'vc++11', 'c++11'}:
mlog.warning(self.id, 'does not support C++11;',
'attempting best effort; setting the standard to C++14',
diff --git a/mesonbuild/compilers/cuda.py b/mesonbuild/compilers/cuda.py
index 612643c8f..b67aa8715 100644
--- a/mesonbuild/compilers/cuda.py
+++ b/mesonbuild/compilers/cuda.py
@@ -794,11 +794,11 @@ class CudaCompiler(Compiler):
target: 'T.Optional[BuildTarget]',
env: 'Environment',
subproject: T.Optional[str] = None) -> T.List[str]:
- key = self.form_compileropt_key('ccbindir')
+ key = self.form_compileropt_key('ccbindir').evolve(subproject=subproject)
if target:
ccbindir = env.coredata.get_option_for_target(target, key)
else:
- ccbindir = env.coredata.get_option_for_subproject(key, subproject)
+ ccbindir = env.coredata.optstore.get_value_for(key)
if isinstance(ccbindir, str) and ccbindir != '':
return [self._shield_nvcc_list_arg('-ccbin='+ccbindir, False)]
else:
diff --git a/mesonbuild/compilers/mixins/elbrus.py b/mesonbuild/compilers/mixins/elbrus.py
index 4bf082627..eac68bd94 100644
--- a/mesonbuild/compilers/mixins/elbrus.py
+++ b/mesonbuild/compilers/mixins/elbrus.py
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
-# Copyright © 2023-2024 Intel Corporation
+# Copyright © 2023-2025 Intel Corporation
from __future__ import annotations
@@ -85,11 +85,11 @@ class ElbrusCompiler(GnuLikeCompiler):
def get_option_compile_args(self, target: 'BuildTarget', env: 'Environment', subproject: T.Optional[str] = None) -> T.List[str]:
args: T.List[str] = []
- key = OptionKey(f'{self.language}_std', machine=self.for_machine)
+ key = OptionKey(f'{self.language}_std', subproject=subproject, machine=self.for_machine)
if target:
std = env.coredata.get_option_for_target(target, key)
else:
- std = env.coredata.get_option_for_subproject(key, subproject)
+ std = env.coredata.optstore.get_value_for(key)
assert isinstance(std, str)
if std != 'none':
args.append('-std=' + std)
diff --git a/mesonbuild/compilers/objc.py b/mesonbuild/compilers/objc.py
index b133d47c4..776f5037d 100644
--- a/mesonbuild/compilers/objc.py
+++ b/mesonbuild/compilers/objc.py
@@ -78,11 +78,11 @@ class GnuObjCCompiler(GnuCStds, GnuCompiler, ObjCCompiler):
def get_option_compile_args(self, target: 'BuildTarget', env: 'Environment', subproject: T.Optional[str] = None) -> T.List[str]:
args: T.List[str] = []
- key = OptionKey('c_std', machine=self.for_machine)
+ key = OptionKey('c_std', subproject=subproject, machine=self.for_machine)
if target:
std = env.coredata.get_option_for_target(target, key)
else:
- std = env.coredata.get_option_for_subproject(key, subproject)
+ std = env.coredata.optstore.get_value_for(key)
assert isinstance(std, str)
if std != 'none':
args.append('-std=' + std)
diff --git a/mesonbuild/compilers/objcpp.py b/mesonbuild/compilers/objcpp.py
index 743bbb9cd..b38fdb60d 100644
--- a/mesonbuild/compilers/objcpp.py
+++ b/mesonbuild/compilers/objcpp.py
@@ -83,11 +83,11 @@ class GnuObjCPPCompiler(GnuCPPStds, GnuCompiler, ObjCPPCompiler):
def get_option_compile_args(self, target: 'BuildTarget', env: 'Environment', subproject: T.Optional[str] = None) -> T.List[str]:
args: T.List[str] = []
- key = OptionKey('cpp_std', machine=self.for_machine)
+ key = OptionKey('cpp_std', subproject=subproject, machine=self.for_machine)
if target:
std = env.coredata.get_option_for_target(target, key)
else:
- std = env.coredata.get_option_for_subproject(key, subproject)
+ std = env.coredata.optstore.get_value_for(key)
assert isinstance(std, str)
if std != 'none':
args.append('-std=' + std)
diff --git a/mesonbuild/coredata.py b/mesonbuild/coredata.py
index f1286aa2e..6bf8705c5 100644
--- a/mesonbuild/coredata.py
+++ b/mesonbuild/coredata.py
@@ -414,14 +414,6 @@ class CoreData:
return option_object.validate_value(override)
return value
- def get_option_for_subproject(self, key: T.Union[str, OptionKey], subproject) -> ElementaryOptionValues:
- if isinstance(key, str):
- key = OptionKey(key, subproject=subproject)
- if key.subproject != subproject:
- # This should be an error, fix before merging.
- key = key.evolve(subproject=subproject)
- return self.optstore.get_value_for(key)
-
def set_option(self, key: OptionKey, value, first_invocation: bool = False) -> bool:
dirty = False
try: