summaryrefslogtreecommitdiff
path: root/Master/tlpkg
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg')
-rw-r--r--Master/tlpkg/TeXLive/TLConfig.pm73
-rw-r--r--Master/tlpkg/TeXLive/TLMedia.pm168
-rw-r--r--Master/tlpkg/TeXLive/TLPDB.pm350
-rwxr-xr-xMaster/tlpkg/bin/tl-update-tlnet2
-rwxr-xr-xMaster/tlpkg/bin/tl-update-tlpdb3
-rwxr-xr-xMaster/tlpkg/bin/tlpsrc2tlpdb3
-rw-r--r--Master/tlpkg/installer/install-menu-perltk.pl12
-rwxr-xr-xMaster/tlpkg/installer/install-menu-text.pl40
-rw-r--r--Master/tlpkg/installer/install-menu-wizard.pl16
-rw-r--r--Master/tlpkg/installer/install-translations.pl1
-rw-r--r--Master/tlpkg/installer/installer-options.txt72
-rw-r--r--Master/tlpkg/tlpsrc/00texlive.installation.tlpsrc16
12 files changed, 459 insertions, 297 deletions
diff --git a/Master/tlpkg/TeXLive/TLConfig.pm b/Master/tlpkg/TeXLive/TLConfig.pm
index eca234e5c96..536cbc33a50 100644
--- a/Master/tlpkg/TeXLive/TLConfig.pm
+++ b/Master/tlpkg/TeXLive/TLConfig.pm
@@ -32,6 +32,11 @@ BEGIN {
$WindowsMainMenuName
$RelocPrefix
$RelocTree
+ %TLPDBSettingType
+ %TLPDBSettingDesc
+ %TLPDBOptionType
+ %TLPDBOptionDesc
+ %TLPDBOptionTlmgrName
);
@EXPORT = @EXPORT_OK;
}
@@ -98,8 +103,76 @@ our @AllowedConfigOptions = qw/
autobackup
/;
+#
+# definition of the option strings and their value types
+# possible types are:
+# - u: url
+# - b: boolean, saved as 0/1
+# - p: path (local path)
+# - n: naturnal number
+# it allows n:[a]..[b]
+# if a is empty start at -infty
+# if b is empty end at +infty
+# so "n:.." is equivalent to "n"
+
+# WARNING: keep these in sync!
+#
+our %TLPDBOptionTlmgrName = (
+ "location" => "location",
+ "create_formats" => "formats",
+ "desktop_integration" => "deskint",
+ "file_assocs" => "fileassocs",
+ "post_code" => "postcode",
+ "sys_bin" => "sys_bin",
+ "sys_info" => "sys_info",
+ "sys_man" => "sys_man",
+ "install_docfiles" => "docfiles",
+ "install_srcfiles" => "srcfiles",
+ "w32_multi_user" => "multiuser",
+ "autobackup" => "autobackup",
+ "backupdir" => "backupdir");
+our %TLPDBOptionType = (
+ "location" => "u",
+ "create_formats" => "b",
+ "desktop_integration" => "b",
+ "file_assocs" => "b",
+ "post_code" => "b",
+ "sys_bin" => "p",
+ "sys_info" => "p",
+ "sys_man" => "p",
+ "install_docfiles" => "b",
+ "install_srcfiles" => "b",
+ "w32_multi_user" => "b",
+ "autobackup" => "n:-1..",
+ "backupdir" => "p");
+our %TLPDBOptionDesc = (
+ "location" => "Default installation location",
+ "create_formats" => "Create formats on installation",
+ "desktop_integration" => "Create shortcuts (menu and desktop) in postinst",
+ "file_assocs" => "Change file associations in postinst",
+ "post_code" => "Run postinst code blobs",
+ "sys_bin" => "Destination for symlinks for binaries",
+ "sys_info" => "Destination for symlinks for info docs",
+ "sys_man" => "Destination for symlinks for man pages",
+ "install_docfiles" => "Install documentation files",
+ "install_srcfiles" => "Install source files",
+ "w32_multi_user" => "Install for shortcuts/menu items for all users (w32)",
+ "autobackup" => "Number of backups to keep",
+ "backupdir" => "Directory for backups");
+
+our %TLPDBSettingType = (
+ "platform" => "s",
+ "available_architectures" => "l"
+);
+our %TLPDBSettingDesc = (
+ "platform" => "Main platform for this computer",
+ "available_architectures" => "All available/installed architectures"
+);
+
+
our $WindowsMainMenuName = "TeX Live $ReleaseYear";
+
1;
diff --git a/Master/tlpkg/TeXLive/TLMedia.pm b/Master/tlpkg/TeXLive/TLMedia.pm
index 90af2763348..6980f813959 100644
--- a/Master/tlpkg/TeXLive/TLMedia.pm
+++ b/Master/tlpkg/TeXLive/TLMedia.pm
@@ -11,6 +11,7 @@ use TeXLive::TLConfig;
use TeXLive::TLUtils qw(copy win32 dirname mkdirhier basename download_file
merge_into debug ddebug info tlwarn log);
use TeXLive::TLPDB;
+use TeXLive::TLWinGoo;
sub new
{
@@ -137,8 +138,8 @@ sub install_package {
my $container_src_split = $fromtlpdb->config_src_container;
my $container_doc_split = $fromtlpdb->config_doc_container;
# get options about src/doc splitting from $totlpdb
- my $opt_src = $totlpdb->option_install_srcfiles;
- my $opt_doc = $totlpdb->option_install_docfiles;
+ my $opt_src = $totlpdb->option("install_srcfiles");
+ my $opt_doc = $totlpdb->option("install_docfiles");
my $real_opt_doc = $opt_doc;
if ($tlpobj->category =~ m/documentation/i) {
# we do install documenation files for category Documentation
@@ -258,10 +259,15 @@ sub install_package {
# 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 (win32() && admin() && !$totlpdb->option("w32_multi_user")) {
+ non_admin();
+ }
&TeXLive::TLUtils::do_postaction("install", $tlpobj,
- $totlpdb->option_file_assocs,
- $totlpdb->option_desktop_integration,
- $totlpdb->option_post_code);
+ $totlpdb->option("file_assocs"),
+ $totlpdb->option("desktop_integration"),
+ $totlpdb->option("post_code"));
}
}
return 1;
@@ -454,7 +460,7 @@ sub remove_package {
&TeXLive::TLUtils::do_postaction("remove", $tlp,
0, # option_file_assocs,
0, # option_desktop_integration,
- $localtlpdb->option_post_code);
+ $localtlpdb->option("post_code"));
}
#
my @removals = &TeXLive::TLUtils::removed_dirs (@goodfiles);
@@ -474,17 +480,147 @@ sub remove_package {
$localtlpdb->save;
#
# 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 (win32() && admin() && !$localtlpdb->option("w32_multi_user")) {
+ non_admin();
+ }
+ #
+ # Run the post installation code in the postaction tlpsrc entries
# the postaction code part cannot be evaluated now since the
# files are already removed.
if (!$nopostinstall) {
&TeXLive::TLUtils::do_postaction("remove", $tlp,
- $localtlpdb->option_file_assocs,
- $localtlpdb->option_desktop_integration,
+ $localtlpdb->option("file_assocs"),
+ $localtlpdb->option("desktop_integration"),
0);
}
}
return 1;
}
+
+
+=pod
+
+=item C<< $tlmedia->add_symlinks() >>
+=item C<< $tlmedia->remove_symlinks() >>
+
+These two functions try to create/remove symlinks for binaries, man pages,
+and info files as specified by the options saved in the respective tlpdb
+($tlpdb->option("sys_bin"), $tlpdb->option("sys_man"),
+$tlpdb->option("sys_info")).
+
+The functions return 1 on success and 0 on error.
+On Windows it returns undefined.
+
+=cut
+
+sub add_link_dir_dir {
+ my ($from, $to) = @_;
+ mkdirhier $to;
+ if (-w $to) {
+ debug("linking files from $from to $to\n");
+ chomp (@files = `ls "$from"`);
+ my $ret = 1;
+ for my $f (@files) {
+ unlink("$to/$f");
+ if (system("ln -s \"$from/$f\" \"$to\"")) {
+ tlwarn("Linking $f from $from to $to failed: $!\n");
+ $ret = 0;
+ }
+ }
+ return $ret;
+ } else {
+ tlwarn("destination $to not writable, no linking files in $from done.\n");
+ return 0;
+ }
+}
+
+sub remove_link_dir_dir {
+ my ($from, $to) = @_;
+ if ((-d "$to") && (-w "$to")) {
+ debug("removing links from $from to $to\n");
+ chomp (@files = `ls "$from"`);
+ my $ret = 1;
+ foreach my $f (@files) {
+ next if (! -r "$to/$f");
+ if ((-l "$to/$f") &&
+ (readlink("$to/$f") =~ m;^$from/;)) {
+ $ret = 0 unless unlink("$to/$f");
+ } else {
+ $ret = 0;
+ tlwarn ("not removing $to/$f, not a link or wrong destination!\n");
+ }
+ }
+ # trry to remove the destination directory, it might be empty and
+ # we might have write permissions, ignore errors
+ `rmdir "$to" 2>/dev/null`;
+ return $ret;
+ } else {
+ tlwarn ("destination $to not writable, no removal of links done!\n");
+ return 0;
+ }
+}
+
+sub add_remove_symlinks {
+ my $self = shift;
+ my $mode = shift;
+ my $errors = 0;
+ my $Master = $self->location;
+ my $arch = $self->platform();
+ my $plat_bindir = "$Master/bin/$arch";
+ return if win32();
+ $sys_bin = $self->tlpdb->option("sys_bin");
+ $sys_man = $self->tlpdb->option("sys_man");
+ $sys_info= $self->tlpdb->option("sys_info");
+ if ($mode eq "add") {
+ $errors++ unless add_link_dir_dir($plat_bindir, $sys_bin);
+ if (-d "$Master/texmf/doc/info") {
+ $errors++ unless add_link_dir_dir("$Master/texmf/doc/info", $sys_info);
+ }
+ } elsif ($mode eq "remove") {
+ $errors++ unless remove_link_dir_dir($plat_bindir, $sys_bin);
+ if (-d "$Master/texmf/doc/info") {
+ $errors++ unless remove_link_dir_dir("$Master/texmf/doc/info", $sys_info);
+ }
+ } else {
+ die ("should not happen, unknown mode $mode in add_remove_symlinks!");
+ }
+ mkdirhier $sys_man if ($mode eq "add");
+ if (-w $sys_man && -d "$Master/texmf/doc/man") {
+ debug("$mode symlinks for man pages in $sys_man\n");
+ my $foo = `(cd "$Master/texmf/doc/man" && echo *)`;
+ chomp (my @mans = split (' ', $foo));
+ foreach my $m (@mans) {
+ my $mandir = "$Master/texmf/doc/man/$m";
+ next unless -d $mandir;
+ if ($mode eq "add") {
+ $errors++ unless add_link_dir_dir($mandir, "$sys_man/$m");
+ } else {
+ $errors++ unless remove_link_dir_dir($mandir, "$sys_man/$m");
+ }
+ }
+ `rmdir "$sys_man" 2>/dev/null` if ($mode eq "remove");
+ } else {
+ tlwarn("destination of man symlink $sys_man not writable, "
+ . "cannot $mode symlinks.\n");
+ $errors++;
+ }
+ # we collected errors in $ret, so return the negation of it
+ if ($errors) {
+ info("$mode of symlinks failed $errors times, please see above messages.\n");
+ return 0;
+ } else {
+ return 1;
+ }
+}
+
+sub add_symlinks {
+ return (shift->add_remove_symlinks("add", @_));
+}
+sub remove_symlinks {
+ return (shift->add_remove_symlinks("remove", @_));
+}
# member access functions
@@ -500,6 +636,22 @@ sub lang_doc_collections { my $self = shift; return @{ $self->{'lang_doc_collect
sub schemes { my $self = shift; return @{ $self->{'schemes'} }; }
sub systems { my $self = shift; return @{ $self->{'systems'} }; }
+# deduce the platform of the referenced media as follows:
+# - if the $tlpdb->setting("platform") is there it overrides the detected
+# setting
+# - if it is not there call TLUtils::platform()
+sub platform {
+ # try to deduce the platform
+ my $self = shift;
+ my $tlpdb = $self->tlpdb;
+ if (defined($tlpdb)) {
+ my $ret = $tlpdb->setting("platform");
+ return $ret if defined $ret;
+ }
+ # the platform setting wasn't found in the tlpdb, try TLUtils::platform
+ return TeXLive::TLUtils::platform();
+}
+
1;
__END__
diff --git a/Master/tlpkg/TeXLive/TLPDB.pm b/Master/tlpkg/TeXLive/TLPDB.pm
index b826db38e73..5c65d57f726 100644
--- a/Master/tlpkg/TeXLive/TLPDB.pm
+++ b/Master/tlpkg/TeXLive/TLPDB.pm
@@ -49,9 +49,10 @@ C<TeXLive::TLPDB> -- A database of TeX Live Packages
$tlpdb->config_container_format;
$tlpdb->config_release;
$tlpdb->config_revision;
+ $tlpdb->options;
$tlpdb->option($key, [$value]);
- $tlpdb->add_symlinks();
- $tlpdb->remove_symlinks();
+ $tlpdb->settings;
+ $tlpdb->setting($key, [$value]);
$tlpdb->sizes_of_packages($opt_src, $opt_doc [, @packs ]);
TeXLive::TLPDB->listdir([$dir]);
@@ -62,7 +63,8 @@ C<TeXLive::TLPDB> -- A database of TeX Live Packages
=cut
use TeXLive::TLConfig qw($CategoriesRegexp $DefaultCategory $InfraLocation
- $DatabaseName $MetaCategoriesRegexp $Archive);
+ $DatabaseName $MetaCategoriesRegexp $Archive
+ %TLPDBOptionType %TLPDBSettingType);
use TeXLive::TLUtils qw(dirname mkdirhier member win32 info debug ddebug
tlwarn);
use TeXLive::TLPOBJ;
@@ -328,13 +330,13 @@ sub save {
The C<available_architectures> functions returns the list of available
architectures as set in the options section
-(i.e., using option_available_architectures)
+(i.e., using setting("available_architectures"))
=cut
sub available_architectures {
my $self = shift;
- my @archs = $self->option_available_architectures;
+ my @archs = $self->setting("available_architectures");
if (! @archs) {
# fall back to the old method checking tex\.*
my @packs = $self->list_packages;
@@ -918,123 +920,6 @@ sub config_revision {
=pod
-=item C<< $tlpdb->add_symlinks() >>
-=item C<< $tlpdb->remove_symlinks() >>
-
-These two functions try to create/remove symlinks for binaries, man pages,
-and info files as specified by the options saved in the tlpdb
-($tlpdb->option_sys_bin, $tlpdb->option_sys_man, $tlpdb->option_sys_info).
-
-The functions return 1 on success and 0 on error.
-On Windows it returns undefined.
-
-=cut
-
-sub add_link_dir_dir {
- my ($from, $to) = @_;
- mkdirhier $to;
- if (-w $to) {
- debug("linking files from $from to $to\n");
- chomp (@files = `ls "$from"`);
- my $ret = 1;
- for my $f (@files) {
- unlink("$to/$f");
- if (system("ln -s \"$from/$f\" \"$to\"")) {
- tlwarn("Linking $f from $from to $to failed: $!\n");
- $ret = 0;
- }
- }
- return $ret;
- } else {
- tlwarn("destination $to not writable, no linking files in $from done.\n");
- return 0;
- }
-}
-
-sub remove_link_dir_dir {
- my ($from, $to) = @_;
- if ((-d "$to") && (-w "$to")) {
- debug("removing links from $from to $to\n");
- chomp (@files = `ls "$from"`);
- my $ret = 1;
- foreach my $f (@files) {
- next if (! -r "$to/$f");
- if ((-l "$to/$f") &&
- (readlink("$to/$f") =~ m;^$from/;)) {
- $ret = 0 unless unlink("$to/$f");
- } else {
- $ret = 0;
- tlwarn ("not removing $to/$f, not a link or wrong destination!\n");
- }
- }
- # trry to remove the destination directory, it might be empty and
- # we might have write permissions, ignore errors
- `rmdir "$to" 2>/dev/null`;
- return $ret;
- } else {
- tlwarn ("destination $to not writable, no removal of links done!\n");
- return 0;
- }
-}
-
-sub add_remove_symlinks {
- my $self = shift;
- my $mode = shift;
- my $errors = 0;
- my $Master = $self->{'root'};
- my $arch = $self->option_platform;
- my $plat_bindir = "$Master/bin/$arch";
- return if win32();
- $sys_bin = $self->option_sys_bin;
- $sys_man = $self->option_sys_man;
- $sys_info= $self->option_sys_info;
- if ($mode eq "add") {
- $errors++ unless add_link_dir_dir($plat_bindir, $sys_bin);
- $errors++ unless add_link_dir_dir("$Master/texmf/doc/info", $sys_info);
- } elsif ($mode eq "remove") {
- $errors++ unless remove_link_dir_dir($plat_bindir, $sys_bin);
- $errors++ unless remove_link_dir_dir("$Master/texmf/doc/info", $sys_info);
- } else {
- die ("should not happen, unknown mode $mode in add_remove_symlinks!");
- }
- mkdirhier $sys_man if ($mode eq "add");
- if (-w $sys_man) {
- debug("$mode symlinks for man pages in $sys_man\n");
- my $foo = `(cd "$Master/texmf/doc/man" && echo *)`;
- chomp (my @mans = split (' ', $foo));
- foreach my $m (@mans) {
- my $mandir = "$Master/texmf/doc/man/$m";
- next unless -d $mandir;
- if ($mode eq "add") {
- $errors++ unless add_link_dir_dir($mandir, "$sys_man/$m");
- } else {
- $errors++ unless remove_link_dir_dir($mandir, "$sys_man/$m");
- }
- }
- `rmdir "$sys_man" 2>/dev/null` if ($mode eq "remove");
- } else {
- tlwarn("destination of man symlink $sys_man not writable, "
- . "cannot $mode symlinks.\n");
- $errors++;
- }
- # we collected errors in $ret, so return the negation of it
- if ($errors) {
- info("$mode of symlinks failed $errors times, please see above messages.\n");
- return 0;
- } else {
- return 1;
- }
-}
-
-sub add_symlinks {
- return (shift->add_remove_symlinks("add", @_));
-}
-sub remove_symlinks {
- return (shift->add_remove_symlinks("remove", @_));
-}
-
-=pod
-
=item C<< $tlpdb->sizes_of_packages ( $opt_src, $opt_doc, [ @packs ] ) >>
This function returns a reference to a hash with package names as keys
@@ -1103,8 +988,8 @@ sub sizes_of_packages {
=pod
-=item C<< $tlpdb->option_XXXXX >ize += $tlpsizes{$p};
-
+=item C<< $tlpdb->option($key [, $val]) >>
+=item C<< $tlpdb->setting($key [, $val]) >>
Need to be documented
@@ -1112,29 +997,34 @@ Need to be documented
sub _set_option_value {
my $self = shift;
- $self->_set_option_value_pkg('00texlive.installation', @_);
+ $self->_set_value_pkg('00texlive.installation', 'opt_', @_);
+}
+sub _set_setting_value {
+ my $self = shift;
+ $self->_set_value_pkg('00texlive.installation', 'setting_', @_);
}
-sub _set_option_value_pkg {
- my ($self,$pkgname,$key,$value) = @_;
+sub _set_value_pkg {
+ my ($self,$pkgname,$pre,$key,$value) = @_;
+ my $k = "$pre$key";
my $pkg = $self->{'tlps'}{$pkgname};
my @newdeps;
if (!defined($pkg)) {
$pkg = new TeXLive::TLPOBJ;
$pkg->name($pkgname);
$pkg->category("TLCore");
- push @newdeps, "$key:$value";
+ push @newdeps, "$k:$value";
} else {
my $found = 0;
foreach my $d ($pkg->depends) {
- if ($d =~ m!^$key:!) {
+ if ($d =~ m!^$k:!) {
$found = 1;
- push @newdeps, "$key:$value";
+ push @newdeps, "$k:$value";
} else {
push @newdeps, $d;
}
}
if (!$found) {
- push @newdeps, "$key:$value";
+ push @newdeps, "$k:$value";
}
}
$pkg->depends(@newdeps);
@@ -1143,14 +1033,20 @@ sub _set_option_value_pkg {
sub _option_value {
my $self = shift;
- $self->_option_value_pkg('00texlive.installation', @_);
+ $self->_value_pkg('00texlive.installation', 'opt_', @_);
}
-sub _option_value_pkg {
- my ($self,$pkg,$key) = @_;
+sub _setting_value {
+ my $self = shift;
+ $self->_value_pkg('00texlive.installation', 'setting_', @_);
+}
+
+sub _value_pkg {
+ my ($self,$pkg,$pre,$key) = @_;
+ my $k = "$pre$key";
if (defined($self->{'tlps'}{$pkg})) {
foreach my $d ($self->{'tlps'}{$pkg}->depends) {
- if ($d =~ m!^$key:(.*)$!) {
+ if ($d =~ m!^$k:(.*)$!) {
return "$1";
}
}
@@ -1160,117 +1056,113 @@ sub _option_value_pkg {
return;
}
-sub option {
- my $self = shift;
- my $key = shift;
- if (@_) { $self->_set_option_value($key, shift); }
- return $self->_option_value($key);
-}
-
sub option_pkg {
my $self = shift;
my $pkg = shift;
my $key = shift;
- if (@_) { $self->_set_option_value_pkg($pkg, $key, shift); }
- return $self->_option_value_pkg($pkg, $key);
-}
-
-# TODO the above function should be used in the functions below as
-# far as possible ...
-
-sub option_available_architectures {
- my $self = shift;
- if (@_) { $self->_set_option_value("available_architectures","@_"); }
-
- # sadly, if the tlpdb is messed up, there may be no architectures.
- my $val = $self->_option_value("available_architectures");
- my @archs;
- if (defined $val) {
- @archs = split(" ", $val);
- } else {
- warn "no available_architectures, continuing anyway ...";
- @archs = ();
+ if (@_) { $self->_set_value_pkg($pkg, "opt_", $key, shift); }
+ my $ret = $self->_value_pkg($pkg, "opt_", $key);
+ # special case for location == __MASTER__
+ if ($ret eq "__MASTER__" && $key eq "location") {
+ return $self->root;
}
- return @archs;
-}
-sub option_create_symlinks {
- my $self = shift;
- if (@_) { $self->_set_option_value("opt_create_symlinks", shift); }
- return $self->_option_value("opt_create_symlinks");
-}
-sub option_desktop_integration {
- my $self = shift;
- if (@_) { $self->_set_option_value("opt_desktop_integration", shift); }
- return $self->_option_value("opt_desktop_integration");
-}
-sub option_file_assocs {
- my $self = shift;
- if (@_) { $self->_set_option_value("opt_file_assocs", shift); }
- return $self->_option_value("opt_file_assocs");
-}
-sub option_post_code {
- my $self = shift;
- if (@_) { $self->_set_option_value("opt_post_code", shift); }
- return $self->_option_value("opt_post_code");
-}
-sub option_path {
- my $self = shift;
- if (@_) { $self->_set_option_value("opt_path", shift); }
- return $self->_option_value("opt_path");
-}
-sub option_w32_multi_user {
- my $self = shift;
- if (@_) { $self->_set_option_value("opt_w32_multi_user", shift); }
- return $self->_option_value("opt_w32_multi_user");
-}
-sub option_install_docfiles {
- my $self = shift;
- if (@_) { $self->_set_option_value("opt_install_docfiles", shift); }
- return $self->_option_value("opt_install_docfiles");
+ return $ret;
}
-sub option_install_srcfiles {
+sub option {
my $self = shift;
- if (@_) { $self->_set_option_value("opt_install_srcfiles", shift); }
- return $self->_option_value("opt_install_srcfiles");
-}
-sub option_create_formats {
- my $self = shift;
- if (@_) { $self->_set_option_value("opt_create_formats", shift); }
- return $self->_option_value("opt_create_formats");
-}
-sub option_paper {
- my $self = shift;
- if (@_) { $self->_set_option_value("opt_paper", shift); }
- return $self->_option_value("opt_paper");
-}
-sub option_location {
- my $self = shift;
- if (@_) { $self->_set_option_value("location", shift); }
- my $loc = $self->_option_value("location");
- if ($loc eq "__MASTER__") {
+ my $key = shift;
+ if (@_) { $self->_set_option_value($key, shift); }
+ my $ret = $self->_option_value($key);
+ # special case for location == __MASTER__
+ if (defined($ret) && $ret eq "__MASTER__" && $key eq "location") {
return $self->root;
}
- return $self->_option_value("location");
+ return $ret;
}
-sub option_sys_bin {
+sub setting_pkg {
my $self = shift;
- if (@_) { $self->_set_option_value("opt_sys_bin", shift); }
- return $self->_option_value("opt_sys_bin");
+ my $pkg = shift;
+ my $key = shift;
+ if (@_) {
+ if ($TLPDBSettingType{$key} eq "l") {
+ $self->_set_value_pkg($pkg, "setting_", $key, "@_");
+ } else {
+ $self->_set_value_pkg($pkg, "setting_", $key, shift);
+ }
+ }
+ my $ret = $self->_value_pkg($pkg, "setting_", $key);
+ # check the types of the settings, and if it is a "l" return a list
+ if ($TLPDBSettingType{$key} eq "l") {
+ my @ret;
+ if (defined $ret) {
+ @ret = split(" ", $ret);
+ } else {
+ tlwarn "TLPDB::setting: no $key, returning empty list ...\n";
+ @ret = ();
+ }
+ return @ret;
+ }
+ return $ret;
}
-sub option_sys_man {
+sub setting {
my $self = shift;
- if (@_) { $self->_set_option_value("opt_sys_man", shift); }
- return $self->_option_value("opt_sys_man");
+ my $key = shift;
+ if (@_) {
+ if ($TLPDBSettingType{$key} eq "l") {
+ $self->_set_setting_value($key, "@_");
+ } else {
+ $self->_set_setting_value($key, shift);
+ }
+ }
+ my $ret = $self->_setting_value($key);
+ # check the types of the settings, and if it is a "l" return a list
+ if ($TLPDBSettingType{$key} eq "l") {
+ my @ret;
+ if (defined $ret) {
+ @ret = split(" ", $ret);
+ } else {
+ tlwarn "TLPDB::setting: no $key, returning empty list ...\n";
+ @ret = ();
+ }
+ return @ret;
+ }
+ return $ret;
+}
+
+=pod
+
+=item C<< $tlpdb->options >>
+
+Returns a reference to a hash with option names.
+
+=cut
+
+sub _keyshash {
+ my ($self, $pre, $hr) = @_;
+ my @allowed = keys %$hr;
+ my %ret;
+ my $pkg = $self->{'tlps'}{'00texlive.installation'};
+ if (defined($pkg)) {
+ foreach my $d ($pkg->depends) {
+ if ($d =~ m!^$pre([^:]*):(.*)!) {
+ if (member($1, @allowed)) {
+ $ret{$1} = $2;
+ } else {
+ tlwarn("Unsupported option/setting $d\n");
+ }
+ }
+ }
+ }
+ return \%ret;
}
-sub option_sys_info {
+
+sub options {
my $self = shift;
- if (@_) { $self->_set_option_value("opt_sys_info", shift); }
- return $self->_option_value("opt_sys_info");
+ return ($self->_keyshash('opt_', \%TLPDBOptionType));
}
-sub option_platform {
+sub settings {
my $self = shift;
- if (@_) { $self->_set_option_value("platform", shift); }
- return $self->_option_value("platform");
+ return ($self->_keyshash('setting_', \%TLPDBSettingType));
}
=pod
diff --git a/Master/tlpkg/bin/tl-update-tlnet b/Master/tlpkg/bin/tl-update-tlnet
index ca36dfc7633..33e2056945e 100755
--- a/Master/tlpkg/bin/tl-update-tlnet
+++ b/Master/tlpkg/bin/tl-update-tlnet
@@ -111,7 +111,7 @@ option_doc 1
option_fmt 1
option_letter 0
option_src 1
-option_symlinks 0
+option_path 0
" >texlive.profile
echo "$0: Running test install (log: `pwd`/install.log)..."
diff --git a/Master/tlpkg/bin/tl-update-tlpdb b/Master/tlpkg/bin/tl-update-tlpdb
index d3ccd808146..9b6b5c3c2eb 100755
--- a/Master/tlpkg/bin/tl-update-tlpdb
+++ b/Master/tlpkg/bin/tl-update-tlpdb
@@ -186,7 +186,8 @@ sub create_tlpdb
}
$tldb->root ($opt_master);
# do set the option_archs from the dirs in Master/bin
- $tldb->option_available_architectures ($tltree->architectures);
+ my @archs = $tltree->architectures;
+ $tldb->setting("available_architectures", @archs);
return($tldb, $src_count);
}
diff --git a/Master/tlpkg/bin/tlpsrc2tlpdb b/Master/tlpkg/bin/tlpsrc2tlpdb
index 370aa0bbc9f..59643fc2273 100755
--- a/Master/tlpkg/bin/tlpsrc2tlpdb
+++ b/Master/tlpkg/bin/tlpsrc2tlpdb
@@ -134,7 +134,8 @@ sub main
if ($opt_all) {
$tldb->root ($opt_master);
# do set the option_archs from the dirs in Master/bin
- $tldb->option_available_architectures ($tltree->architectures);
+ my @archs = $tltree->architectures;
+ $tldb->setting("available_architectures", @archs);
$tldb->save;
info ("$0: wrote $src_count packages to ". $tldb->root . ".\n");
} else {
diff --git a/Master/tlpkg/installer/install-menu-perltk.pl b/Master/tlpkg/installer/install-menu-perltk.pl
index c9440b15c4f..e2ab24f0083 100644
--- a/Master/tlpkg/installer/install-menu-perltk.pl
+++ b/Master/tlpkg/installer/install-menu-perltk.pl
@@ -627,9 +627,9 @@ sub menu_select_symlink {
our $osym = $vars{'option_path'};
our ($binlab,$binb,$manlab,$manb,$infolab,$infob);
sub set_unset_buttons {
- $lbin = ($osym ? $vars{'sys_bin'} : '');
- $linfo = ($osym ? $vars{'sys_info'} : '');
- $lman = ($osym ? $vars{'sys_man'} : '');
+ $lbin = ($osym ? $vars{'option_sys_bin'} : '');
+ $linfo = ($osym ? $vars{'option_sys_info'} : '');
+ $lman = ($osym ? $vars{'option_sys_man'} : '');
if ($osym) {
$binlab->grid(-row => 2, -column => 1, -sticky => "w", -padx => "2m");
$binb->grid(-row => 2, -column => 2, -sticky => "ew", -padx => "2m");
@@ -654,9 +654,9 @@ sub menu_select_symlink {
$lbin =~ s/^~/$home/;
$linfo =~ s/^~/$home/;
$lman =~ s/^~/$home/;
- $vars{'sys_bin'} = $lbin;
- $vars{'sys_info'} = $linfo;
- $vars{'sys_man'} = $lman;
+ $vars{'option_sys_bin'} = $lbin;
+ $vars{'option_sys_info'} = $linfo;
+ $vars{'option_sys_man'} = $lman;
}
$vars{'option_path'} = $osym;
toggle_and_set_opt_variable(\$vars{'option_path'}, \$pathadjyesno);
diff --git a/Master/tlpkg/installer/install-menu-text.pl b/Master/tlpkg/installer/install-menu-text.pl
index d9871ed9e4e..5fcaa2ecda7 100755
--- a/Master/tlpkg/installer/install-menu-text.pl
+++ b/Master/tlpkg/installer/install-menu-text.pl
@@ -698,13 +698,13 @@ sub options_menu {
my $b_admin=button($vars{'option_w32_multi_user'});
my $b_addoneditor=button($vars{'addon_editor'});
- my $sys_bin=$vars{'sys_bin'};
- my $sys_man=$vars{'sys_man'};
- my $sys_info=$vars{'sys_info'};
+ my $sys_bin=$vars{'option_sys_bin'};
+ my $sys_man=$vars{'option_sys_man'};
+ my $sys_info=$vars{'option_sys_info'};
- my $t_sys_bin=($vars{'option_path'})? $vars{'sys_bin'}:'';
- my $t_sys_man=($vars{'option_path'})? $vars{'sys_man'}:'';
- my $t_sys_info=($vars{'option_path'})? $vars{'sys_info'}:'';
+ my $t_sys_bin=($vars{'option_path'})? $vars{'option_sys_bin'}:'';
+ my $t_sys_man=($vars{'option_path'})? $vars{'option_sys_man'}:'';
+ my $t_sys_info=($vars{'option_path'})? $vars{'option_sys_info'}:'';
my %command=(
'self' => \&options_menu,
@@ -763,24 +763,24 @@ EOF
if ($vars{'option_path'}) {
print "New value for binary directory [$sys_bin]: ";
chomp($answer=<STDIN>);
- $vars{'sys_bin'} = "$answer" if (length $answer);
- $vars{'sys_bin'} =~ s@\\@/@g if (win32());
- $vars{'sys_bin'} =~ s/^~/$home/;
- if ($vars{'sys_bin'}=~/^(.*)\/bin$/) {
- $vars{'sys_man'}="$1/man";
- $vars{'sys_info'}="$1/info";
+ $vars{'option_sys_bin'} = "$answer" if (length $answer);
+ $vars{'option_sys_bin'} =~ s@\\@/@g if (win32());
+ $vars{'option_sys_bin'} =~ s/^~/$home/;
+ if ($vars{'option_sys_bin'}=~/^(.*)\/bin$/) {
+ $vars{'option_sys_man'}="$1/man";
+ $vars{'option_sys_info'}="$1/info";
}
- print "New value for man directory [$vars{'sys_man'}]: ";
+ print "New value for man directory [$vars{'option_sys_man'}]: ";
chomp($answer=<STDIN>);
- $vars{'sys_man'}="$answer" if (length $answer);
- $vars{'sys_man'} =~ s@\\@/@g if (win32());
- $vars{'sys_man'} =~ s/^~/$home/;
+ $vars{'option_sys_man'}="$answer" if (length $answer);
+ $vars{'option_sys_man'} =~ s@\\@/@g if (win32());
+ $vars{'option_sys_man'} =~ s/^~/$home/;
- print "New value for info directory [$vars{'sys_info'}]: ";
+ print "New value for info directory [$vars{'option_sys_info'}]: ";
chomp($answer=<STDIN>);
- $vars{'sys_info'}="$answer" if (length $answer);
- $vars{'sys_info'} =~ s@\\@/@g if (win32());
- $vars{'sys_info'} =~ s/^~/$home/;
+ $vars{'option_sys_info'}="$answer" if (length $answer);
+ $vars{'option_sys_info'} =~ s@\\@/@g if (win32());
+ $vars{'option_sys_info'} =~ s/^~/$home/;
}
return $command{'self'};
}
diff --git a/Master/tlpkg/installer/install-menu-wizard.pl b/Master/tlpkg/installer/install-menu-wizard.pl
index 5048c182d6d..1c716a137de 100644
--- a/Master/tlpkg/installer/install-menu-wizard.pl
+++ b/Master/tlpkg/installer/install-menu-wizard.pl
@@ -202,7 +202,7 @@ sub ask_path {
$fmain->Label(-text => $text{'pathinfo'},
- -justify => "left")->place(-x => 0, -y => 30);
+ -justify => "left")->place(-x => 0, -y => 20);
my $ytmp = 100;
$lab->place(-x => 0, -y => $ytmp, -anchor => "w");
@@ -304,6 +304,10 @@ sub ask_options {
$_->destroy;
}
$counter->configure(-text => "3/5");
+
+ my $inf = $fmain->Label(-text => $text{"optiontitle"}, -justify => "left");
+ $inf->place(-x => 0, -y => 20);
+
my $bletter = $fmain->Checkbutton(-text => $labels{'optletter'},
-variable => \$vars{"option_letter"});
@@ -316,6 +320,9 @@ sub ask_options {
my $bpath = $fmain->Checkbutton(-text => $labels{'pathadj'},
-variable => \$vars{"option_path"});
+ my $bmulti = $fmain->Checkbutton(-text => $labels{'multiuser'},
+ -variable => \$vars{"option_w32_multi_user"});
+
calc_depends();
@@ -331,6 +338,11 @@ sub ask_options {
$ytmp += 50;
$bpath->place(-x => 0, -y => $ytmp);
+
+ if (admin()) {
+ $ytmp += 50;
+ $bmulti->place(-x => 0, -y => $ytmp);
+ }
}
$prv->configure(-text => $text{'prev'}, -command => \&ask_path );
@@ -351,7 +363,7 @@ sub ask_go {
$_->destroy;
}
$counter->configure(-text => "4/5");
- my $inf = $fmain->Label(-justify => "left", -text => $text{'readyinst'} . "\n\n" . $text{'destfolder'} . ": $dest");
+ my $inf = $fmain->Label(-justify => "left", -text => $text{'readyinst'} . "\n\n" . $text{'destfolder'} . " $dest");
$inf->place(-x => 0, -y => 100);
diff --git a/Master/tlpkg/installer/install-translations.pl b/Master/tlpkg/installer/install-translations.pl
index c75aec891e7..93331015e2f 100644
--- a/Master/tlpkg/installer/install-translations.pl
+++ b/Master/tlpkg/installer/install-translations.pl
@@ -104,6 +104,7 @@ our %text = (title => 'TeX Live 2009 Installation',
readyinst => "We are ready to install TeX Live 2009.\nThe following settings will be used.\nIf you want to change something please go back,\notherwise press the \"Install\" button.",
instshort => 'Install',
wizard => 'Go to Wizard',
+ optiontitle => 'This screen allows you to configure some options',
);
diff --git a/Master/tlpkg/installer/installer-options.txt b/Master/tlpkg/installer/installer-options.txt
index 521ff375d1c..1e8ff56b8cd 100644
--- a/Master/tlpkg/installer/installer-options.txt
+++ b/Master/tlpkg/installer/installer-options.txt
@@ -1,61 +1,79 @@
(last status change 2009-07-02)
%vars key default text perltk wizard
+ $tlpdb->option("key")
description
+ used in install-tl/tlmgr/TLMedia
----------------------------------------------------------------------------
option_doc 1 x x
+ option("install_docfiles")
install doc files
+ install-tl: sub do_install_packages
+ TLMedia.pm: sub install_package
option_src 1 x x
+ option("install_srcfiles")
install src files
+ install-tl: sub do_install_packages
+ TLMedia.pm: sub install_package
option_fmt 1 x x
+ option("create_formats")
create all formats
-
-option_letter 0 x x x
- use letter
+ install-tl: sub do_postinst_stuff
+ tlmgr: sub handle_execute_actions
option_file_assocs 0 w32 w32 w32
+ option("file_assocs")
file associations postaction
+ install-tl: sub do_tlpdb_postactions
+ TLMedia: remove_package, install_package
option_desktop_integration 0 (1 w32) w32 w32 w32
+ option("desktop_integration")
shortcuts etc
currently effects w32 only
+ install-tl: sub do_tlpdb_postactions
+ TLMedia: remove_package, install_package
option_post_code 1
+ option("post_code")
postaction code
+ install-tl: sub do_tlpdb_postactions
+ TLMedia: remove_package, install_package
+
+option_sys_bin/man/info /u/l/... unix unix
+ option("sys_bin") ...
+ unix link dests (if option_path == 1)
+ TLPDB add/remove_symlinks
+ (via tlmgr action_symlinks and install-tl do_path_adjustments)
-option_w32_multi_user 1 w32 w32 ??
+option_w32_multi_user 1 w32 w32 w32
+ option("w32_multi_user")
sysadmin as multi user
+ install-tl: sub do_path_adjustments
+ TLMedia: remove_package, install_package
+
+option_letter 0 x x x
+ not saved into the local TLPDB
+ only for install time setting
+ use letter
+ install-tl: sub do_postinst_stuff
option_path 0 x x w32??
path adjustment
+ not saved into the local TLPDB
+ only for install time setting
(unix symlinks, w32 reg)
-sys_bin/man/info /u/l/... x x
- unix link dests (if option_path == 1)
-
addon_editor 0 w32 w32 -
+ not saved into the local TLPDB
+ only for install time setting
install texworks
-w32 are things only visible on w32
-(x) are things that should be done
-?? are things I am not sure
-- are things that are not relevant
-
-Comments:
-1) in perltk mode the desktop_integration is shown for all, but on unix
- it triggers the link destination (so option_path)
-
-
-Question/Statements:
-- perltk is wrong to mix desktop_integration with path_adjustments!
- it should have separate questions
-- perltk should show desktop_integration only for w32 (as long as we
- only support actions there)
-- wizard should not ask for texworks
- done
-- wizard should ask for file_assocs, desktop_integration, path
- done
-- should the wizard ask for w32_multi_user?
+unix are things only visible on unix
+w32 are things only visible on w32
+(x) are things that should be done
+?? are things I am not sure
+- are things that are not relevant
diff --git a/Master/tlpkg/tlpsrc/00texlive.installation.tlpsrc b/Master/tlpkg/tlpsrc/00texlive.installation.tlpsrc
index 69acf2f69be..3a1862ad29e 100644
--- a/Master/tlpkg/tlpsrc/00texlive.installation.tlpsrc
+++ b/Master/tlpkg/tlpsrc/00texlive.installation.tlpsrc
@@ -8,6 +8,19 @@ longdesc 2. on an installed system it serves as a configuration file.
longdesc We have to remember these settings for additional package
longdesc installation, removal, etc.
longdesc
+longdesc There are two types here:
+longdesc - If the key starts with opt_ this is an options that can be
+longdesc set by the user either at installation time or via tlmgr later on
+longdesc - If the key starts with setting_ this value cannot be changed
+longdesc by the user directly with tlmgr, but only by other actions.
+longdesc Currently there are only two settings supported of which one
+longdesc is only used in special cases:
+longdesc . setting_available_architectures lists all available platforms
+longdesc and should be always present
+longdesc . setting_platform *overrides* the auto-deteced platform. This
+longdesc setting will only be present when you forced a sepcific
+longdesc architecture with -force-arch to install-tl
+longdesc
longdesc The value of __MASTER__ for the location field tells the
longdesc installer to use the present directory itself. For example,
longdesc the DVD can be mounted anywhere and we want the installer to work.
@@ -17,8 +30,7 @@ longdesc All packages starting with 00texlive are considered virtual packages
longdesc in the sense that no containers are generated and these packages
longdesc are never split into .src and .doc sub-packages in the tlpdb.
-depend platform:
-depend location:__MASTER__
+depend opt_location:__MASTER__
depend opt_paper:a4
depend opt_create_formats:1
depend opt_desktop_integration:0