Add import std support to MSVC.
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index 98cc4a3..a80f612 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py
@@ -3306,6 +3306,23 @@ istd_args = ['-fmodules'] istd_dep = [mod_file] return istd_args, istd_dep + elif compiler.id == 'msvc': + if not hasattr(self, 'istd_gen_target'): + mod_file = 'std.ifc' + mod_obj_file = 'std.obj' + in_file = Path(os.environ['VCToolsInstallDir']) / 'modules/std.ixx' + if not in_file.is_file(): + raise SystemExit('VS std import header could not be located.') + in_file_str = str(in_file) + elem = NinjaBuildElement(self.all_outputs, [mod_file, mod_obj_file], 'CUSTOM_COMMAND', [in_file_str]) + compile_args = compiler.get_option_compile_args(target, self.environment) + compile_args += compiler.get_option_std_args(target, self.environment) + compile_args += ['/nologo', '/c', '/O2', in_file_str] + elem.add_item('COMMAND', compiler.exelist + compile_args) + self.add_build(elem) + self.istd_gen_target = elem + istd_dep = [File(True, '', mod_file)] + return istd_args, istd_dep else: raise SystemExit(f'Import std not supported on compiler {compiler.id} yet.')
diff --git a/mesonbuild/compilers/cpp.py b/mesonbuild/compilers/cpp.py index 9207bbd..c4a1b1d 100644 --- a/mesonbuild/compilers/cpp.py +++ b/mesonbuild/compilers/cpp.py
@@ -820,6 +820,13 @@ std_opt = opts[self.form_compileropt_key('std')] assert isinstance(std_opt, options.UserStdOption), 'for mypy' std_opt.set_versions(cpp_stds) + + if version_compare(self.version, '>=19.44.35219'): + key = self.form_compileropt_key('importstd') + opts[key] = options.UserComboOption(self.make_option_name(key), + 'Use #import std.', + 'false', + choices=['false', 'true']) return opts def get_option_compile_args(self, target: 'BuildTarget', env: 'Environment', subproject: T.Optional[str] = None) -> T.List[str]:
diff --git a/test cases/common/286 importstd/meson.build b/test cases/common/286 importstd/meson.build index d5221cd..c184efe 100644 --- a/test cases/common/286 importstd/meson.build +++ b/test cases/common/286 importstd/meson.build
@@ -1,10 +1,12 @@ project('importstd', 'cpp', default_options: {'cpp_importstd': 'true', - 'cpp_std': 'c++23'}) + 'cpp_std': 'c++latest,c++23'}) cpp = meson.get_compiler('cpp') if cpp.get_id() == 'gcc' and cpp.version().version_compare('>=15.1') istd_supported = true +elif cpp.get_id() == 'msvc' and cpp.version().version_compare('>=19.44') + istd_supported = true else istd_supported = false endif