mirror of
https://gitlab.com/embeddable-common-lisp/ecl.git
synced 2025-12-06 10:41:33 -08:00
65 lines
1.8 KiB
Common Lisp
65 lines
1.8 KiB
Common Lisp
(defpackage :ecl-quicklisp
|
|
(:use :cl))
|
|
|
|
(in-package :ecl-quicklisp)
|
|
|
|
(require :ecl-curl)
|
|
|
|
(defparameter *quicklisp-url* "http://beta.quicklisp.org/quicklisp.lisp")
|
|
|
|
(defparameter *quicklisp-directory*
|
|
#+windows
|
|
(translate-logical-pathname "SYS:QUICKLISP;")
|
|
#-windows
|
|
(translate-logical-pathname "HOME:QUICKLISP;")
|
|
)
|
|
|
|
(defparameter *quicklisp-setup*
|
|
#+windows
|
|
"SYS:QUICKLISP;SETUP.LISP"
|
|
#-windows
|
|
"HOME:QUICKLISP;SETUP.LISP"
|
|
)
|
|
|
|
(defun safe-download (url filename)
|
|
(ensure-directories-exist filename)
|
|
(handler-case
|
|
(ecl-curl:download-url-to-file url filename)
|
|
(ecl-curl:download-error (c)
|
|
(format t "~&;;;~%;;; Unable to download quicklisp. Aborting. ~%;;;")
|
|
(ext:quit 1)))
|
|
filename)
|
|
|
|
(defun install-quicklisp (target-directory)
|
|
(let ((file (merge-pathnames "_installer.lisp" target-directory)))
|
|
(ensure-directories-exist file)
|
|
(ecl-curl:download-url-to-file *quicklisp-url* file)
|
|
(load file)
|
|
(eval (read-from-string
|
|
(format nil "(quicklisp-quickstart:install :path ~S)"
|
|
(namestring (truename target-directory))))
|
|
)))
|
|
|
|
(handler-case
|
|
(progn
|
|
(unless (probe-file *quicklisp-setup*)
|
|
(install-quicklisp *quicklisp-directory*))
|
|
(unless (find-package "QL")
|
|
(load *quicklisp-setup*))
|
|
(eval (read-from-string "
|
|
(pushnew #'(ext:lambda-block quicklisp-require (module)
|
|
(let* ((module (string-downcase module)))
|
|
(when (find module (ql:provided-systems t)
|
|
:test #'string-equal
|
|
:key #'ql-dist:name)
|
|
(and (ql:quickload module)
|
|
(provide module)))))
|
|
sys::*module-provider-functions*)
|
|
")))
|
|
(error (c)
|
|
(format t "~%;;; Unable to load / install quicklisp. Error message follows:~%~A"
|
|
c)))
|
|
|
|
(provide "ecl-quicklisp")
|
|
|
|
|