Nick Levine ndl@ravenbrook.com writes:
- Problems with the :feature feature.
It's the "asdf:feature feature", not the ":feature feature".
If you're suggesting I can go
(:file "foo" :depends-on ((asdf:feature :frob)))
-- well, I tried it and the results weren't any different.
Yeah. This has worked at some point in the past, but it certainly looks broken now. What with the change in development repository, vcs, history and management I can't track down how this was meant to work and why exactly it doesn't, but... it does seem like it's been broken for a long time.
You'll probably also want :if-component-dep-fails :ignore, if the effect you want is for foo simply not to be loaded if :frob is not present on *features*.
Wouldn't that supress all sorts of genuine errors?
The way I've used this in the past (in at least my recollection) is something like
(defsystem foo :components ((:module "impl-dep" :if-component-dep-fails :try-next :components (("sbcl" :depends-on ((feature :sbcl))) ("abcl" :depends-on ((feature :abcl))) ...)) (:module "actual-stuff" :depends-on "impl-dep" ...)))
[...]
With an :around method on asdf:output-files.
Tried that, it didn't have any effect.
At least here, doing
(defmethod asdf:output-files :around ((o asdf:compile-op) (c asdf:cl-source-file)) (let ((results (call-next-method))) (mapcar (lambda (x) (make-pathname :directory '(:absolute "tmp") :name (pathname-name x) :type (pathname-type x))) results)))
results in fasls being placed in /tmp/ rather than wherever they would normally have ended up. This is with asdf as distributed with SBCL; I'm afraid I'm not up to date with the changes that have been made to asdf development recently.
Cheers,
Christophe