1010
1111from pex import third_party
1212from pex .build_system import DEFAULT_BUILD_BACKEND
13- from pex .build_system .pep_518 import BuildSystem , load_build_system
13+ from pex .build_system .pep_518 import BuildSystem , load_build_system , load_build_system_table
1414from pex .common import safe_mkdtemp
1515from pex .dist_metadata import DistMetadata , Distribution , MetadataType
1616from pex .jobs import Job , SpawnedJob
17+ from pex .orderedset import OrderedSet
1718from pex .pip .version import PipVersion , PipVersionValue
1819from pex .resolve .resolvers import Resolver
1920from pex .result import Error , try_
2223from pex .typing import TYPE_CHECKING , cast
2324
2425if TYPE_CHECKING :
25- from typing import Any , Dict , Iterable , List , Mapping , Optional , Set , Text , Union
26+ from typing import Any , Dict , Iterable , List , Mapping , Optional , Set , Text , Tuple , Union
2627
2728_DEFAULT_BUILD_SYSTEMS = {} # type: Dict[PipVersionValue, BuildSystem]
2829
@@ -248,15 +249,16 @@ def build_sdist(
248249 return os .path .join (dist_dir , sdist_relpath )
249250
250251
251- def spawn_prepare_metadata (
252+ def get_requires_for_build_wheel (
252253 project_directory , # type: str
253254 target , # type: Target
254255 resolver , # type: Resolver
255256 pip_version = None , # type: Optional[PipVersionValue]
256257):
257- # type: (...) -> SpawnedJob[DistMetadata ]
258+ # type: (...) -> Tuple[str, ... ]
258259
259- extra_requirements = []
260+ build_system_table = try_ (load_build_system_table (project_directory ))
261+ requires = OrderedSet (build_system_table .requires )
260262 spawned_job = try_ (
261263 _invoke_build_hook (
262264 project_directory ,
@@ -267,11 +269,24 @@ def spawn_prepare_metadata(
267269 )
268270 )
269271 try :
270- extra_requirements . extend (spawned_job .await_result ())
272+ requires . update (spawned_job .await_result ())
271273 except Job .Error as e :
272274 if e .exitcode != _HOOK_UNAVAILABLE_EXIT_CODE :
273275 raise e
276+ return tuple (requires )
277+
274278
279+ def spawn_prepare_metadata (
280+ project_directory , # type: str
281+ target , # type: Target
282+ resolver , # type: Resolver
283+ pip_version = None , # type: Optional[PipVersionValue]
284+ ):
285+ # type: (...) -> SpawnedJob[DistMetadata]
286+
287+ extra_requirements = get_requires_for_build_wheel (
288+ project_directory , target , resolver , pip_version = pip_version
289+ )
275290 build_dir = os .path .join (safe_mkdtemp (), "build" )
276291 os .mkdir (build_dir )
277292 spawned_job = try_ (
0 commit comments