2 (defpackage :lineal.devvars
4 (:export
*file-tree
* compile-if-new compile-lineal
))
6 (in-package :lineal.devvars
)
8 (defparameter *file-tree
*
9 '(("math" "math" "tuples" "matrices" "row-operns" "format")
10 ("overload" "overload" "numbers" "tuples"
11 "matrices" "row-operns" "format" "concatenate" "crop")
15 ("overload" "client-fns")
16 ("webui" "webvars" "compile-ps" "index" "matrixui"
17 "calcupage" "save-restore" "reload")))
20 (name src-dir
&key
(fasl-dir src-dir
)
21 compile-all
(load-all t
) ensure-dirs
24 (make-pathname :directory src-dir
25 :name name
:type
"lisp"))
27 (make-pathname :directory fasl-dir
28 :name name
:type
"fasl")))
29 (if (and (not compile-all
)
30 (probe-file fasl-file
)
31 (< (file-write-date src-file
)
32 (file-write-date fasl-file
)))
33 (when load-all
(load fasl-file
))
36 (ensure-directories-exist fasl-file
))
38 (fasl-strm fasl-file
:direction
:output
39 :if-exists
:supersede
)
40 (compile-file src-file
:output-file fasl-strm
))
44 (file-tree src-base fasl-base
45 &key compile-all
(load-all t
)
46 &aux src-dir fasl-dir
)
50 (funcall set-dirs-fn nil
)
51 (recurse (car in-dir
) set-dirs-fn t
)
52 (dolist (x (cdr in-dir
))
53 (recurse x set-dirs-fn nil
)))
55 (file-tree set-dirs-fn ensure-dirs
)
57 (let ((tmp-src src-dir
)
59 (dir (car file-tree
)))
64 (cons dir rootless
))))
67 ;V /file-tree/ is a file's name, V
68 ;V compile it if necessary. V
72 :compile-all compile-all
74 :ensure-dirs ensure-dirs
))))
78 (setq src-dir
(append src-base rootless
)
79 fasl-dir
(append fasl-base rootless
))))))
81 (defun compile-lineal (&key compile-all
(load-all t
))
83 *file-tree
* '(:relative
"src")
85 :compile-all compile-all