quicklisp-client icon indicating copy to clipboard operation
quicklisp-client copied to clipboard

:silent t fails on ECL when a system invokes external program (like cffi-grovel)

Open avodonosov opened this issue 9 years ago • 0 comments

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)

avodonosov avatar Dec 11 '16 02:12 avodonosov