Activity log for bug #1692751

Date Who What changed Old value New value Message
2017-05-23 01:49:22 vydd bug added bug
2017-05-23 13:06:02 vydd description Loading cffi on openSuse Tumbleweed results in two errors. The first one, (FL-ERROR "Unable to load any of the alternatives:~% ~S" ("libffi.so.6" "libffi32.so.6" "libffi.so.5" "libffi32.so.5")) is easily solved by providing ("libffi.so") as a value to be used instead. This is because Tumbleweed comes with libffi7, from git. As far as I can tell from their package changelog, it's https://github.com/libffi/libffi/tree/60e4250a77eb3fde500bfd68ec40519fe34b21bd . This leads to another problem: grov.c: In function ‘main’: grov.c:72:41: error: ‘FFI_SYSV’ undeclared (first use in this function) fprintf(output, "%"PRIiMAX, (intmax_t)FFI_SYSV); FFI_SYSV isn't defined because ffi_abi struct in ffitarget.h resolves to #elif defined(X86_64) || (defined (__x86_64__) && defined (X86_DARWIN)) FFI_FIRST_ABI = 1, FFI_UNIX64, FFI_WIN64, FFI_EFI64 = FFI_WIN64, FFI_LAST_ABI, FFI_DEFAULT_ABI = FFI_UNIX64 leaving FFI_SYSV undefined. As a temporary fix, I added #define FFI_SYSV 1 to grovel/common.h, and compiling worked just fine for my case (https://github.com/vydd/sketch/issues/17#issuecomment-303260982), but a proper patch is needed. Loading cffi on openSuse Tumbleweed results in two errors. The first one, (FL-ERROR "Unable to load any of the alternatives:~% ~S" ("libffi.so.6" "libffi32.so.6" "libffi.so.5" "libffi32.so.5")) is easily solved by providing ("libffi.so") as a value to be used instead. This is because Tumbleweed comes with libffi7, from git. As far as I can tell from their package changelog, it's https://github.com/libffi/libffi/tree/60e4250a77eb3fde500bfd68ec40519fe34b21bd . This leads to another problem: grov.c: In function ‘main’: grov.c:72:41: error: ‘FFI_SYSV’ undeclared (first use in this function)    fprintf(output, "%"PRIiMAX, (intmax_t)FFI_SYSV); FFI_SYSV isn't defined because ffi_abi struct in ffitarget.h resolves to #elif defined(X86_64) || (defined (__x86_64__) && defined (X86_DARWIN))   FFI_FIRST_ABI = 1,   FFI_UNIX64,   FFI_WIN64,   FFI_EFI64 = FFI_WIN64,   FFI_LAST_ABI,   FFI_DEFAULT_ABI = FFI_UNIX64 leaving FFI_SYSV undefined. As a temporary fix, I added #define FFI_SYSV 1 to grovel/common.h, and compiling worked just fine for my case (https://github.com/vydd/sketch/issues/17#issuecomment-303260982), but a proper patch is needed. EDIT: Proposed patch 2 files changed, 7 insertions(+), 2 deletions(-) libffi/libffi-types.lisp | 7 ++++++- libffi/libffi.lisp | 2 +- modified libffi/libffi-types.lisp @@ -65,7 +65,12 @@ ((:sysv "FFI_SYSV")) ((:stdcall "FFI_STDCALL"))) -#-(or freebsd windows) +#+(and x86-64 (not windows)) +(cenum abi + ((:default-abi "FFI_DEFAULT_ABI")) + ((:unix64 "FFI_UNIX64"))) + +#-(or freebsd windows x86-64) (cenum abi ((:default-abi "FFI_DEFAULT_ABI")) ((:sysv "FFI_SYSV")) modified libffi/libffi.lisp @@ -31,7 +31,7 @@ (:darwin (:or "libffi.dylib" "libffi32.dylib" "/usr/lib/libffi.dylib")) (:solaris (:or "/usr/lib/amd64/libffi.so" "/usr/lib/libffi.so")) (:openbsd "libffi.so") - (:unix (:or "libffi.so.6" "libffi32.so.6" "libffi.so.5" "libffi32.so.5")) + (:unix (:or "libffi.so.6" "libffi32.so.6" "libffi.so.5" "libffi32.so.5" "libffi.so")) (:windows (:or "libffi-6.dll" "libffi-5.dll" "libffi.dll")) (t (:default "libffi"))) I don't know nearly enough about cffi internals to be sure it doesn't break other stuff. Otherwise I'd post this as a pull request.