Hello, the GNU Make manual says (...)executed by invoking a new sub-shell for each line of the recipe, unless the .ONESHELL special target is in effect (In practice, make may take shortcuts that do not affect the results.)
Some time ago I was asking here for help in modifying the source of Make 4.1 so that the above "shortcuts" are not taken, and in fact, Make would _always_ spawn a new shell. Paul Smith and others graciously helped me and I was able to modify the file job.c in two places, to achieve this effect. One of these places is: else //if (strcmp (shell, default_shell)) goto slow; where I comment out the if statement and so always the "slow" path is taken. (The other place where I modified does not matter for the purpose of the present question). This worked very well until I found a strange case yesterday where it does not work. The source fragment above seems to imply that we are going to a "slow" execution path, but "slowness" implies equivalence. Well, it would seem than in the case below, where a different behaviour is observed with the above modification and without, then that cannot be the case, and perhaps even Make does not in fact behave equivalently to where a new shell were always spawned. The failure case is: Makefile: export VAR-Y := val .PHONY: allall: $(MAKE) -f Makefile1 Makefile1: $(warning VAR-Y $(VAR-Y)) all: Here, if I call >make the original Make works correctly, the value is printed in Makefile1, but after the above modification, no value is printed (the value is empty). It is important that the variable name contains a dash, without that, the example works fine. The strange thing is that the "export" statement is of course not a shell command, but a Make construct. Yet somehow it is affected by the above code modification. Please tell me if there is a way to enforce the behaviour of GNU Make that it always spawns a shell and if so, how. Thank you very much for any help and insight, Mark _______________________________________________ Help-make mailing list Help-make@gnu.org https://lists.gnu.org/mailman/listinfo/help-make