summaryrefslogtreecommitdiff
path: root/mesonbuild/compilers/cpp.py
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/compilers/cpp.py')
-rw-r--r--mesonbuild/compilers/cpp.py173
1 files changed, 98 insertions, 75 deletions
diff --git a/mesonbuild/compilers/cpp.py b/mesonbuild/compilers/cpp.py
index 5e412e7a5..540dedb18 100644
--- a/mesonbuild/compilers/cpp.py
+++ b/mesonbuild/compilers/cpp.py
@@ -237,18 +237,22 @@ class ClangCPPCompiler(_StdCPPLibMixin, ClangCompiler, CPPCompiler):
def get_options(self) -> 'MutableKeyedOptionDictType':
opts = CPPCompiler.get_options(self)
key = OptionKey('key', machine=self.for_machine, lang=self.language)
- opts.update({
- key.evolve('debugstl'): coredata.UserBooleanOption(
- 'STL debug mode',
- False,
- ),
- key.evolve('eh'): coredata.UserComboOption(
- 'C++ exception handling type.',
- ['none', 'default', 'a', 's', 'sc'],
- 'default',
- ),
- key.evolve('rtti'): coredata.UserBooleanOption('Enable RTTI', True),
- })
+ self.update_options(
+ opts,
+ self.create_option(coredata.UserComboOption,
+ key.evolve('eh'),
+ 'C++ exception handling type.',
+ ['none', 'default', 'a', 's', 'sc'],
+ 'default'),
+ self.create_option(coredata.UserBooleanOption,
+ key.evolve('rtti'),
+ 'Enable RTTI',
+ True),
+ self.create_option(coredata.UserBooleanOption,
+ key.evolve('debugstl'),
+ 'STL debug mode',
+ False),
+ )
cppstd_choices = [
'c++98', 'c++03', 'c++11', 'c++14', 'c++17', 'c++1z', 'c++2a', 'c++20',
]
@@ -260,12 +264,13 @@ class ClangCPPCompiler(_StdCPPLibMixin, ClangCompiler, CPPCompiler):
assert isinstance(std_opt, coredata.UserStdOption), 'for mypy'
std_opt.set_versions(cppstd_choices, gnu=True)
if self.info.is_windows() or self.info.is_cygwin():
- opts.update({
- key.evolve('winlibs'): coredata.UserArrayOption(
- 'Standard Win libraries to link against',
- gnu_winlibs,
- ),
- })
+ self.update_options(
+ opts,
+ self.create_option(coredata.UserArrayOption,
+ key.evolve('winlibs'),
+ 'Standard Win libraries to link against',
+ gnu_winlibs),
+ )
return opts
def get_option_compile_args(self, options: 'KeyedOptionDictType') -> T.List[str]:
@@ -378,13 +383,14 @@ class ArmclangCPPCompiler(ArmclangCompiler, CPPCompiler):
def get_options(self) -> 'MutableKeyedOptionDictType':
opts = CPPCompiler.get_options(self)
key = OptionKey('std', machine=self.for_machine, lang=self.language)
- opts.update({
- key.evolve('eh'): coredata.UserComboOption(
- 'C++ exception handling type.',
- ['none', 'default', 'a', 's', 'sc'],
- 'default',
- ),
- })
+ self.update_options(
+ opts,
+ self.create_option(coredata.UserComboOption,
+ key.evolve('eh'),
+ 'C++ exception handling type.',
+ ['none', 'default', 'a', 's', 'sc'],
+ 'default'),
+ )
std_opt = opts[key]
assert isinstance(std_opt, coredata.UserStdOption), 'for mypy'
std_opt.set_versions(['c++98', 'c++03', 'c++11', 'c++14', 'c++17'], gnu=True)
@@ -426,18 +432,22 @@ class GnuCPPCompiler(_StdCPPLibMixin, GnuCompiler, CPPCompiler):
def get_options(self) -> 'MutableKeyedOptionDictType':
key = OptionKey('std', machine=self.for_machine, lang=self.language)
opts = CPPCompiler.get_options(self)
- opts.update({
- key.evolve('eh'): coredata.UserComboOption(
- 'C++ exception handling type.',
- ['none', 'default', 'a', 's', 'sc'],
- 'default',
- ),
- key.evolve('rtti'): coredata.UserBooleanOption('Enable RTTI', True),
- key.evolve('debugstl'): coredata.UserBooleanOption(
- 'STL debug mode',
- False,
- )
- })
+ self.update_options(
+ opts,
+ self.create_option(coredata.UserComboOption,
+ key.evolve('eh'),
+ 'C++ exception handling type.',
+ ['none', 'default', 'a', 's', 'sc'],
+ 'default'),
+ self.create_option(coredata.UserBooleanOption,
+ key.evolve('rtti'),
+ 'Enable RTTI',
+ True),
+ self.create_option(coredata.UserBooleanOption,
+ key.evolve('debugstl'),
+ 'STL debug mode',
+ False),
+ )
cppstd_choices = [
'c++98', 'c++03', 'c++11', 'c++14', 'c++17', 'c++1z',
'c++2a', 'c++20',
@@ -450,12 +460,13 @@ class GnuCPPCompiler(_StdCPPLibMixin, GnuCompiler, CPPCompiler):
assert isinstance(std_opt, coredata.UserStdOption), 'for mypy'
std_opt.set_versions(cppstd_choices, gnu=True)
if self.info.is_windows() or self.info.is_cygwin():
- opts.update({
- key.evolve('winlibs'): coredata.UserArrayOption(
- 'Standard Win libraries to link against',
- gnu_winlibs,
- ),
- })
+ self.update_options(
+ opts,
+ self.create_option(coredata.UserArrayOption,
+ key.evolve('winlibs'),
+ 'Standard Win libraries to link against',
+ gnu_winlibs),
+ )
return opts
def get_option_compile_args(self, options: 'KeyedOptionDictType') -> T.List[str]:
@@ -550,17 +561,18 @@ class ElbrusCPPCompiler(ElbrusCompiler, CPPCompiler):
cpp_stds += ['c++20']
key = OptionKey('std', machine=self.for_machine, lang=self.language)
- opts.update({
- key.evolve('eh'): coredata.UserComboOption(
- 'C++ exception handling type.',
- ['none', 'default', 'a', 's', 'sc'],
- 'default',
- ),
- key.evolve('debugstl'): coredata.UserBooleanOption(
- 'STL debug mode',
- False,
- ),
- })
+ self.update_options(
+ opts,
+ self.create_option(coredata.UserComboOption,
+ key.evolve('eh'),
+ 'C++ exception handling type.',
+ ['none', 'default', 'a', 's', 'sc'],
+ 'default'),
+ self.create_option(coredata.UserBooleanOption,
+ key.evolve('debugstl'),
+ 'STL debug mode',
+ False),
+ )
std_opt = opts[key]
assert isinstance(std_opt, coredata.UserStdOption), 'for mypy'
std_opt.set_versions(cpp_stds, gnu=True)
@@ -628,15 +640,22 @@ class IntelCPPCompiler(IntelGnuLikeCompiler, CPPCompiler):
g_stds += ['gnu++2a']
key = OptionKey('std', machine=self.for_machine, lang=self.language)
- opts.update({
- key.evolve('eh'): coredata.UserComboOption(
- 'C++ exception handling type.',
- ['none', 'default', 'a', 's', 'sc'],
- 'default',
- ),
- key.evolve('rtti'): coredata.UserBooleanOption('Enable RTTI', True),
- key.evolve('debugstl'): coredata.UserBooleanOption('STL debug mode', False),
- })
+ self.update_options(
+ opts,
+ self.create_option(coredata.UserComboOption,
+ key.evolve('eh'),
+ 'C++ exception handling type.',
+ ['none', 'default', 'a', 's', 'sc'],
+ 'default'),
+ self.create_option(coredata.UserBooleanOption,
+ key.evolve('rtti'),
+ 'Enable RTTI',
+ True),
+ self.create_option(coredata.UserBooleanOption,
+ key.evolve('debugstl'),
+ 'STL debug mode',
+ False),
+ )
std_opt = opts[key]
assert isinstance(std_opt, coredata.UserStdOption), 'for mypy'
std_opt.set_versions(c_stds + g_stds)
@@ -694,18 +713,22 @@ class VisualStudioLikeCPPCompilerMixin(CompilerMixinBase):
def _get_options_impl(self, opts: 'MutableKeyedOptionDictType', cpp_stds: T.List[str]) -> 'MutableKeyedOptionDictType':
key = OptionKey('std', machine=self.for_machine, lang=self.language)
- opts.update({
- key.evolve('eh'): coredata.UserComboOption(
- 'C++ exception handling type.',
- ['none', 'default', 'a', 's', 'sc'],
- 'default',
- ),
- key.evolve('rtti'): coredata.UserBooleanOption('Enable RTTI', True),
- key.evolve('winlibs'): coredata.UserArrayOption(
- 'Windows libs to link against.',
- msvc_winlibs,
- ),
- })
+ self.update_options(
+ opts,
+ self.create_option(coredata.UserComboOption,
+ key.evolve('eh'),
+ 'C++ exception handling type.',
+ ['none', 'default', 'a', 's', 'sc'],
+ 'default'),
+ self.create_option(coredata.UserBooleanOption,
+ key.evolve('rtti'),
+ 'Enable RTTI',
+ True),
+ self.create_option(coredata.UserArrayOption,
+ key.evolve('winlibs'),
+ 'Windows libs to link against.',
+ msvc_winlibs),
+ )
std_opt = opts[key]
assert isinstance(std_opt, coredata.UserStdOption), 'for mypy'
std_opt.set_versions(cpp_stds)