Problem with ACL on windows & proposed fix

Robert Goldman 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.
>>
> Yup.
> 

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>

Best,
r




More information about the asdf-devel mailing list