raylib: include pre-compiled CFFI extension in wheel (#35)
Build the CFFI Python extension (_raylib_cffi.so) during wheel build instead of deferring to first import. This eliminates the need for libgl-dev and libx11-dev on the target system. - setup.py: run build.py after build.sh to compile CFFI extension - pyproject.toml: include _raylib_cffi*.so in package-data, bump to 5.5.0.3 - _shim_setup.py: extract .so files from wheel alongside data directory Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -32,7 +32,8 @@ PLATFORM_MAP = {
|
||||
|
||||
class InstallPrebuilt(build_py):
|
||||
def run(self):
|
||||
data_dir = os.path.join(_HERE, MODULE, DATADIR)
|
||||
module_dir = os.path.join(_HERE, MODULE)
|
||||
data_dir = os.path.join(module_dir, DATADIR)
|
||||
|
||||
if not os.path.exists(os.path.join(data_dir, "bin")):
|
||||
key = (platform.system(), platform.machine())
|
||||
@@ -67,6 +68,24 @@ class InstallPrebuilt(build_py):
|
||||
os.chmod(dest, 0o755)
|
||||
break
|
||||
|
||||
# Also extract compiled extension modules (.so)
|
||||
ext_prefix = f"{MODULE}/"
|
||||
ext_alt_prefix = f"{MODULE}-{VERSION}.data/purelib/{MODULE}/"
|
||||
for info in zf.infolist():
|
||||
if not info.filename.endswith('.so'):
|
||||
continue
|
||||
for p in (ext_prefix, ext_alt_prefix):
|
||||
if info.filename.startswith(p):
|
||||
rel = info.filename[len(p):]
|
||||
if rel and '/' not in rel:
|
||||
dest = os.path.join(module_dir, rel)
|
||||
os.makedirs(os.path.dirname(dest), exist_ok=True)
|
||||
with open(dest, "wb") as f:
|
||||
f.write(zf.read(info))
|
||||
if info.external_attr >> 16 & 0o111:
|
||||
os.chmod(dest, 0o755)
|
||||
break
|
||||
|
||||
super().run()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user