Hi,

2018/8/8 Wed 1:46:02 UTC+9 Michael Soyka wrote:
> On 8/7/2018 11:46 AM, Ken Takata wrote:
> > Hi,
> >
> > 2018/8/8 Wed 0:39:08 UTC+9 Bram Moolenaar wrote:
> >> Ken Takata wrote:
> >>
> >>>>> 2018/8/7 Tue 10:48:19 UTC+9 Michael Soyka wrote:
> >>>>>> On 8/6/2018 8:45 PM, Ken Takata wrote:
> >>>> [...]
> >>>>>>>> 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 someone specifies SHELL=sh.exe on the make command line then it is 
> not correct.

Even if someone set $SHELL explicitly, it is overwritten by mingw32-make.exe.


> >>>>>>>
> >>>>>>> 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.
> >>>>>> I run mingw32-make from a command window and, as I've stated, the value
> >>>>>> of SHELL includes a path specification.
> >>>>> Ah, running from cmd.exe or bash was not the cause of the difference.
> >>>>> The difference is caused by the $PATH.
> >>>>>
> >>>>> If sh.exe is found in the $PATH, $SHELL is set to the full path of the 
> >>>>> sh.exe.
> >>>>> If it isn't found, $SHELL is set to "sh.exe" without the path 
> >>>>> specification.
> >>>>>
> >>>>> So the conclusion is still not changed. The makefiles are correct. If 
> >>>>> $SHELL
> >>>>> is exactly same as "sh.exe", unix-like commands are not available and 
> >>>>> paths
> >>>>> must be dos-style, otherwise unix-like commands and unix-style paths 
> >>>>> can be
> >>>>> used.
> >>>> Since this is confusing, it would be good to add an explanation.  How
> >>>> about this:
> >>>>
> >>>>  # About the "sh.exe" condition, as explained by Ken Takata:
> >>> Well, my name is not important here. ;-)
> >> So we have someone to blame^Wask when it turns out wrong :-).
> >>
> >>> I didn't know how to detect if unix-like commands can be used from a
> >>> makefile before seeing these makefiles.
> >>>
> >>>
> >>>>  #
> >>>>  # If the makefile is executed and sh.exe is not found in $PATH, then 
> >>>> $SHELL is
> >>> Isn't it better to mention the "mingw32-make" command?
> >>>
> >>>
> >>>>  # set to "sh.exe" (without any path). In this case, unix-like commands 
> >>>> might
> >>>>  # not work and a dos-style path is needed.
> >>>>  #
> >>>>  # If the makefile is executed and sh.exe IS found in $PATH, then $SHELL 
> >>>> is set
> >>> This is the same.
> >>>
> >>>
> >>>>  # 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.
> >>>>  #
> >>>>  ifneq (sh.exe, $(SHELL))
> >> Do you mean like this:
> >>
> >>    # About the "sh.exe" condition, as explained by Ken Takata:
> >>    #
> >>    # If the makefile is executed with mingw32-make and sh.exe is not found 
> >> in
> >>    # $PATH, then $SHELL is set to "sh.exe" (without any path). In this 
> >> case,
> >>    # unix-like commands might not work and a dos-style path is needed.
> >>    #
> >>    # If the makefile is executed with mingw32-make and sh.exe IS found in 
> >> $PATH,
> >>    # then $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.
> > Yeah, it's okay.
> >
> > Regards,
> > Ken Takata
> >
> I don't see the need for this.  If the purpose of the if-tests is to 
> determine which shell is being used, what's wrong with using the notdir 
> function to remove any path information that might be there, yielding 
> either "sh.exe" or "cmd.exe" in the conditional?  Doing this would 
> appear to make the above list of special cases irrelevant, unnecessary 
> and reduce confusion.

When "cmd.exe" is used as a shell, $SHELL is exactly set to "sh.exe".
When "sh.exe" is used as a shell, $SHELL includes its path.


>  From my perspective, the makefiles should not care how SHELL was set, 
> only which shell it is.
> 
> I must be missing something but I don't know what.


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