roswell で Clasp をうまく install できなかったので修正してみた。
roswell は sbcl が中心
roswell のメンテナンスは sbcl が中心のようだ。実用的という意味では、それでいいのかも。Clasp は立ち上げがとにかく遅いからね。
とはいえ、Clasp でもちょっと動いてほしい。とりあえず roswell の install が出来るところまではこぎつけた。
まず、install-clasp.lisp を修正。なかで、install+externals-clasp.lisp を読んでいるのだが、もはや必要なさそう。install+externals-clasp の依存バージョンが書いてあったのでまずそれを nil にする。
install-clasp.lisp
(defparameter *clasp-version*
;; alias commit external-clasp-version
'(("2.1.0" "0e6728bf5187c44e49350a431c7894aad6295abb" nil)
("2.0.0" "413757e24a5fbf84195434ec545602db0a8840a0" nil)
("1.0.0" "9c61b10dd5eebdbc03404e7faa0ceaf1fec5f30d" nil)
...
))
nil にしたら install+externals-clasp を install するのをスキップするように変更。
install-clasp.lisp
(defun clasp-lib (argv)
(let ((externals-clasp-version (clasp-get-externals-clasp-version argv)))
(when externals-clasp-version
(roswell:roswell (list (format nil "install externals-clasp+/~a" externals-clasp-version)) :interactive nil)))
(cons t argv))
download と extract まではうまく行くが、なぜかディレクトリ構成がうまくいっていない。Clasp はどういうわけか、ディレクトリ構成が違うと動かないので手で修正。ホントは extract を変えないといけないのだと思う。
install に sbcl を必要とする。そして、/usr/bin/sbcl と roswell の sbcl が競合してうまく動かなかったので、roswell の sbcl を使うように修正。
build のツールが ninja に変わったのでそれも修正。
install-clasp.lisp
(defun clasp-make-1.0.0 (argv)
(let ((h (homedir))
(v (getf argv :version))
(sbcl-base (merge-pathnames (format nil "impls/~A/~A/sbcl-bin/~A/"
(uname-m) (uname)
(config "sbcl-bin.version"))
(homedir))))
(setenv "SBCL_HOME" (namestring (merge-pathnames "lib/sbcl" sbcl-base)))
(format t "with sbcl-bin(~A) build clasp" sbcl-base)
(with-open-file (out (ensure-directories-exist
(merge-pathnames (format nil "log/clasp/~A/make.log"
(getf argv :version))
(homedir)))
:direction :output :if-exists :append :if-does-not-exist
:create)
(format out "~&--~&~A~%" (date))
(let* ((src (opt "src"))
(cmd "./koga;cd build;ninja")
(sbcl-path (format nil "~abin" sbcl-base))
(*standard-output* (make-broadcast-stream out
(chdir src)
(format t "~&~S~%" cmd)
(uiop/run-program:run-program
(list (sh) "-lc" (format nil "PATH=~A:$PATH; cd ~S;~A"
sbcl-path
(
cmd))
:output *error-output* :ignore-error-status nil
:error-output *error-output*)
(format *error-output* "done.~%")))
(cons t argv)))
build 後、iclasp が出来るが、場所が違ったので(GC によって違うみたい)ハードコーディングされているところ (src/cmd-run-clasp.c) を無理やりハードコーディングで修正。
なぜか起動時に image を読み込まないモードになっていた(src/cmd-run-clasp.c)ので、そこを削除。
とりあえず、動くようにはなった。でも Clasp 立ち上がりが遅すぎ。結局普段使うのは sbcl という。時間があれば他の lisp もインストールしてみよう。