Craig Berry wrote in reply to me:
!>but I am not too certain about which MakeMaker is in perl@18376
!
!I'm not either, but whatever it is it's going to change. But is
!Constant.t part of MakeMaker? I don't see it in the current snapshot.
Well one thing to do is:
% grep '^\$VERSION' lib/ExtUtils/MakeMaker.pm
$VERSION = "6.03";
Michael's announcement dated 19-DEC-2002 was for MakeMaker
"6.06_01 alpha", so the perl distribution has yet to catch up.
Perhaps he could comment on the process of putting his work into
bleedperl (CCed).
For what it is worth I note a difference between a Solaris
built Makefile and a VMS built descrip.mms
file as follows:
# --- MakeMaker clean section:
# Delete temporary files but do not touch installed files. We don't delete
# the Makefile here so a later make realclean still has a makefile to use.
clean ::
-rm -rf ./blib $(MAKE_APERL_FILE) $(INST_ARCHAUTODIR)/extralibs.all
perlmain.c mon.
out core core.*perl.*.? *perl.core so_locations pm_to_blib *$(OBJ_EXT)
*$(LIB_EXT) perl.exe
$(BOOTSTRAP) $(BASEEXT).bso $(BASEEXT).def $(BASEEXT).exp
-mv Makefile Makefile.old $(DEV_NULL)
# --- MakeMaker clean section:
# Delete temporary files but do not touch installed files. We don't delete
# the Descrip.MMS here so that a later make realclean still has it to use.
clean ::
$(RM_F) *.Map *.Dmp *.Lis *.cpp *.$(DLEXT) *$(OBJ_EXT) *$(LIB_EXT)
*.Opt $(BOOTSTRAP) $(BASEEXT).bso .MM_Tmp
$(RM_RF) perlmain.c [.blib.arch.auto.Sort.Versions]extralibs.all
pm_to_blib.ts
$(RM_RF) extralibs.ld blib Makeaperl.MMS
Hence I am still not sure which platform is correct in
generating the "clean" target. But I did note one
other problem with the lib/ExtUtils/t/Constant.t
test in the perl distribution in that it contains a VMS
specific hack to work around the old "two all targets"
bug in MakeMaker that Michael has long since fixed.
Thus I'd revise my previous patch as follows:
--- perl_18376/lib/ExtUtils/t/Constant.t Thu Aug 29 07:26:11 2002
+++ perl/lib/ExtUtils/t/Constant.t Thu Jan 2 09:42:56 2003
@@ -44,7 +44,7 @@
# Renamed by make clean
my $makefile = ($^O eq 'VMS' ? 'descrip' : 'Makefile');
my $makefile_ext = ($^O eq 'VMS' ? '.mms' : '');
-my $makefile_rename = $makefile . ($^O eq 'VMS' ? '.mms' : '.old');
+my $makefile_rename = $makefile . ($^O eq 'VMS' ? '.mms_old' : '.old');
my $output = "output";
my $package = "ExtTest";
@@ -119,8 +119,6 @@
my @makeout;
- if ($^O eq 'VMS') { $make .= ' all'; }
-
print "# make = '$make'\n";
@makeout = `$make`;
if ($?) {
@@ -132,8 +130,6 @@
}
$realtest++;
- if ($^O eq 'VMS') { $make =~ s{ all}{}; }
-
if ($Config{usedl}) {
print "ok $realtest # This is dynamic linking, so no need to make perl\n";
} else {
@@ -217,7 +213,12 @@
}
$realtest++;
- check_for_bonus_files ('.', @$files, $output, $makefile_rename, '.', '..');
+ if ( $^O eq 'VMS' ) {
+ check_for_bonus_files ('.', @$files, $output, "${makefile}${makefile_ext}",
+$makefile_rename, '.', '..');
+ }
+ else {
+ check_for_bonus_files ('.', @$files, $output, $makefile_rename, '.', '..');
+ }
rename $makefile_rename, $makefile
or die "Can't rename '$makefile_rename' to '$makefile': $!";
End of Patch.
!>By the way is anyone else upset that on Unix you can escape
!>perl's globbing, e.g. in the perl source tree:
!>
!>unix_prompt% ./perl -e 'print join("< >",@ARGV),"\n"' perl.*
!>perl.c< >perl.h< >perl.h.orig< >perl.o
!>unix_prompt% ./perl -e 'print join("< >",@ARGV),"\n"' "perl.*"
!>perl.*
!
!I guess I don't know enough about what that means to miss it. Are
!you saying that double quotes around an argument prevents wildcard
!expansion?
It is an awkward example of one of the longstanding
BIG differences between Unix and VMS: on Unix the shell
will expand wildcards before passing argument to a
program or shell script. On VMS that pre-expansion never
happens. In order to make perl on VMS behave a bit more
like perl on unix Charles Bailey added Mark Pizzolato's
getredirection code to vms.c and it (specifically
mp_expand_wild_cards())always calls sys$search() on argv
arguments that contain the VMS wildcards:
"*", "%", "...".
On Unix you can ask your shell to not do the expansion
by \ escaping or "" or '' quoting the wildcard character
(there "*", or typically "?", though shells differ).
On VMS we wind up with the inability to give perl
programs strings that contain the "*" character if the
string matches a return from sys$search(). Hence on VMS
the only current way to tell perl not to expand
them is to delete or rename the matching files.
As I mentioned I have a modified perl 5.8.0 that
accepts -g like so:
$ perl -e "print join('< >',@ARGV)" perl.*
perl.c< >perl.exe< >perl.h< >perl.obj
$ perl -g -e "print join('< >',@ARGV)" perl.*
perl.*
But instead of introducing -g as a perlrun switch (which
becomes a noop on non VMS platforms) I'd rather smarten up
the workings of mp_expand_wild_cards() in vms.c.
By the way, part of the inspiration for this work was
a desire to write some perforce client management
utilities that accept the perforce wildcards unmodified,
namely: "*", "...", and "%" (interestingly enough).
Peter Prymmer