Add a new environment variable "USE_EXTERNAL_RAYLIB" which will alter the load behaviour to not include a directory prefix. This lets us fallback onto the system library loading mechanism. Remove specific raylib library filenames. This ability is important for operating systems like Nix.
43 lines
1.4 KiB
Python
43 lines
1.4 KiB
Python
"""
|
|
This is an attempt at a CFFI dynamic (ABI) binding. It was failing in the exactly same place the ctypes binding fails, accessing
|
|
materials of a model. But now it __seems__ to work
|
|
"""
|
|
|
|
from cffi import FFI
|
|
import itertools
|
|
import os
|
|
import pathlib
|
|
import platform
|
|
|
|
MODULE = pathlib.Path(__file__).parent.parent
|
|
|
|
def raylib_library_path():
|
|
'''Return the full path of the raylib shared library
|
|
If the environment variable "USE_EXTERNAL_RAYLIB" is set (no value required)
|
|
then the library will be loaded from the system library paths.
|
|
'''
|
|
def so_path():
|
|
return str(MODULE / 'dynamic') if not 'USE_EXTERNAL_RAYLIB' in os.environ else ''
|
|
def so_name():
|
|
'''Returns the appropriate for the library on the current platform.'''
|
|
lib_filenames = {
|
|
'Windows': 'libraylib.dll',
|
|
'Linux': 'libraylib.so',
|
|
'Darwin': 'libraylib.dylib',
|
|
}
|
|
if platform.system() not in lib_filenames:
|
|
raise ValueError('Unrecognised system "{}"'.format(platform.system()))
|
|
return lib_filenames.get(platform.system())
|
|
|
|
return os.path.join(so_path(), so_name())
|
|
|
|
|
|
ffi = FFI()
|
|
ffi.cdef(open(MODULE / "raylib_modified.h").read().replace('RLAPI ', ''))
|
|
|
|
try:
|
|
raylib_fname = raylib_library_path()
|
|
raylib = ffi.dlopen(raylib_fname)
|
|
print('LOADED DYNAMICALLY SHARED LIB "{}"'.format(raylib_fname))
|
|
except Exception as e:
|
|
print(e)
|