[asdf-install-devel] Re: [Sbcl-help] run-program on 1.0.13 on windows 2000

Gary King gwking at metabang.com
Mon Jun 23 21:03:08 UTC 2008


Hi Richard,

Thanks for letting me know about the bug in SBCL / Windows. How could  
I learned that this is a known problem (i.e., is it on a website  
somewhere?)


On Jun 20, 2008, at 10:38 AM, Richard M Kreuter wrote:

> Gary King writes:
>> I've been trying to test asdf-install on VMWare Windows 2000 (hosted
>> by OS X) under SBCL 1.0.13. The SBCL version of ASDF-Install just
>> hangs an the portable version gives an unenlightening error message.
>> The problem seems to be with calls to external programs. If I start
>> sbcl and try
>>
>> (with-output-to-string (out)
>>  (sb-ext:run-program "path-to-handle.exe"  nil :output out :wait t))
>>
>> SBCL just hangs. If I give up and type control-C, I am returned to  
>> the
>> shell.
>>
>> Any thoughts on debugging this will be much appreciated,
>
> This has been reported before.  Invoking RUN-PROGRAM so that the  
> output
> of the program goes to a Lisp stream doesn't work on Windows, and is
> less a debuggable detail than a tricky-to-support interface, where the
> tricks haven't been worked out yet on Windows [*].
>
> As a workaround, if you have a POSIX shell available on your Windows
> system, you might be able to get the desired result by having the  
> shell
> run the requisite commands redirecting the output to a file, and then
> reading the file in, e.g.
>
> (defun run-shell-command-for-output (command &rest args)
>  (let ((output
>         (pathname
>          (loop thereis (open (format nil "TEMP-~D" (random 100000))
>                              :direction :probe :if-exists nil
>                              :if-does-not-exist :create)))))
>    (run-program "sh" (list "-c" (format nil "~a ~{~a ~} > ~a"
>                                         command args (namestring  
> output)))
>                 :search t :wait t)
>    (prog1
>        (with-open-file (stream output)
>          (let ((buffer (make-array (file-length stream)
>                                    :element-type 'character)))
>            (subseq buffer 0 (read-sequence buffer stream))))
>      (delete-file output))))
>
> Hope that helps for now,
> Richard
>
> [*] IIRC, the specific issue is that Windows's select() only works on
> sockets, not descriptors corresponding to pipes; and at the moment
> SERVE-EVENT relies on a faked select() on Windows.  (There are some
> other oddities in the Windows-specific code in run-program.lisp,
> run-program.c, too, having to do with reads that can't possibly fail  
> to
> block, etc.)
>
> Supporting all of RUN-PROGRAM properly on Windows probably entails a
> nontrivial reworking of FD-STREAMs, SERVE-EVENT, and RUN-PROGRAM  
> itself,
> and there are some outstanding open design decisions involved, first  
> of
> which is whether to support both Win32-oid handles and POSIX-oid
> descriptors in the same SBCL on Windows.  (I have a tree where
> FD-STREAMs can use filehandles on Windows, and SERVE-EVENT seems to
> mostly work there (thanks to Alastair Bridgewater), but couldn't  
> manage
> to get RUN-PROGRAM working with Win32 CreateProcess.  If anybody wants
> to take this up, or wants me to continue working on this, please  
> contact
> me privately.)

--
Gary Warren King, metabang.com
Cell: (413) 559 8738
Fax: (206) 338-4052
gwkkwg on Skype * garethsan on AIM







More information about the asdf-install-devel mailing list