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)))
Cœur
  • 37,241
  • 25
  • 195
  • 267
  • 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`](http://www.lispworks.com/documentation/HyperSpec/Body/f_dir.htm) 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? – Joshua Taylor Oct 15 '13 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 –  Oct 15 '13 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. – Rörd Oct 16 '13 at 17:34

1 Answers1

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).

Xach
  • 11,774
  • 37
  • 38
  • 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.) – Joshua Taylor Oct 15 '13 at 16:11
  • @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 –  Oct 15 '13 at 17:25
  • 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). – acelent Oct 15 '13 at 19:03
  • 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. – Xach Oct 16 '13 at 19:46