11"""Builder to help resolve cmake state"""
22
3+ import json
34from typing import Any
45
56from cppython .core .schema import CorePluginData
6- from cppython .plugins .cmake .schema import CMakeConfiguration , CMakeData
7+ from cppython .plugins .cmake .schema import CMakeConfiguration , CMakeData , CMakePresets
78
89
910def resolve_cmake_data (data : dict [str , Any ], core_data : CorePluginData ) -> CMakeData :
@@ -20,8 +21,15 @@ def resolve_cmake_data(data: dict[str, Any], core_data: CorePluginData) -> CMake
2021
2122 root_directory = core_data .project_data .project_root .absolute ()
2223
23- modified_preset = parsed_data .preset_file
24- if not modified_preset .is_absolute ():
25- modified_preset = root_directory / modified_preset
24+ modified_preset_dir = parsed_data .preset_file
25+ if not modified_preset_dir .is_absolute ():
26+ modified_preset_dir = root_directory / modified_preset_dir
2627
27- return CMakeData (preset_file = modified_preset , configuration_name = parsed_data .configuration_name )
28+ # If the user hasn't specified a preset file, we need to create one
29+ if not modified_preset_dir .exists ():
30+ modified_preset_dir .parent .mkdir (parents = True , exist_ok = True )
31+ with modified_preset_dir .open ('w' , encoding = 'utf-8' ) as file :
32+ presets_dict = CMakePresets ().model_dump_json (exclude_none = True )
33+ json .dump (presets_dict , file , ensure_ascii = False , indent = 4 )
34+
35+ return CMakeData (preset_file = modified_preset_dir , configuration_name = parsed_data .configuration_name )
0 commit comments