I don't think that this is such a burden. This is how libs are loaded in lisp builder-sdl.
(cffi:define-foreign-library sdl (:darwin (:or (:framework "SDL") (:default "libSDL"))) (:windows "SDL.dll") (:unix (:or "libSDL-1.2.so.0.7.2" "libSDL-1.2.so.0" "libSDL-1.2.so" "libSDL.so" "libSDL")))
On Tuesday, December 31, 2013, Luís Oliveira wrote:
On Tue, Dec 31, 2013 at 6:58 PM, Elliott Slaughter <elliottslaughter@gmail.com javascript:;> wrote:
with the comment "the define-foreign-library clause (t (:default
"libcurl"))
[...] will adapt to various operating systems".
I'm wondering exactly how smart is this automatic handling?
Right now, it simply appends an extension like ".dll" or ".dylib". It doesn't handle versions or anything like that.
On Windows, for example, the conventions are not always followed so
closely,
and as a result I keep adding more special cases to my define-foreign-library clauses when users complain they can't load the libraries.
For example, libpng might be png.dll or libpng.dll or libpng12.dll or libpng12-0.dll or libpng15-15.dll.
Will I be required to maintain a list of all possible names for the rest
of
eternity or is there some better way to manage this situation?
Yeah, that sucks. I'm not aware of a better general solution. In some cases, you might get away with searching for "*png*.dll" then loading that using load-foreign-library, but I suppose you need to be careful where you search.
HTH,
-- Luís Oliveira http://kerno.org/~luis/