1- Regarding eval-when, see my livejournal post: https://fare.livejournal.com/146698.html
2- features in build files are a very bad idea, inherited from the dark times of using REQUIRE to load code (not so portably). Please don't use them. Avoid using putting anything but build information in build files. Use :read-file-form or :read-file-line for :version, use :defsystem-depends-on for code.
3- Send patches to chipz, drakma, usocket. Users of bazel will thank you, too.
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org Experience is the worst teacher. It always gives the test first and the instruction afterward.
On Oct 14, 2017 16:44, "Ben Vulpes" benv@mavn.is wrote:
Fare et al.,
The Postmodern/usocket problem I encountered was in fact due to cl-postgres not setting a feature flag in an :execute context: https://github.com/marijnh/Postmodern/blob/57dc8cb4acc4599ae e757e8f81999a0fa83c7111/cl-postgres/features.lisp#L8 . To digress from the list topic for half a second, this confuses me, as that code refused to execute until I patched cl-postgres at that point to also eval-when in :execute, even when loading the concatenated sources with sbcl ... --load full-concatenation.lisp
More relevant to the list, other observations include: chipz mutates *features* in :chipz-system, a package defined in chipz.asd, which causes problems because the .asd files are not concatenated with the sources (not suggesting this is something asdf should even concern itself with); and both drakma and usocket call (asdf:component-version (asdf:find-system ...)) at read time, which fails to find the package in question when loading the concatenated source on a machine without those packages in *central-registry*, because (I believe) as noted above, monolithic-concatenate-source-op doesn't include system .asd files. Again, I'm not suggesting that this behavior change.
Yours, Ben
On Sat, Oct 14, 2017 at 11:52 AM, Faré fahree@gmail.com wrote:
On Sat, Oct 14, 2017 at 1:17 PM, Robert Goldman rpgoldman@sift.info
wrote:
Will you please clarify for my benefit, since I don't actually use any
of
the image operations.
Is the problem that somewhere in the process of loading Postmodern, or
one
of its dependencies, some bit of code invokes REQUIRE? Or is this an
issue
with ASDF's REQUIRE-SYSTEM.
monolithic-concatenate-source-op is supposed to create a source file that has "all the (transitive) source code required to load a system". Problem is, it is naive in that the current implementation believes there are only source files to concatenate. And so it doesn't handle (:require "foo") dependencies which would require to generate a temporary "source file" that contains (require "FOO") in it — or better a refactoring such that instead of source files, you use arbitrary arguments to vomit-output, and for require dependencies you use a function that outputs that instead of a pathname (and wrap a map () 'vomit-output in a with-output-file).
If it's the former, then I believe this is simply a bad implementation
in
the relevant system.
If it's the latter, we should do something about it. However, I believe
that
REQUIRE-SYSTEM, despite its name, doesn't actually use REQUIRE, instead
it
"acts like require."
Well, there are unhappily two things called "require-system": the class that backs the (:require "foo") dependencies, and the function that is now deprecated because it didn't have a good composable meaning in presence of multiple build phases. The one that matters here is the former.
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics•
All problems in computer science can be solved by another level of
indirection
— David Wheeler
Almost all programming can be viewed as an exercise in caching — Terje Mathisen, well-known programming optimization guru
-- Ben Vulpes 503-313-5838 MAVN