changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > core / annotate lisp/lib/skel/comp/asd.lisp

changeset 477: c9b69040cb23
parent: 7354623e5b54
child: 9472976adda9
author: Richard Westhaver <ellis@rwest.io>
date: Tue, 25 Jun 2024 19:56:31 -0400
permissions: -rw-r--r--
description: skel updates - lisp and rust systems
162
cc74c0054bc1 prelude
ellis <ellis@rwest.io>
parents: 91
diff changeset
1
 ;;; lib/skel/comp/asd.lisp --- ASDF System Definition Compiler
cc74c0054bc1 prelude
ellis <ellis@rwest.io>
parents: 91
diff changeset
2
 
cc74c0054bc1 prelude
ellis <ellis@rwest.io>
parents: 91
diff changeset
3
 ;; ASDF/PARSE-DEFSYSTEM may come in handy for testing.
cc74c0054bc1 prelude
ellis <ellis@rwest.io>
parents: 91
diff changeset
4
 
468
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
5
 ;; The problem with ASD files is that they're read-only afaik - eg there's no
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
6
 ;; 'write' methods implemented on ASD:SYSTEM objects. This makes it a bit
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
7
 ;; tedious because we obviously want to transform SK-LISP-SYSTEM objects
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
8
 ;; directly to SYSTEM, but also need to be able to write them out as discrete
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
9
 ;; files for portability. Probably will end up violating all that is DRY and
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
10
 ;; holy.
162
cc74c0054bc1 prelude
ellis <ellis@rwest.io>
parents: 91
diff changeset
11
 
cc74c0054bc1 prelude
ellis <ellis@rwest.io>
parents: 91
diff changeset
12
 ;;; Code:
384
8fe057887c17 skel refactor1
Richard Westhaver <ellis@rwest.io>
parents: 162
diff changeset
13
 (in-package :skel/comp/asd)
18
61482ce290f9 migration complete
ellis <ellis@rwest.io>
parents:
diff changeset
14
 
477
c9b69040cb23 skel updates - lisp and rust systems
Richard Westhaver <ellis@rwest.io>
parents: 469
diff changeset
15
 (defclass sk-lisp-system (sk-module asdf:system)
469
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
16
   ;; these slots are inferred in ASDF:SYSTEM. Since we are primarily concerned
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
17
   ;; with generating ASDF:SYSTEM definitions rather than parsing them we restore them here.
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
18
   ((serial :initform nil :type boolean :accessor sk-lisp-system-serial)
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
19
    (perform :initform nil :type list :accessor sk-lisp-system-perform)))
468
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
20
 
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
21
 (defun read-system-definitions (system)
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
22
   (with-open-file (file (asdf:system-source-file system))
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
23
     (loop for x = (read file nil)
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
24
           while x
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
25
           collect x)))
162
cc74c0054bc1 prelude
ellis <ellis@rwest.io>
parents: 91
diff changeset
26
 
468
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
27
 (defun to-sk-system (system)
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
28
   (let ((sys (change-class system 'sk-lisp-system)))
469
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
29
     (setf (sk-lisp-system-serial sys) nil
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
30
           (sk-lisp-system-perform sys) nil)
468
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
31
     (id:update-id sys)
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
32
     sys))
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
33
 
477
c9b69040cb23 skel updates - lisp and rust systems
Richard Westhaver <ellis@rwest.io>
parents: 469
diff changeset
34
 (defmethod sk-convert ((self asdf:system))
c9b69040cb23 skel updates - lisp and rust systems
Richard Westhaver <ellis@rwest.io>
parents: 469
diff changeset
35
   (to-sk-system self))
c9b69040cb23 skel updates - lisp and rust systems
Richard Westhaver <ellis@rwest.io>
parents: 469
diff changeset
36
 
468
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
37
 (defun find-sk-system (system)
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
38
   (to-sk-system (asdf:find-system system)))
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
39
 
477
c9b69040cb23 skel updates - lisp and rust systems
Richard Westhaver <ellis@rwest.io>
parents: 469
diff changeset
40
 (defun parse-sk-lisp-system (name path &optional opts)
468
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
41
   (to-sk-system (asdf::parse-component-form nil (list* :system name :pathname path opts))))
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
42
 
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
43
 (defmethod sk-load ((self sk-lisp-system) &key force force-not verbose version)
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
44
   (asdf:load-system self :force force :force-not force-not :verbose verbose :version version))
162
cc74c0054bc1 prelude
ellis <ellis@rwest.io>
parents: 91
diff changeset
45
 
477
c9b69040cb23 skel updates - lisp and rust systems
Richard Westhaver <ellis@rwest.io>
parents: 469
diff changeset
46
 (defmethod sk-load-component ((kind (eql :lisp-system)) (path pathname))
c9b69040cb23 skel updates - lisp and rust systems
Richard Westhaver <ellis@rwest.io>
parents: 469
diff changeset
47
   (declare (ignore kind))
c9b69040cb23 skel updates - lisp and rust systems
Richard Westhaver <ellis@rwest.io>
parents: 469
diff changeset
48
   (parse-sk-lisp-system (pathname-name path) path))
c9b69040cb23 skel updates - lisp and rust systems
Richard Westhaver <ellis@rwest.io>
parents: 469
diff changeset
49
 
469
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
50
 ;; (defmethod sk-compile ((self sk-lisp-system) stream &key &allow-other-keys))
162
cc74c0054bc1 prelude
ellis <ellis@rwest.io>
parents: 91
diff changeset
51
 
468
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
52
 (defun sk-write-asd-components (module)
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
53
   (etypecase module
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
54
     (asdf:file-component
469
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
55
      `(,(keywordicate (string-upcase (asdf:file-type module)))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
56
        ,(pathname-name (asdf:component-relative-pathname module))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
57
        ,@(when-let ((x (asdf::component-if-feature module)))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
58
            `(:if-feature ,x))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
59
        ,@(when-let ((x (asdf::component-depends-on nil module)))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
60
            `(:depends-on ,x))))
468
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
61
     (asdf:module
469
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
62
      `(:module
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
63
        ,(asdf:component-name module)
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
64
        ,@(when-let ((x (asdf::component-if-feature module)))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
65
            `(:if-feature ,x))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
66
        ,@(when-let ((x (asdf::component-depends-on nil module)))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
67
            `(:depends-on ,x))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
68
        ,@(when-let ((x (asdf:module-components module)))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
69
            `(:components ,(mapcar #'sk-write-asd-components x)))))))
162
cc74c0054bc1 prelude
ellis <ellis@rwest.io>
parents: 91
diff changeset
70
 
468
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
71
 (defmethod sk-write-file ((self sk-lisp-system) &key path)
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
72
   (let ((name (asdf:component-name self)))
469
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
73
     (with-open-file (s path
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
74
                        :direction :output
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
75
                        :if-does-not-exist :create)
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
76
       (format s ";;; ASDF definition for system ~A" name)
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
77
       (let ((*print-case* :downcase))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
78
         (pprint `(defsystem ,name
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
79
                    :class sk-lisp-system
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
80
                    ,@(when-let ((x (asdf:component-version self))) `(:version ,x))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
81
                    ,@(when-let ((x (asdf:system-depends-on self))) `(:depends-on ,x))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
82
                    ,@(when-let ((x (asdf:system-description self))) `(:description ,x))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
83
                    ,@(when-let ((x (asdf:system-long-description self))) `(:long-description ,x))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
84
                    ,@(when-let ((x (asdf:system-author self))) `(:author ,x))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
85
                    ,@(when-let ((x (asdf:system-maintainer self))) `(:maintainer ,x))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
86
                    ,@(when-let ((x (asdf:system-mailto self))) `(:mailto ,x))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
87
                    ,@(when-let ((x (asdf::system-license self))) `(:license ,x))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
88
                    ,@(when-let ((x (asdf:system-homepage self))) `(:homepage ,x))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
89
                    ,@(when-let ((x (asdf:system-bug-tracker self))) `(:bug-tracker ,x))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
90
                    ,@(when-let ((x (asdf:system-source-control self))) `(:source-control ,x))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
91
                    ,@(when-let ((x (asdf::component-in-order-to self))) `(:in-order-to ,x))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
92
                    ,@(when-let ((x (asdf::component-build-pathname self))) `(:build-pathname ,x))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
93
                    ,@(when-let ((x (asdf::component-build-operation self))) `(:build-operation ,x))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
94
                    ,@(when-let ((x (asdf::component-entry-point self))) `(:entry-point ,x))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
95
                    ,@(when-let ((x (sk-lisp-system-perform self))) `(:perform ,x))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
96
                    ,@(when-let ((x (sk-lisp-system-serial self))) `(:serial ,x))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
97
                    :components ,(mapcar #'sk-write-asd-components
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
98
                                         (asdf:module-components self)))
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
99
                 s)
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
100
         (terpri s)))))
468
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
101
 
469
7354623e5b54 define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents: 468
diff changeset
102
 ;; (sk-write-file (find-sk-system :obj) :path "test")
477
c9b69040cb23 skel updates - lisp and rust systems
Richard Westhaver <ellis@rwest.io>
parents: 469
diff changeset
103
 ;; (describe (parse-sk-lisp-system "skel" "/home/ellis/comp/core/lisp/lib/"))
468
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
104
 
121a0253aa3c progress on asd comp
Richard Westhaver <ellis@rwest.io>
parents: 431
diff changeset
105
 (defmethod sk-read-file ((self sk-lisp-system) path)
477
c9b69040cb23 skel updates - lisp and rust systems
Richard Westhaver <ellis@rwest.io>
parents: 469
diff changeset
106
   (parse-sk-lisp-system (pathname-name path) (pathname-directory path)))