CFFI grovel passes a broadcast-stream to (run-program ... :output $)

Bug #1647237 reported by Anton Vodonosov
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
CFFI
New
Undecided
Unassigned

Bug Description

As you can see from this TravisCI log of cl-plus-ssl, ECL fails when it tries to grovel static-vectors library with ERROR:

    :OUTPUT argument to RUN-PROGRAM does not have a file handle:
    #<broadcast stream 00000000038cd5a0>

https://travis-ci.org/cl-plus-ssl/cl-plus-ssl/jobs/181217279

And indeed, in https://github.com/cffi/cffi/blob/master/grovel/grovel.lisp#L282 cffi-grovel does pass a broadcast-stream to run-program.

According to Fare "this is unlikely to work, not just on ECL, but on many other implementations with similar non-unreasonable limitations.
if you want the output to two streams, the portable thing to do is capture to a string, and princ the string to two streams."

The TravisCI build is run on ECL 16.1.2, ASDF 3.1.5.4 at 2016-12-05
(http://ccl.clozure.com/irc-logs/lisp/lisp-2016-12.txt 2016-12-05T01:04:25Z)

description: updated
Revision history for this message
Anton Vodonosov (avodonosov) wrote :

My original TravisCI issue isn't caused by cffi-grovel directly, it's a result of the :silent t flag passed to (ql:quickload ...). The :silent t feature is implemented in quicklisp by binding *standard-output* to a dummy broadcast stream. More details here: https://github.com/roswell/roswell/issues/195

But I'm not closing the issue because a place where broadcast-stream is passed to run-program exists in cffi.

BTW, in a recent change in ASDF there is an explicit check on ECL that the stream was associated with a file descriptor: https://github.com/fare/asdf/blob/46eb49bf88ebd99efb2b511a62a79d778cc0240b/uiop/run-program.lisp#L479

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.