On 3/13/2014 8:14 AM, h.becker wrote:
It looks like execve uses argv[0] to run make.
With a VMS/DCL-style version of the Makefile and my mcr version of make
it seems to work:
I changed from the wrapper code to code that sets the makefile name, and
temporarily set a local symbol as a foreign command. At exit the symbol
is either deleted or replaced with the original value, which leaves
argv[0] alone.
I also found that the vms_exit() code had a bug in it, because it was
written with the expectation of getting a UNIX exit status, and GNU make
is passing it VMS exit statuses.
As only codes 0, 1, 2 are defined for GNU make status, and the lowest
failure status from VMS is 8, for GNU make, the conversion to VMS status
should only be done for codes 1-7, the rest should be passed through.
With that those two changes, I now have:
EAGLE> del lcl_root:[...]*.*;*/exc=(*.dir,*.pm)
EAGLE> perl run_make_tests.pl features/parallelism
------------------------------------------------------------------------------
Running tests for GNU make on VMS
GNU Make 4.0.90
------------------------------------------------------------------------------
Clearing /lcl_root/make/tests/work...
Making work dirs...
features/parallelism .................................... Error running
make (expected 0; got 512): make -f
/lcl_root/make/tests/work/features/parallelism.mk_1 "-j4"
Error running make (expected 512; got 0): make -f
/lcl_root/make/tests/work/features/parallelism.mk_3 "-rR" "-j5"
FAILED (6/8 passed)
2 Tests in 1 Category Failed (See .diff* files in work dir for details) :-(
The first failure is that the recursion is not happening:
The 1.inc and 2.inc recipe lines are probably wrapped in the e-mail client.
LCL_ROOT:[make.tests.work.features]parallelism.log_1;1
THREE.inc
ONE.inc
TWO.inc
make: *** No rule to make target '1', needed by 'all'. Stop.
LCL_ROOT:[make.tests.work.features]parallelism.mk_1;1
all : 1 2 ; @echo success
-include 1.inc 2.inc
1.inc : ; @pipe echo ONE.inc ; sleep 3 ; echo TWO.inc ; define/user
sys$$output $@ ; echo "1 : ; @pipe echo ONE ; sleep 2 ; echo TWO" ;
close sys$$output
2.inc : ; @pipe sleep 2 ; echo THREE.inc ; define/user sys$$output $@ ;
echo "2: ; @pipe sleep 1 ; echo THREE" ; close sys$$output
LCL_ROOT:[make.tests.work.features]parallelism.run_1;1
make -f /lcl_root/make/tests/work/features/parallelism.mk_1 "-j4"
The second failure is that the make prematurely exits on the first fail.
It should have 3 failures. The test script currently converts the
"0x1035a00a" to "1" so that it matches. That should probably be done by
Make.
There should be 3 failure lines, not just one.
EAGLE> type LCL_ROOT:[make.tests.work.features]parallelism.*_3
LCL_ROOT:[make.tests.work.features]parallelism.log_3;1
Fail
/lcl_root/make/tests/work/features/parallelism.mk_3:6: recipe for target
'fail.1
' failed
make: *** [fail.1] Error 0x1035a00a
LCL_ROOT:[make.tests.work.features]parallelism.mk_3;1
.PHONY: all fail.1 fail.2 fail.3 ok
all: fail.1 ok fail.2 fail.3
fail.1 fail.2 fail.3:
@sleep $(patsubst fail.%,%,$@)
@echo Fail
@exit 271949834;
ok:
@sleep 4
@echo Ok done
LCL_ROOT:[make.tests.work.features]parallelism.run_3;1
make -f /lcl_root/make/tests/work/features/parallelism.mk_3 "-rR" "-j5"
Regards,
-John
_______________________________________________
Bug-make mailing list
Bug-make@gnu.org
https://lists.gnu.org/mailman/listinfo/bug-make