Re: Problems with DEFSYSTEM-DEPENDS-ON

2018-04-07 Thread Robert Dodier
Thanks to everyone for their interest in this topic.

In reference to
https://github.com/quicklisp/quicklisp-client/pull/128/, it is only a
minimal stop-gap measure which I found could fix the immediate problem
which I encountered. I know very little about ASDF and Quicklisp, so I
certainly had no conscious intent to assert that one condition or
another must prevail. Any improvements by more knowledgeable people
would be welcomed by me.

All the best,
Robert Dodier



Re: Problems with DEFSYSTEM-DEPENDS-ON

2018-04-07 Thread Robert Goldman
OK, I think I understand now.  This happens when we need quicklisp not 
just to load, but to install and load, defsystem depends on systems.


I just looked at Robert Dodier's bug fix, 
https://github.com/quicklisp/quicklisp-client/pull/128/ and I'm a little 
concerned that it could raise an error if `asdf::missing-requires` isn't 
implemented on the error condition that is signaled by ASDF (and I don't 
see why it would be guaranteed to be implemented there).  Shouldn't this 
check the type of `(asdf::error-condition c)`? Or if there's something 
about the conditions under which this handler is invoked that guarantees 
that the call to `missing-requires` will not error out, I don't see it, 
so it's probably worthy of a comment.


My guess is that if you checked for the `error-condition` being a 
subtype of `missing-component` that would work in modern ASDF.  I have 
no idea whether it would work in ASDF 2 and I'm afraid that I don't have 
the time for the ASDF archaeology required to figure out how to 
"past-proof" this code.


HtH,
Best,
r


On 6 Apr 2018, at 4:20, Mark Evenson wrote:


On Apr 2, 2018, at 18:23, Robert Goldman  wrote:

On 1 Apr 2018, at 7:57, Mark Evenson wrote:

On Apr 1, 2018, at 14:20, Attila Lendvai att...@lendvai.name wrote:

The usage of DEFSYSTEM-DEPENDS-ON to specify dependencies that will 
be
satisfied by QL:QUICKLOAD no longer seems to be working in 
asdf-3.3.1.


FTR, here's the history of this issue:

https://github.com/quicklisp/quicklisp-client/pull/122#issuecomment-160419822

https://github.com/quicklisp/quicklisp-client/issues/108

Wow! Holy stale complications, batman!

Robert apparently suggested something (apparently) much simpler in

https://github.com/quicklisp/quicklisp-client/pull/128

but without any commentary from Zach on that approach.

Given asdf-3.3 is out, and recent sbcl’s ship with it, which is the 
preferred way forward from ASDF’s perspective?


"From ASDF's perspective," this is all new to me, since it was filed 
as a bug against Quicklisp, and as far as I know, never raised as an 
issue for ASDF. I could use some help here:


• What's a minimal error case using quickload alone?
	• What's a minimal case that arises with using ASDF as the entry 
point?
It seemed like there was one where if Quicklisp is up and running, 
and you use asdf:load-system to load a system, this can also happen.
Something I can type into a REPL verbatim is what I would like to 
see.


Not sure how to distinguish between your two requests for quickload 
alone versus ASDF as an entry point


A minimal case would be the following ASDF definition

--—depends.asd---

(defsystem depends
  :in-order-to ((test-op (test-op "depends/t"

(defsystem depends/t
  :defsystem-depends-on (prove-asdf)
  :depends-on (prove)
  :components ((:test-file "depends-test.lisp")))

——depends-test.lisp——

(in-package :cl-user)
(prove:plan 1)
(prove:pass "A test that always passes")
(prove:finalize)

--

(ql:quickload :depends) should pick up the depends/t secondary system 
to install PROVE from the network, which is needed to provide a CLOS 
for the TEST-FILE component.


Component "prove-asdf" not found, required by NIL
 0: (CONDITIONS::CONDITIONS-ERROR :INVISIBLEP T 
ASDF/FIND-COMPONENT:MISSING-DEPENDENCY (:REQUIRED-BY NIL :REQUIRES 
"prove-asdf"))
  1: (ERROR ASDF/FIND-COMPONENT:MISSING-DEPENDENCY :REQUIRED-BY NIL 
:REQUIRES "prove-asdf")
  2: (ASDF/FIND-COMPONENT:RESOLVE-DEPENDENCY-NAME NIL "prove-asdf" 
NIL)

  3: ((SUBFUNCTION 1 ASDF/PARSE-DEFSYSTEM:REGISTER-SYSTEM-DEFINITION))
…

For ASDF3 alone, as long as PROVE is installed, there is no problem.





Also, sounds like though this is an issue on all lisps, not just ABCL 
as the first post suggested


Yes, this issue effects all Common Lisp implementations.   I don’t 
think I even mentioned ABCL in my first message, so other than being 
an ABCL maintainer, I don’t see how you got that impression.



Communications between ASDF and QL have been difficult since Zach 
dropped off this list (and, to be fair, I have never joined up to 
read quicklisp-devel, if there is such a thing).


Yes, we are certainly dealing with the resistance of Quicklisp to 
deprecate ASDF2 in favor of ASDF3, for which I neither really know nor 
want to go into the history thereof.  Rather than pointing fingers, 
and spreading blame, I am trying to find some compromise that works 
for both the ASDF and Quicklisp maintainers, as without getting 
ql:quickload to somehow include :defsystem-depends-on declarations as 
recognized load dependencies in the currently stable ASDF3, it means 
this useful feature for ASDF extensiblity is effectively unusable for 
inter-system cooperation within Quicklisp.


In the January 2018 Quicklisp systems, there are 103 references to 
prove-asdf, so this issue effects quite a bit of the current Quicklisp 
distributed ecosystem for that use case alone.


As I read the Quicklisp issues and pull-requests, Quicklisp would