X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/clg/blobdiff_plain/107435ccfa2092aae75d1da99c3d2ebfacc1264d..4424b51dc2a4fb70d3489d6e87425bf61d3a10bc:/tools/config.lisp diff --git a/tools/config.lisp b/tools/config.lisp index 1a3e518..c38b034 100644 --- a/tools/config.lisp +++ b/tools/config.lisp @@ -122,9 +122,9 @@ (defun pkg-libdir (package) (defun |#?-reader| (stream subchar arg) (declare (ignore subchar arg)) - (let ((not-p (when (char= (peek-char nil stream) #\-) - (read-char stream))) - (conditional (read stream t nil t))) + (let* ((not-p (when (char= (peek-char nil stream) #\-) + (read-char stream))) + (conditional (read stream t nil t))) (cond (*read-suppress* (read stream t nil t)) ((not *read-eval*) @@ -144,30 +144,31 @@ (set-dispatch-macro-character #\# #\? #'|#?-reader|) #+sbcl (progn (defun sbcl-version () - (let* ((dot1 (position #\. (lisp-implementation-version))) - (dot2 (position #\. (lisp-implementation-version) :start (1+ dot1)))) - (values - (parse-integer (lisp-implementation-version) :end dot1) - (parse-integer (lisp-implementation-version) :start (1+ dot1) :end dot2) - (if dot2 - (parse-integer (lisp-implementation-version) :start (1+ dot2) :junk-allowed t) - 0)))) - (defun sbcl>= (req-major req-minor req-micro) - (multiple-value-bind (major minor micro) (sbcl-version) + (values-list + (loop + repeat 4 + for part in (split-string (lisp-implementation-version) :delimiter #\.) + while (every #'digit-char-p part) + collect (parse-integer part)))) + (defun sbcl>= (major minor micro &optional patch) + (multiple-value-bind (%major %minor %micro %patch) (sbcl-version) (or - (> major req-major) - (and (= major req-major) (> minor req-minor)) - (and (= major req-major) (= minor req-minor) (>= micro req-micro))))) - (defun sbcl< (req-major req-minor req-micro) - (not (sbcl>= req-major req-minor req-micro)))) + (> %major major) + (and (= %major major) (> %minor minor)) + (and (= %major major) (= %minor minor) (> %micro micro)) + (and + (= %major major) (= %minor minor) (= %micro micro) + (>= (or %patch 0) (or patch 0)))))) + (defun sbcl< (major minor micro &optional patch) + (not (sbcl>= major minor micro patch)))) #-sbcl (progn - (defun sbcl>= (req-major req-minor req-micro) - (declare (ignore req-major req-minor req-micro)) + (defun sbcl>= (major minor micro &optional patch) + (declare (ignore major minor micro patch)) nil) - (defun sbcl< (req-major req-minor req-micro) - (declare (ignore req-major req-minor req-micro)) + (defun sbcl< (major minor micro &optional patch) + (declare (ignore major minor micro patch)) nil)) #+clisp