Plaster

common-lisp
x
 
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;; FOO default version
3
4
(defpackage #:foo
5
  (:use #:cl)
6
  (:export #:bar))
7
8
(in-package #:foo)
9
10
(defun bar () 0)
11
12
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
13
;;; FOO 1.0.0
14
15
(defpackage #:foo
16
  (:version "1.0.0")
17
  (:use #:cl)
18
  (:export #:bar))
19
20
(in-package (#:foo "1.0.0"))
21
22
(defun bar () 1)
23
24
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
25
;;; FOO 2.0.0
26
27
(defpackage #:foo
28
  (:version "2.0.0")
29
  (:use #:cl)
30
  (:export #:bar))
31
32
(in-package (#:bar "2.0.0"))
33
34
(defun bar () 2)
35
36
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
37
;;; QUUX
38
39
(defpackage quux
40
  (:use #:cl)
41
  (:local-nicknames (#:a #:alexandria)
42
                    (#:vp #:versioned-packages)
43
                    (#:f #:foo)
44
                    (#:f1 (#:foo "1.0.0"))
45
                    (#:f2 (#:foo "2.0.0")))
46
  (:export #:main))
47
48
(in-package #:quux)
49
50
(defun main ()
51
  (let ((f (find-package '#:f))
52
        (f1 (find-package '(#:f "1.0.0")))
53
        (f2 (find-package '(#:f "2.0.0"))))
54
    (values (list f (vp:package-version f) (f:bar))
55
            (list f1 (vp:package-version v1) (f1:bar))
56
            (list f2 (vp:package-version v2) (f2:bar)))))
57
58
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
59
;;; REPL
60
61
CL-USER> (quux:main)
62
(#<PACKAGE "FOO"> NIL 0)
63
(#<PACKAGE "FOO" "1.0.0"> "1.0.0" 1)
64
(#<PACKAGE "FOO" "2.0.0"> "2.0.0" 2)