[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 21:33:26 -0500
User-agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20130215 Thunderbird/17.0.3

On 3/16/2014 6:14 PM, John E. Malmberg wrote:
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

There should be 3 failure lines, not just one.

Found another bug in the exit_failure routine, and now second test is passing. So only the parallelism_mk_1 test is failing out of the set.


reply via email to

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