quicklisp-client
quicklisp-client copied to clipboard
:silent t fails on ECL when a system invokes external program (like cffi-grovel)
Loading some systems requires running external program. Example of this is cffi-grovel. On ECL run-program can't work with an :output stream if that stream doesn't have a file descriptor.
(ql:quickload ... :silent t) implements silence by binding *standard-ouput* to a dummy broadcast stream. When cffi-grovel passes *standard-output*' to asdf:run-program` ECL signals an error:
:OUTPUT argument to RUN-PROGRAM does not have a file handle:
#<broadcast stream 00000000038cd5a0>.
More info here: https://github.com/roswell/roswell/issues/195
I propose to at least signal warning when :silent t is used on ECL. Otherwise it's quite difficult to debug this problem (especially if that happens during TravisCI build and not on local machine).
Binding to /dev/null can make it working on ECL on unix-like systems.
Other approaches are possible too (e.g. extending ECL's run-program)