Hi,

2018/8/7 Tue 5:58:56 UTC+9 Bram Moolenaar wrote:
> > Problem
> > -------
> > The if-tests in the makefile src/po/Make_ming.mak do not do what is
> > intended.  Furthermore, they do not allow for the possibility that the
> > value of the make variable SHELL might include a path specification.  
> > 
> > 
> > Issues
> > ------
> > 1.  The if-tests that reference the SHELL make variable do not do what is
> >     intended.  
> > 
> >     There are four if-tests in the file Make-ming.mak of the form:
> > 
> >         ifeq (sh.exe, $(SHELL))
> > 
> >     As coded, this condition will be true if and only if the value of
> >     SHELL is "sh.exe".  However, in all four cases, the if-else blocks are
> >     incorrectly ordered.  For example, in the current makefile:
> > 
> >         ifeq (sh.exe, $(SHELL))
> >         VIMRUNTIME = ..\..\runtime
> >         else
> >         VIMRUNTIME = ../../runtime
> >         endif
> > 
> >     should instead be:
> > 
> >         ifeq (sh.exe, $(SHELL))
> >         VIMRUNTIME = ../../runtime
> >         else
> >         VIMRUNTIME = ..\..\runtime
> >         endif
> > 
> >     Perhaps when these if-tests were added in commit 8889a5c305,
> >     "ifneq" was intended.  However, see the next point.  
> > 
> > 2.  The if-tests do not allow for the possibility that the value of SHELL
> >     might include a path specification.  
> > 
> >     Using the version of mingw/msys I've downloaded from Source Forge, my
> >     version of make defines SHELL to be "C:\MinGW\msys\1.0\bin\sh.exe".
> >     The above if-tests will report that this value is not equal to
> >     "sh.exe" even though we would like it to report a unix shell is being 
> >     provided.  A way to address this would be to use the gnu make function
> >     "notdir", which leads us to rewriting the above as:
> > 
> >         ifeq (sh.exe, $(notdir $(SHELL)))
> >         VIMRUNTIME = ../../runtime
> >         else
> >         VIMRUNTIME = ..\..\runtime
> >         endif
> > 
> >     The other three if-tests should be modified in the same way.
> > 
> >     I'll point out that SHELL can also be specified on the make command
> >     line and so its value could include a path.  
> > 
> > 
> > Proposed patch
> > --------------
> > I've attached a patch that addresses the if-test issues I've raised.  
> 
> It appears src/Make_cyg_ming.mak also does this:
> 
>       ifneq (sh.exe, $(SHELL))
>       DEL = rm
>       MKDIR = mkdir -p
>       DIRSLASH = /
>       else
>       DEL = del
>       MKDIR = mkdir
>       DIRSLASH = \\
>       endif
> 
> And src/GvimExt/Make_ming.mak
> 
>       ifneq (sh.exe, $(SHELL))
>       DEL = rm
>       else
>       DEL = del
>       endif
> 
> Is this really wrong?

No. This is really confusing, but this is correct.

If the makefile is executed by the "mingw32-make" command from cmd.exe,
$SHELL is set to "sh.exe" (without any path). In this case, unix-like commands
might not work and dos-style path is needed.

If it is executed by the "mingw32-make" command from a unix-like shell,
$SHELL is set with the actual path of sh.exe (e.g. "C:/msys64/usr/bin/sh.exe").
In this case, unix-like commands can be used.

If it is executed by the "make" command from cmd.exe, $SHELL is set to
"/bin/sh". If the "make" command is in the $PATH, other unix-like commands
might also work.

If it is executed by the "make" command from a unix-like shell,
$SHELL is set with the unix-style path (e.g. "/bin/bash").
In this case, unix-like commands can be used.


BTW,

> >     Using the version of mingw/msys I've downloaded from Source Forge, my
> >     version of make defines SHELL to be "C:\MinGW\msys\1.0\bin\sh.exe".

MinGW and msys-1.0 seems to be abandoned. New features like DirectWrite and
color emoji cannot be compiled by them. 
I recommend using MinGW-w64 and MSYS2. 

Regards,
Ken Takata

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui