crategus / cl-cffi-gtk

cl-cffi-gtk is a Lisp binding to the GTK+ 3 library.
http://www.crategus.com/books/cl-cffi-gtk
146 stars 33 forks source link

Failing to load cl-cffi-gtk #10

Closed PuercoPop closed 10 years ago

PuercoPop commented 10 years ago

Steps to reproduce: clone cl-cffi-gtk to ~/quicklisp/local-projects/

(ql:quickload :cl-cffi-gtk)

I'm on OS X 10.8.5, SBCL 1.12 and gtk+ 3.10.1 (using homebrew) Here is the backtrace

Attempt to call an undefined alien function.
   [Condition of type SB-KERNEL::UNDEFINED-ALIEN-FUNCTION-ERROR]

Restarts:
 0: [RETRY] Retry compiling #<CL-SOURCE-FILE "cl-cffi-gtk-gdk" "gdk.rgba">.
 1: [ACCEPT] Continue, treating compiling #<CL-SOURCE-FILE "cl-cffi-gtk-gdk" "gdk.rgba"> as having been successful.
 2: [ABORT] Give up on "cl-cffi-gtk"
 3: [RETRY] Retry SLIME REPL evaluation request.
 4: [*ABORT] Return to SLIME's top level.
 5: [REMOVE-FD-HANDLER] Remove #<SB-IMPL::HANDLER INPUT on descriptor 12: #<CLOSURE (LABELS SWANK-BACKEND::RUN :IN SWANK-BACKEND:ADD-FD-HANDLER) {10049E22BB}>>
 --more--

Backtrace:
  0: (SB-KERNEL::UNDEFINED-ALIEN-FUNCTION-ERROR)
  1: ("foreign function: call_into_lisp")
  2: ((LAMBDA (#:FUN0) :IN "/Users/PuercoPop/quicklisp/local-projects/cl-cffi-gtk/gdk/gdk.rgba.lisp") #<SB-ALIEN-INTERNALS:ALIEN-VALUE :SAP #X202027B0 :TYPE (FUNCTION (UNSIGNED 64))>)
  3: (SB-INT:SIMPLE-EVAL-IN-LEXENV (CFFI-SYS:%FOREIGN-FUNCALL "gdk_rgba_get_type" (:UNSIGNED-LONG) :CONVENTION :CDECL :LIBRARY :DEFAULT) #<NULL-LEXENV>)
  4: (SB-INT:SIMPLE-EVAL-IN-LEXENV (CFFI:TRANSLATE-FROM-FOREIGN (CFFI-SYS:%FOREIGN-FUNCALL "gdk_rgba_get_type" (:UNSIGNED-LONG) :CONVENTION :CDECL :LIBRARY :DEFAULT) #<GOBJECT:G-TYPE {100A129833}>) #<NULL-..
  5: (SB-INT:SIMPLE-EVAL-IN-LEXENV (PROGN (CFFI:TRANSLATE-FROM-FOREIGN (CFFI-SYS:%FOREIGN-FUNCALL "gdk_rgba_get_type" (:UNSIGNED-LONG) :CONVENTION :CDECL :LIBRARY :DEFAULT) #<GOBJECT:G-TYPE {100A129833}>))..
  6: (EVAL-TLF (PROGN (CFFI:TRANSLATE-FROM-FOREIGN (CFFI-SYS:%FOREIGN-FUNCALL "gdk_rgba_get_type" (:UNSIGNED-LONG) :CONVENTION :CDECL :LIBRARY :DEFAULT) #<GOBJECT:G-TYPE {100A129833}>)) 1 #<NULL-LEXENV>)
  7: (SB-C::EVAL-COMPILE-TOPLEVEL ((CFFI:TRANSLATE-FROM-FOREIGN (CFFI-SYS:%FOREIGN-FUNCALL "gdk_rgba_get_type" (:UNSIGNED-LONG) :CONVENTION :CDECL :LIBRARY :DEFAULT) #<GOBJECT:G-TYPE {100A129833}>)) ((CFFI..
  8: ((FLET SB-C::DEFAULT-PROCESSOR :IN SB-C::PROCESS-TOPLEVEL-FORM) (CFFI:TRANSLATE-FROM-FOREIGN (CFFI-SYS:%FOREIGN-FUNCALL "gdk_rgba_get_type" (:UNSIGNED-LONG) :CONVENTION :CDECL :LIBRARY :DEFAULT) #<GOB..
  9: (SB-C::PROCESS-TOPLEVEL-FORM (CFFI:TRANSLATE-FROM-FOREIGN (CFFI-SYS:%FOREIGN-FUNCALL "gdk_rgba_get_type" (:UNSIGNED-LONG) :CONVENTION :CDECL :LIBRARY :DEFAULT) #<GOBJECT:G-TYPE {100A129833}>) (SB-C::O..
 10: ((FLET SB-C::DEFAULT-PROCESSOR :IN SB-C::PROCESS-TOPLEVEL-FORM) (CFFI:FOREIGN-FUNCALL "gdk_rgba_get_type" GOBJECT:G-TYPE))
 11: (SB-C::PROCESS-TOPLEVEL-FORM (CFFI:FOREIGN-FUNCALL "gdk_rgba_get_type" GOBJECT:G-TYPE) (SB-C::ORIGINAL-SOURCE-START 0 1) (:COMPILE-TOPLEVEL))
 12: (SB-C::PROCESS-TOPLEVEL-PROGN ((CFFI:FOREIGN-FUNCALL "gdk_rgba_get_type" GOBJECT:G-TYPE)) (SB-C::ORIGINAL-SOURCE-START 0 1) (:COMPILE-TOPLEVEL))
 13: (SB-C::PROCESS-TOPLEVEL-FORM (EVAL-WHEN (:EXECUTE :LOAD-TOPLEVEL :COMPILE-TOPLEVEL) (CFFI:FOREIGN-FUNCALL "gdk_rgba_get_type" GOBJECT:G-TYPE)) (SB-C::ORIGINAL-SOURCE-START 0 1) NIL)
 14: (SB-C::SUB-SUB-COMPILE-FILE #<SB-C::SOURCE-INFO >)
 15: ((FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK :IN SB-C::SUB-COMPILE-FILE))
 16: ((LAMBDA NIL :IN SB-C::SUB-COMPILE-FILE))
 17: ((FLET SB-C::WITH-IT :IN SB-C::%WITH-COMPILATION-UNIT))
 18: (SB-C::SUB-COMPILE-FILE #<SB-C::SOURCE-INFO >)
 19: (COMPILE-FILE #P"/Users/PuercoPop/quicklisp/local-projects/cl-cffi-gtk/gdk/gdk.rgba.lisp" :OUTPUT-FILE #P"/Users/PuercoPop/.cache/common-lisp/sbcl-1.1.12-macosx-x64/Users/PuercoPop/quicklisp/local-pro..
crategus commented 10 years ago

I think the C function gdk_rgba_get_type is missing. The type GdkRGBA is present since GTK+ 3. I have no possibility to check the cl-cffi-gtk on OS X. Therefore, I have overseen to change the names of the libraries from Version 2 to 3 for GTK+. When I am right we have to load the following libraries:

For GTK+ 3:

"libgtk-x11-3.0.0.dylib" or "libgtk-x11-3.0.dylib"

And for GDK 3

"libgdk-x11-3.0.0.dylib" or "libgdk-x11-3.0.dylib"

I have changed the code accordingly and will check it out this eventing. I appreciate any help to get the library to work on OS X.

Dieter Kaiser

PuercoPop commented 10 years ago

Hi, Thank you for the prompt response. Unfortunately the commit didn't resolve the issue on my machine, as the libraries for gtk+3 don't have the x11 on their name, at least on my system, however I added the names on my machine to resolve the issue.

 => ls /usr/local/lib | grep -ie gdk
gdk-pixbuf-2.0
libgdk-3.0.dylib
libgdk-3.dylib
libgdk-x11-2.0.0.dylib
libgdk-x11-2.0.dylib
libgdk_pixbuf-2.0.0.dylib
libgdk_pixbuf-2.0.dylib
 => ls /usr/local/lib | grep -ie gtk
gtk-2.0
gtk-3.0
libgtk-3.0.dylib
libgtk-3.dylib
libgtk-x11-2.0.0.dylib
libgtk-x11-2.0.dylib
crategus commented 10 years ago

I have merged your code to the branch master. Thank you very much for your help.

If you get the demos (see /demo/gtk-demo/gtk-demo.lisp) for Lisp running, I am very interested in some pictures of some demos.

Dieter Kaiser

PuercoPop commented 10 years ago

It worked without problems

screen shot 2013-10-17 at 5 05 00 pm

crategus commented 10 years ago

Thank you very much for the screen shot. If you don't mind I will include this screen shot in the GTK Tutorial.

Dieter Kaiser

PuercoPop commented 10 years ago

Sure, btw after submitting the image I found out that taking a screenshot makes the app permanently loose focus, but it appears to be an X11 issue from my google-fu