.ONESEHLL not working as expected in 3.82

"Anjum Naseer" <[email protected]>
Newsgroups gmane.comp.gnu.make.windows
Message-ID <[email protected]>
Hi,

I have built the 3.82 version of GNU Make using the Microsoft Visual C++
compiler and it seems to work fine.
However, I cannot get it to work correctly with the .ONESHELL option.
I created a dummy makefile (dummy.mak) with this content:
vvvvvvvvvvvvvvvvvvvvvvvvvvvv
.ONESHELL:

.PHONY: dummy

dummy:
	set xyz=abc
	@echo xyz=%xyz%
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

If I invoke this with "make -d -r -f dummy.mak" I get:
Vvvvvvvvvvvvvvvvvvvvvvvvvvvv
GNU Make 3.82
Built for Windows32
Copyright (C) 2010  Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Reading makefiles...
Reading makefile `dummy.mak'...
Updating makefiles....
 Considering target file `dummy.mak'.
  Looking for an implicit rule for `dummy.mak'.
  No implicit rule found for `dummy.mak'.
  Finished prerequisites of target file `dummy.mak'.
 No need to remake target `dummy.mak'.
Updating goal targets....
Considering target file `dummy'.
 File `dummy' does not exist.
 Finished prerequisites of target file `dummy'.
Must remake target `dummy'.
Invoking recipe from dummy.mak:6 to update target `dummy'.
Creating temporary batch file
C:\Users\ADB14~1.NAS\AppData\Local\Temp\make5868-1.bat
Batch file contents:
        @echo off
        set xyz=abc
set xyz=abc
CreateProcess(C:\Users\ADB14~1.NAS\AppData\Local\Temp\make5868-1.bat,C:\
Users\ADB14~1.NAS\AppData\Local\Temp\make5868-1.bat,...)
Putting child 0094AFB8 (dummy) PID 9620224 on the chain.
Live child 0094AFB8 (dummy) PID 9620224
Main thread handle = 00000054
Reaping winning child 0094AFB8 PID 9620224
Cleaning up temp batch file
C:\Users\ADB14~1.NAS\AppData\Local\Temp\make5868-1.bat
Creating temporary batch file
C:\Users\ADB14~1.NAS\AppData\Local\Temp\make5868-1.bat
Batch file contents:
        @echo off
        echo xyz=%xyz%
CreateProcess(C:\Users\ADB14~1.NAS\AppData\Local\Temp\make5868-1.bat,C:\
Users\ADB14~1.NAS\AppData\Local\Temp\make5868-1.bat,...)
Live child 0094AFB8 (dummy) PID 9620224
xyz=
Reaping winning child 0094AFB8 PID 9620224
Cleaning up temp batch file
C:\Users\ADB14~1.NAS\AppData\Local\Temp\make5868-1.bat
Removing child 0094AFB8 PID 9620224 from chain.
Successfully remade target file `dummy'.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

As you can see from the debug trace above, it looks like it is still
loading a separate SHELL for each line of the recipe. Have I
misunderstood the .ONESHELL feature or is this a bug?

Thanks,

Anjum.

PS: I am running this on a 64bit Windows 7 HP Z800 workstation.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.