| 
6 | 6 | 
 
  | 
7 | 7 | import sys  | 
8 | 8 | 
 
  | 
 | 9 | +from .._compat import tomllib  | 
 | 10 | + | 
9 | 11 | __all__ = [  | 
10 | 12 |     "build_editable",  | 
11 | 13 |     "build_sdist",  | 
@@ -66,29 +68,51 @@ def build_editable(  | 
66 | 68 |         raise SystemExit(1) from None  | 
67 | 69 | 
 
  | 
68 | 70 | 
 
  | 
69 |  | -def prepare_metadata_for_build_wheel(  | 
70 |  | -    metadata_directory: str,  | 
71 |  | -    config_settings: dict[str, list[str] | str] | None = None,  | 
72 |  | -) -> str:  | 
73 |  | -    """Prepare metadata for building a wheel. Does not build the wheel. Returns the dist-info directory."""  | 
74 |  | -    from .wheel import _build_wheel_impl  | 
 | 71 | +def _has_safe_metadata() -> bool:  | 
 | 72 | +    try:  | 
 | 73 | +        with open("pyproject.toml", "rb") as f:  # noqa: PTH123  | 
 | 74 | +            pyproject = tomllib.load(f)  | 
 | 75 | +    except FileNotFoundError:  | 
 | 76 | +        return True  | 
75 | 77 | 
 
  | 
76 |  | -    return _build_wheel_impl(  | 
77 |  | -        None, config_settings, metadata_directory, editable=False  | 
78 |  | -    ).wheel_filename  # actually returns the dist-info directory  | 
 | 78 | +    overrides = pyproject.get("tool", {}).get("scikit-build", {}).get("overrides", [])  | 
 | 79 | +    for override in overrides:  | 
 | 80 | +        if_override = override.get("if", {})  | 
 | 81 | +        if "failed" in if_override or "failed" in if_override.get("any", {}):  | 
 | 82 | +            return False  | 
79 | 83 | 
 
  | 
 | 84 | +    return True  | 
80 | 85 | 
 
  | 
81 |  | -def prepare_metadata_for_build_editable(  | 
82 |  | -    metadata_directory: str,  | 
83 |  | -    config_settings: dict[str, list[str] | str] | None = None,  | 
84 |  | -) -> str:  | 
85 |  | -    """Prepare metadata for building a wheel. Does not build the wheel. Returns the dist-info directory."""  | 
86 | 86 | 
 
  | 
87 |  | -    from .wheel import _build_wheel_impl  | 
 | 87 | +if _has_safe_metadata():  | 
88 | 88 | 
 
  | 
89 |  | -    return _build_wheel_impl(  | 
90 |  | -        None, config_settings, metadata_directory, editable=True  | 
91 |  | -    ).wheel_filename  # actually returns the dist-info directory  | 
 | 89 | +    def prepare_metadata_for_build_wheel(  | 
 | 90 | +        metadata_directory: str,  | 
 | 91 | +        config_settings: dict[str, list[str] | str] | None = None,  | 
 | 92 | +    ) -> str:  | 
 | 93 | +        """Prepare metadata for building a wheel. Does not build the wheel. Returns the dist-info directory."""  | 
 | 94 | +        from .wheel import _build_wheel_impl  | 
 | 95 | + | 
 | 96 | +        return _build_wheel_impl(  | 
 | 97 | +            None, config_settings, metadata_directory, editable=False  | 
 | 98 | +        ).wheel_filename  # actually returns the dist-info directory  | 
 | 99 | + | 
 | 100 | +    def prepare_metadata_for_build_editable(  | 
 | 101 | +        metadata_directory: str,  | 
 | 102 | +        config_settings: dict[str, list[str] | str] | None = None,  | 
 | 103 | +    ) -> str:  | 
 | 104 | +        """Prepare metadata for building a wheel. Does not build the wheel. Returns the dist-info directory."""  | 
 | 105 | + | 
 | 106 | +        from .wheel import _build_wheel_impl  | 
 | 107 | + | 
 | 108 | +        return _build_wheel_impl(  | 
 | 109 | +            None, config_settings, metadata_directory, editable=True  | 
 | 110 | +        ).wheel_filename  # actually returns the dist-info directory  | 
 | 111 | + | 
 | 112 | +    __all__ += [  | 
 | 113 | +        "prepare_metadata_for_build_wheel",  | 
 | 114 | +        "prepare_metadata_for_build_editable",  | 
 | 115 | +    ]  | 
92 | 116 | 
 
  | 
93 | 117 | 
 
  | 
94 | 118 | def build_sdist(  | 
 | 
0 commit comments