Skip to content
Snippets Groups Projects
Commit 61e7074c authored by Francois-Rene Rideau's avatar Francois-Rene Rideau
Browse files

Make upgrade more robust on CLISP.

parent 61cab911
No related branches found
No related tags found
No related merge requests found
...@@ -54,7 +54,7 @@ ...@@ -54,7 +54,7 @@
(declaim (optimize (speed 1) (safety 3) (debug 3))) (declaim (optimize (speed 1) (safety 3) (debug 3)))
(setf ext:*gc-verbose* nil)) (setf ext:*gc-verbose* nil))
#+(or abcl clisp clozure cmu ecl xcl) ;; punt on hard package upgrade on those implementations #+(or abcl clozure cmu ecl xcl) ;; punt on hard package upgrade on those implementations
(eval-when (:load-toplevel :compile-toplevel :execute) (eval-when (:load-toplevel :compile-toplevel :execute)
(unless (member :asdf3 *features*) (unless (member :asdf3 *features*)
(let* ((existing-version (let* ((existing-version
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
(with-upgradability () (with-upgradability ()
(defgeneric* (find-system) (system &optional error-p)) (defgeneric* (find-system) (system &optional error-p))
(defgeneric* (system-source-file) (system) (defgeneric* (system-source-file :supersede #-clisp t #+clisp nil) (system)
(:documentation "Return the source file in which system is defined.")) (:documentation "Return the source file in which system is defined."))
(defgeneric component-build-pathname (component)) (defgeneric component-build-pathname (component))
......
...@@ -381,12 +381,13 @@ valid_upgrade_test_p () { ...@@ -381,12 +381,13 @@ valid_upgrade_test_p () {
allegromodern:1.*) : ;; allegromodern:1.*) : ;;
# ccl fasl numbering broke loading of old asdf 2.0 # ccl fasl numbering broke loading of old asdf 2.0
ccl:2.0[01]*) : ;; ccl:2.0[01]*) : ;;
# my old ubuntu clisp 2.44.1 is wired in # My old ubuntu 10.04LTS clisp 2.44.1 came wired in
# with an antique ASDF 1.374 from CLC that can't be downgraded. # with an antique ASDF 1.374 from CLC that can't be downgraded.
# 2.00[0-7] use UID, which fails on that CLISP and was removed afterwards. # More recent CLISPs work.
# 2.00[0-7] use UID, which fails on some old CLISPs.
# Note that for the longest time, CLISP has included 2.011 in its distribution. # Note that for the longest time, CLISP has included 2.011 in its distribution.
# Since we punt on the upgrade, let's only do the test once, for 2.26. # We don't punt on upgrade anymore, so we can go at it!
clisp:2.00[0-7]:*|clisp:1.*|clisp:2.0[01]*|clisp:2.2[0-5]:*) : ;; ### clisp:2.00[0-7]:*|clisp:1.*|clisp:2.0[01]*|clisp:2.2[0-5]:*) : ;;
# Skip, CMUCL has problems before 2.014.7 due to source-registry upgrade. # Skip, CMUCL has problems before 2.014.7 due to source-registry upgrade.
# Weird unidentified problems before 2.018, so we punt equally for everything before, # Weird unidentified problems before 2.018, so we punt equally for everything before,
# and only need to test it once: above, for 2.017. # and only need to test it once: above, for 2.017.
......
...@@ -46,6 +46,9 @@ ...@@ -46,6 +46,9 @@
(defun undefine-function (function-spec) (defun undefine-function (function-spec)
(cond (cond
((symbolp function-spec) ((symbolp function-spec)
;; undefining the previous function is the portable way
;; of overriding any incompatible previous gf,
;; but CLISP needs extra help with getting rid of previous methods.
#+clisp #+clisp
(let ((f (and (fboundp function-spec) (fdefinition function-spec)))) (let ((f (and (fboundp function-spec) (fdefinition function-spec))))
(when (typep f 'clos:standard-generic-function) (when (typep f 'clos:standard-generic-function)
...@@ -67,12 +70,9 @@ ...@@ -67,12 +70,9 @@
name) name)
(declare (ignorable supersede)) (declare (ignorable supersede))
`(progn `(progn
;; undefining the previous function is the portable way
;; of overriding any incompatible previous gf, except on CLISP.
;; We usually try to do it only for the functions that need it, ;; We usually try to do it only for the functions that need it,
;; which happens in asdf/upgrade - however, for ECL, we need this hammer ;; which happens in asdf/upgrade - however, for ECL, we need this hammer.
;; (which causes issues in clisp) ,@(when (or supersede #+ecl t)
,@(when (or #-clisp supersede #+ecl t)
`((undefine-function ',name))) `((undefine-function ',name)))
,@(when (and #+ecl (symbolp name)) ; fails for setf functions on ecl ,@(when (and #+ecl (symbolp name)) ; fails for setf functions on ecl
`((declaim (notinline ,name)))) `((declaim (notinline ,name))))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment