More informative build error message when Zig is not installed.

This commit is contained in:
2025-11-07 05:02:01 +00:00
parent b5b939cffe
commit 407cedc7a9
+29 -4
View File
@@ -1,5 +1,6 @@
"""Custom build backend that builds libaegis with Zig before building the Python package.""" """Custom build backend that builds libaegis with Zig before building the Python package."""
import shutil
import subprocess import subprocess
import sys import sys
from pathlib import Path from pathlib import Path
@@ -7,8 +8,32 @@ from pathlib import Path
from setuptools import build_meta as _orig from setuptools import build_meta as _orig
def _check_zig_available():
"""Check if Zig is installed and available."""
if shutil.which("zig") is None:
raise RuntimeError(
"\n" + "=" * 70 + "\n"
"ERROR: Zig compiler not found!\n"
"\n"
"Building pyaegis requires the Zig compiler to build the libaegis\n"
"static library. Please install Zig before building this package.\n"
"\n"
"Installation instructions:\n"
" - Visit: https://ziglang.org/download/\n"
" - Or use a package manager:\n"
" * macOS: brew install zig\n"
" * Linux: See https://github.com/ziglang/zig/wiki/Install-Zig-from-a-Package-Manager\n"
" * Windows: choco install zig or scoop install zig\n"
"\n"
"After installing Zig, please try building again.\n" + "=" * 70 + "\n"
)
def _build_libaegis(): def _build_libaegis():
"""Build libaegis static library with Zig.""" """Build libaegis static library with Zig."""
# Check Zig availability first
_check_zig_available()
libaegis_dir = Path(__file__).parent / "libaegis" libaegis_dir = Path(__file__).parent / "libaegis"
if not libaegis_dir.exists(): if not libaegis_dir.exists():
raise FileNotFoundError( raise FileNotFoundError(
@@ -26,11 +51,9 @@ def _build_libaegis():
) )
print("Successfully built libaegis static library") print("Successfully built libaegis static library")
except subprocess.CalledProcessError as e: except subprocess.CalledProcessError as e:
print(f"Error building libaegis: {e}", file=sys.stderr)
raise
except FileNotFoundError:
print( print(
"Error: 'zig' command not found. Please install Zig to build libaegis.", f"\nError: Zig build failed with exit code {e.returncode}\n"
f"Command: {' '.join(e.cmd)}\n",
file=sys.stderr, file=sys.stderr,
) )
raise raise
@@ -47,6 +70,8 @@ def get_requires_for_build_sdist(config_settings=None):
"""Return build requirements for sdist and ensure libaegis is built first.""" """Return build requirements for sdist and ensure libaegis is built first."""
_build_libaegis() _build_libaegis()
return _orig.get_requires_for_build_sdist(config_settings) return _orig.get_requires_for_build_sdist(config_settings)
_orig_prepare_metadata_for_build_wheel = _orig.prepare_metadata_for_build_wheel _orig_prepare_metadata_for_build_wheel = _orig.prepare_metadata_for_build_wheel
_orig_build_sdist = _orig.build_sdist _orig_build_sdist = _orig.build_sdist