2

In Emacs on Ubuntu Raring.. I have SBCL loaded in Emacs because i use it all the time. I type (ql:quickload "ieee-floats") to load my first library on a freshly installed ACL in emacs after typing M-- M-x slime to load ACL and get this error:

 While searching for system "ieee-floats": #P"/home/b/quicklisp/dists/quicklisp/software/c2ffi/README" evaluated to #P"/home/b/quicklisp/dists/quicklisp/software/c2ffi/README" which is not a directory. 

the first few lines of my ACL asdf:central-registry are :

 (#P"/home/w/quicklisp/quicklisp/" #P"/home/w/quicklisp/dists/quicklisp/software/c2ffi/README" #P"/home/w/quicklisp/dists/quicklisp/software/c2ffi/autoclean" #P"/home/w/quicklisp/dists/quicklisp/software/c2ffi/config.h" #P"/home/w/quicklisp/dists/quicklisp/software/c2ffi/configure.ac" 

so acl is just looking at first file and stopping. Also in the asdf:central-registry in ACL it list all the files in the root directory as well as the folders but in SBCL it just lists all the root folders in quicklisp/dist/software and SBCL works for installing quicklisp libraries i/e

ACL's lists all root folder files

 #P"/home/w/quicklisp/dists/quicklisp/software/trivial-features-20130312-git/SPEC" #P"/home/w/quicklisp/dists/quicklisp/software/trivial-features-20130312-git/README" #P"/home/w/quicklisp/dists/quicklisp/software/trivial-features-20130312-git/trivial-features.asd" #P"/home/w/quicklisp/dists/quicklisp/software/trivial-features-20130312-git/tests" #P"/home/w/quicklisp/dists/quicklisp/software/trivial-features-20130312-git/COPYRIGHT" #P"/home/w/quicklisp/dists/quicklisp/software/trivial-features-20130312-git/trivial-features-tests.asd" #P"/home/w/quicklisp/dists/quicklisp/software/trivial-features-20130312-git/src" #P"/home/w/quicklisp/dists/quicklisp/software/trivial-features-20130312-git/release.sh" 

SBCL'S - lists just root folder

 #P"/home/w/quicklisp/dists/quicklisp/software/trivial-features-20130312-git/" 

and sbcl and acl init files contain the same thing:

 (require :asdf) ;put all subdirectories of quicklisp\software into asdf:*central-registry* (dolist (dir (directory "/home/w/quicklisp/dists/quicklisp/software/*/")) (pushnew dir asdf:*central-registry* :test #'equal)) ;;; The following lines added by ql:add-to-init-file: #-quicklisp (let ((quicklisp-init (merge-pathnames "quicklisp/setup.lisp" (user-homedir-pathname)))) (when (probe-file quicklisp-init) (load quicklisp-init))) 
3
  • I think asdf:*central-registry* is supposed to contain only directories, hence the error that "#P"/home/b/quicklisp/dists/quicklisp/software/c2ffi/README" [is] not a directory." Also note that the results of the function directory are implementation specific, so that (dolist (dir (directory ...)) (pushnew dir ...)) may put different things into the registry under different implementations. Can you do some tests and see what (directory "/home/w/quicklisp/dists/quicklisp/software/*/") returns under SBCL and under ACL? Commented Oct 15, 2013 at 13:44
  • @Joshua Taylor under SBCL its the same as my post ACL is same too how would i change the directory funtion to not be recursive in acl Commented Oct 15, 2013 at 17:47
  • Have you tried omitting the trailing slash in the argument to directory? Every file there should be a directory, so the trailing slash shouldn't be necessary to narrow down the results. Commented Oct 16, 2013 at 17:34

1 Answer 1

3

That *central-registry* is screwed up. Your ;put all subdirectories bit in your init file is causing the problem. Remove it, and you can just use ql:quickload to load libraries, e.g. (ql:quickload :vecto).

Sign up to request clarification or add additional context in comments.

4 Comments

Can you explain why that's screwing it up though? The OP said it's working in SBCL. Though I'd much rather use quicklisp than asdf/asdf-install, changing the central-registry configuration without knowing whether that will affect asdf use under SBCL or ACL seems a bit risky. (That said, I think your answer is right—I just think some more elaboration on why it's right would be useful.)
@Xach the thing is i usually put all the libaries in that directory(software) that im building and others i download off the net with no quicklisp offering so i can load with QL true but the other folders i/e mine and ones i git wouldnt be available for a simple load-op(asdf) i/e '(add-to-list 'load-path "/home/w/quicklisp/dists/quicklisp/software/cl-test") (asdf:operate 'asdf:load-op :cl-test) (in-package #:cl-test)' doesnt load my default test library at startup note: i added the add-to-list for your idea normally its just the load-op..but 'quickload :cffi' works aces
The function directory may have a different behavior in different implementations. It may work different between SBCL and ACL. It seems ACL uses :name :wild :type :wild when they're nil, which is allowed according to pathname-match-p. You can try a wildcard that works in both, e.g. (make-pathname :defaults #p"/home/w/quicklisp/dists/quicklisp/software/*/ :name :unspecific :type :unspecific"). The use of :unspecific, however, is not portable according to the spec (you must be ready to handle it, but you must be sure the implementation supports it when providing it).
You can use quickload on your own libraries too. Just put them in ~/quicklisp/local-projects/. If you want to use ASDF only, no Quicklisp, I recommend copying projects somewhere else, not adding Quicklisp's directory structure to ASDF.