OK, then I believe that defining the method for OPERATE
will give you what you want. You can put that definition in my-system.asd
below the defsystem
for "my-system". There's only one problem with that -- if you load-system
on "my-system" before my-system.asd
has been loaded (e.g., by find-system
), then you will lose, because the around method will not have been defined before the first call to operate
.
On 9 Mar 2018, at 16:37, Mark H. David wrote:
No, it's what we want for our system. We want everyone who builds our system to get this behavior reliably.----- Original message -----From: Robert Goldman <rpgoldman@sift.info>To: "Mark H. David" <mhd@yv.org>Cc: "ASDF-devel" <asdf-devel@common-lisp.net>Subject: Re: Best Practice for an ASDF Variable Like *compile-file-failure-behaviour*Date: Fri, 09 Mar 2018 16:34:48 -0600Are 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,rOn 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