# This file is licensed under the GNU General Public License version 2
# or any later version.
# tell the frontend about all configurable options and terminate
# this output with an agreed-upon termination string. the frontend
# will get the required package database information from the back
# end. From this, it can deduce collections, schemes and platforms,
# but not the names of platforms.
# needed info:
# binaries + descriptions
# schemes
# collections, probably per scheme
# maybe directories to be configured
# current options:
# paper size a4 | letter
# allow restricted toggle
# generate formats
# install docs
# install sources
# create symlinks | 2 aspects of desktop integration
# switch to online CTAN
# then read the selected options back from the frontend
# when run_menu_extl reads 'startinst' from the frontend,
# run_menu_extl returns to install-tl.
# by then, the frontend has switched to non-blocking i/o
# and will capture the output of the actual installation
# on the fly inside a log window
our %vars; # only contains simple scalars
# from install-tl:
# The global variable %vars is an associative list which contains all
# variables and their values which can be changed by the user.
# needs to be our since TeXLive::TLUtils uses it
# %vars hash should eventually include each binary, collection and scheme
# as individual schalars.
# the above sub adds all platforms and collections to %vars
# but maybe not schemes so we add these now:
foreach my $pkg ($tlpdb->schemes) {
$vars{$pkg}=($vars{'selected_scheme'} eq $pkg)? 1:0;
}
$vars{'scheme-custom'} = 0 unless defined $vars{'scheme-custom'};
# reading back current %vars from the frontend
sub read_vars {
my $l = <STDIN>;
chomp $l;
if ($l ne 'vars') {
return 0;
}
while (1) {
$l = <STDIN>;
chomp $l;
if ($l =~ /^([^:]+): (.*)$/) {
$vars{$1} = $2;
} elsif ($l eq 'endvars') {
$vars{'free_size'} = TeXLive::TLUtils::diskfree($vars{'TEXDIR'});
return 1;
} else {
return 0;
}
}
return 0;
}
# for each scheme and collection, print name, category and short description
sub print_descs {
print "descs\n";
foreach my $p ($tlpdb->schemes) {
my $pkg = $tlpdb->get_package($p);
print $pkg->name, ': ', $pkg->category, ' ', $pkg->shortdesc || "", "\n";
}
foreach my $p ($tlpdb->collections) {
my $pkg = $tlpdb->get_package($p);
print $pkg->name, ': ', $pkg->category, ' ', $pkg->shortdesc || "", "\n";
}
print "enddescs\n";
}
sub run_menu_extl {
# make sure we have a value for total_size:
calc_depends();
print "menudata\n";
print "year: $texlive_release\n";
print "svn: $::installerrevision\n";
# for windows, add a key indicating elevated permissions
if (wndws()) {
print "admin: ". TeXLive::TLWinGoo::admin() . "\n";
}
print_descs();
print_vars();
# tell the frontend the preferred order for schemes
my @schemes = schemes_ordered_for_presentation();
push @schemes, "scheme-custom";
print "schemes_order: ", join(' ', @schemes), "\n";
# binaries
print "binaries\n";
# binaries aren't packages; list their descriptions here
my @binaries = $tlpdb->available_architectures;
@binaries=sort TeXLive::TLUtils::sort_archs @binaries;
foreach my $b (@binaries) {
print $b, ': ', platform_desc($b), "\n";
}
print "endbinaries\n";
print "endmenudata\n"; # this triggers the frontend menu
# read input from frontend / install-tl-gui.tcl.
# Four cases to consider:
# 'calc': the frontend wants to update its ::vars array
# after some menu choices
# 'checkdir': check whether $vars{TEXDIR} is creatable
# 'startinst': done with choices, tell install-tl to
# start installation
# 'quit': tell install-tl to clean up and quit