summaryrefslogtreecommitdiff
path: root/Master/tlpkg/dev
diff options
context:
space:
mode:
authorNorbert Preining <preining@logic.at>2011-05-09 22:46:38 +0000
committerNorbert Preining <preining@logic.at>2011-05-09 22:46:38 +0000
commit9f55eda0e50ee25f2dc228440fbea1cc3183ade3 (patch)
tree1c2661d4d6653970c95de94f7a9f043e6793a774 /Master/tlpkg/dev
parent5299a5975ba12e66b32ab39a3b9c206a144d75fb (diff)
move files from tlpkg/dev/archive to tlpkg/archive
please don't keep two archive dirs git-svn-id: svn://tug.org/texlive/trunk@22390 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/tlpkg/dev')
-rw-r--r--Master/tlpkg/dev/archive/dev.split-desktop-integration.README18
-rw-r--r--Master/tlpkg/dev/archive/dev.split-desktop-integration.patch86
-rw-r--r--Master/tlpkg/dev/archive/dev.usermode-tlmgr.README212
-rw-r--r--Master/tlpkg/dev/archive/dev.usermode-tlmgr.patch582
4 files changed, 0 insertions, 898 deletions
diff --git a/Master/tlpkg/dev/archive/dev.split-desktop-integration.README b/Master/tlpkg/dev/archive/dev.split-desktop-integration.README
deleted file mode 100644
index ee3c6005306..00000000000
--- a/Master/tlpkg/dev/archive/dev.split-desktop-integration.README
+++ /dev/null
@@ -1,18 +0,0 @@
-split-desktop-integration
-
-I have implemented one additional installer option (and support in tlmgr)
-that splits the current
- desktop_integration
-which currently relates to both shortcuts on the desktop and in the menu
-into two options:
- desktop_integration
- menu_integration
-that do one thing.
-
-Support is written for the installer (text, perltk, wizard), and tlmgr
-(changing the settings).
-
-Karl mentioned that both options should be here, but menu_integration
-should *not* be visible for the user at installation time, and should
-only be used by $portable.
-
diff --git a/Master/tlpkg/dev/archive/dev.split-desktop-integration.patch b/Master/tlpkg/dev/archive/dev.split-desktop-integration.patch
deleted file mode 100644
index 3020684ffea..00000000000
--- a/Master/tlpkg/dev/archive/dev.split-desktop-integration.patch
+++ /dev/null
@@ -1,86 +0,0 @@
-Index: install-tl
-===================================================================
---- install-tl (revision 19696)
-+++ install-tl (working copy)
-@@ -861,15 +861,13 @@
- sub do_tlpdb_postactions {
- info ("running package specific postactions\n");
- # Run the post installation code in the postaction tlpsrc entries
-- # For now the option_desktop_integrations maps to both desktop
-- # and menu entries, but we can split that later
- my $usedtlpdb = $vars{'from_dvd'} ? $tlpdb : $localtlpdb;
- foreach my $package ($usedtlpdb->list_packages) {
- &TeXLive::TLUtils::do_postaction("install",
- $usedtlpdb->get_package($package),
- $vars{'option_file_assocs'},
-+ $vars{'option_menu_integration'},
- $vars{'option_desktop_integration'},
-- $vars{'option_desktop_integration'},
- $vars{'option_post_code'});
- }
- info ("finished with package specific postactions\n");
-@@ -1313,6 +1311,9 @@
- && ($tlpdb->option("paper") eq "letter" ? 1 : 0);
- $vars{'option_desktop_integration'} = $tlpdb->option("desktop_integration");
- $vars{'option_desktop_integration'} = 1 if win32();
-+ # we unconditionally set the menu integration, this will be done in all
-+ # cases but portable use, where we sanitize it away
-+ $vars{'option_menu_integration'} = 1;
- $vars{'option_path'} = $tlpdb->option("path");
- $vars{'option_path'} = 0 if !defined($vars{'option_path'});
- $vars{'option_path'} = 1 if win32();
-@@ -1496,6 +1497,7 @@
- $vars{'option_path'} &&= !$vars{'portable'};
- $vars{'option_file_assocs'} &&= !$vars{'portable'};
- $vars{'option_desktop_integration'} &&= !$vars{'portable'};
-+ $vars{'option_menu_integration'} &&= !$vars{'portable'};
- }
-
- sub prepare_installation {
-@@ -1635,6 +1637,7 @@
- $previoustlpdb->option_pkg("00texlive.installation",
- "create_formats");
- $vars{'option_desktop_integration'} = 1 if win32();
-+ $vars{'option_menu_integration'} = 1 if win32();
- $vars{'option_path'} =
- $previoustlpdb->option_pkg("00texlive.installation",
- "path");
-Index: texmf/scripts/texlive/tlmgrgui.pl
-===================================================================
---- texmf/scripts/texlive/tlmgrgui.pl (revision 19696)
-+++ texmf/scripts/texlive/tlmgrgui.pl (working copy)
-@@ -1098,7 +1098,7 @@
-
- if (win32()) {
- push @config_set_l,
-- $back_config_set->Label(-text => __("Create shortcuts in menu and on desktop"), -anchor => "w");
-+ $back_config_set->Label(-text => __("Create shortcuts on the desktop"), -anchor => "w");
- push @config_set_m,
- $back_config_set->Label(-textvariable => \$changeddefaults{"desktop_integration"}{'display'});
- push @config_set_r,
-Index: texmf/scripts/texlive/NEWS
-===================================================================
---- texmf/scripts/texlive/NEWS (revision 19696)
-+++ texmf/scripts/texlive/NEWS (working copy)
-@@ -6,6 +6,8 @@
- <li>set LESS='-R' and unset LESSOPEN and LESSPIPE in the environment
- before calling pod2usage.
- <li>don't load the remote db if tlmgr update is called without arguments
-+<li>menu shortcuts are installed unconditionally, the desktop_integration
-+ option only controls shortcuts on the desktop (W32)
-
- tlmgr rev 19414 (TeX Live 2010 Release Version)
-
-Index: tlpkg/TeXLive/TLConfig.pm
-===================================================================
---- tlpkg/TeXLive/TLConfig.pm (revision 19696)
-+++ tlpkg/TeXLive/TLConfig.pm (working copy)
-@@ -140,7 +140,7 @@
- "Create formats on installation" ],
- "desktop_integration" =>
- [ "b", 1, "desktop_integration",
-- "Create shortcuts (menu and desktop) in postinst" ],
-+ "Create shortcuts on the desktop in postinst" ],
- "file_assocs" =>
- [ "n:0..2", 1, "fileassocs",
- "Change file associations in postinst" ],
diff --git a/Master/tlpkg/dev/archive/dev.usermode-tlmgr.README b/Master/tlpkg/dev/archive/dev.usermode-tlmgr.README
deleted file mode 100644
index 9f1ae445d77..00000000000
--- a/Master/tlpkg/dev/archive/dev.usermode-tlmgr.README
+++ /dev/null
@@ -1,212 +0,0 @@
-Using the TeX Live Manager in Usermode
-======================================
-(to be discussed and implemented)
-(partial implementation working for install and remove is in
- tlpkg/dev/dev.usermode-tlmgr.patch)
-
-
-0. Contents
------------
-
-0. Contents
-1. Rational and definition
-2. General layout
-3. Description of actions
-4. Open questions
-5. Changes to the infrastructure
-
----------------------------------------------------------------
-
-0.1 Implementation notes
-------------------------
-
-- User has to first call
- tlmgr init-usertree [ --usertree .... ]
-- available_architectures is set to the empty list, this allows
- updating packages depending on .ARCH packages, but I am not sure
- if that is a good idea
- fixed now, only relocated packages can be installed in usermode
-- update, install, remove, paper done
-- postinstall action call -sys variant if !$opts{"usermode"}
-- most other actions exit 1 with warning if in usermode
-
----------------------------------------------------------------
-
-1. Rationale and definition
----------------------------
-
-The idea behind developing a user mode for the TeX Live Manager is
-providing a tool to manage different texmf trees for users without
-write permissions to the system TeX Live installation on a multi user
-system.
-
-If a user without write permissions to the main installation
-tree is calling tlmgr, or it is called with --user (name to be decided)
-command line argument, then tlmgr will work in "usermode" and will behave
-as specified here.
-
-Already supported actions (where no write permissions are needed):
- help, version, search, show, list, check, print-arch
-
-Actions that behave differently in usermode:
- install, update, remove, option, paper, generate, backup, restore
- uninstall, symlinks
-
-Actions that are not supported in usermode:
- arch
-
-Actions I am not sure by now
- gui
-
-------------------------------------------------------------
-
-2. General layout
------------------
-
-In usermode tlmgr manages a different texmf tree. By default it is TEXMFHOME
-but can be changed with --user-tree ... (name to be decided) (which implies
-automatically --user). The so managed texmf tree TREE contains a new toplevel
-directory
- TREE/tlpkg
-which in turns contains the tlpdb, and the sub directory tlpkg/tlpobj.
-
-The file
- TREE/tlpkg/texlive.tlpdb
-contains only the packages that have been installed into the user tree TREE
-plus additional options in the virtual package 00texlive.installation
-(like with the main installation's texlive.tlpdb).
-
-Management in user mode is only possible for "relocatable" packages, that are
-packages that share the common prefix
- $TeXLive::TLConfig::RelocPrefix
-which is set to
- texmf-dist
-That means that only a package where all files are from the texmf-dist tree
-can be managed in usermode.
-
-These packages' containers are created relocatable, that is, the files in
-the tar file do not have the "texmf-dist" part included, thus can be
-unpacked directly into TEXMFHOME. In the tlpdb this fact is advertised
-in a TLPOBJ with the new field
- relocated 1
-As an example:
- name 12many
- category Package
- revision ...
- relocated 1
- shortdesc ...
- ...
- docfiles size=98
- RELOC/doc/latex/12many/12many.pdf
- RELOC/doc/latex/12many/README
- ...
- srcfiles size=6
- RELOC/source/latex/12many/12many.dtx
- RELOC/source/latex/12many/12many.ins
- runfiles size=1
- RELOC/tex/latex/12many/12many.sty
- ...
-
-The normal installation procedure of TeX Live (i.e., currently
-TLUtils::install_package) will take care that when unpacking these
-relocated containers the missing "texmf-dist" is added.
-
------------------------------------------------
-
-3. Description of actions
--------------------------
-
-install:
- in usermode the tlmgr action install will check that the package
- and all depending packages are either all relocated, or those that
- are not relocated are already installed in the system installation.
- If this is true it will unpack all containers to be installed into
- the user tree (TEXMFHOME or the value of --user-tree) and add the
- respective packages to the user texlive.tlpdb (creating it if there
- has non be created till now).
-
- Open question: Should we support installation of dependencies at all
- or should install only work on single package in user mode. If only
- on single package, what to do with collections and other dependencies?
- Maybe the user has to install all packages by hand?
-
- Currently installing a collection installs all depending packages,
- but in contrast to normal mode does not install depending collections.
- So in *normal* mode tlmgr install collection-context would install
- collection-metapost, c-basic, c-documentation-base, too. In *usermode*
- only the packages mentioned in collection-context are installed.
-
-backup, restore, remove, update:
- in usermode the tlmgr action update will check that all packages
- to be updated are installed in the user tree, otherwise it behaves
- exactely like the system tlmgr.
-
-option:
- only acts upon the user's texlive.tlpdb
-
-paper:
- changes configuration files in user tree
-
-generate:
- creates configuration files in user tree
-
-uninstall:
- will remove all packages from the user's texlive.tlpdb, and then
- remove the tlpkg directory in the user tree
-
-symlinks:
- takes the settings from the user's texlive.tlpdb, other then that
- it behaves the same way
-
-gui:
- the GUI should be adapted to do (at least):
- - if in usermode show all packages with specification whether it is
- from user tree or system tree
- - show packags that have versions in the user tree and the system tree
- - other actions work as described above
-
-arch:
- is simply not supported because it needs access to the binary directories
- which are not in the texmf-dist prefix, so no operation is allowed
-
------------------------------------------------------------------------
-
-4. Open questions
------------------
-
-a. Post install actions:
- what should be done with post install actions:
- - fileassoc -> ignore
- - shortcuts -> make them only for the user?
- - TLPackageConfigurations (should it go anyway) ?
- - post install code scripts: we could pass the "user" argument
- so scripts can react on that
-
-b. Behaviour if system tree has been updated and provides newer packages:
- - warn the user
- - automatically remove packages in the user tree that are older NO!!!
-
-c. Currently user mode is only when installing from CD/NET, but not
- from svn/DVD. Should this be fixed?
-
---------------------------------------------------------------------------
-
-5. Changes to the infrastructure (those already known)
---------------------------------
-
-- texlive.tlpdb:
- entries can now files without any leading texmf tree, but then the
- package has to contain the "relocated 1" key/value pair
-- TLPOBJ.pm: accept new key "relocated"
-- tl-update-container:
- . add cmd line option for $opt_relative
- . adjust the tlpobj if the container was build relocatable so that
- texmf-dist prefix is removed from the files
-- TLUtils.pm
- install_package(s): check for relocatable and adjust $target by
- adding $RelocPrefix
-- tlmgr.pl
- too many to actually list them
-
----------------------------------------------------------------------------
-np, last changed 2009-05-02
diff --git a/Master/tlpkg/dev/archive/dev.usermode-tlmgr.patch b/Master/tlpkg/dev/archive/dev.usermode-tlmgr.patch
deleted file mode 100644
index 1ae6bbe98ed..00000000000
--- a/Master/tlpkg/dev/archive/dev.usermode-tlmgr.patch
+++ /dev/null
@@ -1,582 +0,0 @@
-Index: tlpkg/TeXLive/TLConfig.pm
-===================================================================
---- tlpkg/TeXLive/TLConfig.pm (revision 20263)
-+++ tlpkg/TeXLive/TLConfig.pm (working copy)
-@@ -173,7 +173,8 @@
-
- our %TLPDBSettings = (
- "platform" => [ "s", "Main platform for this computer" ],
-- "available_architectures" => [ "l", "All available/installed architectures" ]
-+ "available_architectures" => [ "l", "All available/installed architectures" ],
-+ "usertree" => [ "b", "This tree acts as user tree" ]
- );
-
- our $WindowsMainMenuName = "TeX Live $ReleaseYear";
-Index: tlpkg/TeXLive/TLMedia.pm
-===================================================================
---- tlpkg/TeXLive/TLMedia.pm (revision 20263)
-+++ tlpkg/TeXLive/TLMedia.pm (working copy)
-@@ -59,6 +59,8 @@
- }
- if (-d "$location/texmf/web2c") {
- $media = 'DVD';
-+ } elsif (-d "$location/web2c") {
-+ $media = 'DVD';
- } elsif (-d "$location/$Archive") {
- $media = 'CD';
- } else {
-@@ -247,8 +249,12 @@
- # if a package is relocatable we have to cancel the reloc prefix
- # and unset the relocated setting
- # before we save it to the local tlpdb
-- if ($tlpobj->relocated) {
-- $tlpobj->cancel_reloc_prefix;
-+ if ($reloc) {
-+ if ($totlpdb->setting("usertree")) {
-+ $tlpobj->cancel_reloc_prefix;
-+ } else {
-+ $tlpobj->replace_reloc_prefix;
-+ }
- $tlpobj->relocated(0);
- }
- # we have to write out the tlpobj file since it is contained in the
-@@ -321,7 +327,11 @@
- } elsif ($what =~ m,\.tar(\.xz)?$,) {
- my $type = defined($1) ? "xz" : "tar";
-
-- $target .= "/$TeXLive::TLConfig::RelocTree" if $reloc;
-+ if ($reloc) {
-+ if (!$totlpdb->setting("usertree")) {
-+ $target .= "/$TeXLive::TLConfig::RelocTree" if $reloc;
-+ }
-+ }
-
- # this is the case when we install from CD or the NET, or a backup
- #
-@@ -404,6 +414,7 @@
- my ($self, $pkg, %opts) = @_;
- my $localtlpdb = $self->tlpdb;
- my $tlp = $localtlpdb->get_package($pkg);
-+ my $usertree = $localtlpdb->setting("usertree");
- if (!defined($tlp)) {
- tlwarn ("$pkg: package not present, cannot remove\n");
- } else {
-@@ -430,9 +441,12 @@
- # in user mode we just remove the prefix, in normal mode we
- # replace it with texmf-dist
- # since we don't have user mode
-+
- if ($tlp->relocated) {
- for (@files) {
-- s:^$RelocPrefix/:$RelocTree/:;
-+ if (!$usertree) {
-+ s:^$RelocPrefix/:$RelocTree/:;
-+ }
- }
- }
- #
-Index: tlpkg/TeXLive/TLPOBJ.pm
-===================================================================
---- tlpkg/TeXLive/TLPOBJ.pm (revision 20263)
-+++ tlpkg/TeXLive/TLPOBJ.pm (working copy)
-@@ -473,6 +473,21 @@
- sub cancel_reloc_prefix {
- my $self = shift;
- my @docfiles = $self->docfiles;
-+ for (@docfiles) { s:^$RelocPrefix/::; }
-+ $self->docfiles(@docfiles);
-+ my @runfiles = $self->runfiles;
-+ for (@runfiles) { s:^$RelocPrefix/::; }
-+ $self->runfiles(@runfiles);
-+ my @srcfiles = $self->srcfiles;
-+ for (@srcfiles) { s:^$RelocPrefix/::; }
-+ $self->srcfiles(@srcfiles);
-+ # if there are bin files they have definitely NOT the
-+ # texmf-dist prefix, so we cannot cancel it anyway
-+}
-+
-+sub replace_reloc_prefix {
-+ my $self = shift;
-+ my @docfiles = $self->docfiles;
- for (@docfiles) { s:^$RelocPrefix/:$RelocTree/:; }
- $self->docfiles(@docfiles);
- my @runfiles = $self->runfiles;
-Index: tlpkg/TeXLive/TLUtils.pm
-===================================================================
---- tlpkg/TeXLive/TLUtils.pm (revision 20263)
-+++ tlpkg/TeXLive/TLUtils.pm (working copy)
-@@ -1279,7 +1279,7 @@
- # if a package is relocatable we have to cancel the reloc prefix
- # before we save it to the local tlpdb
- if ($tlpobj->relocated) {
-- $tlpobj->cancel_reloc_prefix;
-+ $tlpobj->replace_reloc_prefix;
- }
- $totlpdb->add_tlpobj($tlpobj);
- # we have to write out the tlpobj file since it is contained in the
-Index: texmf/scripts/texlive/tlmgr.pl
-===================================================================
---- texmf/scripts/texlive/tlmgr.pl (revision 20263)
-+++ texmf/scripts/texlive/tlmgr.pl (working copy)
-@@ -128,6 +128,8 @@
- "persistent-downloads" => "!",
- "no-execute-actions" => 1,
- "pause" => 1,
-+ "usermode" => 1,
-+ "usertree" => "=s",
- "print-platform|print-arch" => 1,
- "version" => 1,
- "help|h|?" => 1);
-@@ -333,13 +335,30 @@
- pod2usage(-msg => $msg, -exitstatus => 1, -verbose => 1, @noperldoc);
- }
-
-+ #
-+ # the main tree we will be working on
-+ $::maintree = $Master;
-+ if ($opts{"usermode"}) {
-+ # we could also try to detect that we don't have write permissions
-+ # and switch to user mode automatically
-+ if (defined($opts{"usertree"})) {
-+ $::maintree = $opts{"usertree"};
-+ } else {
-+ chomp($::maintree = `kpsewhich -var-value TEXMFHOME`);
-+ }
-+ }
-+
- # besides doing normal logging if -logfile is specified, we try to log
- # package related actions (install, remove, update) to
- # the package-log file TEXMFSYSVAR/web2c/tlmgr.log
- $packagelogged = 0; # how many msgs we logged
- chomp (my $texmfsysvar = `kpsewhich -var-value=TEXMFSYSVAR`);
- $packagelogfile = $opts{"package-logfile"};
-- $packagelogfile ||= "$texmfsysvar/web2c/tlmgr.log";
-+ if ($opts{"usermode"}) {
-+ $packagelogfile ||= "$::maintree/web2c/tlmgr.log";
-+ } else {
-+ $packagelogfile ||= "$texmfsysvar/web2c/tlmgr.log";
-+ }
- #
- # Try to open the packagelog file, but do NOT die when that does not work
- if (!open(PACKAGELOG, ">>$packagelogfile")) {
-@@ -510,6 +529,9 @@
- } elsif ($action =~ m/^show$/i) {
- action_show();
- finish(0);
-+ } elsif ($action =~ m/^init-usertree$/i) {
-+ action_init_usertree();
-+ finish(0);
- } elsif ($action =~ m/^remove$/i) {
- action_remove();
- } elsif ($action =~ /^paper$/) {
-@@ -573,6 +595,8 @@
- {
- my $errors = 0;
-
-+ my $sysmode = ($opts{"usermode"} ? "" : "-sys");
-+
- if ($::files_changed) {
- $errors += do_cmd_and_check("mktexlsr");
- $::files_changed = 0;
-@@ -603,14 +627,14 @@
- }
- }
- for my $m (keys %do_disable) {
-- $errors += do_cmd_and_check("updmap-sys --nomkmap --nohash --disable $m");
-+ $errors += do_cmd_and_check("updmap$sysmode --nomkmap --nohash --disable $m");
- }
- for my $m (keys %do_enable) {
-- my $str = "updmap-sys --nomkmap --nohash --enable " .
-+ my $str = "updmap$sysmode --nomkmap --nohash --enable " .
- $::execute_actions{'enable'}{'maps'}{$m} . "=$m";
- $errors += do_cmd_and_check($str);
- }
-- $errors += do_cmd_and_check("updmap-sys") if $run_full;
-+ $errors += do_cmd_and_check("updmap$sysmode") if $run_full;
- }
-
-
-@@ -655,7 +679,7 @@
- # first regenerate all formats --byengine
- for my $e (keys %updated_engines) {
- log ("updating formats based on $e\n");
-- $errors += do_cmd_and_check("fmtutil-sys --no-error-if-no-format --byengine $e");
-+ $errors += do_cmd_and_check("fmtutil$sysmode --no-error-if-no-format --byengine $e");
- }
- # now rebuild all other formats
- for my $f (keys %do_enable) {
-@@ -663,7 +687,7 @@
- # ignore disabled formats
- next if !$::execute_actions{'enable'}{'formats'}{$f}{'mode'};
- log ("(re)creating format dump $f\n");
-- $errors += do_cmd_and_check("fmtutil-sys --byfmt $f");
-+ $errors += do_cmd_and_check("fmtutil$sysmode --byfmt $f");
- $done_formats{$f} = 1;
- }
- }
-@@ -704,7 +728,7 @@
- }
- if ($localtlpdb->option("create_formats")
- && !$::regenerate_all_formats) {
-- $errors += do_cmd_and_check("fmtutil-sys --byhyphen $lang");
-+ $errors += do_cmd_and_check("fmtutil$sysmode --byhyphen $lang");
- }
- }
- }
-@@ -713,7 +737,7 @@
- #
- if ($::regenerate_all_formats) {
- info("Regenerating all formats, this may take some time ...");
-- $errors += do_cmd_and_check("fmtutil-sys --all");
-+ $errors += do_cmd_and_check("fmtutil$sysmode --all");
- info("done\n");
- $::regenerate_all_formats = 0;
- }
-@@ -881,8 +905,13 @@
- #
- sub action_paper {
- init_local_db();
-- chomp(my $texmfsysconfig = `kpsewhich -var-value=TEXMFSYSCONFIG`);
-- $ENV{"TEXMFCONFIG"} = $texmfsysconfig;
-+ my $texmfconfig;
-+ if ($opts{"usermode"}) {
-+ chomp($texmfconfig = `kpsewhich -var-value=TEXMFCONFIG`);
-+ } else {
-+ chomp($texmfconfig = `kpsewhich -var-value=TEXMFSYSCONFIG`);
-+ }
-+ $ENV{"TEXMFCONFIG"} = $texmfconfig;
-
- my $action = shift @ARGV;
- if ($action =~ m/^paper$/i) { # generic paper
-@@ -894,7 +923,7 @@
- "as in: tlmgr pdftex paper --list\n");
-
- } elsif (!defined($newpaper)) { # tlmgr paper => show all current sizes.
-- TeXLive::TLPaper::paper_all($texmfsysconfig,undef);
-+ TeXLive::TLPaper::paper_all($texmfconfig,undef);
-
- } elsif ($newpaper !~ /^(a4|letter)$/) { # tlmgr paper junk => complain.
- $newpaper = "the empty string" if !defined($newpaper);
-@@ -902,7 +931,7 @@
-
- } else { # tlmgr paper {a4|letter} => do it.
- return if !check_on_writable();
-- TeXLive::TLPaper::paper_all($texmfsysconfig,$newpaper);
-+ TeXLive::TLPaper::paper_all($texmfconfig,$newpaper);
- }
-
- } else { # program-specific paper
-@@ -919,7 +948,7 @@
- return if !check_on_writable();
- }
- unshift(@ARGV, "--list") if $opts{"list"};
-- TeXLive::TLPaper::do_paper($prog,$texmfsysconfig,@ARGV);
-+ TeXLive::TLPaper::do_paper($prog,$texmfconfig,@ARGV);
- }
- }
-
-@@ -971,6 +1000,7 @@
- print "longdesc: ", $tlp->longdesc, "\n" if ($tlp->longdesc);
- print "installed: ", ($installed ? "Yes" : "No"), "\n";
- print "revision: ", $tlp->revision, "\n" if ($installed);
-+ print "relocatable: ", ($tlp->relocated ? "Yes" : "No"), "\n";
- print "cat-version: ", $tlp->cataloguedata->{'version'}, "\n"
- if $tlp->cataloguedata->{'version'};
- print "cat-date: ", $tlp->cataloguedata->{'date'}, "\n"
-@@ -1071,6 +1101,10 @@
- # PATH
- #
- sub action_path {
-+ if ($opts{"usermode"}) {
-+ tlwarn("action `path' not supported in usermode!\n");
-+ exit 1;
-+ }
- my $what = shift @ARGV;
- if (!defined($what) || ($what !~ m/^(add|remove)$/i)) {
- tlwarn("tlmgr: action path needs one argument, either add or remove\n");
-@@ -2078,7 +2112,10 @@
-
- # check for updates to tlmgr and die unless either --force or --list or --self
- # is given
-- my @critical = check_for_critical_updates($localtlpdb, $tlmediatlpdb);
-+ my @critical;
-+ if (!$opts{"usermode"}) {
-+ @critical = check_for_critical_updates($localtlpdb, $tlmediatlpdb);
-+ }
- my $dry_run_cont = $opts{"dry-run"} && ($opts{"dry-run"} < 0);
- if ( !$dry_run_cont && !$opts{"self"} && @critical) {
- critical_updates_warning();
-@@ -2939,16 +2976,18 @@
- init_tlmedia();
-
- # check for updates to tlmgr itself, and die unless --force is given
-- if (check_for_critical_updates( $localtlpdb, $tlmediatlpdb)) {
-- critical_updates_warning();
-- if ($opts{"force"}) {
-- tlwarn("Continuing due to --force\n");
-- } else {
-- if ($::gui_mode) {
-- # return here and don't do any updates
-- return;
-+ if (!$opts{"usermode"}) {
-+ if (check_for_critical_updates( $localtlpdb, $tlmediatlpdb)) {
-+ critical_updates_warning();
-+ if ($opts{"force"}) {
-+ tlwarn("Continuing due to --force\n");
- } else {
-- die "tlmgr: Not continuing, please see warning above!\n";
-+ if ($::gui_mode) {
-+ # return here and don't do any updates
-+ return;
-+ } else {
-+ die "tlmgr: Not continuing, please see warning above!\n";
-+ }
- }
- }
- }
-@@ -2961,7 +3000,7 @@
- @packs = $tlmediatlpdb->expand_dependencies("-only-arch", $localtlpdb, @ARGV) unless $opts{"no-depends-at-all"};
- # now expand all others unless $opts{"no-depends"}
- # if $opts{"reinstall"} do not collection->collection dependencies
-- if ($opts{"reinstall"}) {
-+ if ($opts{"reinstall"} || $opts{"usermode"}) {
- @packs = $tlmediatlpdb->expand_dependencies("-no-collections", $localtlpdb, @packs) unless $opts{"no-depends"};
- } else {
- @packs = $tlmediatlpdb->expand_dependencies($localtlpdb, @packs) unless $opts{"no-depends"};
-@@ -3029,6 +3068,15 @@
- foreach my $pkg (@todo) {
- my $flag = $FLAG_INSTALL;
- my $re = "";
-+ my $tlp = $tlmediasrc->tlpdb->get_package($pkg);
-+ if (!defined($tlp)) {
-+ info("Unknown package $pkg\n");
-+ next;
-+ }
-+ if (!$tlp->relocated && $opts{"usermode"}) {
-+ info("Package $pkg is not relocatable, cannot install it in user mode!\n");
-+ next;
-+ }
- if (defined($localtlpdb->get_package($pkg))) {
- if ($opts{"reinstall"}) {
- $re = "re";
-@@ -3248,11 +3296,11 @@
- # now also save the TLPOBJ of 00texlive.installation
- my $tlpo = $localtlpdb->get_package("00texlive.installation");
- if ($tlpo) {
-- if (open(TOFD, ">$Master/tlpkg/tlpobj/00texlive.installation.tlpobj")) {
-+ if (open(TOFD, ">$::maintree/tlpkg/tlpobj/00texlive.installation.tlpobj")) {
- $tlpo->writeout(\*TOFD);
- close(TOFD);
- } else {
-- tlwarn("Cannot save 00texlive.installation to $Master/tlpkg/tlpobj/00texlive.installation.tlpobj\n");
-+ tlwarn("Cannot save 00texlive.installation to $::maintree/tlpkg/tlpobj/00texlive.installation.tlpobj\n");
- }
- }
- } else {
-@@ -3285,6 +3333,10 @@
- warn("action `platform' not supported on Windows\n");
- return();
- }
-+ if ($opts{"usermode"}) {
-+ tlwarn("action `platform' not supported in usermode\n");
-+ exit 1;
-+ }
- my $what = shift @ARGV;
- init_local_db(1);
- info("platform: dry run, no changes will be made\n") if $opts{"dry-run"};
-@@ -3421,6 +3473,10 @@
- # GENERATE
- #
- sub action_generate {
-+ if ($opts{"usermode"}) {
-+ tlwarn("action `generate' not supported in usermode!\n");
-+ exit 1;
-+ }
- my $what = shift @ARGV;
- init_local_db();
-
-@@ -4284,6 +4340,35 @@
- }
- }
-
-+# INIT USER TREE
-+# sets up the user tree for tlmgr in user mode
-+sub action_init_usertree {
-+ init_local_db();
-+ my $tlpdb = TeXLive::TLPDB->new;
-+ my $usertree;
-+ if ($opts{"usertree"}) {
-+ $usertree = $opts{"usertree"};
-+ } else {
-+ chomp($usertree = `kpsewhich -var-value TEXMFHOME`);
-+ }
-+ $tlpdb->root($usertree);
-+ my $inst = TeXLive::TLPOBJ->new;
-+ $inst->name("00texlive.installation");
-+ $inst->category("TLCore");
-+ my @deps;
-+ push @deps, "opt_location:$location";
-+ push @deps, "setting_available_architectures:";
-+ push @deps, "setting_usertree:1";
-+ $inst->depends(@deps);
-+ $tlpdb->add_tlpobj($inst);
-+ $tlpdb->save;
-+ #
-+ # we need to create web2c dir for TLMedia to succeed setting up
-+ # and for tlmgr.log file
-+ mkdir ("$usertree/web2c");
-+ mkdir ("$usertree/tlpkg/tlpobj");
-+}
-+
- # CONF
- # tries to mimic texconfig conf but can also set values for both tlmgr
- # and texmf conf files.
-@@ -4408,10 +4493,10 @@
- # stuff changed via the GUI
- return if defined $localtlmedia;
- return if defined $localtlpdb;
-- $localtlmedia = TeXLive::TLMedia->new ( $Master );
-- die("cannot setup TLMedia in $Master") unless (defined($localtlmedia));
-+ $localtlmedia = TeXLive::TLMedia->new ( $::maintree );
-+ die("cannot setup TLMedia in $::maintree") unless (defined($localtlmedia));
- $localtlpdb = $localtlmedia->tlpdb;
-- die("cannot find tlpdb in $Master") unless (defined($localtlpdb));
-+ die("cannot find tlpdb in $::maintree") 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", $localtlmedia->platform)) {
-@@ -4845,6 +4930,7 @@
- }
-
- sub check_on_writable {
-+ return 1 if $opts{"usermode"};
- if (!TeXLive::TLUtils::dir_writable("$Master/tlpkg")) {
- tlwarn("You don't have permission to change the installation in any way,\n");
- tlwarn("specifically, the directory $Master/tlpkg/ is not writable.\n");
-@@ -5017,6 +5103,15 @@
- likely untranslated, messages to standard error. Helpful for
- translators to see what remains to be done.
-
-+=item B<--usermode>
-+
-+Activates the user mode, see L<USER MODE> below.
-+
-+=item B<--usertree> I<dir>
-+
-+Uses I<dir> as user tree in user mode, seel L<USER MODE> below.
-+
-+
- =back
-
- The standard options for TeX Live programs are also accepted:
-@@ -5923,7 +6018,110 @@
- C<updmap-local.cfg>, you need to run C<tlmgr generate updmap> yourself
- after making any local changes.
-
-+
-+=head2 init-usertree
-
-+sets up the default user tree (C<TEXMFHOME>) or the one specified
-+on the command line using C<--usertree> for user mode management.
-+See L<USER MODE> below.
-+
-+
-+=head1 USER MODE
-+
-+B<WARNING> B<WARNING> B<WARNING>
-+This is very much work in progress
-+and experimental. Expect breakage, and the need to reinstall your
-+user tree a new.
-+
-+C<tlmgr> provides a restricted way to manage arbitrary texmf trees
-+in the same way as the installation. This allows a user without write
-+permissions to the installation location to update/install packages
-+into a user tree.
-+
-+C<tlmgr> is set into user mode by giving the command line option
-+C<--usermode>. It will not switch automatically, nor does it support
-+a config file by now. Thus, this option has to be given every time.
-+
-+This mode of C<tlmgr> works on a user tree, which by default will be
-+the value of C<TEXMFHOME>, but can be overridden with the command line
-+option C<--usertree>. In the following when we speak of the user tree
-+we mean either C<TEXMFHOME> or the one given on the command line.
-+
-+Not all actions are allowed in user mode, C<tlmgr> will warn you and
-+not carry out this action. The actions of C<tlmgr> can be classified into
-+those that don't need write permissions and thus are working the same
-+in user mode or normal mode. Currently these are
-+B<help>, B<version>, B<search>, B<show>, B<list>, B<check>, B<print-arch>.
-+
-+Most of the actions dealing with package management on the other hand
-+need write permissions, and behave differently:
-+B<install>, B<update>, B<remove>, B<option>, B<paper>, B<generate>,
-+B<backup>, B<restore>, B<uninstall>, B<symlinks>.
-+
-+Currently not supported (and probably will never be) is the B<arch>
-+action.
-+
-+As for the B<gui> action it is currently not supported, but might be
-+in future.
-+
-+Before using C<tlmgr> in user mode, you have to set up the user tree
-+with the B<init-usertree> action. This will create C<USERTREE/web2c>,
-+C<USERTREE/tlpkg/tlpobj> and set up a minimal C<USERTREE/tlpkg/texlive.tlpdb>.
-+From then on you can use the supported actions as normal by adding
-+the C<--usermode> command line switch.
-+
-+In user mode the file C<USERTREE/tlpkg/texlive.tlpdb> contains only the
-+packages that have been installed into the user tree C<USERTREE> using
-+C<tlmgr>, plus additional options in the virtual package
-+00texlive.installation (like with the main installation's texlive.tlpdb).
-+
-+All actions on packages in user mode can only be carried out on packages
-+that are marked as B<relocatable>. Basically that means that the contained
-+files all reside in the C<texmd-dist> tree. B<NOTE> That already excludes
-+all binary packages! Of the currently about 1900 packages the majority,
-+currently about 1750, are relocatable, i.e., they can be installed into
-+a user tree.
-+
-+Description of changes of actions in user mode:
-+
-+=head2 install
-+
-+in usermode the tlmgr action install will check that the package
-+and all depending packages are either all relocated, or those that
-+are not relocated are already installed in the system installation.
-+If this is true it will unpack all containers to be installed into
-+the user tree (TEXMFHOME or the value of --user-tree) and add the
-+respective packages to the user texlive.tlpdb (creating it if there
-+has non be created till now).
-+
-+Currently installing a collection installs all depending packages,
-+but in contrast to normal mode does not install depending collections.
-+So in *normal* mode tlmgr install collection-context would install
-+collection-metapost, c-basic, c-documentation-base, too. In *usermode*
-+only the packages mentioned in collection-context are installed.
-+
-+=head2 backup, restore, remove, update
-+
-+in usermode the tlmgr action update will check that all packages
-+to be updated are installed in the user tree, otherwise it behaves
-+exactely like the system tlmgr.
-+
-+=head2 option
-+
-+only acts upon the user's texlive.tlpdb
-+
-+=head2 paper
-+
-+changes configuration files in user tree
-+
-+=head2 generate
-+
-+creates configuration files in user tree
-+
-+B<WARNING WARNING WARNING> Be again warned that this is very experimental!
-+
-+
-+
- =head1 CONFIGURATION FILE
-
- A small subset of the command line options can be set in a config file