mirror of
https://github.com/vale981/lack
synced 2025-03-05 09:21:39 -05:00
Merge branch 'master' of github.com:fukamachi/lack
This commit is contained in:
commit
b2d8e03065
1 changed files with 25 additions and 4 deletions
|
@ -13,15 +13,36 @@
|
||||||
:generate-random-id))
|
:generate-random-id))
|
||||||
(in-package :lack.util)
|
(in-package :lack.util)
|
||||||
|
|
||||||
|
(defun locate-symbol (symbol pkg)
|
||||||
|
(check-type symbol (or symbol string))
|
||||||
|
(let* ((sym-name (if (symbolp symbol) (symbol-name symbol) symbol))
|
||||||
|
(sym (find-symbol sym-name pkg)))
|
||||||
|
(unless sym
|
||||||
|
(error "Unable to find symbol ~A in package ~S." symbol pkg))
|
||||||
|
sym))
|
||||||
|
|
||||||
|
(defun load-with-quicklisp (system)
|
||||||
|
(let* ((load-sym (locate-symbol '#:quickload '#:ql))
|
||||||
|
(error-sym (locate-symbol '#:system-not-found '#:ql)))
|
||||||
|
;; We're going to trap on every condition, but only actually
|
||||||
|
;; handle ones of the type we're interested in. Conditions that we
|
||||||
|
;; don't explicitly handle will be propagated normally, because
|
||||||
|
;; HANDLER-BIND is cool like that.
|
||||||
|
(handler-bind
|
||||||
|
((t (lambda (c)
|
||||||
|
(when (typep c error-sym)
|
||||||
|
(return-from load-with-quicklisp (values))))))
|
||||||
|
(funcall load-sym system :silent t))))
|
||||||
|
|
||||||
(defun find-package-or-load (package-name)
|
(defun find-package-or-load (package-name)
|
||||||
(check-type package-name string)
|
(check-type package-name string)
|
||||||
(let ((package (find-package package-name)))
|
(let ((package (find-package package-name)))
|
||||||
(or package
|
(or package
|
||||||
(let ((system-name (string-downcase (substitute #\- #\. package-name :test #'char=))))
|
(let ((system-name (string-downcase (substitute #\- #\. package-name :test #'char=))))
|
||||||
#+quicklisp (handler-case (ql:quickload system-name :silent t)
|
(if (member :quicklisp *features*)
|
||||||
(ql:system-not-found ()))
|
(load-with-quicklisp system-name)
|
||||||
#-quicklisp (when (asdf:find-system system-name nil)
|
(when (asdf:find-system system-name nil)
|
||||||
(asdf:load-system system-name :verbose nil))
|
(asdf:load-system system-name :verbose nil)))
|
||||||
(find-package package-name)))))
|
(find-package package-name)))))
|
||||||
|
|
||||||
(defun find-middleware (identifier)
|
(defun find-middleware (identifier)
|
||||||
|
|
Loading…
Add table
Reference in a new issue