Commit 2f979dc5 authored by Francois-Rene Rideau's avatar Francois-Rene Rideau

Support XCL again, by working around implementation bugs, documented in TODO.

parent 8e5e42f2
......@@ -10,13 +10,13 @@ sourceDirectory := $(shell pwd)
ifdef ASDF_TEST_LISPS
lisps ?= ${ASDF_TEST_LISPS}
else
lisps ?= ccl clisp sbcl ecl ecl_bytecodes cmucl abcl scl allegro lispworks allegromodern gcl
lisps ?= ccl clisp sbcl ecl ecl_bytecodes cmucl abcl scl allegro lispworks allegromodern gcl xcl
endif
## NOT SUPPORTED BY OUR AUTOMATED TESTS:
## cormancl genera lispworks-personal-edition mkcl rmcl
## Some are manually tested once in a while.
## FAIL: gcl -- most implementation bugs are now fixed, but some remain. See TODO.
## FAIL: xcl -- implementation bugs now prevent ASDF3 from working at all. See TODO.
## FAIL: xcl -- implementation bugs require lots of papering over during tests. See TODO.
## grep for #+/#- features in the test/ directory to see plenty of disabled tests.
ifdef ASDF_TEST_SYSTEMS
s ?= ${ASDF_TEST_SYSTEMS}
......
......@@ -19,21 +19,21 @@
** Modify SBCL and other implementations so they provide UIOP
independently from ASDF?
* XCL is no longer supported due to an implementation bug:
the return in search-for-system-definition fails to return from the
(block nil ...) and seems to mistakenly return from
some implicit internal block.
TODO: either get it fixed, or provide a workaround in uiop/common-lisp.
In the meantime, XCL is officially not supported anymore.
XCL also has a bug in make-pathname, and probably other bugs;
it takes a long time for errors to propagate to the REPL —
* XCL has bad bugs:
make-pathname doesn't handle :type nil properly and
has massive lossage in logical-pathname support.
If using block () and return in search-for-system-definition
instead of return-from, XCL mistakenly has the return jump
to the end of the try function or something.
It also takes a long time for errors to propagate into a debugging REPL —
Maybe O(n^3) behavior or worse in walking the C++ stack?
The backtrace frames may contains unprintable objects.
* GCL is almost working again; but implementation bugs remain.
See November 2013 discussion on gcl-devel
* Some out-of-line configuration mechanism for various options?
i.e. have files that override some variables around compilation of some systems.
i.e. let configuration files override some variables around compilation of some systems.
* Find an easier way to bind variables around compilation and loading of files
......
......@@ -137,12 +137,11 @@ called with an object of type asdf:system."
(cleanup-system-definition-search-functions)
(defun search-for-system-definition (system)
(block ()
(let ((name (coerce-name system)))
(flet ((try (f) (if-let ((x (funcall f name))) (return x))))
(try 'find-system-if-being-defined)
(map () #'try *system-definition-search-functions*)
(try 'sysdef-preloaded-system-search)))))
(let ((name (coerce-name system)))
(flet ((try (f) (if-let ((x (funcall f name))) (return-from search-for-system-definition x))))
(try 'find-system-if-being-defined)
(map () #'try *system-definition-search-functions*)
(try 'sysdef-preloaded-system-search))))
(defvar *central-registry* nil
"A list of 'system directory designators' ASDF uses to find systems.
......
This diff is collapsed.
......@@ -11,6 +11,7 @@
(return (subseq x 0 (1- (length x)))))
x))
(DBG "Testing echo ok 1 via run-program as a list")
(assert-equal "ok 1"
(dewindowize (run-program '("echo" "ok" "1") :output '(:string :stripped t))))
......
......@@ -93,9 +93,10 @@ This is designed to abstract away the implementation specific quit forms."
(defun raw-print-backtrace (&key (stream *debug-io*) count)
"Print a backtrace, directly accessing the implementation"
(declare (ignorable stream count))
#+abcl
(dolist (frame (sys:backtrace))
(println frame stream))
#+(or abcl xcl)
(loop :for i :from 0
:for frame :in #+abcl (sys:backtrace) #+xcl (extensions:backtrace-as-list) :do
(safe-format! stream "~&~D: ~S~%" i frame))
#+allegro
(let ((*terminal-io* stream)
(*standard-output* stream)
......@@ -135,10 +136,7 @@ This is designed to abstract away the implementation specific quit forms."
#+sbcl
(sb-debug:backtrace
#.(if (find-symbol* "*VERBOSITY*" "SB-DEBUG" nil) :stream '(or count most-positive-fixnum))
stream)
#+xcl
(dolist (frame (extensions:backtrace-as-list))
(println frame stream)))
stream))
(defun print-backtrace (&rest keys &key stream count)
"Print a backtrace"
......
......@@ -777,7 +777,7 @@ It returns a process-info plist with possible keys:
(system:call-system %command :current-directory directory :wait t)
#-(and lispworks os-windows)
(with-current-directory ((unless (os-unix-p) directory))
#+(or abcl xcl) (ext:run-shell-command %command)
#+abcl (ext:run-shell-command %command)
#+clisp (clisp-exit-code (ext:shell %command))
#+cormanlisp (win32:system %command)
#+ecl (let ((*standard-input* *stdin*)
......@@ -790,7 +790,8 @@ It returns a process-info plist with possible keys:
(multiple-value-bind (io process exit-code)
(mkcl:run-program #+windows %command #+windows ()
#-windows "/bin/sh" #-windows (list "-c" %command)
:input t :output t)))))
:input t :output t))
#+xcl (system:%run-shell-command %command))))
(defun %use-system (command &rest keys
&key input output error-output ignore-error-status &allow-other-keys)
......
......@@ -535,13 +535,14 @@ If a string, repeatedly read and evaluate from it, returning the last values."
(defun call-with-temporary-file
(thunk &key
(want-stream-p t) (want-pathname-p t) (direction :io) keep after
directory prefix suffix type
directory prefix suffix (type ".tmp")
(element-type *default-stream-element-type*)
(external-format *utf-8-external-format*))
"Call a THUNK with stream and/or pathname arguments identifying a temporary file.
The temporary file's pathname will be based on concatenating
PREFIX (defaults to \"tmp\"), a random alphanumeric string, and optional SUFFIX and TYPE,
PREFIX (defaults to \"uiop\"), a random alphanumeric string,
and optional SUFFIX and TYPE (defaults to \".tmp\"),
within DIRECTORY (defaulting to the TEMPORARY-DIRECTORY) if the PREFIX isn't absolute.
The file will be open with specified DIRECTION (defaults to :IO),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment