diff --git a/allegro-variants.lisp b/allegro-variants.lisp index 1750428c24eda3939088b4cdefff624577b6def4..940480c52535a06cc9362d0abb24127a878b26e6 100644 --- a/allegro-variants.lisp +++ b/allegro-variants.lisp @@ -19,8 +19,12 @@ locations, you may simply specify the Allegro install directories using these va "Return a list of possible Allegro variants based on built-in information and environment variables. The returned list is made up of argument lists for REGISTER-LISP-IMPLEMENTATION." + ;; Beware that on Windows, we use the non-multithreaded console application build.exe + ;; so that we may have console I/O on the existing stdin and stdout, that we may capture. (while-collecting (c) - (loop :for (smpvar smpname smpfullname) :in `(("" "" "") ("S" :_s " (SMP)")) :do + (loop + :with windowsp = (os-windows-p) + :for (smpvar smpname smpfullname) :in `(("" "" "") ("S" :_s " (SMP)")) :do (loop :for (bitsvar bitsname bitsfullname) :in '(("" "" "") ("64" "_64" " (64-bit words)")) :for dirvar = (format nil "~:@(ALLEGRO~A~A~)" bitsvar smpvar) @@ -33,9 +37,14 @@ REGISTER-LISP-IMPLEMENTATION." :for fullname = (strcat "Allegro CL" casefullname charfullname bitsfullname smpfullname) :for executable = (format nil "~(~alisp~a~)" caseexe charname) :do + :for (exepath imgpath) = (if windowsp + (list (subpathname dir (if (emptyp charfullname) "buildi.exe" "build.exe")) + (subpathname dir executable :type "dxl")) + (list (subpathname dir executable) nil)) (c `(,allegro-variant :fullname ,fullname - :name ,(native-namestring (subpathname dir executable)) + :name ,(native-namestring exepath) + :default-image ,(native-namestring imgpath) :feature :allegro ;; do we want a more discriminating feature expression? :flags ("-qq") :eval-flag "-e" @@ -46,10 +55,7 @@ REGISTER-LISP-IMPLEMENTATION." :image-executable-p nil :standalone-executable nil :argument-control t - :disable-debugger ("-batch" ; see also -#D -#C -#! - ,@(when (and (os-windows-p) - (not (getenvp "ALLEGRO_NOISY"))) - '("+c"))) + :disable-debugger ("-batch") ; see also -#D -#C -#! :quit-format "(excl:exit ~A :quiet t)" :dump-format "(progn (sys:resize-areas :global-gc t :pack-heap t :sift-old-areas t :tenure t) (excl:dumplisp :name ~A :suppress-allegro-cl-banner t))")))))))) diff --git a/lisp-invocation.asd b/lisp-invocation.asd index e72fd211d6abba31f4752ba1e91fce33661be3d3..60ab0ce2c6ff559fe3d1ead624bc471824f631c8 100644 --- a/lisp-invocation.asd +++ b/lisp-invocation.asd @@ -13,7 +13,7 @@ (error "ASDF 3.1.2 required")) (defsystem "lisp-invocation" - :version "1.0.9" + :version "1.0.10" :author ("Francois-Rene Rideau") :maintainer "Francois-Rene Rideau" :licence "MIT" diff --git a/lisp-invocation.lisp b/lisp-invocation.lisp index ad9106873c27258daf2e97eb8eea110e1d476e8b..dc21b99061367b2c531d9669c3ff88dd834142b5 100644 --- a/lisp-invocation.lisp +++ b/lisp-invocation.lisp @@ -48,6 +48,7 @@ arguments-end image-flag image-executable-p + default-image standalone-executable argument-control disable-debugger @@ -100,16 +101,17 @@ followed by a plist of keywords and arguments." (&key (implementation-type (implementation-type)) lisp-path (lisp-flags :default) - image-path + (image-path nil image-path-p) load eval arguments debugger cross-compile) (with-slots (name flags disable-debugger load-flag eval-flag - image-flag image-executable-p standalone-executable + image-flag default-image image-executable-p standalone-executable arguments-end argument-control) (get-lisp-implementation implementation-type) + (unless image-path-p (setf image-path default-image)) (append (when (or (null image-path) (not image-executable-p)) (ensure-list diff --git a/non-special.lisp b/non-special.lisp index dd3ae9bf10742dd0967c2dc1e5ff1edb90f10997..a4acabc5570a8dfaaee22dc0d075b5d4748cc74b 100644 --- a/non-special.lisp +++ b/non-special.lisp @@ -1,3 +1,4 @@ +;; Composing command lines that don't use any special character. (defpackage :lisp-invocation/non-special (:use :common-lisp :uiop) (:export