def __init__(self, cmake_version: str, build_dir: Path, permissive: bool=True) -> None:
    self.vars: T.Dict[(str, T.List[str])] = {}
    self.vars_by_file: T.Dict[(Path, T.Dict[(str, T.List[str])])] = {}
    self.targets: T.Dict[(str, CMakeTarget)] = {}
    self.cache: T.Dict[(str, CMakeCacheEntry)] = {}
    self.explicit_headers = set()
    self.custom_targets = []
    self.permissive = permissive
    self.cmake_version = cmake_version
    self.trace_file = 'cmake_trace.txt'
    self.trace_file_path = (build_dir / self.trace_file)
    self.trace_format = ('json-v1' if version_compare(cmake_version, '>=3.17') else 'human')
    self.delayed_commands = []
    self.stored_commands = []
    self.functions = {'set': self._cmake_set, 'unset': self._cmake_unset, 'add_executable': self._cmake_add_executable, 'add_library': self._cmake_add_library, 'add_custom_command': self._cmake_add_custom_command, 'add_custom_target': self._cmake_add_custom_target, 'set_property': self._cmake_set_property, 'set_target_properties': self._cmake_set_target_properties, 'target_compile_definitions': self._cmake_target_compile_definitions, 'target_compile_options': self._cmake_target_compile_options, 'target_include_directories': self._cmake_target_include_directories, 'target_link_libraries': self._cmake_target_link_libraries, 'target_link_options': self._cmake_target_link_options, 'add_dependencies': self._cmake_add_dependencies, 'meson_ps_execute_delayed_calls': self._meson_ps_execute_delayed_calls, 'meson_ps_reload_vars': self._meson_ps_reload_vars, 'meson_ps_disabled_function': self._meson_ps_disabled_function}
    if version_compare(self.cmake_version, '<3.17.0'):
        mlog.deprecation(textwrap.dedent(f'''                CMake support for versions <3.17 is deprecated since Meson 0.62.0.
                |
                |   However, Meson was only able to find CMake {self.cmake_version}.
                |
                |   Support for all CMake versions below 3.17.0 will be removed once
                |   newer CMake versions are more widely adopted. If you encounter
                |   any errors please try upgrading CMake to a newer version first.
            '''), once=True)
def __init__(self, cmake_version: str, build_dir: Path, permissive: bool=True) -> None:
    self.vars: T.Dict[(str, T.List[str])] = {}
    self.vars_by_file: T.Dict[(Path, T.Dict[(str, T.List[str])])] = {}
    self.targets: T.Dict[(str, CMakeTarget)] = {}
    self.cache: T.Dict[(str, CMakeCacheEntry)] = {}
    self.explicit_headers = set()
    self.custom_targets = []
    self.permissive = permissive
    self.cmake_version = cmake_version
    self.trace_file = 'cmake_trace.txt'
    self.trace_file_path = (build_dir / self.trace_file)
    self.trace_format = ('json-v1' if version_compare(cmake_version, '>=3.17') else 'human')
    self.delayed_commands = []
    self.stored_commands = []
    self.functions = {'set': self._cmake_set, 'unset': self._cmake_unset, 'add_executable': self._cmake_add_executable, 'add_library': self._cmake_add_library, 'add_custom_command': self._cmake_add_custom_command, 'add_custom_target': self._cmake_add_custom_target, 'set_property': self._cmake_set_property, 'set_target_properties': self._cmake_set_target_properties, 'target_compile_definitions': self._cmake_target_compile_definitions, 'target_compile_options': self._cmake_target_compile_options, 'target_include_directories': self._cmake_target_include_directories, 'target_link_libraries': self._cmake_target_link_libraries, 'target_link_options': self._cmake_target_link_options, 'add_dependencies': self._cmake_add_dependencies, 'meson_ps_execute_delayed_calls': self._meson_ps_execute_delayed_calls, 'meson_ps_reload_vars': self._meson_ps_reload_vars, 'meson_ps_disabled_function': self._meson_ps_disabled_function}
    if version_compare(self.cmake_version, '<3.17.0'):
        mlog.deprecation(textwrap.dedent(f'                CMake support for versions <3.17 is deprecated since Meson 0.62.0.
                |
                |   However, Meson was only able to find CMake {self.cmake_version}.
                |
                |   Support for all CMake versions below 3.17.0 will be removed once
                |   newer CMake versions are more widely adopted. If you encounter
                |   any errors please try upgrading CMake to a newer version first.
            '), once=True)