chiark / gitweb /
Fixed typo
[clg] / tools / config.lisp
index 1a3e51857b9c7efafa26a5b73c08b8b933fe6119..472d02a5ca0e68f2a191e7429e4c28ac604aa915 100644 (file)
@@ -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,34 @@ (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
+      ;; 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