[asdf-devel] Unexpected behavior when loading different versions of a system

Zach Beane xach at xach.com
Thu Sep 1 11:58:39 UTC 2011


Say I download version 1 of the FOO library and put it in /tmp/foo-1/,
so it looks like this:

  /tmp/foo-1/foo.asd
  /tmp/foo-1/a.lisp

foo.asd has this:

  (asdf:defsystem #:foo
    :serial t
    :components ((:file "a")))

Then I add the path to the central registry and load it:

  (push #p"/tmp/foo-1/" asdf:*central-registry*)
  (asdf:load-system "foo")

Everything loads fine.

Oops, I need to upgrade, I better get version 2 and put it in
/tmp/foo-2/, which looks like this:

  /tmp/foo-2/foo.asd
  /tmp/foo-2/a.lisp
  /tmp/foo-2/b.lisp

foo.asd looks like this:

  (asdf:defsystem #:foo
    :serial t
    :components ((:file "a")
                 (:file "b")))

Then I add the path to central registry:

  (push #p"/tmp/foo-2/" asdf:*central-registry*)

It seems to find the new system:

  (asdf:system-source-directory "foo") => #p"/tmp/foo-2/"

However, when I try this:

  (asdf:load-system "foo")

I end up with this error, which I don't really understand:

  failed to find the TRUENAME of /tmp/foo-1/b.lisp:
    No such file or directory

Why does that happen? What's the best way to work around it?

I'm using ASDF 2.017 and a very recent SBCL from git. You can reproduce
my scenario by unpacking http://xach.com/tmp/foofail.tgz and loading
"foofail.lisp".

Thanks,
Zach




More information about the asdf-devel mailing list