58 lines
1.8 KiB
Python
Executable File
58 lines
1.8 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import os
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
|
|
def main() -> None:
|
|
# CIBW_HOST_TRIPLET is set in the android_env to the Android target triplet.
|
|
target = os.environ.get("CIBW_HOST_TRIPLET")
|
|
|
|
cmd_name = Path(sys.argv[0]).name
|
|
|
|
# Find the real command in PATH, excluding the current script's directory
|
|
path_env = os.environ.get("PATH", "")
|
|
script_dir = Path(__file__).resolve().parent
|
|
|
|
paths = path_env.split(os.pathsep)
|
|
# Filter out the script directory to avoid recursion
|
|
filtered_paths = [p for p in paths if Path(p).resolve() != script_dir]
|
|
filtered_path_env = os.pathsep.join(filtered_paths)
|
|
|
|
real_cmd = shutil.which(cmd_name, path=filtered_path_env)
|
|
|
|
if not real_cmd:
|
|
sys.stderr.write(f"cibuildwheel: Error: Could not find system {cmd_name}\n")
|
|
sys.exit(1)
|
|
|
|
# If we have a target (i.e. we are in the android_env), try to install it.
|
|
if target:
|
|
# Check if rustup is available to install the target
|
|
rustup_path = shutil.which("rustup", path=filtered_path_env)
|
|
|
|
if rustup_path:
|
|
try:
|
|
# We call rustup to ensure the target is installed.
|
|
subprocess.run(
|
|
[rustup_path, "target", "add", target],
|
|
check=True,
|
|
stdout=subprocess.DEVNULL,
|
|
stderr=subprocess.PIPE,
|
|
text=True,
|
|
)
|
|
except subprocess.CalledProcessError as e:
|
|
sys.stderr.write(
|
|
f"cibuildwheel: Error: Failed to install Rust target {target}: {e.stderr}\n"
|
|
)
|
|
sys.exit(1)
|
|
|
|
# Execute the real command
|
|
os.execv(real_cmd, [real_cmd, *sys.argv[1:]])
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|