After extensive testing and refactoring, I have pushed a series of changes (from [r14176][] through [r14179][]) to trunk that should, among other things, finally fix the issues associated with loading CFFI.
To affect the fixes, I have introduced a slight change in the merge pathname semantics in [r14178][], which I described in the Manual by the following text:
When merging pathnames and the defaults point to a JAR-PATHNAME, we set the DEVICE of the result to :UNSPECIFIC if the pathname to be be merged does not contain a specified DEVICE, does not contain a specified HOST, does contain a relative DIRECTORY, and we are not running on a MSFT Windows platform. The intent of this rather arcane sounding deviation from conformance is so that the result of a merge won't fill in a DEVICE with the wrong "default device for the host" in the sense of the fourth paragraph in the CLHS description of MERGE-PATHNAMES (the paragraph beginning "If the PATHNAME explicitly specifies a host and not a device"). A future version of the implementation may return to conformance by using the HOST value to reflect the type explicitly.
Additionally TRUENAME on non-Windows now fills in the DEVICE component with :UNSPECIFIC, but this is conforming behaviour.
I will close the relevant tickets when I get a chance (and no one has proved me a liar in the meantime).
[r14176]: http://trac.common-lisp.net/armedbear/changeset/14176 [r14178]: http://trac.common-lisp.net/armedbear/changeset/14178 [r14179]: http://trac.common-lisp.net/armedbear/changeset/14179
Comments, criticisms, usage reports (especially of the "Yay! CFFI works now!" variety), solicited.
-- "A screaming comes across the sky. It has happened before but there is nothing to compare to it now."