I'm actually not sure what the assumptions are for QL. Does it assume that all libraries should be portable? Can contributors proclaim their systems to be non-portable, and does that affect QL function (and if so, how)?
The current situation is that the project must build on SBCL, and I don't want to add SBCL-only projects.
In this case, cl-quake-info is an Allegro-only project (though patching should be easyish). It "builds" under SBCL, yielding non-working code; but if you enable deferred warnings, the undefined function IF* is detected, and its THEN and ELSEIF keywords are parsed as undefined variables.
There may or may not be other interesting stories in the 20+ quicklisp libraries the authors of which never replied when I prompted them last year about these warnings breaking their build, nor fixed them.
Reminder: try (uiop:enable-deferred-warnings-check) before you load some code.
And there I notice that an undefined function is only a STYLE-WARNING in SBCL, where for the sake of checking, I might have preferred to make it a full warning, whereas undefined variables are, rightlly so, full warnings, and frankly, I believe shouldn't be deferred. Somehow, I never noticed before undefined function were mere STYLE-WARNINGs, because (1) this part of the code was eventually disabled by default in ASDF, and (2) at work, it was enabled indeed, but ASDF was using the non-default setting of breaking the build on any and all warnings including style-warnings, after proper filtering. Anyway, this is not my problem anymore, but if someone wants to take over the effort of providing the world with usable enforcement of such deferred-warnings by default, he may have to address those issues. My recommendation would be to (a) let the (style)warnings be reported by overriding any WITH-COMPILATION-UNIT, (b) handle and recognize the undefined-function warnings, print them to a string, save the name of the function and the string to the warnings file and when it's time to reconcile, filter those for defined functions, raise a full WARNING if still undefined, an ERROR if defined as a macro. Or let it be a STYLE-WARNING, but configure the on-style-warning fail mechanism separately for deferred-warnings than for compilation. This can be mostly portable code, except for the abstraction to recognize the warning. (c) let undefined-variable fall through immediately, and/or promote them to full WARNING or ERROR if needed, depending on implementation. (d) have a whitelist of the few systems in QL known to have warnings, and that should not fail on warnings. This may either be a special variable, or a generalized out-of-band configuration mechanism, allowing to bind variables around the performing of some action, etc. Now I remember why I ran out of energy to get it done. Good luck.
PS: is it only me, or is quicklisp disabling output translations for its
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org Our love was a supernova, bursting with an immense light only to wane quickly, leaving behind a black hole.