2323BUILD_SYSTEM_REQ_FILE_NAME = "build-system-requirements.txt"
2424BUILD_BACKEND_REQ_FILE_NAME = "build-backend-requirements.txt"
2525BUILD_SDIST_REQ_FILE_NAME = "build-sdist-requirements.txt"
26+ INSTALL_REQ_FILE_NAME = "requirements.txt"
2627
2728
2829def get_build_system_dependencies (
@@ -208,6 +209,7 @@ def default_get_build_sdist_dependencies(
208209 Defaults to result of hook call
209210 :meth:`~pyproject_hooks.BuildBackendHookCaller.get_requires_for_build_wheel`
210211 """
212+ logger .info (f"looking for build sdist dependencies in { build_dir } " )
211213 pbi = ctx .package_build_info (req )
212214 hook_caller = get_build_backend_hook_caller (
213215 ctx = ctx ,
@@ -232,10 +234,46 @@ def get_install_dependencies_of_sdist(
232234
233235 Uses PEP 517 prepare_metadata_for_build_wheel() API.
234236 """
237+ logger .info (
238+ f"getting install requirements for { req } from sdist in { sdist_root_dir } "
239+ )
235240 pbi = ctx .package_build_info (req )
236241 build_dir = pbi .build_dir (sdist_root_dir )
237- logger .info (f"getting install requirements for { req } from sdist in { build_dir } " )
238242 extra_environ = pbi .get_extra_environ (build_env = build_env )
243+ orig_deps = overrides .find_and_invoke (
244+ req .name ,
245+ "get_install_dependencies_of_sdist" ,
246+ default_get_install_dependencies_of_sdist ,
247+ ctx = ctx ,
248+ req = req ,
249+ sdist_root_dir = sdist_root_dir ,
250+ build_env = build_env ,
251+ extra_environ = extra_environ ,
252+ build_dir = build_dir ,
253+ config_settings = pbi .config_settings ,
254+ )
255+ deps = _filter_requirements (req , orig_deps )
256+ _write_requirements_file (
257+ deps ,
258+ sdist_root_dir .parent / INSTALL_REQ_FILE_NAME ,
259+ )
260+ return deps
261+
262+
263+ def default_get_install_dependencies_of_sdist (
264+ * ,
265+ ctx : context .WorkContext ,
266+ req : Requirement ,
267+ sdist_root_dir : pathlib .Path ,
268+ build_env : build_environment .BuildEnvironment ,
269+ extra_environ : dict [str , str ],
270+ build_dir : pathlib .Path ,
271+ config_settings : dict [str , str ],
272+ ) -> set [Requirement ]:
273+ """Get install requirements (Requires-Dist) from sources
274+
275+ Uses PEP 517 prepare_metadata_for_build_wheel() API.
276+ """
239277 hook_caller = get_build_backend_hook_caller (
240278 ctx = ctx ,
241279 req = req ,
@@ -246,16 +284,14 @@ def get_install_dependencies_of_sdist(
246284 with tempfile .TemporaryDirectory () as tmp_dir :
247285 distinfo_name = hook_caller .prepare_metadata_for_build_wheel (
248286 tmp_dir ,
249- config_settings = pbi . config_settings ,
287+ config_settings = config_settings ,
250288 )
251289 metadata_file = pathlib .Path (tmp_dir ) / distinfo_name / "METADATA"
252290 # ignore minor metadata issues
253291 metadata = parse_metadata (metadata_file , validate = False )
254-
255- if metadata .requires_dist is None :
292+ if not metadata .requires_dist :
256293 return set ()
257- else :
258- return _filter_requirements (req , metadata .requires_dist )
294+ return set (metadata .requires_dist )
259295
260296
261297def parse_metadata (metadata_file : pathlib .Path , * , validate : bool = True ) -> Metadata :
@@ -276,7 +312,7 @@ def get_install_dependencies_of_wheel(
276312 deps = _filter_requirements (req , wheel .requires_dist )
277313 _write_requirements_file (
278314 deps ,
279- requirements_file_dir / "requirements.txt" ,
315+ requirements_file_dir / INSTALL_REQ_FILE_NAME ,
280316 )
281317 return deps
282318
0 commit comments