This is the first of my current series of patches to the recent 5.1.x.

Thanks,
Ilya

-       Replaces $(RM) [which is not defined any more] by $(RM_F)

-       Remove .dll on non-successful build (the linker marks the failed
        .dll as invalid in the loader header instead of removing the file).

-       fixin() was assuming that rename() can overwrite its target.

--- ./lib/ExtUtils/MM_OS2.pm-pre        Fri Jul 19 16:49:46 2002
+++ ./lib/ExtUtils/MM_OS2.pm    Wed Mar 26 16:07:08 2003
@@ -38,7 +38,7 @@ sub dist {
     my($self, %attribs) = @_;
 
     $attribs{TO_UNIX} ||= sprintf <<'MAKE_TEXT', $self->{NOECHO};
-%s$(TEST_F) tmp.zip && $(RM) tmp.zip; $(ZIP) -ll -mr tmp.zip $(DISTVNAME) && unzip -o 
tmp.zip && $(RM) tmp.zip
+%s$(TEST_F) tmp.zip && $(RM_F) tmp.zip; $(ZIP) -ll -mr tmp.zip $(DISTVNAME) && unzip 
-o tmp.zip && $(RM_F) tmp.zip
 MAKE_TEXT
 
     return $self->SUPER::dist(%attribs);
--- ./lib/ExtUtils/MM_Unix.pm-pre       Sun Nov  3 22:34:38 2002
+++ ./lib/ExtUtils/MM_Unix.pm   Thu Mar 27 01:55:14 2003
@@ -976,12 +976,15 @@ sub dynamic_lib {
     $armaybe = 'ar' if ($^O eq 'dec_osf' and $armaybe eq ':');
     my(@m);
     my $ld_opt = $Is_OS2 ? '$(OPTIMIZE) ' : '';        # Useful on other systems too?
+    # Linker doesn't remove file on failure, only marks EXE header as invalid
+    my $ld_fix = $Is_OS2 ? '|| ( $(RM_F) $@ && sh -c false )' : '';    # Useful on 
other systems too?
     push(@m,'
 # This section creates the dynamically loadable $(INST_DYNAMIC)
 # from $(OBJECT) and possibly $(MYEXTLIB).
 ARMAYBE = '.$armaybe.'
 OTHERLDFLAGS = '.$ld_opt.$otherldflags.'
 INST_DYNAMIC_DEP = '.$inst_dynamic_dep.'
+INST_DYNAMIC_FIX = '.$ld_fix.'
 
 $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)/.exists 
$(EXPORT_LIST) $(PERL_ARCHIVE) $(PERL_ARCHIVE_AFTER) $(INST_DYNAMIC_DEP)
 ');
@@ -1022,7 +1025,7 @@ $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $
 
     push(@m,
 '      LD_RUN_PATH="$(LD_RUN_PATH)" $(LD) '.$ldrun.' $(LDDLFLAGS) '.$ldfrom.
-' $(OTHERLDFLAGS) -o $@ $(MYEXTLIB) $(PERL_ARCHIVE) '.$libs.' $(PERL_ARCHIVE_AFTER) 
$(EXPORT_LIST)');
+' $(OTHERLDFLAGS) -o $@ $(MYEXTLIB) $(PERL_ARCHIVE) '.$libs.' $(PERL_ARCHIVE_AFTER) 
$(EXPORT_LIST) $(INST_DYNAMIC_FIX)');
     push @m, '
        $(CHMOD) $(PERM_RWX) $@
 ';
@@ -1198,6 +1201,8 @@ eval 'exec $interpreter $arg -S \$0 \${1
        close FIXIN;
        close FIXOUT;
 
+       chmod 0666, "$file.bak";
+       unlink "$file.bak";
        unless ( rename($file, "$file.bak") ) { 
            warn "Can't rename $file to $file.bak: $!";
            next;

Reply via email to