X-Git-Url: https://git.distorted.org.uk/~mdw/clg/blobdiff_plain/a4263d6d79a33293ea5ec264af1b076a098fc89a..19b56e9315dc07e533f668c74fe0866ae7dcc702:/tools/config.lisp diff --git a/tools/config.lisp b/tools/config.lisp index 4d30a4c..d7f161e 100644 --- a/tools/config.lisp +++ b/tools/config.lisp @@ -25,7 +25,7 @@ (let* ((asdf::*verbose-out* nil) (exit-code (asdf:run-shell-command - "~A ~A ~:[~;--print-errors ~]~{~A ~} &>~A" + "~A ~A ~:[~;--print-errors ~]~{~A ~} >~A 2>&1" *pkg-config* package error-p options outname))) (cond ((= exit-code 127) (error "Unable to run ~A" *pkg-config*)) @@ -122,9 +122,9 @@ (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,35 @@ #+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 + ;; We use . and - as delimiters because some Linux + ;; distributions tend to patch SBCL and add a distro-specific + ;; version tag (like 1.0.19-gentoo). + 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