Dear Kevin,
as I'm handing out my ASDF duties to my successor Robert Goldman, I gave this a brief look again, and it looks like the issue is (1) your doing everything in cl-user, and (2) your assuming cl-user has allegro extensions such as if* This confuses SBCL, that warns about the suspicious undefined function if*, and other such things.
Some dependencies #-allegro :acl-compat and package use #+allegro :excl #-allegro acl-compat.excl could help.
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org The only way to have a friend is to be one. — Ralph Waldo Emerson
On Thu, Feb 21, 2013 at 11:37 AM, Faré fahree@gmail.com wrote:
Dear Lisp hacker(s),
ASDF3 now checks deferred warnings by default. On SBCL, this means that it will treat as an error any undeclared free variable, including forward references to special variables as well as any undefined function that isn't defined by the end of the system.
Using cl-test-grid to compile all the systems in quicklisp, we found the following failure on a system we believe you maintain. Can you please fix it?
cl-quakeinfo http://cl-test-grid.appspot.com/blob?key=125l61q30b
http://common-lisp.net/project/cl-test-grid/asdf/sbcl-warning-failures.html http://common-lisp.net/project/cl-test-grid/asdf/asdf-diff-13.html
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org Freedom transforms difficulty into opportunity, danger into responsibility. "Protection" transforms difficulty into oppression, danger into tragedy.
Faré wrote:
Dear Kevin,
as I'm handing out my ASDF duties to my successor Robert Goldman, I gave this a brief look again, and it looks like the issue is (1) your doing everything in cl-user, and (2) your assuming cl-user has allegro extensions such as if* This confuses SBCL, that warns about the suspicious undefined function if*, and other such things.
Some dependencies #-allegro :acl-compat and package use #+allegro :excl #-allegro acl-compat.excl could help.
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)? Does QL have a package chooser like, e.g., the emacs package manager, that people use to interactively choose libraries? I didn't see one in a cursory look at quicklisp.org, and I've always just used QL to install libraries that I knew about from out-of-band.
thx, r
"Robert P. Goldman" rpgoldman@sift.info writes:
Faré wrote:
Dear Kevin,
as I'm handing out my ASDF duties to my successor Robert Goldman, I gave this a brief look again, and it looks like the issue is (1) your doing everything in cl-user, and (2) your assuming cl-user has allegro extensions such as if* This confuses SBCL, that warns about the suspicious undefined function if*, and other such things.
Some dependencies #-allegro :acl-compat and package use #+allegro :excl #-allegro acl-compat.excl could help.
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.
I'd like to expand on this in the future to add useful libraries meant for other subsets of CL implementations, but that's not in place yet.
Does QL have a package chooser like, e.g., the emacs package manager, that people use to interactively choose libraries? I didn't see one in a cursory look at quicklisp.org, and I've always just used QL to install libraries that I knew about from out-of-band.
There's no package chooser. You pretty much have to know what you want through some other means before installing it via Quicklisp. I'd like to change that sometime soon, too
Zach
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.
Faré fahree@gmail.com writes:
PS: is it only me, or is quicklisp disabling output translations for its
Its what? Postscripts?
Zach
PS: is it only me, or is quicklisp disabling output translations for its
Its what? Postscripts?
fasls.
The fasl paths are not translated (at least not for me), and e.g. allegro and sbcl will clash, since they both name their fasls .fasl.
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org If Java had true garbage collection, most programs would delete themselves upon execution. — Robert Sewell
Faré fahree@gmail.com writes:
PS: is it only me, or is quicklisp disabling output translations for its
Its what? Postscripts?
fasls.
The fasl paths are not translated (at least not for me), and e.g. allegro and sbcl will clash, since they both name their fasls .fasl.
I don't think Quicklisp disables output translations for its fasls. Do you have a specific example? Perhaps there's a bug I can fix.
Zach
sbcl (load "~/quicklisp/setup.lisp") (asdf:INITIALIZE-OUTPUT-TRANSLATIONS)
;; So far, so good: ((#P"/home/tunes/local/stow/sbcl/lib/sbcl/**/*.*" T) (#P"/home/tunes/local/stow/sbcl/lib/sbcl/**/*.*" #P"/home/tunes/local/stow/sbcl/lib/sbcl/**/*.*") (T T) (#P"/home/tunes/.cache/common-lisp/sbcl-1.1.14.43.master.1-9f3f7eb-linux-x64/**/*.*" T) (T #P"/home/tunes/.cache/common-lisp/sbcl-1.1.14.43.master.1-9f3f7eb-linux-x64/**/*.*"))
(asdf:output-files 'asdf:compile-op '(cl-quakeinfo cl-quakeinfo))
;; This on the other hand, is bad: (#P"/home/tunes/quicklisp/dists/quicklisp/software/cl-quakeinfo-20130615-git/cl-quakeinfo.fasl")
And I found the reason is that /home/tunes/quicklisp/dists/quicklisp/software/cl-quakeinfo-20130615-git/cl-quakeinfo.asd contains: (asdf:disable-output-translations)
Which is probably quite an inappropriate place for such an incantation.
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org COBOL programs are an exercise in Artificial Inelegance.