Hi,
TL;DR: Confusing error message. Is it possible to make it less confusing and/or ignore the silly input I inadvertently gave asdf?
I'm writing because I've just spent ages debugging a confusing niggle with interaction between ASDF and my linux box. Basically, running sbcl in a terminal and then trying to (require 'foo) gave me this rather confusing error message:
This is SBCL 1.0.54.0.debian, an implementation of ANSI Common Lisp. More information about SBCL is available at http://www.sbcl.org/.
SBCL is free software, provided as is, with absolutely no warranty. It is mostly in the public domain; some portions are provided under BSD-style licenses. See the CREDITS and COPYING files in the distribution for more information.
- (require :cl-fad)
ASDF could not load cl-fad because Invalid designator for an absolute pathname: #P"common-lisp/systems/".
debugger invoked on a SIMPLE-ERROR in thread #<THREAD "initial thread" RUNNING {AB1B781}>: Invalid designator for an absolute pathname: #P"common-lisp/systems/"
Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name): 0: [REINITIALIZE-SOURCE-REGISTRY-AND-RETRY] Retry finding system cl-fad after reinitializing the source-registry. 1: [ABORT ] Exit debugger, returning to top level.
(ASDF::RESOLVE-ABSOLUTE-LOCATION-COMPONENT #P"common-lisp/systems/" :DIRECTORY T :WILDEN NIL)
I finally worked out what was going on by looking at default-source-directory:
- (default-source-registry)
(:SOURCE-REGISTRY (:DIRECTORY #P"/home/rupert/.sbcl/systems/") (:DIRECTORY #P"/home/rupert/src/mine/atonews/") (:DIRECTORY #P"/home/rupert/.local/share/common-lisp/systems/") (:TREE #P"/home/rupert/.local/share/common-lisp/source/") (:DIRECTORY #P"common-lisp/systems/") (:TREE #P"common-lisp/source/") (:DIRECTORY #P"/opt/gnome/share/common-lisp/systems/") (:TREE #P"/opt/gnome/share/common-lisp/source/") (:DIRECTORY #P"/usr/local/share/common-lisp/systems/") (:TREE #P"/usr/local/share/common-lisp/source/") (:DIRECTORY #P"/usr/share/common-lisp/systems/") (:TREE #P"/usr/share/common-lisp/source/") :INHERIT-CONFIGURATION)
Note the #P"common-lisp/systems/" line! Tracing further, I found that this comes from a mistake I made when setting up my shell. $XDG_DATA_DIRS is
:/opt/gnome/share/:/usr/local/share/:/usr/share/
Because of the leading colon, the split-string call on line 4020 of asdf.lisp gives me a leading "", resulting in path names that aren't fully qualified.
Now, I'll fix my setup, since it's my own silly fault, but do any of you have an idea for how to make this error less perplexing for the next person who does something similar? (Maybe just drop "" components?)
Rupert