| 1 | #+TITLE: clearing the bitrot out of ASDF-JAR |
|---|
| 2 | |
|---|
| 3 | * @selwynsimsek GitHub issue |
|---|
| 4 | <https://github.com/armedbear/abcl/issues/476> |
|---|
| 5 | |
|---|
| 6 | * Development |
|---|
| 7 | |
|---|
| 8 | ** DONE package from system located in JAR |
|---|
| 9 | CLOSED: [2023-03-28 Tue 09:54] |
|---|
| 10 | |
|---|
| 11 | - CLOSING NOTE [2023-03-28 Tue 09:54] \\ |
|---|
| 12 | Implemented with new method in zip.java that uses a =java.io.InputStream= as well as an explicit lastModified parameter. |
|---|
| 13 | Try to get a =java.io.File= reference to an entry in a jar file, so |
|---|
| 14 | the current code path in =system-jar= works. |
|---|
| 15 | |
|---|
| 16 | #+caption: stuck at |
|---|
| 17 | #+begin_example |
|---|
| 18 | Caught java.lang.UnsupportedOperationException. |
|---|
| 19 | [Condition of type ERROR] |
|---|
| 20 | #+end_example |
|---|
| 21 | |
|---|
| 22 | ** DONE don't package fasls by default |
|---|
| 23 | CLOSED: [2023-03-21 Tue 08:47] |
|---|
| 24 | |
|---|
| 25 | - CLOSING NOTE [2023-03-21 Tue 08:47] \\ |
|---|
| 26 | Add :fasls keyword to various routines, with NIL as default |
|---|
| 27 | ** DONE add separate package file source unit, a test or two |
|---|
| 28 | CLOSED: [2023-03-21 Tue 08:12] |
|---|
| 29 | |
|---|
| 30 | - CLOSING NOTE [2023-03-21 Tue 08:12] \\ |
|---|
| 31 | Test present: JSS still not working. |
|---|
| 32 | ** DONE eval IF-FEATURE for individual source files |
|---|
| 33 | CLOSED: [2023-03-31 Fri 14:19] |
|---|
| 34 | - CLOSING NOTE [2023-03-31 Fri 14:19] \\ |
|---|
| 35 | Implemented as a semi-hacky thing that tries to interpret its arg as a system if it can't parse it as a feature. |
|---|
| 36 | <[[file:asdf-jar.lisp::defun resolve-system-or-feature (system-or-feature]]> |
|---|
| 37 | ** DONE configure ASDF to find a contrib on the filesystem |
|---|
| 38 | CLOSED: [2023-03-20 Mon 21:20] |
|---|
| 39 | |
|---|
| 40 | - CLOSING NOTE [2023-03-20 Mon 21:20] |
|---|
| 41 | <[[info:asdf.info#Configuration DSL][asdf.info#Configuration DSL]]> |
|---|
| 42 | #+begin_src lisp |
|---|
| 43 | (asdf:initialize-source-registry |
|---|
| 44 | '(:source-registry :ignore-inherited-configuration |
|---|
| 45 | (:directory #p"~/work/abcl/contrib/jss/"))) |
|---|
| 46 | #+end_src |
|---|
| 47 | |
|---|
| 48 | #+RESULTS: |
|---|
| 49 | |
|---|
| 50 | #+begin_src lisp |
|---|
| 51 | (asdf:locate-system :jss) |
|---|
| 52 | #+end_src |
|---|
| 53 | |
|---|
| 54 | #+begin_src lisp |
|---|
| 55 | (mapcar |
|---|
| 56 | (lambda (p) (when (not (pathname-jar-p p)) p)) |
|---|
| 57 | asdf:*central-registry*) |
|---|
| 58 | #+end_src |
|---|
| 59 | |
|---|
| 60 | |
|---|
| 61 | #+caption: save central registry |
|---|
| 62 | #+begin_src lisp |
|---|
| 63 | (setf xx asdf:*central-registry*) |
|---|
| 64 | #+end_src |
|---|
| 65 | |
|---|
| 66 | #+begin_src lisp |
|---|
| 67 | (defun collect-abcl-contrib-directories () |
|---|
| 68 | (let* ((all-asd |
|---|
| 69 | (directory |
|---|
| 70 | (asdf:system-relative-pathname :abcl "contrib/**/*.asd"))) |
|---|
| 71 | (unique-directories |
|---|
| 72 | (loop :for asd :in all-asd |
|---|
| 73 | :with result = nil |
|---|
| 74 | :doing |
|---|
| 75 | (pushnew (make-pathname :directory (pathname-directory asd) |
|---|
| 76 | :name nil :type nil) |
|---|
| 77 | result :test #'equalp) |
|---|
| 78 | :finally |
|---|
| 79 | (return result)))) |
|---|
| 80 | (values |
|---|
| 81 | unique-directories |
|---|
| 82 | all-asd))) |
|---|
| 83 | |
|---|
| 84 | #+end_src |
|---|
| 85 | |
|---|
| 86 | #+RESULTS: |
|---|
| 87 | : COLLECT-ABCL-CONTRIB-DIRECTORIES |
|---|
| 88 | |
|---|
| 89 | #+name: rig-asdf # |
|---|
| 90 | #+caption: Rig ASDF to use the ASDF location of ABCL contrib source on filesystem |
|---|
| 91 | #+begin_src lisp |
|---|
| 92 | (defun rig-asdf () |
|---|
| 93 | (let* ((not-jars |
|---|
| 94 | (mapcar |
|---|
| 95 | (lambda (p) (when (not (pathname-jar-p p)) p)) |
|---|
| 96 | asdf:*central-registry*)) |
|---|
| 97 | (directories |
|---|
| 98 | (remove-if #'not not-jars)) |
|---|
| 99 | (initial-without-jar |
|---|
| 100 | (loop :for d :in directories |
|---|
| 101 | :collecting `(:directory ,d))) |
|---|
| 102 | (abcl-contrib-directories |
|---|
| 103 | (loop :for d :in (collect-abcl-contrib-directories) |
|---|
| 104 | :collecting `(:directory ,d)))) |
|---|
| 105 | (asdf:initialize-source-registry |
|---|
| 106 | `(:source-registry |
|---|
| 107 | ,#+nil |
|---|
| 108 | :ignore-inherited-configuration |
|---|
| 109 | ,@abcl-contrib-directories |
|---|
| 110 | ,@initial-without-jar |
|---|
| 111 | :inherit-configuration)))) |
|---|
| 112 | #+end_src |
|---|
| 113 | |
|---|
| 114 | #+caption: Transitioning away from use of ASDF:*CENTRAL-REGISTRY* |
|---|
| 115 | #+begin_src lisp |
|---|
| 116 | (setf asdf:*central-registry* nil) |
|---|
| 117 | (rig-asdf) |
|---|
| 118 | #+end_src |
|---|
| 119 | |
|---|
| 120 | ** DONE Refactored rig-asdf as EXT:REGISTER-ASDF |
|---|
| 121 | CLOSED: [2023-03-31 Fri 14:20] |
|---|
| 122 | |
|---|
| 123 | - CLOSING NOTE [2023-03-31 Fri 14:20] \\ |
|---|
| 124 | TODO: add an equivalent API to fiddle with asdf output-translations? The current plan is to include that machinery in the ASDF-JAR contrib |
|---|
| 125 | <[[file:~/work/abcl/src/org/armedbear/lisp/abcl-contrib.lisp::defun register-asdf (asdf-file-or-files]]> |
|---|
| 126 | |
|---|
| 127 | ** TODO Use fasls from jar |
|---|
| 128 | |
|---|
| 129 | * Fragments |
|---|
| 130 | |
|---|
| 131 | ** use EXT:ADD-TO-ASDF |
|---|
| 132 | #+begin_src lisp |
|---|
| 133 | (ext:register-asdf '("/Users/evenson/easye/work/illithid/illithid.asd" |
|---|
| 134 | "/Users/evenson/net/slack.net/home/mevenson/work/etch/etch.asd")) |
|---|
| 135 | #+end_src |
|---|
| 136 | |
|---|
| 137 | #+RESULTS: |
|---|
| 138 | |
|---|
| 139 | * References |
|---|
| 140 | |
|---|
| 141 | ** <https://docs.oracle.com/javase/8/docs/technotes/guides/io/fsp/zipfilesystemprovider.html> |
|---|
| 142 | |
|---|
| 143 | * Colophon |
|---|
| 144 | #+begin_example |
|---|
| 145 | Mark <evenson@not.org> |
|---|
| 146 | Created: 2023-03-06 |
|---|
| 147 | Revised: <2023-03-31 Fri 14:41> |
|---|
| 148 | #+end_example |
|---|