On Sat, Nov 16, 2013 at 5:21 PM, FAU fau@riseup.net wrote:
Ok so I've come up with something which seems to work. Please have a look at this. Is this a viable solution?
Again here's the foo.lisp file:
;;; foo.lisp (defpackage :foo (:use :cl) (:export :foo))
(in-package :foo)
(defun foo () #+foo1.0 :foo1.0 #+foo1.1 :foo1.1 ) ;;; foo.lisp ends here
Here's the corresponding foo.asd file:
;;; foo.asd (defpackage :foo.system (:use :cl :asdf :uiop))
(in-package :foo.system)
(defclass foo-file (cl-source-file) ())
(defmethod output-files ((operation compile-op) (component foo-file)) (let ((l (multiple-value-list (call-next-method)))) (apply #'values (mapcar #'(lambda (p) (make-pathname* :directory (append (pathname-directory p) (list # +foo1.0 "1.0" #+foo1.1 "1.1")) :defaults p)) (car l)) (cdr l))))
(defsystem :foo :serial t :components ((:foo-file "foo"))) ;;; foo.asd ends here
In output-files we splice in a directory right before the file name depending on what is found in *features* (foo1.0 or foo1.1). By this we seem to be able to keep a cached version for each.
Any comment is appreciated.
You