Hi mike,
2016/9/5 Mon 23:34:05 UTC+9 Michael Soyka wrote:
> Hi Ken,
>
> On 9/5/2016 12:26 AM, Ken Takata wrote:
> > Hi mike,
> >
> > 2016/9/5 Mon 10:07:00 UTC+9 Michael Soyka wrote:
> >> The makefile testdir/Make_ming.mak contains statements of the form:
> >>
> >> if exist test.ok $(DEL) test.ok
> >>
> >> which can only be executed by one of the DOS/Windows command shells such
> >> as command.com or cmd.exe
> >>
> >> My version of make, gnu 3.82.90, sets the SHELL make variable to the
> >> value "C:/MinGW/msys/1.0/sh.exe", a unix shell, and so all such
> >> if-statements fail.
> >>
> >> This can be sidestepped by setting SHELL=cmd.exe on the make command
> >> line but then unix utilities such as "rm" are used instead of "del" and
> >> DIRSLASH is set to "/" instead of "\" and so vim.exe cannot be launched
> >> to run the test (cmd.exe does not accept forward slashes in paths).
> >> This new problem is caused by an incorrectly constructed if-test in the
> >> makefile:
> >>
> >> ifneq(sh.exe,$(SHELL))
> >>
> >> followed by unix-style definitions. I think that the author had
> >> intended this
> >>
> >> ifeq(sh.exe, $(SHELL))
> > No, this is confusing but intended. Please try the following Makefile:
> >
> > all:
> > echo $(SHELL)
> >
> > If you run mingw32-make.exe (not make.exe) on cmd.exe, you will see the
> > following result:
> >
> > C:\tmp>\msys32\mingw32\bin\mingw32-make.exe
> > echo sh.exe
> > sh.exe
> No, this is not what I see. I see "C:/MinGW/msys/1.0/sh.exe"
> >
> > Other results are...
> >
> > make.exe on cmd.exe:
> >
> > C:\tmp>\msys32\usr\bin\make.exe
> > echo /bin/sh
> > make: echo: Command not found
> > make: *** [Makefile.mingw:2: all] Error 127
> >
> > This doesn't work as expected.
> >
> > mingw32-make.exe on bash.exe:
> >
> > $ mingw32-make
> > echo C:/msys32/usr/bin/sh.exe
> > C:/msys32/usr/bin/sh.exe
> >
> > make.exe on bash.exe:
> >
> > $ make
> > echo /bin/sh
> > /bin/sh
> >
> >
> > Normally, mingw32-make should be used when the shell is cmd.exe.
> > (I don't know when the shell is bash.exe.)
>
> My apologies for not being clearer. I am running mingw32-make. I did
> exactly what you suggested above and got "C:/MinGW/msys/1.0/sh.exe" for
> SHELL. In the interest of full disclosure, I'm using TDM-GCC-64 to build
> Vim and run the tests. It does not include a unix shell. Its version of
> make apparently looks for and finds one in my MinGW/msys installation
> which is on my path.
Ah, reproduced.
When I add the msys2 directory to the PATH, mingw32-make finds sh.exe and
the SHELL becomes a full path of the sh.exe (e.g. c:/msys64/usr/bin/sh.exe)
even if I run mingw32-make on cmd.exe, and the sh.exe is used as a shell.
If mingw32-make cannot find sh.exe from the PATH, the SHELL is set to "sh.exe"
(without path) and actually cmd.exe is used as a shell.
So the following condition is still correct (if a user doesn't set the SHELL
explicitly):
ifneq (sh.exe, $(SHELL))
# The shell is sh.exe.
else
# The shell is cmd.exe.
endif
> Given all your examples above, if the makefile must include unix shell
> support, wouldn't the better implementation have been:
> ifeq("cmd.exe", $(SHELL))
> followed by the DOS definitions? This covers SHELL being "sh", "/bin/sh" or
> whatever. That said, I still claim that
> ifeq("cmd.exe", $(notdir $(SHELL)))
> is the right thing to do in case the value of SHELL includes a path.
>
> Again, I see this discussion if ifneq/ifeq statements as somewhat irrelevant
> since the "if exist" statements in the makefile assume/demand a cmd shell.
Yeah, I understand that the actual problem is that "if exist ..." doesn't work
when sh.exe is used as a shell, but I wanted to make clear about the SHELL
condition at first.
> >> This is all interesting but mostly irrelevant. The bottom line is that
> >> a DOS shell must be used and so my suggestion is:
> >>
> >> 1. remove the if-block that defines the unix utilities and retain
> >> the else-block, and
> >>
> >> 2. define SHELL=cmd.exe in the makefile.
If you write a patch for this, I will test it.
> Believe me, I fully understand that it's far-fetched that no one else
> has seen this problem before. I can't explain that either!
Maybe, most Windows developers here use MSVC mainly?
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.