mirror of
https://github.com/roswell/roswell.git
synced 2026-09-10 07:16:17 -04:00
41 lines
1.7 KiB
Common Lisp
41 lines
1.7 KiB
Common Lisp
(defpackage :roswell.list.installed
|
|
(:use :cl :roswell.util)
|
|
(:export :installed))
|
|
(in-package :roswell.list.installed)
|
|
|
|
(defun installed (&rest r)
|
|
(setf r (cdr r))
|
|
(cond
|
|
((null r)
|
|
(format *error-output* "Installed implementations:~%")
|
|
(finish-output *error-output*)
|
|
(dolist (d (directory
|
|
(make-pathname
|
|
:defaults (merge-pathnames
|
|
(format nil "impls/~A/~A/" (uname-m) (uname))
|
|
(homedir))
|
|
:name :wild
|
|
:type :wild)))
|
|
(installed nil (first (last (pathname-directory d))))))
|
|
(t
|
|
(dolist (impl/version r)
|
|
(destructuring-bind (impl version) (parse-version-spec impl/version)
|
|
(if version
|
|
(if (probe-file (merge-pathnames
|
|
(format nil "impls/~A/~A/~A/~A" (uname-m) (uname) impl version)
|
|
(homedir)))
|
|
(format t "~a~%" impl/version)
|
|
(format *error-output* "~a is not installed~%" impl/version))
|
|
(progn
|
|
(format *error-output* "~%Installed versions of ~a:~%" impl)
|
|
(finish-output *error-output*)
|
|
(dolist (d (directory
|
|
(make-pathname
|
|
:defaults (merge-pathnames
|
|
(format nil "impls/~A/~A/~A/" (uname-m) (uname) impl)
|
|
(homedir))
|
|
:name :wild
|
|
:type :wild)))
|
|
(format t "~{~A~^/~}~%" (last (pathname-directory d) 2))
|
|
(finish-output)))))))))
|