diff --git a/.gitignore b/.gitignore index 9d99c46..70f5900 100644 --- a/.gitignore +++ b/.gitignore @@ -4,8 +4,8 @@ /dist /build /pyaegis/build -/pyaegis/_aegis.*.so -/pyaegis/_aegis.*.pyd +/pyaegis/_aegis*.so +/pyaegis/_aegis*.pyd __pycache__ !.gitignore !.gitmodules diff --git a/MANIFEST.in b/MANIFEST.in index 13c5f9b..d24e1a7 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -4,10 +4,8 @@ include tools/build_backend.py include BUILD.md include README.md recursive-include libaegis *.c *.h *.zig *.zon -include libaegis/CMakeLists.txt include libaegis/LICENSE include libaegis/README.md -recursive-include libaegis/cmake *.cmake *.cmake.in graft libaegis/src include libaegis/build.zig include libaegis/build.zig.zon diff --git a/pyproject.toml b/pyproject.toml index 609877f..d71cb2a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,11 +1,11 @@ [build-system] -requires = ["setuptools>=61.0", "cffi>=2.0.0"] +requires = ["setuptools>=61.0", "cffi>=2.0.0", "setuptools-scm>=8.0"] build-backend = "build_backend" backend-path = ["tools"] [project] name = "pyaegis" -version = "0.3.1" +dynamic = ["version"] description = "Python bindings for libaegis" requires-python = ">=3.10" classifiers = [ @@ -25,7 +25,9 @@ Homepage = "https://github.com/LeoVasanko/pyaegis" [dependency-groups] dev = [ "pytest>=8.4.2", + "ruff>=0.14.4", "setuptools>=80.9.0", + "setuptools-scm>=9.2.2", ] [tool.setuptools] @@ -33,3 +35,5 @@ packages = ["pyaegis"] [tool.setuptools.package-data] pyaegis = ["*.h", "*.so", "*.pyd"] + +[tool.setuptools_scm] diff --git a/setup.py b/setup.py index d26aeec..7fd3de2 100644 --- a/setup.py +++ b/setup.py @@ -1,28 +1,24 @@ -"""Setup script for pyaegis - builds CFFI extension linking to libaegis.a""" +"""Setup script for pyaegis - builds CFFI extension with libaegis C library.""" +import os +import sys from pathlib import Path from cffi import FFI from setuptools import setup +# Locate the static library (built by build_backend.py before this runs) +lib_name = "aegis.lib" if sys.platform == "win32" else "libaegis.a" +libaegis_static = Path("libaegis/zig-out/lib") / lib_name +if not libaegis_static.exists(): + raise RuntimeError(f"libaegis static library not found at {libaegis_static}") +libaegis_static = str(libaegis_static.resolve()) -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 - +# Include directory for headers +libaegis_include = Path("libaegis/src/include") +if not libaegis_include.exists(): + raise RuntimeError(f"libaegis include directory not found at {libaegis_include}") +include_dirs = [str(libaegis_include)] # Read the CDEF header cdef_path = Path(__file__).parent / "pyaegis" / "aegis_cdef.h" @@ -32,15 +28,6 @@ cdef_content = cdef_path.read_text(encoding="utf-8") 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 @@ -54,7 +41,7 @@ ffibuilder.set_source( #include "aegis256x4.h" """, include_dirs=include_dirs, - extra_objects=[libaegis_static] if libaegis_static else [], + extra_objects=[libaegis_static], ) if __name__ == "__main__":