64 lines
1.7 KiB
Python
64 lines
1.7 KiB
Python
"""Setup script for pyaegis - builds CFFI extension linking to libaegis.a"""
|
|
|
|
from pathlib import Path
|
|
|
|
from cffi import FFI
|
|
from setuptools import setup
|
|
|
|
|
|
def find_libaegis():
|
|
"""Locate libaegis.a - check common locations."""
|
|
libaegis_paths = [
|
|
Path("libaegis/zig-out/lib/libaegis.a"), # Zig build output (repo build)
|
|
Path("libaegis/build/libaegis.a"), # CMake build output (repo build)
|
|
Path("/usr/local/lib/libaegis.a"), # System install
|
|
Path("/usr/lib/libaegis.a"), # System install
|
|
]
|
|
|
|
for path in libaegis_paths:
|
|
if path.exists():
|
|
print(f"Found libaegis.a at: {path.resolve()}")
|
|
return str(path.resolve())
|
|
|
|
# Return None instead of raising - will be caught during build
|
|
return None
|
|
|
|
|
|
# Read the CDEF header
|
|
cdef_path = Path(__file__).parent / "pyaegis" / "aegis_cdef.h"
|
|
cdef_content = cdef_path.read_text(encoding="utf-8")
|
|
|
|
# Create CFFI builder
|
|
ffibuilder = FFI()
|
|
ffibuilder.cdef(cdef_content)
|
|
|
|
# Include directory for headers
|
|
include_dirs = []
|
|
libaegis_include = Path("libaegis/src/include")
|
|
if libaegis_include.exists():
|
|
include_dirs.append(str(libaegis_include.resolve()))
|
|
|
|
# Try to find libaegis.a, but don't fail if not found (build backend will build it)
|
|
libaegis_static = find_libaegis()
|
|
|
|
# Set the source
|
|
ffibuilder.set_source(
|
|
"pyaegis._aegis", # module name
|
|
"""
|
|
#include "aegis.h"
|
|
#include "aegis128l.h"
|
|
#include "aegis128x2.h"
|
|
#include "aegis128x4.h"
|
|
#include "aegis256.h"
|
|
#include "aegis256x2.h"
|
|
#include "aegis256x4.h"
|
|
""",
|
|
include_dirs=include_dirs,
|
|
extra_objects=[libaegis_static] if libaegis_static else [],
|
|
)
|
|
|
|
if __name__ == "__main__":
|
|
setup(
|
|
cffi_modules=["setup.py:ffibuilder"],
|
|
)
|