-(defvar *clsql-uffi-library-filename*
- (uffi:find-foreign-library
- "clsql-uffi"
- `(,(make-pathname :directory (pathname-directory *load-truename*))
- "/usr/lib/clsql/"
- "/opt/lisp/clsql/uffi/"
- "/home/kevin/debian/src/clsql/uffi/")
- :drive-letters '("C" "D" "E" "F" "G")))
+(defun find-and-load-foreign-library (filenames &key module supporting-libraries (errorp t))
+ (setq filenames (if (listp filenames) filenames (list filenames))
+ filenames
+ (append
+ (loop for search-path in clsql:*foreign-library-search-paths*
+ nconc (loop for filename in filenames
+ collect (merge-pathnames filename search-path)))
+ filenames))
+ (or (loop for type in (uffi:foreign-library-types)
+ for suffix = (make-pathname :type type)
+ thereis (loop for filename in filenames
+ thereis (handler-case
+ (uffi:load-foreign-library (merge-pathnames filename suffix)
+ :module module
+ :supporting-libraries supporting-libraries)
+ (error (c)
+ (warn "~A" c)
+ nil))))
+ (when errorp
+ (error "Couldn't load foreign librar~@P ~{~S~^, ~}. (searched ~S)"
+ (length filenames) filenames
+ 'clsql:*foreign-library-search-paths*))))
+
+(defvar *clsql-uffi-library-filenames*
+ (list #+(or 64bit x86-64) "clsql_uffi64"
+ #+(or 64bit x86-64) (make-pathname :name "clsql_uffi64"
+ :directory clsql-uffi-system::*library-file-dir*)
+ "clsql_uffi"
+ (make-pathname :name "clsql_uffi"
+ :directory clsql-uffi-system::*library-file-dir*)))