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

2.124: play better with conflicts from newly exported symbols.

parent 1f79fcad
No related branches found
Tags 2.124
No related merge requests found
...@@ -72,7 +72,7 @@ ...@@ -72,7 +72,7 @@
(defvar *asdf-version* nil) (defvar *asdf-version* nil)
(defvar *upgraded-p* nil) (defvar *upgraded-p* nil)
(let* ((asdf-version ;; the 1+ helps the version bumping script discriminate (let* ((asdf-version ;; the 1+ helps the version bumping script discriminate
(subseq "VERSION:2.123" (1+ (length "VERSION")))) (subseq "VERSION:2.124" (1+ (length "VERSION"))))
(existing-asdf (fboundp 'find-system)) (existing-asdf (fboundp 'find-system))
(existing-version *asdf-version*) (existing-version *asdf-version*)
(already-there (equal asdf-version existing-version))) (already-there (equal asdf-version existing-version)))
...@@ -120,9 +120,16 @@ ...@@ -120,9 +120,16 @@
(let ((sym (find-sym symbol package))) (let ((sym (find-sym symbol package)))
(when sym (when sym
(unexport sym package) (unexport sym package)
(unintern sym package)))) (unintern sym package)
sym)))
(ensure-unintern (package symbols) (ensure-unintern (package symbols)
(dolist (sym symbols) (remove-symbol sym package))) (loop :with packages = (list-all-packages)
:for sym :in symbols
:for removed = (remove-symbol sym package)
:when removed :do
(loop :for p :in packages :do
(when (eq removed (find-sym sym p))
(unintern removed p)))))
(ensure-shadow (package symbols) (ensure-shadow (package symbols)
(shadow symbols package)) (shadow symbols package))
(ensure-use (package use) (ensure-use (package use)
...@@ -136,15 +143,26 @@ ...@@ -136,15 +143,26 @@
:for sym = (find-sym name package) :for sym = (find-sym name package)
:when sym :do (fmakunbound sym))) :when sym :do (fmakunbound sym)))
(ensure-export (package export) (ensure-export (package export)
(let ((syms (loop :for x :in export :collect (let ((formerly-exported-symbols nil)
(intern* x package)))) (bothly-exported-symbols nil)
(do-external-symbols (sym package) (newly-exported-symbols nil))
(unless (member sym syms) (loop :for sym :being :each :external-symbol :in package :do
(remove-symbol sym package))) (if (member sym export :test 'string-equal)
(dolist (sym syms) (push sym bothly-exported-symbols)
(export sym package)))) (push sym formerly-exported-symbols)))
(loop :for sym :in export :do
(unless (member sym bothly-exported-symbols :test 'string-equal)
(push sym newly-exported-symbols)))
(loop :for user :in (package-used-by-list package)
:for shadowing = (package-shadowing-symbols user) :do
(loop :for new :in newly-exported-symbols
:for old = (find-sym new user)
:when (and old (not (member old shadowing)))
:do (unintern old user)))
(loop :for x :in newly-exported-symbols :do
(export (intern* x package)))))
(ensure-package (name &key nicknames use unintern fmakunbound shadow export) (ensure-package (name &key nicknames use unintern fmakunbound shadow export)
(let ((p (ensure-exists name nicknames use))) (let* ((p (ensure-exists name nicknames use)))
(ensure-unintern p unintern) (ensure-unintern p unintern)
(ensure-shadow p shadow) (ensure-shadow p shadow)
(ensure-export p export) (ensure-export p export)
......
(asdf:defsystem :test-module-depend (defsystem :test-module-depend
:components ((:file "file1") :components
(:module "quux" ((:file "file1")
:pathname #p"" (:module "quux"
:depends-on ("file1") :pathname ""
:components ((:file "file2") :depends-on ("file1")
(:module "file3mod" :components
:pathname #p"" ((:file "file2")
:components (:module "file3mod"
((:file "file3"))))))) :pathname ""
:components
((:file "file3")))))))
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