Re: addsuffix manual example wrong, se_implicit test 4 fails.

"John E. Malmberg" <[email protected]> Tue, 23 Sep 2014 08:00:58 -0500
Newsgroups gmane.comp.gnu.make.devel
Message-ID <[email protected]>
On 9/19/2014 1:01 AM, John E. Malmberg wrote:
>
> I was looking in the wrong place.  The pattern_search routine in
> implicit.c appears to be the culprit.
>
> It needs to be able to handle paths in both VMS syntax or in Unix syntax
> under VMS.
>
> It also does not appear to be properly handling VMS syntax either.
>
> Fixing it to handle the Unix syntax should be easy.

The existing VMS specific code in dir.c, implicit.c, read.c, and rule.c 
is broken, along with the previously reported broken vmsify.c.

In dir.c, implicit.c, read.c, and rule.c, the VMS directory syntax 
parsing has an off by 1 error in it, and the Unix directory syntax 
parsing is disabled.

In addition the code does not know how to merge two VMS directory paths.

vmsify.c is turning a filename with out a path into a directory.  I keep 
finding more common trivial cases that this code gets wrong.  The only 
question is if any existing makefile.vms files expect the broken behavior.

I have not worked out a complete fix, but this is where I am going.

Unix directory syntax parsing should not be disabled on VMS.

The VMS specific code needs to know if a filename is in Unix syntax or 
in VMS syntax to determine how to parse it.

For expediency, I am going to do a quick check instead of a robust 
check.  A completely robust check is not possible as Unix allows any 
string of characters to be a file specification, including one that 
looks like a VMS specification.

A file specification will be presumed to be in VMS format if any of the 
following characters are present:  ":[]<>;^".

I am assuming that these characters are rarely found in a Unix file 
specification.

A file specification will be presumed to be Unix format if the "/" 
character is present.

For this pass, I am just concentrating on getting the Unix syntax 
functional on VMS.

In most cases the VMS specific code is instead of a test to see if "/" 
is present in the filename.

This will be changed to have the test for "/" and the VMS specific code 
will then test to see if that fails, and then test to see if any of the 
VMS specific characters are present before using VMS filename parsing.
In some cases a flag will be set to indicate that the resulting filename 
needs to also be in VMS syntax.

Regards,
-John