summaryrefslogtreecommitdiff
path: root/Master/texmf/scripts/texlive/tlmgr.pl
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf/scripts/texlive/tlmgr.pl')
-rwxr-xr-xMaster/texmf/scripts/texlive/tlmgr.pl366
1 files changed, 163 insertions, 203 deletions
diff --git a/Master/texmf/scripts/texlive/tlmgr.pl b/Master/texmf/scripts/texlive/tlmgr.pl
index 23368a4f323..397c95ae950 100755
--- a/Master/texmf/scripts/texlive/tlmgr.pl
+++ b/Master/texmf/scripts/texlive/tlmgr.pl
@@ -9,10 +9,6 @@
# - in GUI mode updating texlive.infra DOES work without
# the warning, but it does NOT force to restart the GUI. THAT IS BAD!!!
#
-# - when tlmgr2.pl is shipped globally as tlmgr.pl we can switch the
-# installer from using either texconfig paper or texlua ... to
-# tlmgr paper letter which will work on all platforms transparently.
-#
# - tlmgr should have a "progress" bar for the update --all and install
# etc options, echoing number of total packages etc etc.
#
@@ -52,6 +48,7 @@ BEGIN {
# if not in bootstrapping mode => kpsewhich exists, so use it to get $Master
chomp($Master = `kpsewhich -var-value=SELFAUTOPARENT`);
}
+ $::installerdir = $Master;
#
# make Perl find our packages first:
@@ -209,7 +206,6 @@ if (defined($action) && ($action =~ m/^help/i)) {
}
if (defined($action) && ($action =~ m/^print-arch$/i)) {
- $::installerdir = $Master;
print TeXLive::TLUtils::platform(), "\n";
exit 0;
}
@@ -483,7 +479,7 @@ sub handle_execute_actions {
# format-regenerate is used when the paper size changes. In that
- # case, if option_create_formats is set, we simply want to generate
+ # case, if option("create_formats") is set, we simply want to generate
#
{
my %done_formats;
@@ -506,7 +502,7 @@ sub handle_execute_actions {
for my $m (keys %{$::execute_actions{'disable'}{'formats'}}) {
$do_full = 1;
}
- my $opt_fmt = $localtlpdb->option_create_formats;
+ my $opt_fmt = $localtlpdb->option("create_formats");
if ($do_full) {
info("regenerating fmtutil.cnf in $TEXMFSYSVAR\n");
TeXLive::TLUtils::create_fmtutil($localtlpdb,
@@ -572,7 +568,7 @@ sub handle_execute_actions {
# Use full path for external command, except on Windows.
$lang = "$TEXMFSYSVAR/tex/generic/config/$lang";
}
- if ($localtlpdb->option_create_formats && !$::regenerate_all_formats) {
+ if ($localtlpdb->option("create_formats") && !$::regenerate_all_formats) {
$errors += do_cmd_and_check("fmtutil-sys --byhyphen $lang");
}
}
@@ -890,10 +886,10 @@ sub action_symlinks {
}
init_local_db();
if ($what =~ m/^add$/i) {
- $localtlpdb->add_symlinks();
+ $localtlmedia->add_symlinks();
} elsif ($what =~ m/^remove$/i) {
# remove symlinks
- $localtlpdb->remove_symlinks();
+ $localtlmedia->remove_symlinks();
} else {
# that should not happen
tlwarn("that should not happen, action_symlinks what=$what\n");
@@ -1157,8 +1153,8 @@ sub write_w32_updater {
my $container_doc_split = $mediatlpdb->config_doc_container;
# get options about src/doc splitting from $totlpdb
# TT: should we use local options to decide about install of doc & src?
- my $opt_src = $localtlpdb->option_install_srcfiles;
- my $opt_doc = $localtlpdb->option_install_docfiles;
+ my $opt_src = $localtlpdb->option("install_srcfiles");
+ my $opt_doc = $localtlpdb->option("install_docfiles");
my $root = $localtlpdb->root;
my $temp = "$root/temp";
my $repo = $mediatlpdb->root . "/$Archive";
@@ -1178,7 +1174,8 @@ sub write_w32_updater {
$localtlp = $localtlpdb->get_package($pkg);
$oldrev = $localtlp->revision;
$newrev = $mediatlp->revision;
- # we do install documenation files for category Documentation even if option_install_docfiles is false
+ # we do install documenation files for category Documentation even if
+ # option("install_docfiles") is false
$opt_real_doc = ($mediatlp->category =~ m/documentation/i) ? 1 : $opt_doc;
@pkg_parts = ($pkg);
push(@pkg_parts, "$pkg.source") if ($container_src_split && $opt_src && $mediatlp->srcfiles);
@@ -1552,8 +1549,8 @@ sub action_update {
# for size calculation we also want w32 special packages
if (@new || @updated || @w32_updated) {
%sizes = %{$tlmediatlpdb->sizes_of_packages(
- $localtlpdb->option_install_srcfiles,
- $localtlpdb->option_install_docfiles,
+ $localtlpdb->option("install_srcfiles"),
+ $localtlpdb->option("install_docfiles"),
@new, @updated, @w32_updated)};
} else {
$sizes{'__TOTAL__'} = 0;
@@ -1951,175 +1948,131 @@ sub action_option {
$what = "show" unless defined($what);
init_local_db();
if ($what =~ m/^show$/i) {
- print "Default installation location (location): ",
- $localtlpdb->option_location, "\n";
- print "Create formats on installation (formats): ",
- ($localtlpdb->option_create_formats ? "yes" : "no"), "\n";
- print "Install documentation files (docfiles): ",
- ($localtlpdb->option_install_docfiles ? "yes": "no"), "\n";
- print "Install source files (srcfiles): ",
- ($localtlpdb->option_install_srcfiles ? "yes": "no"), "\n";
- print "Destination for symlinks for binaries (sys_bin): ",
- $localtlpdb->option_sys_bin, "\n"
- if $localtlpdb->option_sys_bin;
- print "Destination for symlinks for man pages (sys_man): ",
- $localtlpdb->option_sys_man, "\n"
- if $localtlpdb->option_sys_man;
- print "Destination for symlinks for info docs (sys_info): ",
- $localtlpdb->option_sys_info, "\n"
- if $localtlpdb->option_sys_info;
- print "Directory for backups (backupdir): ",
- $localtlpdb->option("backupdir"), "\n"
- if $localtlpdb->option("backupdir");
- print "Number of backups to keep (autobackup): ",
- $localtlpdb->option("autobackup"), "\n"
- if $localtlpdb->option("autobackup");
- } elsif ($what =~ m/^location$/i) {
- # changes the default location
- my $loc = shift @ARGV;
- if ($loc) {
- # support "ctan" on the cmd line, and don't abs_path it!
- if ($loc =~ m/^ctan$/i) {
- $loc = "$TeXLive::TLConfig::TeXLiveURL";
- }
- if ($loc !~ m!^(http|ftp)://!i) {
- # seems to be a local path, try to normalize it
- my $testloc = abs_path($loc);
- # however, if we were given a url, that will get "normalized" to the
- # empty string, it not being a path. Restore the original value if so.
- $loc = $testloc if $testloc;
- }
- info("tlmgr: setting default installation location to $loc\n");
- $localtlpdb->option_location($loc);
- $localtlpdb->save;
- } else {
- info("Default installation location: ",
- $localtlpdb->option_location, "\n");
- }
- } elsif ($what =~ m/^docfiles$/i) {
- # changes the default docfiles
- my $loc = shift @ARGV;
- if (defined($loc)) {
- info("tlmgr: defaulting to", ($loc ? "" : " not"),
- " installing documentation files.\n");
- $localtlpdb->option_install_docfiles($loc);
- $localtlpdb->save;
- } else {
- info("Install documentation files: ",
- $localtlpdb->option_install_docfiles, "\n");
- }
- } elsif ($what =~ m/^srcfiles$/i) {
- # changes the default srcfiles
- my $loc = shift @ARGV;
- if (defined($loc)) {
- info("tlmgr: defaulting to", ($loc ? "" : " not"),
- " installing source files.\n");
- $localtlpdb->option_install_srcfiles($loc);
- $localtlpdb->save;
- } else {
- info("Install source files: ",
- $localtlpdb->option_install_srcfiles, "\n");
- }
- } elsif ($what =~ m/^formats$/i) {
- # changes the default formats
- my $loc = shift @ARGV;
- if (defined($loc)) {
- info("tlmgr: defaulting to", ($loc ? "" : " not"),
- " generating format files on installation.\n");
- $localtlpdb->option_create_formats($loc);
- $localtlpdb->save;
- } else {
- info("Create formats on installation: ",
- $localtlpdb->option_create_formats, "\n");
- }
- } elsif ($what =~ m/^sys_man$/i) {
- # changes the default sys_man
- my $loc = shift @ARGV;
- if (defined($loc)) {
- info("tlmgr: setting destination for symlinks to man pages to $loc\n");
- $localtlpdb->option_sys_man ($loc);
- $localtlpdb->save;
- } else {
- info("Destination for symlinks to man pages: ",
- $localtlpdb->option_sys_man, "\n");
- }
- } elsif ($what =~ m/^sys_info$/i) {
- # changes the default sys_info
- my $loc = shift @ARGV;
- if (defined($loc)) {
- info("tlmgr: setting destination for symlinks to info pages to $loc\n");
- $localtlpdb->option_sys_info ($loc);
- $localtlpdb->save;
- } else {
- info("Default destination for symlinks to info pages: ",
- $localtlpdb->option_sys_info, "\n");
- }
- } elsif ($what =~ m/^sys_bin$/i) {
- # changes the default sys_bin
- my $loc = shift @ARGV;
- if (defined($loc)) {
- info("tlmgr: setting destination for symlinks to binaries to $loc\n");
- $localtlpdb->option_sys_bin ($loc);
- $localtlpdb->save;
- } else {
- info("Default destination for symlinks to binaries: ",
- $localtlpdb->option_sys_bin, "\n");
- }
- } elsif ($what =~ m/^backupdir$/i) {
- my $val = shift @ARGV;
- if (defined($val)) {
- info("tlmgr: setting option $what to $val.\n");
- if (! -d $val) {
- info("tlmgr: the directory $val does not exists, it has to be created\n");
- info("tlmgr: before backups can be done automatically.\n");
- }
- $localtlpdb->option($what,$val);
- $localtlpdb->save;
- } else {
- info("Option $what = ", $localtlpdb->option($what), "\n");
- }
- } elsif ($what =~ m/^autobackup$/i) {
- my $val = shift @ARGV;
- if (defined($val)) {
- if ($val =~ m/-?[0-9]+/) {
- if ($val < -1) {
- tlwarn "Value $val for autobackup not supported, must be >= -1\n";
- return;
- }
- } elsif ($val =~ m/^infty$/i) {
- $val = -1;
+ for my $o (keys %{$localtlpdb->options}) {
+ # ignore some things which are win32 specific
+ next if ($o eq "desktop_integration" && !win32());
+ next if ($o eq "file_assocs" && !win32());
+ next if ($o eq "w32_multi_user" && !win32());
+ if (win32()) {
+ next if ($o =~ m/^sys_/);
+ }
+ if (defined $TLPDBOptionDesc{$o}) {
+ info("$TLPDBOptionDesc{$o} ($TLPDBOptionTlmgrName{$o}): " .
+ $localtlpdb->option($o) . "\n");
} else {
- tlwarn "Value $val for autobackup not supported, must be >= -1\n";
- return;
+ tlwarn ("option $o not supported\n");
}
- info("tlmgr: setting option $what to $val");
- $localtlpdb->option($what,$val);
- $localtlpdb->save;
- } else {
- $val = $localtlpdb->option($what);
- info("Option $what = $val");
}
- if ($val == -1) {
- info(" (make and keep infinitely many backups)\n");
- } elsif ($val == 0) {
- info(" (don't keep any backups)\n");
- } else {
- info(" (make and keep $val backups)\n");
- }
- } elsif (member($what, @AllowedConfigOptions)) {
- # for all further options not handled above, we check whether they
- # appear in the list of allowed options; if they do, we set/read
- # the values, otherwise we warn.
- my $val = shift @ARGV;
- if (defined($val)) {
- info("tlmgr: setting option $what to $val.\n");
- $localtlpdb->option($what,$val);
- $localtlpdb->save;
- } else {
- info("Option $what = ", $localtlpdb->option($what), "\n");
+ } elsif ($what =~ m/^showall$/i) {
+ my %loc = %{$localtlpdb->options};
+ for my $o (keys %TLPDBOptionDesc) {
+ info("$TLPDBOptionDesc{$o} ($TLPDBOptionTlmgrName{$o}): " .
+ (defined($loc{$o}) ? $loc{$o} : "(not set)") . "\n");
}
} else {
- tlwarn "Option $what is currently not supported.\n";
+ my $found = 0;
+ for my $opt (keys %TLPDBOptionTlmgrName) {
+ if ($what eq $TLPDBOptionTlmgrName{$opt}) {
+ $found = 1;
+ # the option argument matches the name
+ my $val = shift @ARGV;
+ if (defined($val)) {
+ # set new value
+ # here we have to care for some special cases
+ if ($what eq $TLPDBOptionTlmgrName{"location"}) {
+ # support "ctan" on the cmd line, and don't abs_path it!
+ if ($val =~ m/^ctan$/i) {
+ $val = "$TeXLive::TLConfig::TeXLiveURL";
+ }
+ if ($val !~ m!^(http|ftp)://!i) {
+ # seems to be a local path, try to normalize it
+ my $testloc = abs_path($val);
+ # however, if we were given a url, that will get "normalized"
+ # to the empty string, it not being a path.
+ # Restore the original value if so.
+ $val = $testloc if $testloc;
+ }
+ info("tlmgr: setting default installation location to $val\n");
+ $localtlpdb->option($opt, $val);
+ } elsif ($what eq $TLPDBOptionTlmgrName{"backupdir"}) {
+ info("tlmgr: setting option $what to $val.\n");
+ if (! -d $val) {
+ info("tlmgr: the directory $val does not exists, it has to be created\n");
+ info("tlmgr: before backups can be done automatically.\n");
+ }
+ $localtlpdb->option($opt, $val);
+ } elsif ($what eq $TLPDBOptionTlmgrName{"w32_multi_user"}) {
+ # when running w32 do not allow that a non-admin users sets
+ # this from false to true
+ if (win32() && !admin() && !$val) {
+ tlwarn("tlmgr: non-admin user cannot set $TLPDBOptionTlmgrName{'w32_multi_user'} option to true\n");
+ } else {
+ if ($val) {
+ info("tlmgr: setting option $what to 1.\n");
+ $localtlpdb->option($opt, 1);
+ } else {
+ info("tlmgr: setting option $what to 0.\n");
+ $localtlpdb->option($opt, 0);
+ }
+ }
+ } else {
+ # default case, switch for different types
+ if ($TLPDBOptionType{$opt} eq "b") {
+ if ($val) {
+ info("tlmgr: setting option $what to 1.\n");
+ $localtlpdb->option($opt, 1);
+ } else {
+ info("tlmgr: setting option $what to 0.\n");
+ $localtlpdb->option($opt, 0);
+ }
+ } elsif ($TLPDBOptionType{$opt} eq "p") {
+ info("tlmgr: setting option $what to $val.\n");
+ $localtlpdb->option($opt, $val);
+ } elsif ($TLPDBOptionType{$opt} eq "u") {
+ info("tlmgr: setting option $what to $val.\n");
+ $localtlpdb->option($opt, $val);
+ } elsif ($TLPDBOptionType{$opt} =~ m/^n(:((-)?\d+)?..((-)?\d+)?)?$/) {
+ my $isgood = 1;
+ my $n = int($val);
+ my $low;
+ my $up;
+ if (defined($1)) {
+ # range given
+ if (defined($2)) {
+ # lower border
+ if ($2 > $n) {
+ tlwarn("value $n for $what out of range ($TLPDBOptionType{$opt})\n");
+ $isgood = 0;
+ }
+ }
+ if (defined($4)) {
+ # upper border
+ if ($4 < $n) {
+ tlwarn("value $n for $what out of range ($TLPDBOptionType{$opt})\n");
+ $isgood = 0;
+ }
+ }
+ }
+ if ($isgood) {
+ info("tlmgr: setting option $what to $n.\n");
+ $localtlpdb->option($opt, $n);
+ }
+ } else {
+ tlwarn ("Unknown type of option $opt: $TLPDBOptionType{$opt}\n");
+ }
+ }
+ $localtlpdb->save;
+ } else {
+ # show current value
+ info ("$TLPDBOptionDesc{$opt} ($TLPDBOptionTlmgrName{$opt}): " .
+ $localtlpdb->option($opt) . "\n");
+ }
+ last;
+ }
+ }
+ if (!$found) {
+ tlwarn("tlmgr: option $what not supported!\n");
+ }
}
return;
}
@@ -2198,10 +2151,10 @@ sub action_arch {
info("install: tlpsv.win32\n");
$tlmediasrc->install_package("tlpsv.win32", $localtlpdb);
}
- # update the option_archs list of installed archs
- my @larchs = $localtlpdb->option_available_architectures;
+ # update the option("available_architectures") list of installed archs
+ my @larchs = $localtlpdb->setting("available_architectures");
push @larchs, @todoarchs;
- $localtlpdb->option_available_architectures(@larchs);
+ $localtlpdb->setting("available_architectures",@larchs);
$localtlpdb->save;
} else {
die "Unknown option for arch: $what";
@@ -2351,7 +2304,7 @@ sub action_uninstall {
}
print ("Ok, removing the whole installation:\n");
init_local_db();
- $localtlpdb->remove_symlinks;
+ $localtlmedia->remove_symlinks;
# now do remove the rest
system("rm", "-rf", "$Master/texmf-dist");
system("rm", "-rf", "$Master/texmf-doc");
@@ -2409,9 +2362,10 @@ sub action_recreate_tlpdb {
# we have to find out the default arch
# if there is only one dir in $Master/bin then we are settled,
# otherwise we expect the user to pass a correct arch string
- if ($^O =~ /^MSWin(32|64)$/i) {
- push @deps, "platform:win32";
- } else {
+ if (!TeXLive::TLUtils::member(TeXLive::TLUtils::platform(), @archs)) {
+ # hmm that is bad, the platform as detected is not in the list
+ # of installed platforms, so the option --arch has to be given
+ # if only one is installed use that one
if ($#archs == 0) {
# only one arch available, fine, use it as default
push @deps, "platform:$archs[0]";
@@ -2557,7 +2511,7 @@ sub check_files {
# we need the -use-svn version only for the check-file-coverage
# replacement anyway, so it will be used on tug, which is neither w32 nor
# darwin.
- my $arch = $localtlpdb->option_platform;
+ my $arch = $localtlmedia->platform();
return $ret if ($arch eq "win32" || $arch eq "universal-darwin");
# do check that all files in the trees are covered
@@ -2920,8 +2874,7 @@ sub init_local_db {
die("cannot find tlpdb in $Master") unless (defined($localtlpdb));
# setup the programs, for w32 we need the shipped wget/xz etc, so we
# pass the location of these files to setup_programs.
- if (!setup_programs("$Master/tlpkg/installer",
- $localtlpdb->option_platform)) {
+ if (!setup_programs("$Master/tlpkg/installer", $localtlmedia->platform)) {
tlwarn("Couldn't set up the necessary programs.\nInstallation of packages is not supported.\nPlease report to texlive\@tug.org.\n");
if (defined($should_i_die) && $should_i_die) {
finish(1);
@@ -2930,7 +2883,7 @@ sub init_local_db {
}
}
# let cmd line options override the settings in localtlpdb
- my $loc = $localtlpdb->option_location;
+ my $loc = $localtlpdb->option("location");
if (defined($loc)) {
$location = $loc;
}
@@ -3485,27 +3438,34 @@ written to the terminal.
=item B<option [show]>
+=item B<option showall>
+
=item B<option I<key> [I<value>]>
=back
The first form shows the global TeX Live settings currently saved in the
-TLPDB.
+TLPDB with a short description and the C<key> used for changing it in
+paranthesis.
+
+The second form acts like the first, but also shows options which can
+be defined but are not currently set to any value.
-In the second form, if I<value> is not given, the setting for I<key> is
+In the third form, if I<value> is not given, the setting for I<key> is
displayed. If I<value> is present, I<key> is set to I<value>.
-Possible values for I<key> are:
-
- C<location> (default installation location),
- C<formats> (create formats at installation time),
- C<docfiles> (install documentation files),
- C<srcfiles> (install source files),
- C<backupdir> (default directory for backups),
- C<autobackup> (number of backups to keep).
- C<sys_bin> (location where binaries are linked to by action symlinks)
- C<sys_man> (location where man pages are linked to by action symlinks)
- C<sys_info> (location where info pages are linked to by action symlinks)
+Possible values for I<key> are (but see B<tlmgr option showall> for
+the definitive list):
+
+ location (default installation location),
+ formats (create formats at installation time),
+ docfiles (install documentation files),
+ srcfiles (install source files),
+ backupdir (default directory for backups),
+ autobackup (number of backups to keep).
+ sys_bin (location where binaries are linked to by action symlinks)
+ sys_man (location where man pages are linked to by action symlinks)
+ sys_info (location where info pages are linked to by action symlinks)
One common use of C<option> is if you originally installed from DVD, and
want to permanently change the installation to get further updates from