Craig A. Berry wrote:
At 5:07 PM -0400 6/4/06, John E. Malmberg wrote:
Craig A. Berry wrote:
At 11:56 PM -0400 6/3/06, John E. Malmberg wrote:
I have discovered that Perl on OpenVMS has components that expect
UNIX style shell macros in file specifications to be translated
intact through vmsify() and unixify().
What components of Perl, specifically?
RSYNC_ROOT:[PERL.lib.ExtUtils]MM_VMS.pm;1
$(ZIP) "$(ZIPFLAGS)" $(MMS$TARGET) [.$(DISTVNAME)...]*.*;
$(TAR) "$(TARFLAGS)" $(DISTVNAME).tar [.$(DISTVNAME)...]
$(SHAR) [.$(DISTVNAME)...]*.*; $(DISTVNAME).share
Those macros are part of complete targets, not filespecs, and are
clearly intended to go through to the make utility as is. I can't
think of any reason they would go through vmsify() or unixify(); if
they do, please let me know where and when.
I may have been wrong about vmsify, in blead-perl vmsify has been
mangling the macros for a while, and no one noticed.
I do know that if unixify() does not pass a $(macro) through unchanged,
then things break. I did not make a list of what. I do remember that
it was a pain to debug to get it fixed.
The only unexpanded macro that can be safely "passed through to make
type programs" on VMS is one that you know will expand to a complete
(not partial) and syntactically valid VMS filespec, or one where you
have taken care to ensure that the components will assemble
themselves in a valid way after expansion. If you want to perform
conversions or concatenations or other operations on a string that is
a filespec with a macro embedded in it or a macro that has only part
of a filespec in it, your best bet is to expand the macros first.
That's why eliminate_macros() started out in MM_VMS rather than
File::Spec (probably before File::Spec even existed).
If Perl on OpenVMS is converted so that MakeMaker is putting the
>> environment variables into DCL symbols, then the restriction would be
>> for what DCL will allow a symbol to have.
Under what conditions does MakeMaker depend on environment variables
for macro definitions? The ones I know about are all explicitly
written to the Makefile.
Apparently it is done sometimes when a makefile is built and executed by
the same program. I do not know for sure.
So the bottom line is:
Should vmsify continue to convert ./$(xxx) to []$^(xxx^) when it sees it
like it is currently doing in blead perl?
Or should it pass it through, which is what I think that the 5.8.x and
earlier versions do?
It is quite possible that no one will actually ever pass such a sequence
to vmsify(). But since unixify() must pass macros through the behavior
should be documented for both.
-John
[EMAIL PROTECTED]
Personal Opinion Only