import os
import shutil
import subprocess
from setuptools.build_meta import build_editable as _build_editable
from setuptools.build_meta import build_sdist as _build_sdist
from setuptools.build_meta import build_wheel as _build_wheel
def _generate_stubs():
if not os.path.exists("Cargo.toml"):
print("Skipping stub generation in sdist build")
return
print("Generating Python stub files...")
try:
result = subprocess.run(
["cargo", "run", "--bin", "stub_gen", "--features", "python"],
check=True,
capture_output=True,
text=True,
)
print(f"Stub generation output: {result.stdout}")
os.makedirs("pymboot_rs", exist_ok=True)
if os.path.exists("pymboot_rs.pyi"):
shutil.copy("pymboot_rs.pyi", "pymboot_rs/__init__.pyi")
print("Copied pymboot_rs.pyi to pymboot_rs/__init__.pyi")
else:
print("Warning: pymboot.pyi was not generated!")
with open("pymboot_rs/py.typed", "w") as f:
pass
print("Created py.typed marker")
except subprocess.CalledProcessError as e:
print(f"Error generating stubs: {e}")
print(f"stdout: {e.stdout}")
print(f"stderr: {e.stderr}")
raise
def build_wheel(wheel_directory, config_settings=None, metadata_directory=None):
_generate_stubs()
return _build_wheel(wheel_directory, config_settings, metadata_directory)
def build_sdist(sdist_directory, config_settings=None):
_generate_stubs()
return _build_sdist(sdist_directory, config_settings)
def build_editable(wheel_directory, config_settings=None, metadata_directory=None):
_generate_stubs()
return _build_editable(wheel_directory, config_settings, metadata_directory)