diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/ExtUtils/MM_Unix.pm | 29 | ||||
-rw-r--r-- | lib/ExtUtils/typemap | 48 | ||||
-rw-r--r-- | lib/File/DosGlob.pm | 35 |
3 files changed, 48 insertions, 64 deletions
diff --git a/lib/ExtUtils/MM_Unix.pm b/lib/ExtUtils/MM_Unix.pm index 6703245562..888e5396dc 100644 --- a/lib/ExtUtils/MM_Unix.pm +++ b/lib/ExtUtils/MM_Unix.pm @@ -1155,6 +1155,7 @@ sub fixin { # stolen from the pink Camel book, more or less my($shb) = ""; if ($interpreter) { print STDOUT "Changing sharpbang in $file to $interpreter" if $Verbose; + # this is probably value-free on DOSISH platforms if ($does_shbang) { $shb .= "$Config{'sharpbang'}$interpreter"; $shb .= ' ' . $arg if defined $arg; @@ -1163,18 +1164,14 @@ sub fixin { # stolen from the pink Camel book, more or less $shb .= qq{ eval 'exec $interpreter $arg -S \$0 \${1+"\$\@"}' if 0; # not running under some shell -}; +} unless $Is_Win32; # this won't work on win32, so don't } else { warn "Can't find $cmd in PATH, $file unchanged" if $Verbose; next; } - unless ( rename($file, "$file.bak") ) { - warn "Can't modify $file"; - next; - } - unless ( open(FIXOUT,">$file") ) { + unless ( open(FIXOUT,">$file.new") ) { warn "Can't create new $file: $!\n"; next; } @@ -1188,6 +1185,19 @@ eval 'exec $interpreter $arg -S \$0 \${1+"\$\@"}' print FIXOUT $shb, <FIXIN>; close FIXIN; close FIXOUT; + # can't rename open files on some DOSISH platforms + unless ( rename($file, "$file.bak") ) { + warn "Can't rename $file to $file.bak: $!"; + next; + } + unless ( rename("$file.new", $file) ) { + warn "Can't rename $file.new to $file: $!"; + unless ( rename("$file.bak", $file) ) { + warn "Can't rename $file.bak back to $file either: $!"; + warn "Leaving $file renamed as $file.bak\n"; + } + next; + } unlink "$file.bak"; } continue { chmod 0755, $file or die "Can't reset permissions for $file: $!\n"; @@ -1997,9 +2007,12 @@ sub installbin { push(@m, qq{ EXE_FILES = @{$self->{EXE_FILES}} -FIXIN = \$(PERL) -I\$(PERL_ARCHLIB) -I\$(PERL_LIB) -MExtUtils::MakeMaker \\ +} . ($Is_Win32 + ? q{FIXIN = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \ + -e "system qq[pl2bat.bat ].shift" +} : q{FIXIN = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::MakeMaker \ -e "MY->fixin(shift)" - +}).qq{ all :: @to $self->{NOECHO}\$(NOOP) diff --git a/lib/ExtUtils/typemap b/lib/ExtUtils/typemap index 20cc96f0b5..430c28ad3d 100644 --- a/lib/ExtUtils/typemap +++ b/lib/ExtUtils/typemap @@ -190,44 +190,44 @@ T_HVREF T_CVREF $arg = newRV((SV*)$var); T_IV - sv_setiv($arg, (IV)$var); + SvSetMagicIV($arg, (IV)$var); T_INT - sv_setiv($arg, (IV)$var); + SvSetMagicIV($arg, (IV)$var); T_SYSRET if ($var != -1) { if ($var == 0) - sv_setpvn($arg, "0 but true", 10); + SvSetMagicPVN($arg, "0 but true", 10); else - sv_setiv($arg, (IV)$var); + SvSetMagicIV($arg, (IV)$var); } T_ENUM - sv_setiv($arg, (IV)$var); + SvSetMagicIV($arg, (IV)$var); T_BOOL $arg = boolSV($var); T_U_INT - sv_setiv($arg, (IV)$var); + SvSetMagicIV($arg, (IV)$var); T_SHORT - sv_setiv($arg, (IV)$var); + SvSetMagicIV($arg, (IV)$var); T_U_SHORT - sv_setiv($arg, (IV)$var); + SvSetMagicIV($arg, (IV)$var); T_LONG - sv_setiv($arg, (IV)$var); + SvSetMagicIV($arg, (IV)$var); T_U_LONG - sv_setiv($arg, (IV)$var); + SvSetMagicIV($arg, (IV)$var); T_CHAR - sv_setpvn($arg, (char *)&$var, 1); + SvSetMagicPVN($arg, (char *)&$var, 1); T_U_CHAR - sv_setiv($arg, (IV)$var); + SvSetMagicIV($arg, (IV)$var); T_FLOAT - sv_setnv($arg, (double)$var); + SvSetMagicNV($arg, (double)$var); T_NV - sv_setnv($arg, (double)$var); + SvSetMagicNV($arg, (double)$var); T_DOUBLE - sv_setnv($arg, (double)$var); + SvSetMagicNV($arg, (double)$var); T_PV - sv_setpv((SV*)$arg, $var); + SvSetMagicPV((SV*)$arg, $var); T_PTR - sv_setiv($arg, (IV)$var); + SvSetMagicIV($arg, (IV)$var); T_PTRREF sv_setref_pv($arg, Nullch, (void*)$var); T_REF_IV_REF @@ -244,17 +244,17 @@ T_REFREF T_REFOBJ NOT IMPLEMENTED T_OPAQUE - sv_setpvn($arg, (char *)&$var, sizeof($var)); + SvSetMagicPVN($arg, (char *)&$var, sizeof($var)); T_OPAQUEPTR - sv_setpvn($arg, (char *)$var, sizeof(*$var)), XFree((char *)$var); + SvSetMagicPVN($arg, (char *)$var, sizeof(*$var)), XFree((char *)$var); T_PACKED XS_pack_$ntype($arg, $var); T_PACKEDARRAY XS_pack_$ntype($arg, $var, count_$ntype); T_DATAUNIT - sv_setpvn($arg, $var.chp(), $var.size()); + SvSetMagicPVN($arg, $var.chp(), $var.size()); T_CALLBACK - sv_setpvn($arg, $var.context.value().chp(), + SvSetMagicPVN($arg, $var.context.value().chp(), $var.context.value().size()); T_ARRAY ST_EXTEND($var.size); @@ -267,7 +267,7 @@ T_IN { GV *gv = newGVgen("$Package"); if ( do_open(gv, "<&", 2, FALSE, 0, 0, $var) ) - sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))); + SvSetMagicSV($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))); else $arg = &sv_undef; } @@ -275,7 +275,7 @@ T_INOUT { GV *gv = newGVgen("$Package"); if ( do_open(gv, "+<&", 3, FALSE, 0, 0, $var) ) - sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))); + SvSetMagicSV($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))); else $arg = &sv_undef; } @@ -283,7 +283,7 @@ T_OUT { GV *gv = newGVgen("$Package"); if ( do_open(gv, "+>&", 3, FALSE, 0, 0, $var) ) - sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))); + SvSetMagicSV($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1))); else $arg = &sv_undef; } diff --git a/lib/File/DosGlob.pm b/lib/File/DosGlob.pm index 4597c71564..a27dad9030 100644 --- a/lib/File/DosGlob.pm +++ b/lib/File/DosGlob.pm @@ -6,21 +6,6 @@ package File::DosGlob; -unless (caller) { - $| = 1; - while (@ARGV) { - # - # We have to do this one by one for compatibility reasons. - # If an arg doesn't match anything, we are supposed to return - # the original arg. I know, it stinks, eh? - # - my $arg = shift; - my @m = doglob(1,$arg); - print (@m ? join("\0", sort @m) : $arg); - print "\0" if @ARGV; - } -} - sub doglob { my $cond = shift; my @retval = (); @@ -159,8 +144,6 @@ __END__ File::DosGlob - DOS like globbing and then some -perlglob.bat - a more capable perlglob.exe replacement - =head1 SYNOPSIS require 5.004; @@ -173,14 +156,11 @@ perlglob.bat - a more capable perlglob.exe replacement # from the command line (overrides only in main::) > perl -MFile::DosGlob=glob -e "print <../pe*/*p?>" - - > perlglob ../pe*/*p? =head1 DESCRIPTION A module that implements DOS-like globbing with a few enhancements. -This file is also a portable replacement for perlglob.exe. It -is largely compatible with perlglob.exe (the M$ setargv.obj +It is largely compatible with perlglob.exe (the M$ setargv.obj version) in all but one respect--it understands wildcards in directory components. @@ -191,17 +171,6 @@ backslashes and forward slashes are both accepted, and preserved. You may have to double the backslashes if you are putting them in literally, due to double-quotish parsing of the pattern by perl. -When invoked as a program, it will print null-separated filenames -to standard output. - -While one may replace perlglob.exe with this, usage by overriding -CORE::glob via importation should be much more efficient, because -it avoids launching a separate process, and is therefore strongly -recommended. Note that it is currently possible to override -builtins like glob() only on a per-package basis, not "globally". -Thus, every namespace that wants to override glob() must explicitly -request the override. See L<perlsub>. - Extending it to csh patterns is left as an exercise to the reader. =head1 EXPORTS (by request only) @@ -246,5 +215,7 @@ Initial version (GSAR 20-FEB-97) perl +perlglob.bat + =cut |