Problem with ACL on windows & proposed fix
rpgoldman at sift.net
Sun Jun 28 17:22:10 UTC 2015
On 6/27/15 Jun 27 -11:40 PM, Faré wrote:
> On Fri, Jun 26, 2015 at 4:49 PM, Robert Goldman <rpgoldman at sift.net> wrote:
>> Sorry -- I've been traveling, so sat on this bug report for a while.
>> Here's a test failure from Windows ACL. Looks like ACL is somehow not
>> running the windows CWD program helper (which should invoke CMD.EXE),
>> but instead is just taking the command and treating it as its own output.
> Indeed, %run-program has these lines:
> ;; NB: We do NOT add cmd /c here. You might want to.
> #+(or allegro clisp) command
> Retrospectively, that's probably a mistake.
>> which suggests we should modify %NORMALIZE-COMMAND for Allegro to
>> prepend "CMD /C " to all commands when on windows.
Actually, I have a question about this: RUN-PROGRAM is supposed to run
a program directly by default (as distinguished from RUN-SHELL-COMMAND),
which has the (much more ambiguous) behavior of running through a shell.
So it occurs to me that there are two possibilities:
1. We should be invoking CMD.EXE explicitly on Windows in ACL, as we
discuss here. But there's a second possibility:
2. The definition of GETCWD-FROM-RUN-PROGRAM is wrong (see below). If
G-F-R-P requires CMD.EXE, then doesn't that mean that
GETCWD-FROM-RUN-PROGRAM is wrong because "echo %cd%" is a "shell"
directive, and not a program to run? Doesn't %cd% require CMD.EXE?
Indeed, doesn't G-F-R-P actually require a shell of some sort to do its
job? Even on Unix, pwd is a shell command, right? So G-F-R-P should
have :FORCE-SHELL T, shouldn't it?
Oh, no, I see. if you provide a single string like "echo %cd%", you are
implicitly specifying that you want the shell. But in this case why
does (RUN-PROGRAM '("pwd" "-P")) work on Unix variants? Doesn't pwd
require a shell?
If my claim is correct, then an alternative patch is to:
1. Supply :FORCE-SHELL T in G-F-R-P
2. Change %normalize-system-command to explicitly supply "CMD /C" on
Windows + ACL.
I think that might be more correct than making ACL always explicitly use
"CMD /C", since always supply CMD.EXE would make it impossible for ACL +
Windows to ever provide the simpler behavior, right?
<sigh>I should have put this in a launchpad ticket</sigh>
More information about the asdf-devel