[asdf-devel] asdf loading error error

Mark Evenson evenson at panix.com
Sun Feb 23 17:15:34 UTC 2014


On 2/23/14, 17:27, Robert Goldman wrote:
> Faré wrote:
>> On Sat, Feb 22, 2014 at 3:26 PM, Cyrus Harmon <ch-lisp at bobobeach.com> wrote:
>>> While trying to load and asdf system that generates an error (that’s another story, presumably an abcl-contrib problem), I get the following error:
>>>
>>> Error while trying to load definition for system abcl-cdk from
>>> pathname /Users/sly/projects/abcl-cdk/abcl-cdk.asd:
>>>    There is no applicable method for the generic function #<STANDARD-GENERIC-FUNCTION ASDF/SYSTEM:BUILTIN-SYSTEM-P {4DE3AFA9}> when called with arguments ((NIL)).
>>>    [Condition of type ASDF/FIND-SYSTEM:LOAD-SYSTEM-DEFINITION-ERROR]
>>>
>> There's an error while reporting a warning (warning about your system
>> having a bad version string).
>> I suggest you add this method in system.lisp after defclass system:
>>  (defmethod builtin-system-p ((x null)) nil)
>> Does it help?
>>
>> Robert, do you want me to commit that?
> 
> I'd like to understand this patch better before we push it.
> 
> Why is it that having a method on NIL is right?  Doesn't this just mask a bug where we are incorrectly treating NIL as if it's a system designator?
> 
> What's the cause for trying to ask if NIL is a built in system?  Presumably some system lookup returned NIL, right?  If so, why wasn't that trapped as an error?

The error is coming from the [ABCL-ASDF contrib which defines an
MVN-COMPONENT class descending from ASDF:COMPONENT][1].  This class is
used to represent a Maven dependency which is resolved to a binary JVM
artifact on the distributed Maven POM graph specified by three
coordinates:  GROUP-ID, ARTIFACT-ID, and VERSION.

In my implementation, I have (probably mistakenly) tried to overload the
ASDF:COMPONENT VERSION slot to contain a version inteligble to both
Maven and ASDF.  Unfortunately, the Maven version can basically contain
any string, not having a meaningfully defined ordering (i.e. you can
only determine if versions are different, not if one preceded another)
which conflicts with ASDF requirements for strict "semantic versioning"
(if I am using that term correctly).  In my defense, I think this was
working this way with ASDF 1, before ASDF 2's requirements came into being.

Currently, ABCL-ASDF "cheats" by stuffing a possibly non-conforming ASDF
version in the COMPONENT VERSION slot via the ASDF:ENSURE-MVN-VERSION
"cleanup" function, so that the form

   (:mvn "org.openscience.cdk/cdk-bundle" :version "1.5.6-SNAPSHOT")

produces this error while

    (:mvn "org.openscience.cdk/cdk-bundle/1.5.6-SNAPSHOT")

will correctly reference the correct Maven artifact, sneaking by ASDF's
checking for a valid version.

The right way forward would be to re-write the MVN-COMPONENT class not
to use the inherited VERSION slot, but another for its purposes.

But in the meantime, users get a baffling error when they use a non-ASDF
compliant slot value.


[1]:
http://abcl.org/trac/browser/trunk/abcl/contrib/abcl-asdf/abcl-asdf.lisp


-- 
"A screaming comes across the sky.  It has happened before, but there
is nothing to compare to it now."



More information about the asdf-devel mailing list