summaryrefslogtreecommitdiff
path: root/systems/texlive/tlnet/tlpkg/TeXLive
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2024-02-02 03:05:29 +0000
committerNorbert Preining <norbert@preining.info>2024-02-02 03:05:29 +0000
commitb5a938a222c59addea5ca0a22cd53b2bbf66e1fa (patch)
treecd1c6770b784ca5783c143fee1031b2ab5fc240c /systems/texlive/tlnet/tlpkg/TeXLive
parenta494a509f3f4a13a450c898488155f7aa5353bd3 (diff)
CTAN sync 202402020305
Diffstat (limited to 'systems/texlive/tlnet/tlpkg/TeXLive')
-rw-r--r--systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm6
-rw-r--r--systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm164
-rw-r--r--systems/texlive/tlnet/tlpkg/TeXLive/TLUtils.pm65
-rw-r--r--systems/texlive/tlnet/tlpkg/TeXLive/TLWinGoo.pm6
4 files changed, 128 insertions, 113 deletions
diff --git a/systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm b/systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
index f424d7e6a2..f540fabaca 100644
--- a/systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
+++ b/systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
@@ -1,6 +1,6 @@
-# $Id: TLDownload.pm 69328 2024-01-07 11:11:02Z preining $
+# $Id: TLDownload.pm 69646 2024-01-31 18:17:20Z karl $
# TeXLive::TLDownload.pm - module for abstracting the download modes
-# Copyright 2009-2021 Norbert Preining
+# Copyright 2009-2024 Norbert Preining
# This file is licensed under the GNU General Public License version 2
# or any later version.
@@ -11,7 +11,7 @@ package TeXLive::TLDownload;
use TeXLive::TLUtils;
use TeXLive::TLConfig;
-my $svnrev = '$Revision: 69328 $';
+my $svnrev = '$Revision: 69646 $';
my $_modulerevision;
if ($svnrev =~ m/: ([0-9]+) /) {
$_modulerevision = $1;
diff --git a/systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm b/systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
index b376aa0ed7..4ab6f87426 100644
--- a/systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
+++ b/systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
@@ -1,4 +1,4 @@
-# $Id: TLPDB.pm 68562 2023-10-16 17:17:01Z karl $
+# $Id: TLPDB.pm 69653 2024-01-31 21:52:46Z karl $
# TeXLive::TLPDB.pm - tlpdb plain text database files.
# Copyright 2007-2023 Norbert Preining
# This file is licensed under the GNU General Public License version 2
@@ -7,7 +7,7 @@
use strict; use warnings;
package TeXLive::TLPDB;
-my $svnrev = '$Revision: 68562 $';
+my $svnrev = '$Revision: 69653 $';
my $_modulerevision = ($svnrev =~ m/: ([0-9]+) /) ? $1 : "unknown";
sub module_revision { return $_modulerevision; }
@@ -1658,42 +1658,11 @@ sub install_package_files {
# place from where files should be installed
if (!_install_data ($tmpdir, \@installfiles, $reloc, \@installfiles,
$self)) {
- tlwarn("TLPDB::install_package_files: couldn't install_data files: "
+ tlwarn("TLPDB::install_package_files: couldn't _install_data files: "
. "@installfiles\n");
next;
}
- if ($reloc) {
- if ($self->setting("usertree")) {
- $tlpobj->cancel_reloc_prefix;
- } else {
- $tlpobj->replace_reloc_prefix;
- }
- $tlpobj->relocated(0);
- }
- my $tlpod = $self->root . "/tlpkg/tlpobj";
- mkdirhier( $tlpod );
- open(TMP,">$tlpod/".$tlpobj->name.".tlpobj") or
- die("Cannot open tlpobj file for ".$tlpobj->name);
- $tlpobj->writeout(\*TMP);
- close(TMP);
- $self->add_tlpobj($tlpobj);
- $self->save;
- TeXLive::TLUtils::announce_execute_actions("enable", $tlpobj);
- # do the postinstallation actions
- #
- # Run the post installation code in the postaction tlpsrc entries
- # in case we are on w32 and the admin did install for himself only
- # we switch off admin mode
- if (wndws() && admin() && !$self->option("w32_multi_user")) {
- non_admin();
- }
- # for now desktop_integration maps to both installation
- # of desktop shortcuts and menu items, but we can split them later
- &TeXLive::TLUtils::do_postaction("install", $tlpobj,
- $self->option("file_assocs"),
- $self->option("desktop_integration"),
- $self->option("desktop_integration"),
- $self->option("post_code"));
+ _post_install_package ($self, $tlpobj);
# remember that we installed this package correctly
$ret++;
@@ -1701,12 +1670,14 @@ sub install_package_files {
return $ret;
}
-
+
=pod
=item C<< $tlpdb->install_package($pkg, $dest_tlpdb [, $tag]) >>
-Installs the package $pkg into $dest_tlpdb.
+Installs the package $pkg into $dest_tlpdb. Returns a reference to the
+package, or undef if failure.
+
If C<$tag> is present and the tlpdb is virtual, tries to install $pkg
from the repository tagged with $tag.
@@ -1721,7 +1692,7 @@ sub install_package {
} else {
tlwarn("TLPDB::install_package: package $pkg not found"
. " in repository $tag\n");
- return;
+ return undef;
}
} else {
my ($maxtag, $maxrev, $maxtlp, $maxtlpdb)
@@ -1735,7 +1706,7 @@ sub install_package {
}
return $self->not_virtual_install_package($pkg, $totlpdb);
}
- return;
+ return undef;
}
sub not_virtual_install_package {
@@ -1882,55 +1853,73 @@ sub not_virtual_install_package {
if (!$real_opt_doc) {
$tlpobj->clear_docfiles;
}
- # if a package is relocatable we have to cancel the reloc prefix
- # and unset the relocated setting
- # before we save it to the local tlpdb
- if ($tlpobj->relocated) {
- if ($totlpdb->setting("usertree")) {
- $tlpobj->cancel_reloc_prefix;
- } else {
- $tlpobj->replace_reloc_prefix;
- }
- $tlpobj->relocated(0);
- }
- # we have to write out the tlpobj file since it is contained in the
- # archives (.tar.xz) but at DVD install time we don't have them
- my $tlpod = $totlpdb->root . "/tlpkg/tlpobj";
- mkdirhier($tlpod);
- my $count = 0;
- my $tlpobj_file = ">$tlpod/" . $tlpobj->name . ".tlpobj";
- until (open(TMP, $tlpobj_file)) {
- # The open might fail for no good reason on Windows.
- # Try again for a while, but not forever.
- if ($count++ == 100) { die "$0: open($tlpobj_file) failed: $!"; }
- select (undef, undef, undef, .1); # sleep briefly
- }
- $tlpobj->writeout(\*TMP);
- close(TMP);
- $totlpdb->add_tlpobj($tlpobj);
- $totlpdb->save;
- # compute the return value
- TeXLive::TLUtils::announce_execute_actions("enable", $tlpobj);
- # do the postinstallation actions
- #
- # Run the post installation code in the postaction tlpsrc entries
- # in case we are on w32 and the admin did install for himself only
- # we switch off admin mode
- if (wndws() && admin() && !$totlpdb->option("w32_multi_user")) {
- non_admin();
- }
- # for now desktop_integration maps to both installation
- # of desktop shortcuts and menu items, but we can split them later
- &TeXLive::TLUtils::do_postaction("install", $tlpobj,
- $totlpdb->option("file_assocs"),
- $totlpdb->option("desktop_integration"),
- $totlpdb->option("desktop_integration"),
- $totlpdb->option("post_code"));
+ _post_install_pkg ($totlpdb, $tlpobj);
}
return 1;
}
-#
+# In TLPDB, Do post-install stuff for TLPOBJ:
+# - cancel relocation stuff
+# - write the tlpobj
+# - handle post-installation actions
+#
+sub _post_install_pkg {
+ my ($tlpdb,$tlpobj) = @_;
+
+ # if a package is relocatable we have to cancel the reloc prefix
+ # and unset the relocated setting
+ # before we save it to the local tlpdb
+ if ($tlpobj->relocated) {
+ if ($tlpdb->setting("usertree")) {
+ $tlpobj->cancel_reloc_prefix;
+ } else {
+ $tlpobj->replace_reloc_prefix;
+ }
+ $tlpobj->relocated(0);
+ }
+ # we have to write out the tlpobj file since it is contained in the
+ # archives (.tar.xz) but at DVD install time we don't have them
+ my $tlpod = $tlpdb->root . "/tlpkg/tlpobj";
+ mkdirhier($tlpod);
+ my $count = 0;
+ my $tlpobj_file = ">$tlpod/" . $tlpobj->name . ".tlpobj";
+ until (open(TMP, $tlpobj_file)) {
+ # The open might fail for no good reason on Windows.
+ # Try again for a while, but not forever.
+ if ($count++ == 100) { die "$0: open($tlpobj_file) failed: $!"; }
+ select(undef, undef, undef, .1); # sleep briefly
+ }
+ $tlpobj->writeout(\*TMP);
+ close(TMP);
+ $tlpdb->add_tlpobj($tlpobj);
+ $tlpdb->save;
+ #
+ # do postinstallation actions.
+ #
+ # Remember to do any postactions, including recording whether files
+ # have changed.
+ TeXLive::TLUtils::announce_execute_actions("enable", $tlpobj);
+ #
+ # If this was context, remember to do its cache.
+ if ($tlpobj->name eq "context") {
+ TeXLive::TLUtils::announce_execute_actions("context-cache", $tlpobj);
+ }
+ #
+ # Run the post installation code in the postaction tlpsrc entries
+ # in case we are on w32 and the admin did install for himself only
+ # we switch off admin mode
+ if (wndws() && admin() && !$tlpdb->option("w32_multi_user")) {
+ non_admin();
+ }
+ # for now desktop_integration maps to both installation
+ # of desktop shortcuts and menu items, but we can split them if need be.
+ &TeXLive::TLUtils::do_postaction("install", $tlpobj,
+ $tlpdb->option("file_assocs"),
+ $tlpdb->option("desktop_integration"),
+ $tlpdb->option("desktop_integration"),
+ $tlpdb->option("post_code"));
+}
+
# _install_data
# actually does the installation work
# returns 1 on success and 0 on error
@@ -1939,7 +1928,7 @@ sub not_virtual_install_package {
# otherwise it is a tlpdb from where to install
#
sub _install_data {
- my ($self, $what, $reloc, $filelistref, $totlpdb, $whatsize, $whatcheck) = @_;
+ my ($self, $what, $reloc, $filelistref, $totlpdb, $whatsize, $whatcheck) =@_;
my $target = $totlpdb->root;
my $tempdir = TeXLive::TLUtils::tl_tmpdir();
@@ -1997,6 +1986,7 @@ sub _install_data {
}
}
+
=pod
=item << $tlpdb->remove_package($pkg, %options) >>
@@ -2162,7 +2152,7 @@ sub remove_package {
# files are already removed.
# Again, desktop integration maps to desktop and menu links
if (!$opts{'nopostinstall'}) {
- debug(" TLPDB::remove_package: running remove postinstall");
+ debug(" TLPDB::remove_package: running remove postinstall\n");
&TeXLive::TLUtils::do_postaction("remove", $tlp,
$localtlpdb->option("file_assocs"),
$localtlpdb->option("desktop_integration"),
@@ -2558,7 +2548,7 @@ The purpose of virtual databases is to collect several data sources
and present them in one way. The normal functions will always return
the best candidate for the set of functions.
-More docs to be written someday, maybe.
+More docs to be written if there is any demand.
=over 4
diff --git a/systems/texlive/tlnet/tlpkg/TeXLive/TLUtils.pm b/systems/texlive/tlnet/tlpkg/TeXLive/TLUtils.pm
index a5ccca07ca..49fd0c8ee2 100644
--- a/systems/texlive/tlnet/tlpkg/TeXLive/TLUtils.pm
+++ b/systems/texlive/tlnet/tlpkg/TeXLive/TLUtils.pm
@@ -1,6 +1,6 @@
-# $Id: TLUtils.pm 69614 2024-01-27 22:48:16Z karl $
+# $Id: TLUtils.pm 69653 2024-01-31 21:52:46Z karl $
# TeXLive::TLUtils.pm - the inevitable utilities for TeX Live.
-# Copyright 2007-2023 Norbert Preining, Reinhard Kotucha
+# Copyright 2007-2024 Norbert Preining, Reinhard Kotucha
# This file is licensed under the GNU General Public License version 2
# or any later version.
@@ -8,7 +8,7 @@ use strict; use warnings;
package TeXLive::TLUtils;
-my $svnrev = '$Revision: 69614 $';
+my $svnrev = '$Revision: 69653 $';
my $_modulerevision = ($svnrev =~ m/: ([0-9]+) /) ? $1 : "unknown";
sub module_revision { return $_modulerevision; }
@@ -147,7 +147,8 @@ our $PERL_SINGLE_QUOTE; # we steal code from Text::ParseWords
# We use myriad global and package-global variables, unfortunately.
# To avoid "used only once" warnings, we must use the variable names again.
#
-# This ugly repetition in the BEGIN block works with all Perl versions.
+# This ugly repetition in the BEGIN block works with all Perl versions;
+# cleaner/fancier ways of handling this don't.
BEGIN {
$::LOGFILE = $::LOGFILE;
$::LOGFILENAME = $::LOGFILENAME;
@@ -164,6 +165,7 @@ BEGIN {
$::machinereadable = $::machinereadable;
$::no_execute_actions = $::no_execute_actions;
$::regenerate_all_formats = $::regenerate_all_formats;
+ $::context_cache_update_needed = $::context_cache_update_needed;
#
$JSON::false = $JSON::false;
$JSON::true = $JSON::true;
@@ -818,6 +820,8 @@ the exit status of C<$cmd>. Environment variable overrides cannot be
passed. (This is used for running special post-installation commands in
install-tl and tlmgr.)
+The C<info> function is called to report what is happening.
+
=cut
sub run_cmd_with_log {
@@ -830,9 +834,9 @@ sub run_cmd_with_log {
} else {
info ("failed\n");
tlwarn ("$0: $cmd failed (status $ret): $!\n");
- $ret = 1; # be sure we don't overflow the sum on anything crazy
+ $ret = 1;
}
- &$logfn ($out);
+ &$logfn ($out); # log the output
return $ret;
} # run_cmd_with_log
@@ -2275,11 +2279,11 @@ sub update_context_cache {
my $errcount = 0;
- # The story here is that in 2023, the lmtx binary for x86_64-linux was
- # too new to run on the system where we build TL. (luametatex:
- # /lib64/libm.so.6: version `GLIBC_2.23' not found) So we have to try
- # running it to see if it is available, not just test for the
- # program's existence. And since it exits nonzero given no args, we
+ # The story here is that in 2023, the provided lmtx binary for
+ # x86_64-linux was too new to run on the system where we build TL.
+ # (luametatex: /lib64/libm.so.6: version `GLIBC_2.23' not found)
+ # So we have to try running the binary to see if it works, not just
+ # test for its existence. And since it exits nonzero given no args, we
# have to specify --version. Hope it keeps working like that ...
#
# If lmtx is not runnable, don't consider that an error, since nothing
@@ -2294,6 +2298,10 @@ sub update_context_cache {
$errcount += &$run_postinst_cmd("context --luatex --generate");
#
# If context succeeded too, try luajittex. Missing on some platforms.
+ # Although we build luajittex normally, instead of importing the
+ # binary, testing for file existence should suffice, we may as
+ # well test execution since it's just as easy.
+ #
if ($errcount == 0) {
my $luajittex = "$bindir/luajittex$progext";
if (TeXLive::TLUtils::system_ok("$luajittex --version")) {
@@ -2307,19 +2315,29 @@ sub update_context_cache {
return $errcount;
}
-=item C<announce_execute_actions($how, $tlpobj, $what)>
+=item C<announce_execute_actions($how, [$tlpobj[, $what]])>
+
+Announces (records) that the actions, usually given in C<$tlpobj> (but
+can be omitted for global actions), should be executed after all
+packages have been unpacked. The optional C<$what> depends on the
+action, e.g., a parse_AddFormat_line reference for formats; not sure if
+it's used for anything else.
-Announces that the actions given in C<$tlpobj> should be executed
-after all packages have been unpacked. C<$what> provides
-additional information.
+This is called for every package that gets installed.
=cut
sub announce_execute_actions {
- my ($type, $tlp, $what) = @_;
- # do simply return immediately if execute actions are suppressed
+ my ($type,$tlp,$what) = @_;
+ # return immediately if execute actions are suppressed
return if $::no_execute_actions;
-
+
+ # since we're called for every package with "enable",
+ # it's not helpful to report that again.
+ if ($type ne "enable") {
+ my $forpkg = $tlp ? ("for " . $tlp->name) : "no package";
+ debug("announce_execute_actions: given $type ($forpkg)\n");
+ }
if (defined($type) && ($type eq "regenerate-formats")) {
$::regenerate_all_formats = 1;
return;
@@ -2328,6 +2346,10 @@ sub announce_execute_actions {
$::files_changed = 1;
return;
}
+ if (defined($type) && ($type eq "context-cache")) {
+ $::context_cache_update_needed = 1;
+ return;
+ }
if (defined($type) && ($type eq "rebuild-format")) {
# rebuild-format must feed in a hashref of a parse_AddFormat_line data
# the $tlp argument is not used
@@ -2337,17 +2359,18 @@ sub announce_execute_actions {
if (!defined($type) || (($type ne "enable") && ($type ne "disable"))) {
die "announce_execute_actions: enable or disable, not type $type";
}
- my (@maps, @formats, @dats);
if ($tlp->runfiles || $tlp->srcfiles || $tlp->docfiles) {
$::files_changed = 1;
}
- $what = "map format hyphen" if (!defined($what));
+ #
+ $what = "map format hyphen" if (!defined($what)); # do all by default
foreach my $e ($tlp->executes) {
if ($e =~ m/^add((Mixed|Kanji)?Map)\s+([^\s]+)\s*$/) {
# save the refs as we have another =~ grep in the following lines
my $a = $1;
my $b = $3;
$::execute_actions{$type}{'maps'}{$b} = $a if ($what =~ m/map/);
+
} elsif ($e =~ m/^AddFormat\s+(.*)\s*$/) {
my %r = TeXLive::TLUtils::parse_AddFormat_line("$1");
if (defined($r{"error"})) {
@@ -2356,6 +2379,7 @@ sub announce_execute_actions {
$::execute_actions{$type}{'formats'}{$r{'name'}} = \%r
if ($what =~ m/format/);
}
+
} elsif ($e =~ m/^AddHyphen\s+(.*)\s*$/) {
my %r = TeXLive::TLUtils::parse_AddHyphen_line("$1");
if (defined($r{"error"})) {
@@ -2364,6 +2388,7 @@ sub announce_execute_actions {
$::execute_actions{$type}{'hyphens'}{$r{'name'}} = \%r
if ($what =~ m/hyphen/);
}
+
} else {
tlwarn("Unknown execute $e in ", $tlp->name, "\n");
}
diff --git a/systems/texlive/tlnet/tlpkg/TeXLive/TLWinGoo.pm b/systems/texlive/tlnet/tlpkg/TeXLive/TLWinGoo.pm
index b70f8c0d69..363f5fc0da 100644
--- a/systems/texlive/tlnet/tlpkg/TeXLive/TLWinGoo.pm
+++ b/systems/texlive/tlnet/tlpkg/TeXLive/TLWinGoo.pm
@@ -1,6 +1,6 @@
-# $Id: TLWinGoo.pm 69435 2024-01-15 20:05:55Z siepo $
+# $Id: TLWinGoo.pm 69646 2024-01-31 18:17:20Z karl $
# TeXLive::TLWinGoo.pm - Windows goop.
-# Copyright 2008-2023 Siep Kroonenberg, Norbert Preining
+# Copyright 2008-2024 Siep Kroonenberg, Norbert Preining
# This file is licensed under the GNU General Public License version 2
# or any later version.
@@ -13,7 +13,7 @@
package TeXLive::TLWinGoo;
-my $svnrev = '$Revision: 69435 $';
+my $svnrev = '$Revision: 69646 $';
my $_modulerevision;
if ($svnrev =~ m/: ([0-9]+) /) {
$_modulerevision = $1;