[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Make recursion does not appear working in VMS

From: John E. Malmberg
Subject: Re: Make recursion does not appear working in VMS
Date: Sun, 16 Mar 2014 18:14:11 -0500
User-agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20130215 Thunderbird/17.0.3

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.


make: *** No rule to make target '1', needed by 'all'.  Stop.


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


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.mk_3:6: recipe for target 'fail.1
' failed
make: *** [fail.1] Error 0x1035a00a


.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;

        @sleep 4
        @echo Ok done


make -f /lcl_root/make/tests/work/features/parallelism.mk_3 "-rR" "-j5"


reply via email to

[Prev in Thread] Current Thread [Next in Thread]