;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; FOO default version (defpackage #:foo (:use #:cl) (:export #:bar)) (in-package #:foo) (defun bar () 0) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; FOO 1.0.0 (defpackage #:foo (:version "1.0.0") (:use #:cl) (:export #:bar)) (in-package (#:foo "1.0.0")) (defun bar () 1) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; FOO 2.0.0 (defpackage #:foo (:version "2.0.0") (:use #:cl) (:export #:bar)) (in-package (#:bar "2.0.0")) (defun bar () 2) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; QUUX (defpackage quux (:use #:cl) (:local-nicknames (#:a #:alexandria) (#:vp #:versioned-packages) (#:f #:foo) (#:f1 (#:foo "1.0.0")) (#:f2 (#:foo "2.0.0"))) (:export #:main)) (in-package #:quux) (defun main () (let ((f (find-package '#:f)) (f1 (find-package '(#:f "1.0.0"))) (f2 (find-package '(#:f "2.0.0")))) (values (list f (vp:package-version f) (f:bar)) (list f1 (vp:package-version v1) (f1:bar)) (list f2 (vp:package-version v2) (f2:bar))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; REPL CL-USER> (quux:main) (# NIL 0) (# "1.0.0" 1) (# "2.0.0" 2)