1+ from __future__ import annotations
2+
13import logging
24import os
35import pathlib
1921from . import overrides
2022
2123if typing .TYPE_CHECKING :
22- from . import build_environment
24+ from . import build_environment , context
2325
2426logger = logging .getLogger (__name__ )
2527
@@ -419,7 +421,7 @@ def from_mapping(
419421 * ,
420422 source : pathlib .Path | str | None ,
421423 has_config : bool ,
422- ) -> " PackageSettings" :
424+ ) -> PackageSettings :
423425 """Load from a dict"""
424426 package = Package (canonicalize_name (package , validate = True ))
425427 try :
@@ -436,7 +438,7 @@ def from_string(
436438 raw_yaml : str ,
437439 * ,
438440 source : pathlib .Path | str | None = None ,
439- ) -> " PackageSettings" :
441+ ) -> PackageSettings :
440442 """Load from raw yaml string"""
441443 parsed : typing .Any = yaml .safe_load (raw_yaml )
442444 if parsed is None :
@@ -449,7 +451,7 @@ def from_string(
449451 return cls .from_mapping (package , parsed , source = source , has_config = True )
450452
451453 @classmethod
452- def from_file (cls , filename : pathlib .Path ) -> " PackageSettings" :
454+ def from_file (cls , filename : pathlib .Path ) -> PackageSettings :
453455 """Load from file
454456
455457 Raises :exc:`FileNotFound` when the file is not found.
@@ -461,7 +463,7 @@ def from_file(cls, filename: pathlib.Path) -> "PackageSettings":
461463 return cls .from_string (filename .stem , raw_yaml , source = filename )
462464
463465 @classmethod
464- def from_default (cls , package : str | Package ) -> " PackageSettings" :
466+ def from_default (cls , package : str | Package ) -> PackageSettings :
465467 """Create a default package setting"""
466468 return cls .from_mapping (package , {}, source = "default" , has_config = False )
467469
@@ -558,7 +560,7 @@ class PackageBuildInfo:
558560 Public API for PackageSettings with i
559561 """
560562
561- def __init__ (self , settings : " Settings" , ps : PackageSettings ) -> None :
563+ def __init__ (self , settings : Settings , ps : PackageSettings ) -> None :
562564 self ._variant = typing .cast (Variant , settings .variant )
563565 self ._patches_dir = settings .patches_dir
564566 self ._variant_changelog = settings .variant_changelog ()
@@ -763,7 +765,7 @@ def get_extra_environ(
763765 self ,
764766 * ,
765767 template_env : dict [str , str ] | None = None ,
766- build_env : " build_environment.BuildEnvironment | None" = None ,
768+ build_env : build_environment .BuildEnvironment | None = None ,
767769 ) -> dict [str , str ]:
768770 """Get extra environment variables for a variant
769771
@@ -894,7 +896,7 @@ def from_string(
894896 raw_yaml : str ,
895897 * ,
896898 source : pathlib .Path | str | None = None ,
897- ) -> " SettingsFile" :
899+ ) -> SettingsFile :
898900 """Load from raw yaml string"""
899901 parsed : typing .Any = yaml .safe_load (raw_yaml )
900902 if parsed is None :
@@ -916,7 +918,7 @@ def from_string(
916918 ) from err
917919
918920 @classmethod
919- def from_file (cls , filename : pathlib .Path ) -> " SettingsFile" :
921+ def from_file (cls , filename : pathlib .Path ) -> SettingsFile :
920922 """Load from file
921923
922924 Raises :exc:`FileNotFound` when the file is not found.
@@ -958,7 +960,7 @@ def from_files(
958960 variant : Variant | str ,
959961 patches_dir : pathlib .Path ,
960962 max_jobs : int | None ,
961- ) -> " Settings" :
963+ ) -> Settings :
962964 """Create Settings from settings.yaml and directory"""
963965 if settings_file .is_file ():
964966 settings = SettingsFile .from_file (settings_file )
@@ -1082,3 +1084,41 @@ def all_variants(self) -> set[Variant]:
10821084 for ps in self ._package_settings .values ():
10831085 variants .update (ps .variants .keys ())
10841086 return variants
1087+
1088+
1089+ def default_update_extra_environ (
1090+ * ,
1091+ ctx : context .WorkContext ,
1092+ req : Requirement ,
1093+ version : Version | None ,
1094+ sdist_root_dir : pathlib .Path ,
1095+ extra_environ : dict [str , str ],
1096+ build_env : build_environment .BuildEnvironment ,
1097+ ) -> None :
1098+ """Update extra_environ in-place"""
1099+ return None
1100+
1101+
1102+ def get_extra_environ (
1103+ * ,
1104+ ctx : context .WorkContext ,
1105+ req : Requirement ,
1106+ version : Version | None ,
1107+ sdist_root_dir : pathlib .Path ,
1108+ build_env : build_environment .BuildEnvironment ,
1109+ ) -> dict [str , str ]:
1110+ """Get extra environment variables from settings and update hook"""
1111+ pbi = ctx .package_build_info (req )
1112+ extra_environ = pbi .get_extra_environ (build_env = build_env )
1113+ overrides .find_and_invoke (
1114+ req .name ,
1115+ "update_extra_environ" ,
1116+ default_update_extra_environ ,
1117+ ctx = ctx ,
1118+ req = req ,
1119+ version = version ,
1120+ sdist_root_dir = sdist_root_dir ,
1121+ extra_environ = extra_environ ,
1122+ build_env = build_env ,
1123+ )
1124+ return extra_environ
0 commit comments