@@ -12,8 +12,8 @@ def __init__(self) -> None:
1212 """Initialize the builder"""
1313
1414 @staticmethod
15- def write_provider_preset ( provider_directory : Path , provider_data : CMakeSyncData ) -> None :
16- """Writes a provider preset from input sync data
15+ def generate_provider_preset ( provider_data : CMakeSyncData ) -> CMakePresets :
16+ """Generates a provider preset from input sync data
1717
1818 Args:
1919 provider_directory: The base directory to place the preset files
@@ -26,7 +26,17 @@ def write_provider_preset(provider_directory: Path, provider_data: CMakeSyncData
2626 'CMAKE_PROJECT_TOP_LEVEL_INCLUDES' : str (provider_data .top_level_includes .as_posix ()),
2727 }
2828
29- generated_preset = CMakePresets (configurePresets = [generated_configure_preset ])
29+ return CMakePresets (configurePresets = [generated_configure_preset ])
30+
31+ @staticmethod
32+ def write_provider_preset (provider_directory : Path , provider_data : CMakeSyncData ) -> None :
33+ """Writes a provider preset from input sync data
34+
35+ Args:
36+ provider_directory: The base directory to place the preset files
37+ provider_data: The providers synchronization data
38+ """
39+ generated_preset = Builder .generate_provider_preset (provider_data )
3040
3141 provider_preset_file = provider_directory / f'{ provider_data .provider_name } .json'
3242
@@ -44,18 +54,18 @@ def write_provider_preset(provider_directory: Path, provider_data: CMakeSyncData
4454 file .write (serialized )
4555
4656 @staticmethod
47- def write_cppython_preset (
57+ def generate_cppython_preset (
4858 cppython_preset_directory : Path , provider_directory : Path , provider_data : CMakeSyncData
49- ) -> Path :
50- """Write the cppython presets which inherit from the provider presets
59+ ) -> CMakePresets :
60+ """Generates the cppython preset which inherits from the provider presets
5161
5262 Args:
5363 cppython_preset_directory: The tool directory
5464 provider_directory: The base directory containing provider presets
5565 provider_data: The provider's synchronization data
5666
5767 Returns:
58- A file path to the written data
68+ A CMakePresets object
5969 """
6070 generated_configure_preset = ConfigurePreset (name = 'cppython' , inherits = provider_data .provider_name )
6171 generated_preset = CMakePresets (configurePresets = [generated_configure_preset ])
@@ -66,7 +76,25 @@ def write_cppython_preset(
6676
6777 # Set the data
6878 generated_preset .include = [relative_preset ]
79+ return generated_preset
6980
81+ @staticmethod
82+ def write_cppython_preset (
83+ cppython_preset_directory : Path , provider_directory : Path , provider_data : CMakeSyncData
84+ ) -> Path :
85+ """Write the cppython presets which inherit from the provider presets
86+
87+ Args:
88+ cppython_preset_directory: The tool directory
89+ provider_directory: The base directory containing provider presets
90+ provider_data: The provider's synchronization data
91+
92+ Returns:
93+ A file path to the written data
94+ """
95+ generated_preset = Builder .generate_cppython_preset (
96+ cppython_preset_directory , provider_directory , provider_data
97+ )
7098 cppython_preset_file = cppython_preset_directory / 'cppython.json'
7199
72100 initial_preset = None
@@ -86,17 +114,15 @@ def write_cppython_preset(
86114 return cppython_preset_file
87115
88116 @staticmethod
89- def write_root_presets (preset_file : Path , cppython_preset_file : Path ) -> None :
90- """Read the top level json file and insert the include reference.
91-
92- Receives a relative path to the tool cmake json file
93-
94- Raises:
95- ConfigError: If key files do not exists
117+ def generate_root_preset (preset_file : Path , cppython_preset_file : Path ) -> CMakePresets :
118+ """Generates the top level root preset with the include reference.
96119
97120 Args:
98121 preset_file: Preset file to modify
99122 cppython_preset_file: Path to the cppython preset file to include
123+
124+ Returns:
125+ A CMakePresets object
100126 """
101127 initial_root_preset = None
102128
@@ -108,7 +134,6 @@ def write_root_presets(preset_file: Path, cppython_preset_file: Path) -> None:
108134 root_preset = initial_root_preset .model_copy (deep = True )
109135 else :
110136 # If the file doesn't exist, we need to default it for the user
111-
112137 # TODO: Forward the tool's build directory
113138 default_configure_preset = ConfigurePreset (name = 'default' , inherits = 'cppython' , binaryDir = 'build' )
114139 root_preset = CMakePresets (configurePresets = [default_configure_preset ])
@@ -125,6 +150,30 @@ def write_root_presets(preset_file: Path, cppython_preset_file: Path) -> None:
125150 if str (relative_preset ) not in root_preset .include :
126151 root_preset .include .append (str (relative_preset ))
127152
153+ return root_preset
154+
155+ @staticmethod
156+ def write_root_presets (preset_file : Path , cppython_preset_file : Path ) -> None :
157+ """Read the top level json file and insert the include reference.
158+
159+ Receives a relative path to the tool cmake json file
160+
161+ Raises:
162+ ConfigError: If key files do not exists
163+
164+ Args:
165+ preset_file: Preset file to modify
166+ cppython_preset_file: Path to the cppython preset file to include
167+ """
168+ initial_root_preset = None
169+
170+ if preset_file .exists ():
171+ with open (preset_file , encoding = 'utf-8' ) as file :
172+ initial_json = file .read ()
173+ initial_root_preset = CMakePresets .model_validate_json (initial_json )
174+
175+ root_preset = Builder .generate_root_preset (preset_file , cppython_preset_file )
176+
128177 # Only write the file if the data has changed
129178 if root_preset != initial_root_preset :
130179 with open (preset_file , 'w' , encoding = 'utf-8' ) as file :
0 commit comments