summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2022-05-06 10:02:13 +0900
committerNorbert Preining <norbert@preining.info>2022-06-06 08:18:55 +0900
commit10e7f2d6a8baa35122cd1977d7eeb28baacdb39b (patch)
treefda8bb445014bd2631b8861d62cbc9d074a817d3
parent6508d94a133775c00a40256e3b31a49ece9abeec (diff)
install-tl: support setting vars on cmd line, no-interactive install
-rwxr-xr-xMaster/install-tl106
1 files changed, 81 insertions, 25 deletions
diff --git a/Master/install-tl b/Master/install-tl
index 862858c75fa..f4c2106caba 100755
--- a/Master/install-tl
+++ b/Master/install-tl
@@ -296,6 +296,11 @@ my $opt_version = 0;
my $opt_warn_checksums = 1;
my $opt_font;
my $opt_continue = 1;
+# no-interactive installation
+my $opt_interactive = 1;
+my $opt_paper = "";
+my $opt_texdir = "";
+my %pathopts;
# unusual cases:
$::opt_select_repository = 0;
our $opt_in_place = 0;
@@ -383,13 +388,22 @@ GetOptions(
"location|url|repository|repos|repo=s" => \$opt_location,
"no-cls", # $::opt_no_cls in install-menu-text-pl
"no-gui" => \$opt_no_gui,
+ "interactive!", => \$opt_interactive,
"non-admin" => \$opt_nonadmin,
+ "paper=s" => \$opt_paper,
"persistent-downloads!" => \$opt_persistent_downloads,
"portable" => \$opt_portable,
"print-platform|print-arch" => \$opt_print_arch,
"profile=s" => \$opt_profile,
"scheme=s" => \$opt_scheme,
"select-repository" => \$::opt_select_repository,
+ "texdir=s" => \$opt_texdir,
+ "texmflocal=s" => \$pathopts{'texmflocal'},
+ "texmfhome=s" => \$pathopts{'texmfhome'},
+ "texmfvar=s" => \$pathopts{'texmfvar'},
+ "texmfconfig=s" => \$pathopts{'texmfconfig'},
+ "texmfsysvar=s" => \$pathopts{'texmfsysvar'},
+ "texmfsysconfig=s" => \$pathopts{'texmfsysconfig'},
"font=s" => \$opt_font,
"tcl", # handled by wrapper
"verify-downloads!" => \$opt_verify_downloads,
@@ -610,7 +624,7 @@ if (!setup_programs ("$::installerdir/tlpkg/installer", "$::_platform_")) {
}
-if ($opt_profile eq "") {
+if ($opt_profile eq "" && $opt_interactive) {
if ($opt_init_from_profile) {
read_profile("$opt_init_from_profile", seed => 1);
}
@@ -687,7 +701,7 @@ if ($opt_profile eq "") {
if (!do_remote_init()) {
die ("Exiting installation.\n");
}
- read_profile($opt_profile);
+ read_profile($opt_profile) if ($opt_profile ne "");
}
my $varsdump = "";
@@ -1219,14 +1233,26 @@ operations might be disturbed.\n\n";
# now work through the options if specified at all
my $env_paper = $ENV{"TEXLIVE_INSTALL_PAPER"};
- if (defined $env_paper && $env_paper eq "letter") {
- $vars{'instopt_letter'} = 1;
- } elsif (defined $env_paper && $env_paper eq "a4") {
- ; # do nothing
- } elsif ($env_paper) {
- tlwarn("$0: TEXLIVE_INSTALL_PAPER value must be letter or a4, not: "
- . "$env_paper (ignoring)\n");
+ if (defined $env_paper) {
+ if ($env_paper eq "letter") {
+ $vars{'instopt_letter'} = 1;
+ } elsif ($env_paper eq "a4") {
+ ; # do nothing
+ } else {
+ tlwarn("$0: TEXLIVE_INSTALL_PAPER value must be letter or a4, not: "
+ . "$env_paper (ignoring)\n");
+ }
+ } elsif ($opt_paper) {
+ if ($opt_paper eq "letter") {
+ $vars{'instopt_letter'} = 1;
+ } elsif ($opt_paper eq "a4") {
+ ; # do nothing
+ } else {
+ tlwarn("$0: cmd line option --paper value must be letter or a4, not: "
+ . "$opt_paper (ignoring)\n");
+ }
}
+
# letter instead of a4
if ($vars{'instopt_letter'}) {
# set paper size, but do not execute any post actions, which in this
@@ -1593,24 +1619,32 @@ sub set_var_from_alternatives {
}
sub set_standard_var {
- my ($what, $envstr, $default) = @_;
+ my ($what, $envstr, $cmdlinestr, $default) = @_;
# warn if a value was set from both the profile and
# via env var
my $envvar = getenv($envstr);
- if ($vars{$what} && $envvar && $vars{$what} ne $envvar) {
+ my $cmdlinevar = $pathopts{$cmdlinestr};
+ my %nrdefs;
+ $nrdefs{$vars{$what}} = 1 if ($vars{$what});
+ $nrdefs{$envvar} = 1 if ($envvar);
+ $nrdefs{$cmdlinevar} = 1 if ($cmdlinevar);
+ if (scalar keys %nrdefs > 1) {
+ # multiple conflicting definitions, fail!
tlwarn("Trying to define $what via conflicting settings:\n");
- tlwarn(" from envvar $envvar = $envvar($envstr)\n");
- tlwarn(" from profile = $vars{$what}\n");
- tlwarn(" Preferring the profile value!\n");
- $envvar = undef;
+ tlwarn(" from envvar $envstr = $envvar\n") if ($envvar);
+ tlwarn(" from command line argument $cmdlinestr = $cmdlinevar\n") if ($cmdlinevar);
+ tlwarn(" from profile = $vars{$what}\n") if ($vars{$what});
+ tlwarn(" Preferring the last value from above!\n");
+ # actual preference order is given via the below call
}
# default for most variables is in increasing priority
# - some default
# - setting from profile saved already in $vars{$what}
# - environment variable
set_var_from_alternatives( \$vars{$what},
- $envvar,
$vars{$what},
+ $cmdlinevar,
+ $envvar,
$default);
}
@@ -1618,14 +1652,35 @@ sub set_texlive_default_dirs {
my $homedir = (platform() =~ m/darwin/) ? "~/Library" : "~";
my $yyyy = $TeXLive::TLConfig::ReleaseYear;
#
+ # Sources of target directory settings
+ # - env variable TEXLIVE_INSTALL_PREFIX
+ # will be used with YYYY (in portable case without)
+ # - --texdir cmd line option
+ # will be used as is, similar to profile setting
+ # - profile setting
+ #
+ # first compare whether profile setting and cmd line agree if both given
+ if ($opt_texdir && $vars{'TEXDIR'}) {
+ # TODO should we really prefer profile over command line?
+ if ($opt_texdir ne $vars{'TEXDIR'}) {
+ tlwarn("Conflicting settings for installation path given:\n");
+ tlwarn(" from command line option --texdir = $opt_texdir\n");
+ tlwarn(" from profile TEXDIR = $vars{'TEXDIR'}\n");
+ tlwarn(" Preferring the profile value!\n");
+ # actual setting of preference is done below in the
+ # set_var_from_alternatives( \$vars{'TEXDIR'},
+ # call, where the order determines the preference!
+ }
+ }
my $tlprefixenv = getenv('TEXLIVE_INSTALL_PREFIX');
- if ($tlprefixenv && $vars{'TEXDIR'}) {
+ if ($tlprefixenv && ($opt_texdir || $vars{'TEXDIR'})) {
# NOTE we cannot compare these two values because the one might
# contain the YYYY part (TEXDIR) while the other is the one without.
tlwarn("Trying to set up basic path using two incompatible methods:\n");
tlwarn(" from envvar TEXLIVE_INSTALL_PREFIX = $tlprefixenv\n");
- tlwarn(" from profile TEXDIR = $vars{'TEXDIR'}\n");
- tlwarn(" Preferring the profile value!\n");
+ tlwarn(" from command line option --texdir = $opt_texdir\n") if ($opt_texdir);
+ tlwarn(" from profile TEXDIR = $vars{'TEXDIR'}\n") if ($vars{'TEXDIR'});
+ tlwarn(" Preferring the later value!\n");
$tlprefixenv = undef;
}
# first set $tex_prefix
@@ -1636,21 +1691,22 @@ sub set_texlive_default_dirs {
(win32() ? getenv('SystemDrive') . '/texlive' : '/usr/local/texlive'));
set_var_from_alternatives( \$vars{'TEXDIR'},
$vars{'TEXDIR'},
+ $opt_texdir,
($vars{'instopt_portable'} || $opt_in_place)
? $tex_prefix : "$tex_prefix/$texlive_release");
- set_standard_var('TEXMFSYSVAR', 'TEXLIVE_INSTALL_TEXMFSYSVAR',
+ set_standard_var('TEXMFSYSVAR', 'TEXLIVE_INSTALL_TEXMFSYSVAR', 'texmfsysvar',
$vars{'TEXDIR'} . '/texmf-var');
- set_standard_var('TEXMFSYSCONFIG', 'TEXLIVE_INSTALL_TEXMFSYSCONFIG',
+ set_standard_var('TEXMFSYSCONFIG', 'TEXLIVE_INSTALL_TEXMFSYSCONFIG', 'texmfsysconfig',
$vars{'TEXDIR'} . '/texmf-config');
- set_standard_var('TEXMFLOCAL', 'TEXLIVE_INSTALL_TEXMFLOCAL',
+ set_standard_var('TEXMFLOCAL', 'TEXLIVE_INSTALL_TEXMFLOCAL', 'texmflocal',
"$tex_prefix/texmf-local");
- set_standard_var('TEXMFHOME', 'TEXLIVE_INSTALL_TEXMFHOME',
+ set_standard_var('TEXMFHOME', 'TEXLIVE_INSTALL_TEXMFHOME', 'texmfhome',
"$homedir/texmf");
- set_standard_var('TEXMFVAR', 'TEXLIVE_INSTALL_TEXMFVAR',
+ set_standard_var('TEXMFVAR', 'TEXLIVE_INSTALL_TEXMFVAR', 'texmfvar',
(platform() =~ m/darwin/)
? "$homedir/texlive/$yyyy/texmf-var"
: "$homedir/.texlive$yyyy/texmf-var");
- set_standard_var('TEXMFCONFIG', 'TEXLIVE_INSTALL_TEXMFCONFIG',
+ set_standard_var('TEXMFCONFIG', 'TEXLIVE_INSTALL_TEXMFCONFIG', 'texmfconfig',
(platform() =~ m/darwin/)
? "$homedir/texlive/$yyyy/texmf-config"
: "$homedir/.texlive$yyyy/texmf-config");