summaryrefslogtreecommitdiff
path: root/Master/tlpkg/etc
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/etc')
-rw-r--r--Master/tlpkg/etc/dev.rework-setup-programs-with-copy.patch245
1 files changed, 198 insertions, 47 deletions
diff --git a/Master/tlpkg/etc/dev.rework-setup-programs-with-copy.patch b/Master/tlpkg/etc/dev.rework-setup-programs-with-copy.patch
index 70b0d49e5f7..6d38d05a3e6 100644
--- a/Master/tlpkg/etc/dev.rework-setup-programs-with-copy.patch
+++ b/Master/tlpkg/etc/dev.rework-setup-programs-with-copy.patch
@@ -1,8 +1,73 @@
+Index: tlpkg/TeXLive/TLConfig.pm
+===================================================================
+--- tlpkg/TeXLive/TLConfig.pm (revision 11959)
++++ tlpkg/TeXLive/TLConfig.pm (working copy)
+@@ -28,6 +28,7 @@
+ $WinSpecialUpdatePackagesRegexp
+ @CriticalPackagesList
+ @AllowedConfigOptions
++ @PostMortemRemovals
+ );
+ @EXPORT = @EXPORT_OK;
+ }
+@@ -81,7 +82,9 @@
+ backupdir
+ autobackup
+ /;
+-
++
++our @PostMortemRemovals = ();
++
+ 1;
+
+
+@@ -165,6 +168,11 @@
+
+ A list of a config options that can be set in 00texlive-installation.config.
+
++=item C<@TeXLive::TLConfig::PostMortemRemovals>
++
++A list of files and directories we try to remove after install-tl or
++tlmgr has been terminated.
++
+ =back
+
+ =head1 SEE ALSO
Index: tlpkg/TeXLive/TLUtils.pm
===================================================================
---- tlpkg/TeXLive/TLUtils.pm (revision 11951)
+--- tlpkg/TeXLive/TLUtils.pm (revision 11959)
+++ tlpkg/TeXLive/TLUtils.pm (working copy)
-@@ -1265,31 +1265,44 @@
+@@ -1324,10 +1324,6 @@
+ If a program is not present in the TeX Live tree, we also check along
+ PATH (without the platform extension.)
+
+-Returns -1 if the architecture is not supported (i.e., there is no
+-C<lzmadec> binary for that arch present), 0 for programs that are
+-present but don't work, and 1 for success.
+-
+ =cut
+
+ sub setup_programs {
+@@ -1342,7 +1338,17 @@
+ $::progs{'tar'} = conv_to_w32_path("$bindir/tar.exe");
+ $::progs{'lzmadec'} = conv_to_w32_path("$bindir/lzma/lzmadec.win32.exe");
+ $::progs{'lzma'} = conv_to_w32_path("$bindir/lzma/lzma.exe");
+-
++ for my $prog ("lzmadec", "wget") {
++ my $opt = $prog eq "lzmadec" ? "--help" : "--version";
++ my $ret = system("$::progs{$prog} $opt > nul 2>&1"); # on windows
++ if ($ret != 0) {
++ warn "TeXLive::TLUtils::setup_programs failed"; # no newline
++ warn "$::progs{$prog} $opt failed (status $ret): $!\n";
++ warn "Output is:\n";
++ system ("$::progs{$prog} $opt");
++ return 0;
++ }
++ }
+ } else {
+ if (!defined($platform) || ($platform eq "")) {
+ # we assume that we run from the DVD, so we can call platform() and
+@@ -1352,51 +1358,102 @@
$::installerdir = "$bindir/../..";
$platform = platform();
}
@@ -13,41 +78,10 @@ Index: tlpkg/TeXLive/TLUtils.pm
- $::progs{'lzma'} = "$bindir/lzma/lzma.$platform"
- if -x "$bindir/lzma/lzma.$platform";
+ our $tmp;
-+ # TODO TODO TODO
-+ # it seems that the -x bit checking is not enough because perl
-+ # returns true on -x but still the noexec overrides that ...
-+ # we need to actually execute the file to see if it works
-+ sub setup_one {
-+ my ($p, $def) = @_;
-+ our $tmp;
-+ if (-r $def) {
-+ if (-x $def) {
-+ $::progs{$p} = $def;
-+ } else {
-+ # create tmp dir only when necessary
-+ chomp ($tmp = `mktemp -d`) unless defined($tmp);
-+ # probably we are running from DVD and want to copy it to
-+ # some temporary location
-+ copy($def, $tmp);
-+ my $bn = basename($def);
-+ $::progs{$p} = "$tmp/$bn";
-+ chmod(0755,$::progs{$p});
-+ # we do not check the return value of chmod, but check whether
-+ # the -x bit is now set, the only thing that counts
-+ if (! -x $::progs{$p}) {
-+ # hmm, something is going really bad, not even the copy is
-+ # executable. Fall back to normal path element
-+ $::progs{$p} = $p;
-+ }
-+ }
-+ } else {
-+ # hope that we can find in in the global PATH
-+ $::progs{$p} = $p;
-+ }
-+ }
-+ setup_one('wget', "$bindir/wget/wget.$platform");
-+ setup_one('lzmadec', "$bindir/lzma/lzmadec.$platform");
-+ setup_one('lzma', "$bindir/lzma/lzma.$platform");
++ setup_unix_one('wget', "$bindir/wget/wget.$platform", "--version");
++ setup_unix_one('lzmadec', "$bindir/lzma/lzmadec.$platform", "--help");
++ setup_unix_one('lzma', "$bindir/lzma/lzma.$platform", "notest");
++ push @TeXLive::TLConfig::PostMortemRemovals, $tmp;
}
- # Check for existence of lzmadec in our directory; if so, the present
@@ -60,28 +94,145 @@ Index: tlpkg/TeXLive/TLUtils.pm
- #
- (my $lzmadec = $::progs{'lzmadec'}) =~ s/^"(.*)"/$1/;
- my $found_lzmadec = -x $lzmadec;
--
++ return 1; # success
++}
+
- # should we do something like this?
- #if (-r $lzmadec && ! -x $lzmadec) {
- # warn "$lzmadec is not executable. You might want to mount the DVD without the 'noexec' option.";
- # return 0;
- #}
-
- # check if the programs are working, but do not test tar, we rely on
- # the system having a usable one. The main point is to check the
- # binaries we provide.
-@@ -1302,7 +1315,7 @@
- warn "$::progs{$prog} $opt failed (status $ret): $!\n";
- warn "Output is:\n";
- system ("$::progs{$prog} $opt");
+- # check if the programs are working, but do not test tar, we rely on
+- # the system having a usable one. The main point is to check the
+- # binaries we provide.
+- for my $prog ("lzmadec", "wget") {
+- my $opt = $prog eq "lzmadec" ? "--help" : "--version";
+- my $ret = system("$::progs{$prog} $opt >"
+- . (win32() ? "nul" : "/dev/null") . " 2>&1");
+- if ($ret != 0) {
+- warn "TeXLive::TLUtils::setup_programs failed"; # no newline
+- warn "$::progs{$prog} $opt failed (status $ret): $!\n";
+- warn "Output is:\n";
+- system ("$::progs{$prog} $opt");
- return $found_lzmadec ? 0 : -1;
-+ return 0;
++sub setup_unix_one {
++ my ($p, $def, $arg) = @_;
++ our $tmp;
++ my $test_fallback = 0;
++ if (-r $def) {
++ my $ready = 0;
++ if (-x $def) {
++ # checking only for the executable bit is not enough, we have
++ # to check for actualy "executability" since a "noexec" mount
++ # option may interfere, which is not taken into account by
++ # perl's -x test.
++ $::progs{$p} = $def;
++ if ($arg ne "notest") {
++ my $ret = system("$def $arg > /dev/null 2>&1" ); # we are on Unix
++ if ($ret == 0) {
++ $ready = 1;
++ debug("Using shipped $def for $p (tested).\n");
++ } else {
++ ddebug("Shipped $def has -x but cannot be executed.\n");
++ }
++ } else {
++ # do not test, just return
++ $ready = 1;
++ debug("Using shipped $def for $p (not tested).\n");
++ }
}
++ if (!$ready) {
++ # out of some reasons we couldn't execute the shipped program
++ # try to copy it to a temp directory and make it executable
++ #
++ # create tmp dir only when necessary
++ chomp ($tmp = `mktemp -d`) unless defined($tmp);
++ # probably we are running from DVD and want to copy it to
++ # some temporary location
++ copy($def, $tmp);
++ my $bn = basename($def);
++ $::progs{$p} = "$tmp/$bn";
++ push @TeXLive::TLConfig::PostMortemRemovals, $::progs{$p};
++ chmod(0755,$::progs{$p});
++ # we do not check the return value of chmod, but check whether
++ # the -x bit is now set, the only thing that counts
++ if (! -x $::progs{$p}) {
++ # hmm, something is going really bad, not even the copy is
++ # executable. Fall back to normal path element
++ $test_fallback = 1;
++ ddebug("Copied $p $::progs{$p} does not have -x bit, strange!\n");
++ } else {
++ # check again for executability
++ if ($arg ne "notest") {
++ my $ret = system("$::progs{$p} $arg > /dev/null 2>&1");
++ if ($ret == 0) {
++ # ok, the copy works
++ debug("Using copied $::progs{$p} for $p (tested).\n");
++ } else {
++ # even the copied prog is not executable, strange
++ $test_fallback = 1;
++ ddebug("Copied $p $::progs{$p} has x bit but not executable, strange!\n");
++ }
++ } else {
++ debug("Using copied $::progs{$p} for $p (not tested).\n");
++ }
++ }
++ }
++ } else {
++ # hope that we can find in in the global PATH
++ $test_fallback = 1;
+ }
+-
+- return 1; # success
++ if ($test_fallback) {
++ # all our playing around and copying did not succeed, try the
++ # fallback
++ $::progs{$p} = $p;
++ if ($arg ne "notest") {
++ my $ret = system("$p $arg > /dev/null 2>&1");
++ if ($ret == 0) {
++ debug("Using system $p (tested).\n");
++ } else {
++ tlwarn("TeXLive::TLUtils::setup_programs failed.\n");
++ tlwarn("Could not find a usable program for $p.\n");
++ return 0;
++ }
++ } else {
++ debug ("Using system $p (not tested).\n");
++ }
++ }
+ }
+
+-
+ =item C<download_file( $relpath, $destination [, $progs ] )>
+
+ Try to download the file given in C<$relpath> from C<$TeXLiveURL>
+Index: install-tl
+===================================================================
+--- install-tl (revision 11959)
++++ install-tl (working copy)
+@@ -1371,6 +1371,17 @@
+ } else {
+ print "No logfile\n";
}
++
++ # remove stuff that has been accumulated in @PostMortemRemoval
++ # do not check for any success in removal.
++ #
++ # first remove all not dirs, then try to remove dirs
++ for my $e (@TeXLive::TLConfig::PostMortemRemovals) {
++ unlink $e unless -d $e;
++ }
++ for my $e (@TeXLive::TLConfig::PostMortemRemovals) {
++ rmdir $e if -d $e;
++ }
+ }
+
Index: texmf/scripts/texlive/tlmgr.pl
===================================================================
---- texmf/scripts/texlive/tlmgr.pl (revision 11951)
+--- texmf/scripts/texlive/tlmgr.pl (revision 11959)
+++ texmf/scripts/texlive/tlmgr.pl (working copy)
@@ -2431,6 +2431,9 @@
#