[1]Good morning from Greg Bennett [2]Running sbcl-1.3.18 64bit and asdf3.1.5 [3]using GNU Emacs 24.5.1 (x86_64-pc-linux-gnu, GTK+ Version 3.18.9) [4]under Linux Mint 18.1 64bit [5] [6]If there is too much stuff below, apologies. It's not clear to me what is relevant. [7]I am trying to learn about relocating fasl files and then locating them for loading. [8] [9]To do this I have a small system in /home/gwbennett/asdf-tests/ [10]consisting of gb-a.asd which contains (lines [12]-[15]) [11] [12] (asdf:defsystem "gb-a" [13] :description "gb-a: a small system" [14] :components ((:file "gb-a-package") [15] (:file "a-one" :depends-on ("gb-a-package")))) [16] [17]and gb-a-package.lisp which contains (lines [19]-[21]) [18] [19] ;; This is a-package.lisp [20](defpackage "GB-A" [21] (:use "COMMON-LISP" "ASDF")) [22] [23]and a-one.lisp which contains (lines [25]-[29]) [24] [25] (in-package :gb-a) [26] [27] (defun a-one (x) [28] (setf x (+ 1 x)) [29] x) [30] [31]I have created gb-lisp.conf in /home/gwbennett/.config/common-lisp/source-registry.conf.d, and it contains (line [32]) [32] (:tree "/home/gwbennett/asdf-tests") [33] [34]Modifying code from lisp-in-a-box asdf-extensions.lisp, with thanks to Peter Seibel, I have (lines [35]-[60]) [35](defpackage "GWB-FASLS" [36] (:use :cl :asdf)) [37] [38](in-package "GWB-FASLS") [39] ;;; Build FASLs into a implementation specific directory. [40] [41](defparameter *fasl-directory* [42] (merge-pathnames [43] (make-pathname [44] :directory `(:relative "asdf-tests" "binaries")) [45] (user-homedir-pathname) [46] )) [47] [48](defmethod output-files :around ((operation compile-op) (c source-file)) [49] (let ((defaults (merge-pathnames [50] ;(make-relative (component-pathname c)) [51] *fasl-directory* (make-relative (component-pathname c))))) [52] (flet ((relocate-fasl (file) [53] (make-pathname [54] :type (pathname-type file) :defaults defaults))) [55] (mapcar #'relocate-fasl (call-next-method))))) [56] [57](defun make-relative (pathname) [58] (make-pathname [59] :directory (cons :relative (rest (pathname-directory pathname))) [60] :defaults pathname)) [61] [62]I execute (asdf:clear-source-registry) -> No value [63]and load the modified lisp-in-a-box and make sure I am (in-package :gwb-fasls) [64] [65]Then (asdf:load-system "gb-a") [66]which yields, in slime's repl [67]; compiling file "/home/gwbennett/asdf-tests/gb-a-package.lisp" (written 28 SEP 2016 08:49:14 AM): [68]; compiling (DEFPACKAGE "GB-A" ...) [69] [70]; /home/gwbennett/asdf-tests/binaries/gb-a-package-TMP.fasl written [71]; compilation finished in 0:00:00.083 [72]and in the error pane [73]Couldn't load [74]#P"/home/gwbennett/.cache/common-lisp/sbcl-1.3.18-linux-x64/home/gwbennett/asdf-tests/binaries/gb-a-package.fasl": [75]file does not exist. [76] [Condition of type SB-INT:SIMPLE-FILE-ERROR] [77] [78]In /home/gwbennett/asdf-tests there is now a subdirectory binaries in which there is gb-a-package.fasl [79]as I had hoped. [80] [81]I suppose that the error message comes from the facts that the fasl was not written to the default location down in .cache [82]and that a-one.lisp depends on the package defined in that fasl. [83] [84]The options in the error pane include, in position 3, [85][ACCEPT] Continue, treating loading FASL for # as having been successful. [86]so I clicked in this which leads to further output in the slime repl: [87]WARNING: [88] loading FASL for # completed without its input file #P"/home/gwbennett/.cache/common-lisp/sbcl-1.3.18-linux-x64/home/gwbennett/asdf-tests/binaries/gb-a-package.fasl" [89]; compiling file "/home/gwbennett/asdf-tests/a-one.lisp" (written 24 MAY 2017 04:01:53 PM): [90]; compiling (IN-PACKAGE :GB-A) [91]; compiling (DEFUN A-ONE ...) [92] [93]; /home/gwbennett/asdf-tests/binaries/a-one-TMP.fasl written [94]; compilation finished in 0:00:00.100 [95] [96]and a futher error message [97]Couldn't load [98]#P"/home/gwbennett/.cache/common-lisp/sbcl-1.3.18-linux-x64/home/gwbennett/asdf-tests/binaries/a-one.fasl": [99]file does not exist. [100] [Condition of type SB-INT:SIMPLE-FILE-ERROR] [101] [102]Again I click [ACCEPT] and receive, in the slime repl [103]WARNING: [104] loading FASL for # completed without its input file #P"/home/gwbennett/.cache/common-lisp/sbcl-1.3.18-linux-x64/home/gwbennett/asdf-tests/binaries/a-one.fasl" [105]T [106]and asdf-tests/binaries now does contain both gb-a-package.fasl and a-one.fasl [107] [108]Further, I can now (in-package :gb-a) which suggests that either gb-a-package.fasl or gb-a-package.lisp has been loaded. [109]?? I'd like to know which one. [110]The WARNING at line 87/88 suggests that it is the former but the phrase 'completed without its input file ..' [111]is baffling to me. [112]Once in :gb-a, I can also execute,eg., (a-one 11.2) ->12.2 [113]which suggests that the WARNING at lines 103/104 means that asdf-tests/binaries/a-one.fasl was really loaded. [114] [115] I seem to have been able to write the fasls to my choice of location, and asdf:load-system seems to [116] have found them too. To avoid the WARNINGs, how do I tell asdf:load-system not to look in its default [117] place or to look only in my choice? Perhaps there is an :around method on input-files which will do this, [118] or perhaps I need a configuration file analogous to source-registry.conf.d/gb-lisp.conf, or perhaps I [119] completely misunderstand the techniques needed to relocate/locate fasl files. [120] [121] Thanks for your patience and you insights [122] Cheers /Greg Bennett