Files
aegis-python/build_backend.py
T

56 lines
1.8 KiB
Python

"""Custom build backend that builds libaegis with Zig before building the Python package."""
import subprocess
import sys
from pathlib import Path
from setuptools import build_meta as _orig
def _build_libaegis():
"""Build libaegis static library with Zig."""
libaegis_dir = Path(__file__).parent / "libaegis"
if not libaegis_dir.exists():
raise FileNotFoundError(
f"libaegis directory not found at {libaegis_dir}. "
"Cannot build static library."
)
print("Building libaegis static library with Zig...")
try:
subprocess.run(
["zig", "build", "-Drelease"],
cwd=libaegis_dir,
check=True,
capture_output=False,
)
print("Successfully built libaegis static library")
except subprocess.CalledProcessError as e:
print(f"Error building libaegis: {e}", file=sys.stderr)
raise
except FileNotFoundError:
print(
"Error: 'zig' command not found. Please install Zig to build libaegis.",
file=sys.stderr,
)
raise
# Expose all the standard build backend hooks
get_requires_for_build_wheel = _orig.get_requires_for_build_wheel
get_requires_for_build_sdist = _orig.get_requires_for_build_sdist
prepare_metadata_for_build_wheel = _orig.prepare_metadata_for_build_wheel
build_sdist = _orig.build_sdist
def build_wheel(wheel_directory, config_settings=None, metadata_directory=None):
"""Build wheel with libaegis built first."""
_build_libaegis()
return _orig.build_wheel(wheel_directory, config_settings, metadata_directory)
def build_editable(wheel_directory, config_settings=None, metadata_directory=None):
"""Build editable install with libaegis built first."""
_build_libaegis()
return _orig.build_editable(wheel_directory, config_settings, metadata_directory)