libtool with mingw hangs building openocd in func_convert_core_msys_to_w32
Dietmar May
dietmar.may@outlook.com
Mon Jun 28 16:29:32 GMT 2021
> >/$ cmd //c echo hello />/hello />//>/which works, and this, which doesn't: />//>/$ cmd /c echo hello />//>/Microsoft Windows [Version 10.0.blah] />/(c) Microsoft Corporation. All rights reserved. />//>/C:\msys64\home\myname> /
> Your example seems to be inverted, the first form doesn't work, the
> second does with the same results you show (but inverted).
>
> It would be better if you document how you executed those commands,
> we're assuming a mintty terminal running a bash shell, but I haven't
> followed all your messages and it might be a cmd window; results
> shouldn't change anyway, but for completeness sake.
More details for you, then:
>/I just re-installed msys2 and tried a few things, with interesting
result. /
I install msys2-x86_64-20210604.exe (downloaded last week) from the
msys2 website, and accept all defaults during installation, including
the "run msys2 now" on the final installation screen (which, yes, opens
a mintty terminal running msys2's bash shell). All commands are executed
in that same mintty window immediately following a fresh installation.
So here is the output, cut-and-pasted from that mintty terminal:
dietmar@laptop MSYS ~
$ cmd //c echo hello
hello
dietmar@laptop MSYS ~
$ cmd /c echo hello
Microsoft Windows [Version 10.0.19043.1055]
(c) Microsoft Corporation. All rights reserved.
C:\msys64\home\dietmar>
As you can see, the first form DOES INDEED work, and the second does
not. Why not try it yourself? You will likely have the same results.
> No, wrong, cmd is getting an argument which it interprets as it seems
> fit, no hack there. The same applies to the ls example before, ls
> receives an argument which is expected to be a path, nothing strange.
To find out what cmd is really doing, I believe the authoritative answer
would be given by Microsoft's Command Prompt:
Microsoft Windows [Version 10.0.19043.1055]
(c) Microsoft Corporation. All rights reserved.
C:\Users\dietmar>cmd //c echo hello
Microsoft Windows [Version 10.0.19043.1055]
(c) Microsoft Corporation. All rights reserved.
C:\Users\dietmar>exit
C:\Users\dietmar>
Here we see that cmd.exe //c starts a subshell, rather than executing a
single command.
However, in msys2's mintty/bash window, that same syntax works differently:
dietmar@laptop MSYS ~
$ cmd //c echo hello
hello
dietmar@laptop MSYS ~
$ cmd ///c echo hello
Microsoft Windows [Version 10.0.19043.1055]
(c) Microsoft Corporation. All rights reserved.
C:\msys64\home\dietmar>exit
exit
dietmar@laptop MSYS ~
$ cmd ////c echo hello
hello
dietmar@laptop MSYS ~
$ cmd //////c echo hello
hello
dietmar@laptop MSYS ~
$ cmd ////////c echo hello
hello
dietmar@laptop MSYS ~
$ cmd /////////c echo hello
Microsoft Windows [Version 10.0.19043.1055]
(c) Microsoft Corporation. All rights reserved.
C:\msys64\home\dietmar>exit
exit
dietmar@laptop MSYS ~
$
It seems evident that msys2 is performing slash escaping - ie. 2
consecutive slashes are consolidated into a single slash (rather like
quote escaping in various languages - eg. SQL, CSV, C#, YAML)
recursively (ie. repeatedly) during argument evaluation.
Again, why not simply change this to a form that works without the slash
hackery?
dietmar@laptop MSYS ~
$ cmd /c "echo hello"
hello
> >/Interestingly, />//>/ls //c />//>/hangs under msys2 (as well as cygwin), /
> Expected as the documentation link describes, //c is taken as a path to
> a server, you already knew that.
>
> >/whereas />//>/cmd //c />//>/does not; so it almost seems like msys2 has a hack to recognize that />/cmd.exe is being invoked ... /
> No, wrong, cmd is getting an argument which it interprets as it seems
> fit, no hack there. The same applies to the ls example before, ls
> receives an argument which is expected to be a path, nothing strange.
>
> >/However, both of the following also complete successfully under msys2, />/WITHOUT the double-slash hack: />//>/$ cmd /c "echo hello" />/hello />//>/$ cmd "/c" "echo hello" />/hello />//>/Both seem preferable to bad syntax. />//>/Of course, there's always the question of why libtool is using cmd.exe />/instead of /bin/echo, which seems to work just fine ... />//>/$ /bin/echo "hello world" />/hello world /--
> R.Berber
More information about the Cygwin
mailing list