diff --git a/lisp/compile-file.ros b/lisp/compile-file.ros index 7a0106c..032d4c1 100644 --- a/lisp/compile-file.ros +++ b/lisp/compile-file.ros @@ -4,8 +4,7 @@ exec ros +Q +A -- $0 "$@" |# (progn ;;init forms - (ros:asdf) - #-asdf(ros:ensure-asdf) + #-asdf(ros:ensure-asdf :version nil) (roswell:include "util") ) @@ -45,30 +44,47 @@ exec ros +Q +A -- $0 "$@" (defun main (&rest argv) (declare (ignorable argv)) - (let ((out t)) + (let ((out t) + asdf) (consume argv (("-o" opt) - (setf out opt)) + (uiop:chdir + (setf *default-pathname-defaults* (truename opt))) + (setf out t)) (("-o-") (setf out nil)) (("-o.") (setf out t)) + (("-asdf") + (setf asdf t)) + (("+asdf") + (setf asdf nil)) ((:in file) - (asdf:compile-file* - file - :output-file - (make-pathname - :defaults (cond ((eql out t) (uiop:getcwd)) - (out out) - (t (fasl-dir))) - :name (pathname-name file) - :type (format nil "~A~A" - (if (eql out t) - (substitute #\- #\/ (substitute #\_ #\. (opt "impl"))) - (pathname-type file)) - (if (ros:opt"asdf.version") - (format nil "_~A" - (substitute #\- #\/ (substitute #\_ #\. (ros:opt"asdf.version")))) - "")))))))) + (if asdf + (uiop:chdir + (setf *default-pathname-defaults* + (merge-pathnames (format nil "lisp/asdf/~A/" file) (homedir)))) + (when (ros:opt "asdf.version") + (ros:asdf))) + (funcall (read-from-string "asdf:compile-file*") + (if asdf + "asdf.lisp" + file) + :output-file + (make-pathname + :defaults (if (or out asdf) + (uiop:getcwd) + (fasl-dir)) + :name (if asdf + "asdf" + (pathname-name file)) + :type (format nil "~A~@[_~A~]" + (if (or out asdf) + (substitute #\- #\/ (substitute #\_ #\. (opt "impl"))) + (pathname-type file)) + (and (not asdf) + (ros:opt"asdf.version") + (substitute #\- #\/ (substitute #\_ #\. (ros:opt"asdf.version"))))))))))) + ;;; vim: set ft=lisp lisp: diff --git a/lisp/init.lisp b/lisp/init.lisp index 0e8bbdd..c541d59 100644 --- a/lisp/init.lisp +++ b/lisp/init.lisp @@ -75,17 +75,17 @@ have the latest asdf, and this file has a workaround for this. nil ret))) (let (sentinel) - (defun ensure-asdf () + (defun ensure-asdf (&key (version (opt "asdf.version"))) (let ((*error-output* (if (verbose) *error-output* (make-broadcast-stream)))) (setf sentinel (or sentinel - (when (and (opt "asdf") + (when (and version (and (find :asdf *features*) - (not (or (equal (opt "asdf") + (not (or (equal version (funcall (read-from-string "asdf:asdf-version"))) - (= (length (opt "asdf")) 40))))) + (= (length version) 40))))) (funcall 'asdf :no-download t)) (find :asdf *features*) (ignore-errors (require "asdf"))) @@ -244,9 +244,7 @@ have the latest asdf, and this file has a workaround for this. (path (merge-pathnames (format nil "lisp/asdf/~A/asdf.lisp" version) (opt "homedir")))) (when (equal version "NIL") (error "asdf download error?")) - (let ((fasl (format nil "~A_~A" - (substitute #\- #\/ (substitute #\_ #\. (opt "impl"))) - (substitute #\_ #\. (opt "asdf.version"))))) + (let ((fasl (substitute #\- #\/ (substitute #\_ #\. (opt "impl"))))) (setf path (or (probe-file (make-pathname :defaults path :type fasl)) path))) (when (probe-file path) (ignore-errors