diff options
Diffstat (limited to 'Master/texmf/scripts/texlive/tlmgr.pl')
-rwxr-xr-x | Master/texmf/scripts/texlive/tlmgr.pl | 366 |
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 |