develooper Front page | perl.makemaker | Postings from January 2006

Re: [PATCH] Re: replacing "inuse" Win files (was Re: Help with aCwd.pm build error)

Thread Previous | Thread Next
From:
Randy W. Sims
Date:
January 30, 2006 15:58
Subject:
Re: [PATCH] Re: replacing "inuse" Win files (was Re: Help with aCwd.pm build error)
Message ID:
43DEA818.8020603@thepierianspring.org

Thanks for working on this Yves...

demerphq wrote:
> ------------------------------------------------------------------------
> 
> diff -wurd \.cpan\build\ExtUtils-MakeMaker-6.30/lib/ExtUtils/Install.pm ExtUtils-MakeMaker-6.30_patched/lib/ExtUtils/Install.pm
> --- \.cpan\build\ExtUtils-MakeMaker-6.30/lib/ExtUtils/Install.pm	2005-03-22 05:30:24.000000000 +0100
> +++ ExtUtils-MakeMaker-6.30_patched/lib/ExtUtils/Install.pm	2006-01-30 23:58:27.013626600 +0100
> @@ -91,6 +91,7 @@
>      use File::Path qw(mkpath);
>      use File::Compare qw(compare);
> 
> +    my $win32=!$nonono && $^O eq 'MSWin32';
>      my(%from_to) = %$from_to;
>      my(%pack, $dir, $warn_permissions);
>      my($packlist) = ExtUtils::Packlist->new();
> @@ -170,7 +171,28 @@
>  	    }
> 
>  	    if ($diff){
> -		if (-f $targetfile){
> +    	        if ($win32 && -f $targetfile && !unlink $targetfile) {
> +    	            print "Can't remove existing '$targetfile': $!\n";
> +    	            require Win32API::File;

Note that this module is not always available 0n Win32; it's not in 
core. It does seem to be present ActiveState distros back to 5.005.

> +    	            my $tmp= "AAA";
> +    	            ++$tmp while -e "$targetfile.$tmp";
> +    	            $tmp= "$targetfile.$tmp";
> +    	            if ( rename $targetfile, $tmp ) {
> +    	                print "However it has been renamed as '$tmp' which ".
> +    	                      "will be removed at next reboot.\n";
> +    	                Win32API::File::MoveFileEx( $tmp, [],
> +    	                    Win32API::File::MOVEFILE_DELAY_UNTIL_REBOOT() )
> +    	                    or die "MoveFileEx/Delete '$tmp' failed: $^E\n";
> +    	            } else {
> +    	                print "Installation cannot be completed until you reboot.\n",
> +    	                      "Until then using '$tmp' as the install filename.\n";
> +    	                Win32API::File::MoveFileEx( $tmp, $targetfile,
> +    	                    Win32API::File::MOVEFILE_REPLACE_EXISTING() |
> +    	                    Win32API::File::MOVEFILE_DELAY_UNTIL_REBOOT() )
> +    	                    or die "MoveFileEx/Replace '$tmp' failed: $^E\n";
> +    	                $targetfile= $tmp;
> +    	            }
> +    	        } elsif (-f $targetfile) {
>  		    forceunlink($targetfile) unless $nonono;
>  		} else {
>  		    mkpath($targetdir,0,0755) unless $nonono;
> 
> 


Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About