diff options
-rwxr-xr-x | Master/install-tl | 8 | ||||
-rw-r--r-- | Master/tlpkg/TeXLive/TLUtils.pm | 27 |
2 files changed, 31 insertions, 4 deletions
diff --git a/Master/install-tl b/Master/install-tl index c609051e6ae..5aef80d493c 100755 --- a/Master/install-tl +++ b/Master/install-tl @@ -995,8 +995,12 @@ sub set_texlive_default_dirs { if (win32) { my $prog = getenv('ProgramFiles'); $tex_prefix ||= $prog . '/texlive'; - # if default is not writable, user has to pick another place manually - # USERPROFILE isn't an option, it is copied around on roaming setups + if (!TeXLive::TLUtils::texdir_check("$tex_prefix/$texlive_release")) { + # the default location is not writable, switch to C:\texlive + $tex_prefix = "c:/texlive"; + } + # we don't use USERPROFILE here because that will be copied back and + # forth on roaming profiles } else { $tex_prefix||='/usr/local/texlive'; } diff --git a/Master/tlpkg/TeXLive/TLUtils.pm b/Master/tlpkg/TeXLive/TLUtils.pm index ba48ed0586e..7e158279d46 100644 --- a/Master/tlpkg/TeXLive/TLUtils.pm +++ b/Master/tlpkg/TeXLive/TLUtils.pm @@ -51,6 +51,7 @@ C<TeXLive::TLUtils> -- utilities used in the TeX Live infrastructure TeXLive::TLUtils::basename($path); TeXLive::TLUtils::dirname_and_basename($path); TeXLive::TLUtils::dir_writable($path); + TeXLive::TLUtils::dir_creatable($path); TeXLive::TLUtils::mkdirhier($path); TeXLive::TLUtils::rmtree($root, $verbose, $safe); TeXLive::TLUtils::copy($file, $target_dir); @@ -113,6 +114,7 @@ BEGIN { &basename &dirname_and_basename &dir_writable + &dir_creatable &mkdirhier &rmtree © @@ -522,6 +524,27 @@ sub dirname_and_basename { } +=item C<dir_creatable($path)> + +Tests whether its argument is a directory where we can create a directory. + +=cut + +sub dir_creatable { + $path=shift; + return 0 unless -d $path; + $path =~ s!\\!/!g if win32; + $path =~ s!/$!!g; + my $i = 0; + while (-e $path . "/" . $i) { $i++; } + my $d = $path."/".$i; + return 0 unless mkdir $d; + return 0 unless -d $d; + rmdir $d; + return 1; +} + + =item C<dir_writable($path)> Tests whether its argument is writable by trying to write to @@ -2592,8 +2615,8 @@ sub texdir_check { my ($texdir) = shift; # PATH/texlive/2008 my $texdirparent = dirname($texdir); # PATH/texlive my $texdirpparent = dirname($texdirparent); # PATH - if ( (dir_writable($texdirpparent)) || - ( (-d $texdirparent) && (dir_writable($texdirparent)) ) || + if ( (dir_creatable($texdirpparent)) || + ( (-d $texdirparent) && (dir_creatable($texdirparent)) ) || ( (-d $texdir) && (dir_writable($texdir)) ) ) { return 1; } |