<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><meta http-equiv="Content-Type" content="text/html; charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">I am pretty much certain that I now understand what happened to cause my asdf problem. At the end of this I have a few final questions that maybe somebody can answer definitively for me. If you are curious about the details, read on.<div class=""><br class=""></div><div class="">Here are some background facts:</div><div class=""><ul class="MailOutline"><li class="">What I was seeing is a failure of asdf to locate a new system in my ~/common-lisp directory as it should.</li><li class="">This problem only occurred in the CCL IDE, not when running CCL from the command line. </li><li class="">There is an asdf internal variable called asdf/source-registry:*source-registry* which contains a list of all the .asd files it can find as a result of searching all of the directories where asdf thinks they might be. In my case that was my ~/common-lisp/ directory. In asdf itself.</li><li class="">That variable is only initialized when a file is searched for. That might happen either via an explicit asdf call (e.g.(asdf::find-system <something>) or indirectly via a quickload call such as (ql::quickload <something>). </li><li class="">Just loading asdf will not cause the *source-registry* to be initialized</li><li class="">However, it turns out that just loading quickload WILL cause the asdf *source-registry* variable to be initialized. </li><li class="">Once that variable is initialized, asdf will never try to initialize it again since that would waste a lot of time looking for .asd files all over again.</li></ul></div><div class=""><br class=""></div><div class="">So knowing all that, here is what happened.</div><div class=""><ul class="MailOutline"><li class="">I installed and rebuilt the latest CCL a couple of months ago.</li><li class="">As part of building the CCL IDE after that, both asdf and quickload were loaded into the CCL IDE image that was created (one question later is related to this)</li><li class="">As a normal result of loading quickload, the asdf/source-registry:*source-registry* variable was initialized (another question below is related to this)</li><li class="">When the CCL IDE image was built it included the value of that asdf *source-registry* variable, so that when the IDE was launched that variable was initialized.</li><li class="">Only recently did I add additional asdf-defined systems to the ~/common-lisp/ directory. But of course when asdf tried to find them it couldn’t because the *source-registry* variable was effectively initialized when the IDE was built (long before I added my new systems).</li><li class="">I can explicitly call an asdf function to reinitialize that variable and then everything is found normally.</li></ul><div class=""><br class=""></div></div><div class="">One question I have left is whether loading asdf and quickload into the CCL IDE is something that is done explicitly by the process that is now used to build the IDE or whether there is some option to not include them. Was there something that I should have done or not done when building the IDE that would have prevented this problem?</div><div class=""><br class=""></div><div class="">Had there been nothing in my ~/common-lisp directory to find, then the value of that asdf variable would have been nil and that is enough to make asdf reinitialize it. But assuring that each time I build seems like a pain.</div><div class=""><br class=""></div><div class="">My next question is why loading quicklisp causes it to initialize that variable? Conceivably it needs to search for .asd files that might be in its load environment and uses asdf to do so.</div><div class=""><br class=""></div><div class="">Next I’m wondering whether there is some change to asdf code that can be made to reinitialize the *source-registry* every time the IDE is re-started. </div><div class=""><br class=""></div><div class="">As another possibility, perhaps the CCL code for dumping the IDE can be modified in some way. In a private email Robert suggested:</div><div class="">"If you have time to look, take a peek at asdf/uiop/image.lisp and asdf/bundle.lisp which should have code Fare wrote about dumping an image in a way that it will restart happily.” </div><div class="">That seems like something that CCL maintainers might want to consider.</div><div class=""><br class=""></div><div class="">While waiting for fixes or other suggestions, I will put an explicit call to reinitialize the *source-registry* in my ccl-ide-init.lisp file:</div><div class=""> (asdf/source-registry::initialize-source-registry)</div><div class="">If anyone else has an environment similar to mine and rebuilds their own version of the IDE, I would suggest they do the same.</div></div></body></html>