2 (defpackage :lineal.devvars
4 (:export
*file-tree
* compile-if-new compile-lineal
))
6 (in-package :lineal.devvars
)
8 ;;; When extending lineal, add files to this list.
9 (defparameter *file-tree
*
10 '(("math" "math" "counting" "tuples" "matrices" "row-operns" "format")
11 ("overload" "overload" "numbers" "tuples"
12 "matrices" "concatenate" "crop" "row-operns" "format")
17 ("overload" "client-fns")
21 (name src-dir
&key
(fasl-dir src-dir
)
22 compile-all
(load-all t
) ensure-dirs
25 (make-pathname :directory src-dir
26 :name name
:type
"lisp"))
28 (make-pathname :directory fasl-dir
29 :name name
:type
"fasl")))
30 (if (and (not compile-all
)
31 (probe-file fasl-file
)
32 (< (file-write-date src-file
)
33 (file-write-date fasl-file
)))
34 (when load-all
(load fasl-file
))
37 (ensure-directories-exist fasl-file
))
39 (fasl-strm fasl-file
:direction
:output
40 :if-exists
:supersede
)
41 (compile-file src-file
:output-file fasl-strm
))
45 (file-tree src-base fasl-base
46 &key compile-all
(load-all t
)
47 &aux src-dir fasl-dir
)
51 (funcall set-dirs-fn nil
)
52 (recurse (car in-dir
) set-dirs-fn t
)
53 (dolist (x (cdr in-dir
))
54 (recurse x set-dirs-fn nil
)))
56 (file-tree set-dirs-fn ensure-dirs
)
58 (let ((tmp-src src-dir
)
60 (dir (car file-tree
)))
65 (cons dir rootless
))))
68 ;V /file-tree/ is a file's name, V
69 ;V compile it if necessary. V
73 :compile-all compile-all
75 :ensure-dirs ensure-dirs
))))
79 (setq src-dir
(append src-base rootless
)
80 fasl-dir
(append fasl-base rootless
))))))
82 ;;; Just compile the whole program.
83 (defun compile-lineal (&key compile-all
(load-all t
))
85 *file-tree
* '(:relative
"src")
87 :compile-all compile-all