On Tue, Oct 22, 2013 at 2:08 PM, Dave Cooper david.cooper@genworks.com wrote:
I "solved" the issue by the following bootstrap procedure:
- compile/load adsf3
- (remhash "uiop" asdf::*preloaded-systems*
- load quicklisp's setup.lisp
Without step (2), the preloaded system of uiop occurs first in *system-definition-search-functions*, so the separable project for uiop (in my case, in local-projects), never ends up being found, and therefore ends up missing from the monofasl (I do suspect that the fact that it silently fails to be included in the monofasl can be considered a bug -- this probably should throw an error when trying to build the monofasl and realizing that the uiop.fasl is not showing up to the party, shouldn't it?)
So is this a use case which should be more directly supported? Does this call for an unregister-preloaded-system or some such thing?
OK, I understand both what is happening and why I previously failed to reproduce this failure:
1- I failed to reproduce because I was actually using 3.0.2, which registers asdf-driver but not uiop, so it wasn't interfering with your use.
2- The problem is that in *system-definition-search-functions*, quicklisp puts its things last, after sysdef-preloaded-system-search, and so the preloaded uiop preempts the one in your local-projects.
I suppose the solution is for search-for-system-definition to treat sysdef-preloaded-system-search specially and put it at the end of the search, just like it magically puts find-system-if-being-defined first. For backward compatibility, we can either remove sysdef-preloaded-system-search from the *system-definition-search-functions*, or have it become a no-op, and have its effect magically at the end of search-for-system-definition under a different name.
Even easy software is hard.
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org If this country is worth saving, it's worth saving at a profit. — H. L. Hunt This country can only be saved if it can be saved at a profit. — Patri Friedman