ea8cde23ac316579917a1a3f505063af8063cd6b
[clg] / tools / sharedlib.lisp
1 (asdf:oos 'asdf:load-op :uffi)
2
3 (defpackage #:sharedlib
4 (:use #:common-lisp #:uffi)
5 (:export #:load-shared-library))
6
7 (in-package #:sharedlib)
8
9
10 (defparameter *library-paths* '("/usr/lib/"))
11
12
13
14 (defun load-shared-library (name &key init prototype initargs)
15 (format t ";;; Loading shared library ~A~%" name)
16 (let ((pathname (find-foreign-library name *library-paths*)))
17 (if pathname
18 (unless (load-foreign-library pathname)
19 (error "Couldn't load shared library: ~A" pathname))
20 (error "Shared library not found: ~A" name)))
21 (when init
22 (apply
23 #'alien:alien-funcall
24 (alien::%heap-alien
25 (alien::make-heap-alien-info
26 :type (alien::parse-alien-type (or prototype `(function c-call:void)))
27 :sap-form (system:foreign-symbol-address init)))
28 initargs)))