[cffi-devel] CFFI foreign library error pathname patch

Luís Oliveira luismbo at gmail.com
Sun Dec 18 13:02:02 UTC 2011


On Sun, Dec 18, 2011 at 12:40 PM, Zach Beane <xach at xach.com> wrote:
>> OK, and so you'd like to get a hold of
>> "/maybe/some/path/to/libfoo.so.x" or whatever. Hmm, so maybe in
>> try-foreign-library-alternatives we could store the first alternative
>> since that should usually be something like "libfoo.so.x".
>
> It would be nice to have all the alternatives.

We could store the definition s-exp.

;;; (define-foreign-library opengl
;;;   (:darwin  (:framework "OpenGL"))
;;;   (:unix    (:or "libGL.so" "libGL.so.1"
;;;                  #p"/myhome/mylibGL.so"))
;;;   (:windows "opengl32.dll")
;;;   ;; an hypothetical example of a particular platform
;;;   ((:and :some-system :some-cpu) "libGL-support.lib")
;;;   ;; if no other clauses apply, this one will and a type will be
;;;   ;; automagically appended to the name passed to :default
;;;   (t (:default "libGL")))

In this case, the error's LIBRARY-SPECIFICATION slot (or something
along those lines), could hold a string, a pathname, or s-exps whose
CARs are one of :OR, :DEFAULT, or :FRAMEWORK.

But it's a bit messy. Wouldn't it be easier to deal with a single
string? At first sight, it seems unlikely that some of the
alternatives in an :OR clause would hold more project information than
others. (Except perhaps for the version, which should be in the first
alternative, but sometimes isn't.)

In this example, said string would be
"/path/to/OpenGL.framework/something/something.dylib", "libGL.so",
"opengl32.dll" on OS X, Unix, and Windows, respectively.

-- 
Luís Oliveira
http://r42.eu/~luis/




More information about the cffi-devel mailing list