@@ -174,19 +174,23 @@ def read_pyproject(
174174 tool_name : str = DEFAULT_TOOL_NAME ,
175175 canonical_build_package_name : str = "setuptools-scm" ,
176176 _given_result : _t .GivenPyProjectResult = None ,
177+ _given_definition : TOML_RESULT | None = None ,
177178) -> PyProjectData :
178179 """Read and parse pyproject configuration.
179180
180- This function supports dependency injection for tests via `_given_result`.
181-
182- Parameters:
183- - path: Path to the pyproject file
184- - tool_name: The tool section name (default: `setuptools_scm`)
185- - canonical_build_package_name: Normalized build requirement name
186- - _given_result: Optional testing hook. Can be:
187- - PyProjectData: returned directly
188- - InvalidTomlError | FileNotFoundError: raised directly
189- - None: read from filesystem
181+ This function supports dependency injection for tests via ``_given_result``
182+ and ``_given_definition``.
183+
184+ :param path: Path to the pyproject file
185+ :param tool_name: The tool section name (default: ``setuptools_scm``)
186+ :param canonical_build_package_name: Normalized build requirement name
187+ :param _given_result: Optional testing hook. Can be:
188+ - ``PyProjectData``: returned directly
189+ - ``InvalidTomlError`` | ``FileNotFoundError``: raised directly
190+ - ``None``: read from filesystem (default)
191+ :param _given_definition: Optional testing hook to provide parsed TOML content.
192+ When provided, this dictionary is used instead of reading and parsing
193+ the file from disk. Ignored if ``_given_result`` is provided.
190194 """
191195
192196 if _given_result is not None :
@@ -195,7 +199,10 @@ def read_pyproject(
195199 if isinstance (_given_result , (InvalidTomlError , FileNotFoundError )):
196200 raise _given_result
197201
198- defn = read_toml_content (path )
202+ if _given_definition is not None :
203+ defn = _given_definition
204+ else :
205+ defn = read_toml_content (path )
199206
200207 requires : list [str ] = defn .get ("build-system" , {}).get ("requires" , [])
201208 is_required = has_build_package (requires , canonical_build_package_name )
@@ -224,6 +231,17 @@ def read_pyproject(
224231 requires ,
225232 )
226233
234+ setuptools_dynamic_version = (
235+ defn .get ("tool" , {})
236+ .get ("setuptools" , {})
237+ .get ("dynamic" , {})
238+ .get ("version" , None )
239+ )
240+ if setuptools_dynamic_version is not None :
241+ from .deprecation import warn_pyproject_setuptools_dynamic_version
242+
243+ warn_pyproject_setuptools_dynamic_version (path )
244+
227245 return pyproject_data
228246
229247
0 commit comments