Are you just using this for yourself? If so, a simple

(let ((asdf:*compile-file-failure-behaviour* :warn))
    (asdf:load-system "my system"))

will suffice.

Alternatively, you could put something like this in the .asd file:

(defmethod operate :around ((operation load-op) (system (asdf:find-system "my-system")))
   (let ((asdf:*compile-file-failure-behaviour* :warn))
     (call-next-method)))

The above most emphatically has not been tested, so it might be wrong.

I think if the top-level operation you use is load-op, this should work. Alternatively, you might want to replace (operation load-op) with just (operation operation) (and add a (declare (ignorable operation)))

Cheers,
r

On 9 Mar 2018, at 16:12, Mark H. David wrote:

As has been discussed here over the years, asdf:*compile-file-failure-behaviour* is :warn on most platforms, but it is notoriously :error on #+sbcl. So what would you do if you wanted to change asdf:*compile-file-failure-behaviour* to be :warn on #+SBCL? How would you recommend to change it. Where?

I don't want to really have to impose an init file on everyone. Also, I don't really want to necessarily make this global across every use of ASDF, but let's say I just want it to apply to one main system and all subsystems loaded as part of this.

I cannot think of anything better than a top-level setq in the .asd file of the system, something like this?

#+sbcl
(setq asdf:*compile-file-failure-behaviour* :warn)

What else can one do that's any better?

Maybe there's a less crude way, like something like an around method that wraps around the compile/load. I'm really just barely a novice user, so I'm sorry this if this is such a naive question. If there's a simple example one could provide or point me to that does this, I'd appreciate it.

Thanks,

Mark