mirror of
https://github.com/roswell/roswell.git
synced 2026-09-10 07:16:17 -04:00
78 lines
3 KiB
Common Lisp
78 lines
3 KiB
Common Lisp
(roswell:include "util-install-quicklisp")
|
|
(defpackage :roswell.install.abcl-bin
|
|
(:use :cl :roswell.install :roswell.util :roswell.locations))
|
|
(in-package :roswell.install.abcl-bin)
|
|
|
|
(defvar *abcl-bin-get-version-cache* nil)
|
|
|
|
(defun abcl-bin-get-version ()
|
|
(or *abcl-bin-get-version-cache*
|
|
(setf *abcl-bin-get-version-cache*
|
|
(let ((file (merge-pathnames "tmp/abcl-bin.html" (homedir))))
|
|
(format *error-output* "Checking version to install....~%")
|
|
(download (abcl-bin-uri) file)
|
|
(loop for a in (get-elements-by-tag-name
|
|
(plump:parse file) "a")
|
|
for x = (string-right-trim "/" (plump:get-attribute a "href"))
|
|
when (ignore-errors (digit-char-p (aref x 0)))
|
|
collect x)))))
|
|
|
|
(defun abcl-bin-impl ()
|
|
(merge-pathnames (format nil "impls/~A/~A/abcl-bin/" (uname-m) (uname)) (homedir)))
|
|
|
|
(defun abcl-bin-argv-parse (argv)
|
|
(when (position "--without-install" (getf argv :argv) :test 'equal)
|
|
(set-opt "without-install" t))
|
|
(set-opt "prefix" (abcl-bin-impl))
|
|
(cons t argv))
|
|
|
|
(defun abcl-bin-download (argv)
|
|
(set-opt "as" (version argv))
|
|
(set-opt "download.uri" (format nil "~@{~A~}" (abcl-bin-uri)
|
|
(version argv) "/abcl-bin-" (version argv)".tar.gz"))
|
|
(set-opt "download.archive"
|
|
(let ((pos (position #\/ (opt "download.uri") :from-end t)))
|
|
(when pos
|
|
(merge-pathnames (format nil "archives/~A" (subseq (opt "download.uri") (1+ pos))) (homedir)))))
|
|
`((,(opt "download.archive") ,(opt "download.uri"))))
|
|
|
|
(defun abcl-bin-expand (argv)
|
|
(format t "~%Extracting archive:~A~%" (opt "download.archive"))
|
|
(expand
|
|
(opt "download.archive")
|
|
(ensure-directories-exist (abcl-bin-impl)))
|
|
(let ((path (merge-pathnames (format nil "~A/" (opt "as")) (abcl-bin-impl))))
|
|
(and (probe-file path)
|
|
(uiop/filesystem:delete-directory-tree
|
|
path :validate t)))
|
|
(ql-impl-util:rename-directory
|
|
(merge-pathnames (format nil "abcl-bin-~A/" (version argv)) (abcl-bin-impl))
|
|
(merge-pathnames (format nil "~A/" (opt "as")) (abcl-bin-impl)))
|
|
(cons t argv))
|
|
|
|
(defun abcl-bin-script (argv)
|
|
(let ((java (which "java"))
|
|
(dir (merge-pathnames (format nil "~A/" (opt "as")) (abcl-bin-impl))))
|
|
(unless java
|
|
(format *error-output* "Error: JAVA wasn't found in the path. 'ros use abcl' will fail.~%")
|
|
(format *error-output* "Installation incomplete.")
|
|
(roswell:quit 1))
|
|
(install-script
|
|
(merge-pathnames "abcl" dir)
|
|
(format
|
|
nil
|
|
"exec ~A -Xmx4g -cp \"~Aabcl-contrib.jar\" -jar \"~:*~Aabcl.jar\" \"\$@\""
|
|
java dir))
|
|
(cons t argv)))
|
|
|
|
(defun abcl-bin (type)
|
|
(case type
|
|
#+nil(:help '(abcl-bin-help))
|
|
(:install `(,(decide-version 'abcl-bin-get-version)
|
|
abcl-bin-argv-parse
|
|
,(decide-download 'abcl-bin-download)
|
|
abcl-bin-expand
|
|
abcl-bin-script
|
|
setup))
|
|
#+nil(:list 'abcl-bin-get-version)))
|