summaryrefslogtreecommitdiff
path: root/Master
diff options
context:
space:
mode:
authorNorbert Preining <preining@logic.at>2009-06-08 14:57:10 +0000
committerNorbert Preining <preining@logic.at>2009-06-08 14:57:10 +0000
commit95eb7ead780f7de930d678a7ba295b27fa6d587e (patch)
tree6d06b40304d8b7a7c3dabda132d982900c73b7ed /Master
parentde09651f8c907cf30b668e414ff9da7b1f232a6e (diff)
rework execute action handling so that it actually works, hopefully
that means that: - handle_ret_hash is renamed to handle_execute_actions - make_ret_hash_from_execute is gone and replaced by TLUtils::announce_execute_actions git-svn-id: svn://tug.org/texlive/trunk@13671 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rwxr-xr-xMaster/texmf/scripts/texlive/tlmgr.pl242
-rwxr-xr-xMaster/texmf/scripts/texlive/tlmgrgui/tlmgrgui.pl4
-rw-r--r--Master/tlpkg/TeXLive/TLMedia.pm13
-rw-r--r--Master/tlpkg/TeXLive/TLPOBJ.pm41
-rw-r--r--Master/tlpkg/TeXLive/TLPaper.pm36
-rw-r--r--Master/tlpkg/TeXLive/TLUtils.pm50
6 files changed, 206 insertions, 180 deletions
diff --git a/Master/texmf/scripts/texlive/tlmgr.pl b/Master/texmf/scripts/texlive/tlmgr.pl
index 0c21efda53b..9bde01ab219 100755
--- a/Master/texmf/scripts/texlive/tlmgr.pl
+++ b/Master/texmf/scripts/texlive/tlmgr.pl
@@ -69,7 +69,7 @@ use TeXLive::TLPOBJ;
use TeXLive::TLUtils;
use TeXLive::TLWinGoo;
TeXLive::TLUtils->import(qw(member info give_ctan_mirror win32 dirname
- mkdirhier merge_into copy log debug));
+ mkdirhier copy log debug));
use TeXLive::TLPaper;
@@ -295,7 +295,6 @@ execute_action($action, @ARGV);
sub execute_action {
my ($action, @argv) = @_;
- my %ret;
# we have to set @ARGV to the @argv since many of the action_* subs
# use GetOption
@@ -349,45 +348,45 @@ sub execute_action {
print "$loc\n";
finish(0);
} elsif ($action =~ m/^generate$/i) {
- merge_into(\%ret, action_generate());
+ action_generate();
} elsif ($action =~ m/^gui$/i) {
action_gui();
} elsif ($action =~ m/^arch$/i) {
- merge_into(\%ret, action_arch());
+ action_arch();
} elsif ($action =~ m/^option$/i) {
- merge_into(\%ret, action_option());
+ action_option();
finish(0);
} elsif ($action =~ m/^list$/i) {
- merge_into(\%ret, action_list());
+ action_list();
finish(0);
} elsif ($action =~ m/^check$/i) {
- merge_into(\%ret, action_check());
+ action_check();
} elsif ($action =~ m/^install$/i) {
- merge_into(\%ret, action_install());
+ action_install();
} elsif ($action =~ m/^update$/i) {
- merge_into(\%ret, action_update());
+ action_update();
} elsif ($action =~ m/^backup$/i) {
- merge_into(\%ret, action_backup());
+ action_backup();
} elsif ($action =~ m/^restore$/i) {
- merge_into(\%ret, action_restore());
+ action_restore();
} elsif ($action =~ m/^symlinks$/i) {
- merge_into(\%ret, action_symlinks());
+ action_symlinks();
finish(0);
} elsif ($action =~ m/^search$/i) {
- merge_into(\%ret, action_search());
+ action_search();
finish(0);
} elsif ($action =~ m/^show$/i) {
- merge_into(\%ret, action_show());
+ action_show();
finish(0);
} elsif ($action =~ m/^remove$/i) {
- merge_into(\%ret, action_remove());
+ action_remove();
} elsif ($action =~ /^paper$/) {
- merge_into(\%ret, action_paper());
+ action_paper();
} elsif ($action =~ m/^uninstall$/i) {
- merge_into(\%ret, action_uninstall());
+ action_uninstall();
finish(0);
} elsif ($action =~ m/^recreate-tlpdb$/i) {
- merge_into(\%ret, action_recreate_tlpdb());
+ action_recreate_tlpdb();
finish(0);
} else {
die "$0: unknown action: $action; try --help if you need it.\n";
@@ -400,7 +399,7 @@ sub execute_action {
}
# run external programs.
- my $error_count = &handle_ret_hash(%ret);
+ my $error_count = &handle_execute_actions();
# done, just in case there are 256 errors.
finish($error_count ? 1 : 0);
@@ -430,73 +429,127 @@ sub do_cmd_and_check {
# If the "map" key is specified, the value may be a reference to a list
# of map command strings to pass to updmap, e.g., "enable Map=ascii.map".
#
-sub handle_ret_hash {
- my (%ret) = @_;
+sub handle_execute_actions {
+
my $errors = 0;
- if (exists $ret{'mktexlsr'}) {
+ if ($::files_changed) {
$errors += do_cmd_and_check("mktexlsr");
}
- if (exists $ret{'map'}) {
- # We run updmap-sys instead of calling our create_updmap() function
- # (as we do for formats and languages), because many users run
- # updmap themselves (not using our local cfg feature), since that's
- # been the documented way to add fonts for many years. If we called
- # create_updmap, such user maps would be lost.
- foreach my $m (@{$ret{'map'}}) {
- $errors += do_cmd_and_check("updmap-sys --nomkmap --nohash --$m");
+ #
+ # maps handling
+ # if enabled and disabled -> do nothing
+ # if only enabled -> enable it
+ # if only disabled -> disable it
+ {
+ my %do_enable;
+ my %do_disable;
+ my $run_full = 0;
+ for my $m (keys %{$::execute_actions{'enable'}{'maps'}}) {
+ $run_full = 1;
+ $do_enable{$m} = 1;
+ }
+ for my $m (keys %{$::execute_actions{'disable'}{'maps'}}) {
+ $run_full = 1;
+ if (defined($do_enable{$m})) {
+ # we are upgrading because it is disabled and enabled, so
+ # delete the entry in do_enable, it is already
+ delete $do_enable{$m};
+ } else {
+ # not new installed, so simply removed
+ $do_disable{$m} = 1;
+ }
}
- $errors += do_cmd_and_check("updmap-sys"); # runs mktexlsr.
+ for my $m (keys %do_disable) {
+ $errors += do_cmd_and_check("updmap-sys --nomkmap --nohash --disable $m");
+ }
+ for my $m (keys %do_enable) {
+ my $str = "updmap-sys --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;
}
+
chomp(my $TEXMFSYSVAR = `kpsewhich -var-value=TEXMFSYSVAR`);
chomp(my $TEXMFLOCAL = `kpsewhich -var-value=TEXMFLOCAL`);
+
# format means create missing formats (because a new one was added).
# format-regenerate is used when the paper size changes. In that
# case, if option_create_formats is set, we simply want to generate
# all formats; if not, then we only want to refresh existing ones.
#
- my $opt_fmt = $localtlpdb->option_create_formats;
- if (exists $ret{'format'}) {
- info("regenerating fmtutil.cnf in $TEXMFSYSVAR\n");
- TeXLive::TLUtils::create_fmtutil($localtlpdb,
- "$TEXMFSYSVAR/web2c/fmtutil.cnf",
- "$TEXMFLOCAL/web2c/fmtutil-local.cnf");
- if ($opt_fmt && !$ret{'format-regenerate'}) {
- $errors += do_cmd_and_check("fmtutil-sys --missing");
+ {
+ my %do_enable;
+ my $do_full = 0;
+ for my $m (keys %{$::execute_actions{'enable'}{'formats'}}) {
+ $do_full = 1;
+ $do_enable{$m} = 1;
+ }
+ for my $m (keys %{$::execute_actions{'disable'}{'formats'}}) {
+ $do_full = 1;
+ }
+ my $opt_fmt = $localtlpdb->option_create_formats;
+ if ($do_full) {
+ info("regenerating fmtutil.cnf in $TEXMFSYSVAR\n");
+ TeXLive::TLUtils::create_fmtutil($localtlpdb,
+ "$TEXMFSYSVAR/web2c/fmtutil.cnf",
+ "$TEXMFLOCAL/web2c/fmtutil-local.cnf");
+ }
+ if ($opt_fmt && !$::regenerate_all_formats) {
+ for my $f (keys %do_enable) {
+ info ("(re)creating format dump $f\n");
+ $errors += do_cmd_and_check("fmtutil-sys --byfmt $f");
+ }
}
}
- #
- if (exists $ret{'format-regenerate'}) {
- my $a = $opt_fmt ? "--all" : "--refresh";
- $errors += do_cmd_and_check("fmtutil-sys $a");
- }
- if (exists $ret{'language'}) {
- for my $ext ("dat", "def") {
- my $lang = "language.$ext";
- info("regenerating $lang\n");
+ #
+ # hyphenation patterns
+ # if something has changed do the whole stuff ...
+ {
+ my $do_something = 0;
+ for my $m (keys %{$::execute_actions{'enable'}{'hyphens'}}) {
+ $do_something = 1;
+ last;
+ }
+ for my $m (keys %{$::execute_actions{'disable'}{'hyphens'}}) {
+ $do_something = 1;
+ last;
+ }
+
+ if ($do_something) {
+ for my $ext ("dat", "def") {
+ my $lang = "language.$ext";
+ info("regenerating $lang\n");
- my $arg1 = "$TEXMFSYSVAR/tex/generic/config/language.$ext";
- my $arg2 = "$TEXMFLOCAL/tex/generic/config/language-local.dat";
- if ($ext eq "dat") {
- TeXLive::TLUtils::create_language_dat($localtlpdb, $arg1, $arg2);
- } else {
- TeXLive::TLUtils::create_language_def($localtlpdb, $arg1, $arg2);
- }
+ my $arg1 = "$TEXMFSYSVAR/tex/generic/config/language.$ext";
+ my $arg2 = "$TEXMFLOCAL/tex/generic/config/language-local.dat";
+ if ($ext eq "dat") {
+ TeXLive::TLUtils::create_language_dat($localtlpdb, $arg1, $arg2);
+ } else {
+ TeXLive::TLUtils::create_language_def($localtlpdb, $arg1, $arg2);
+ }
- if (! TeXLive::TLUtils::win32()) {
- # Use full path for external command, except on Windows.
- $lang = "$TEXMFSYSVAR/tex/generic/config/$lang";
- }
- if ($localtlpdb->option_create_formats) {
- $errors += do_cmd_and_check("fmtutil-sys --byhyphen $lang");
+ if (! TeXLive::TLUtils::win32()) {
+ # Use full path for external command, except on Windows.
+ $lang = "$TEXMFSYSVAR/tex/generic/config/$lang";
+ }
+ if ($localtlpdb->option_create_formats && !$::regenerate_all_formats) {
+ $errors += do_cmd_and_check("fmtutil-sys --byhyphen $lang");
+ }
}
}
}
+ #
+ if ($::regenerate_all_formats) {
+ $errors += do_cmd_and_check("fmtutil-sys --all");
+ }
+
return $errors;
}
@@ -540,7 +593,6 @@ sub action_remove {
# . check that no collection/scheme still depends on this package
# . remove the package
#
- my %ret;
$opts{"no-depends"} = 1 if $opts{"no-depends-at-all"};
my %already_removed;
my @more_removal;
@@ -605,21 +657,15 @@ sub action_remove {
# save the information of which packages have already been removed
# into %already_removed.
if ($tlp->category eq "Collection") {
- my %foo;
+ my $foo = 0;
info ("remove $pkg\n");
- if ($opts{"dry-run"}) {
- # we need to set $foo to something positive otherwise
- # the rest will not be run in dry_run mode
- $foo{'mktexlsr'} = 1;
- } else {
- merge_into(\%foo,
- $localtlmedia->remove_package($pkg));
+ if (!$opts{"dry-run"}) {
+ $foo = $localtlmedia->remove_package($pkg);
logpackage("remove: $pkg");
}
- if (keys %foo) {
+ if ($foo) {
# removal was successful, so the return is at least 0x0001 mktexlsr
# remove dependencies, too
- merge_into(\%ret, \%foo);
$already_removed{$pkg} = 1;
}
} else {
@@ -635,13 +681,9 @@ sub action_remove {
if (!defined($already_removed{$pkg})) {
info ("remove $pkg\n");
if (!$opts{"dry-run"}) {
- my %foo;
- merge_into(\%foo,
- $localtlmedia->remove_package($pkg));
- if (keys %foo) {
+ if ($localtlmedia->remove_package($pkg)) {
# removal was successful
logpackage("remove: $pkg");
- merge_into(\%ret, \%foo);
$already_removed{$pkg} = 1;
}
}
@@ -658,7 +700,6 @@ sub action_remove {
} else {
info("tlmgr: no packages removed.\n");
}
- return(\%ret);
}
}
@@ -670,7 +711,6 @@ sub action_remove {
# [xdvi|...|context] paper [help|papersize|--list]
#
sub action_paper {
- my %ret = ();
action_gui("config") if $opts{"gui"};
init_local_db();
@@ -694,7 +734,7 @@ sub action_paper {
tlwarn("tlmgr: expected `a4' or `letter' after paper, not $newpaper\n");
} else { # tlmgr paper {a4|letter} => do it.
- merge_into(\%ret,TeXLive::TLPaper::paper_all($texmfsysconfig,$newpaper));
+ TeXLive::TLPaper::paper_all($texmfsysconfig,$newpaper);
}
} else { # program-specific paper
@@ -708,9 +748,8 @@ sub action_paper {
# the do_paper progs check for the argument --list, so if given
# restore it to the cmd line.
unshift(@ARGV, "--list") if $opts{"list"};
- merge_into(\%ret, TeXLive::TLPaper::do_paper($prog,$texmfsysconfig,@ARGV));
+ TeXLive::TLPaper::do_paper($prog,$texmfsysconfig,@ARGV);
}
- return \%ret;
}
@@ -806,7 +845,6 @@ sub action_show {
# SYMLINKS
#
sub action_symlinks {
- my %ret;
my $what = shift @ARGV;
if (!defined($what) || ($what !~ m/^(add|remove)$/i)) {
tlwarn("action symlinks needs one argument, either add or remove\n");
@@ -829,7 +867,6 @@ sub action_symlinks {
# SEARCH
#
sub action_search {
- my %ret;
my $r = shift @ARGV;
my $ret = "";
my $tlpdb;
@@ -879,7 +916,6 @@ sub action_restore {
# lists all revisions of pkg
# tlmgr restore --backupdir dir pkg rev
# restores pkg to revision rev
- my %ret;
# check the backup dir argument
if ($opts{"backupdir"}) {
my $ob = abs_path($opts{"backupdir"});
@@ -955,20 +991,20 @@ sub action_restore {
# first remove the package, then reinstall it
# this way we get rid of useless files
$opts{"backupdir"} = abs_path($opts{"backupdir"});
- merge_into(\%ret, $localtlmedia->remove_package($pkg));
+ $localtlmedia->remove_package($pkg);
TeXLive::TLMedia->_install_package("$opts{'backupdir'}/${pkg}.r${rev}.tar.xz" , [] ,$localtlpdb);
logpackage("restore: $pkg ($rev)");
# now we have to read the .tlpobj file and add it to the DB
my $tlpobj = TeXLive::TLPOBJ->new;
$tlpobj->from_file($localtlpdb->root . "/tlpkg/tlpobj/$pkg.tlpobj");
$localtlpdb->add_tlpobj($tlpobj);
- merge_into(\%ret, $localtlpdb->get_package($pkg)->make_return_hash_from_executes("enable"));
+ TeXLive::TLUtils::announce_execute_actions("enable",
+ $localtlpdb->get_package($pkg));
$localtlpdb->save;
}
} else {
print "revision $rev for $pkg is not present in $opts{'backupdir'}\n";
}
- return \%ret;
}
sub action_backup {
@@ -1048,7 +1084,6 @@ sub action_backup {
}
}
- my %ret;
my @todo;
if ($opts{"all"}) {
@todo = $localtlpdb->list_packages;
@@ -1072,7 +1107,6 @@ sub action_backup {
}
}
}
- return(\%ret);
}
#
@@ -1204,7 +1238,6 @@ sub action_update {
}
init_local_db(1);
$opts{"no-depends"} = 1 if $opts{"no-depends-at-all"};
- my %ret;
init_tlmedia();
info("update: dry run, no changes will be made\n") if $opts{"dry-run"};
@@ -1513,7 +1546,7 @@ sub action_update {
# package updates
if ($opts{"all"} and
!($opts{"dry-run"} or $opts{"list"} or $opts{"no-remove"})) {
- merge_into(\%ret, $localtlmedia->remove_package($p));
+ $localtlmedia->remove_package($p);
logpackage("remove: $p");
}
}
@@ -1535,10 +1568,8 @@ sub action_update {
}
$currnr++;
next if ($opts{"dry-run"} || $opts{"list"});
- my $foo = $tlmediasrc->install_package($pkg, $localtlpdb);
- if (ref $foo) {
+ if ($tlmediasrc->install_package($pkg, $localtlpdb)) {
# installation succeeded because we got a reference
- merge_into (\%ret, $foo);
logpackage("auto-install new: $pkg ($mediarev)");
$nrupdated++;
} else {
@@ -1616,11 +1647,9 @@ sub action_update {
#
# the remove_package should also remove empty dirs in case
# a dir is changed into a file
- merge_into(\%ret, $localtlmedia->remove_package($pkg));
- my $foo = $tlmediasrc->install_package($pkg, $localtlpdb);
- if (ref $foo) {
+ $localtlmedia->remove_package($pkg);
+ if ($tlmediasrc->install_package($pkg, $localtlpdb)) {
# installation succeeded because we got a reference
- merge_into (\%ret, $foo);
logpackage("update: $pkg ($rev -> $mediarev)");
unlink($unwind_package) if $remove_unwind_container;
} else {
@@ -1677,7 +1706,6 @@ sub action_update {
tlwarn("\nTo change the default for all future updates, run\n");
tlwarn(" tlmgr option location $TeXLiveURL\n\n");
}
- return(\%ret);
}
@@ -1717,7 +1745,6 @@ sub action_install {
init_local_db(1);
# initialize the TLMedia from $location
$opts{"no-depends"} = 1 if $opts{"no-depends-at-all"};
- my %ret;
init_tlmedia();
# check for updates to tlmgr itself, and die unless --force is given
@@ -1759,7 +1786,7 @@ sub action_install {
}
info("${re}install: $pkg\n");
if (!$opts{"dry-run"}) {
- merge_into(\%ret, $tlmediasrc->install_package($pkg, $localtlpdb));
+ $tlmediasrc->install_package($pkg, $localtlpdb);
logpackage("${re}install: $pkg");
}
}
@@ -1767,7 +1794,6 @@ sub action_install {
# stop here, don't do any postinstall actions
return(0);
}
- return(\%ret);
}
sub action_list {
@@ -2001,7 +2027,6 @@ sub action_arch {
if ($opts{"gui"}) {
action_gui("arch");
}
- my %ret;
my $what = shift @ARGV;
init_local_db(1);
info("arch: dry run, no changes will be made\n") if $opts{"dry-run"};
@@ -2051,7 +2076,7 @@ sub action_arch {
info("Installing $pkg.$a\n");
} else {
info("install: $pkg.$a\n");
- merge_into(\%ret, $tlmediasrc->install_package("$pkg.$a", $localtlpdb));
+ $tlmediasrc->install_package("$pkg.$a", $localtlpdb);
}
}
}
@@ -2060,11 +2085,11 @@ sub action_arch {
if (TeXLive::TLUtils::member('win32', @todoarchs)) {
# install the necessary w32 stuff
info("install: tlperl.win32\n");
- merge_into (\%ret, $tlmediasrc->install_package("tlperl.win32", $localtlpdb));
+ $tlmediasrc->install_package("tlperl.win32", $localtlpdb);
info("install: tlgs.win32\n");
- merge_into (\%ret, $tlmediasrc->install_package("tlgs.win32", $localtlpdb));
+ $tlmediasrc->install_package("tlgs.win32", $localtlpdb);
info("install: tlpsv.win32\n");
- merge_into (\%ret, $tlmediasrc->install_package("tlpsv.win32", $localtlpdb));
+ $tlmediasrc->install_package("tlpsv.win32", $localtlpdb);
}
# update the option_archs list of installed archs
my @larchs = $localtlpdb->option_available_architectures;
@@ -2074,7 +2099,6 @@ sub action_arch {
} else {
die "Unknown option for arch: $what";
}
- return(\%ret);
}
diff --git a/Master/texmf/scripts/texlive/tlmgrgui/tlmgrgui.pl b/Master/texmf/scripts/texlive/tlmgrgui/tlmgrgui.pl
index a9d9b95443a..89835da02e8 100755
--- a/Master/texmf/scripts/texlive/tlmgrgui/tlmgrgui.pl
+++ b/Master/texmf/scripts/texlive/tlmgrgui/tlmgrgui.pl
@@ -218,7 +218,9 @@ init_hooks();
info(___("loadtlpdbwait") . "\n");
-our $localtlpdb = TeXLive::TLPDB->new ("root" => "$Master");
+our $localtlmedia = TeXLive::TLMedia->new ( $Master );
+die("cannot setup TLMedia in $Master") unless (defined($localtlmedia));
+$localtlpdb = $localtlmedia->tlpdb;
die("cannot find tlpdb!") unless (defined($localtlpdb));
our @alllocalpackages = setup_list(0,$localtlpdb->list_packages);
diff --git a/Master/tlpkg/TeXLive/TLMedia.pm b/Master/tlpkg/TeXLive/TLMedia.pm
index f60462bc82e..773f0550e08 100644
--- a/Master/tlpkg/TeXLive/TLMedia.pm
+++ b/Master/tlpkg/TeXLive/TLMedia.pm
@@ -224,8 +224,7 @@ sub install_package {
$totlpdb->add_tlpobj($tlpobj);
$totlpdb->save;
# compute the return value
- my %ret;
- merge_into(\%ret, $tlpobj->make_return_hash_from_executes("enable"));
+ TeXLive::TLUtils::announce_execute_actions("enable", $tlpobj);
if (!$nopostinstall) {
# do the postinstallation actions
#
@@ -235,8 +234,8 @@ sub install_package {
$totlpdb->option_desktop_integration,
$totlpdb->option_post_code);
}
- return \%ret;
}
+ return 1;
}
#
@@ -359,13 +358,12 @@ sub remove_package {
my ($self, $pkg, $nopostinstall) = @_;
my $localtlpdb = $self->tlpdb;
my $tlp = $localtlpdb->get_package($pkg);
- my %ret;
if (!defined($tlp)) {
tlwarn ("$pkg: package not present, cannot remove\n");
} else {
if ($pkg =~ m/^texlive\.infra/) {
log ("Not removing $pkg, it is essential!\n");
- return;
+ return 0;
}
# we have to chdir to $localtlpdb->root
my $Master = $localtlpdb->root;
@@ -439,8 +437,7 @@ sub remove_package {
rmdir $d;
}
$localtlpdb->remove_package($pkg);
- merge_into(\%ret, $tlp->make_return_hash_from_executes("disable"));
- $ret{'mktexlsr'} = 1;
+ TeXLive::TLUtils::announce_execute_actions("disable", $tlp);
# should we save at each removal???
# advantage: the tlpdb actually reflects what is installed
# disadvantage: removing a collection calls the save routine several times
@@ -457,7 +454,7 @@ sub remove_package {
0);
}
}
- return \%ret;
+ return 1;
}
diff --git a/Master/tlpkg/TeXLive/TLPOBJ.pm b/Master/tlpkg/TeXLive/TLPOBJ.pm
index f86195252ee..10db4ff062a 100644
--- a/Master/tlpkg/TeXLive/TLPOBJ.pm
+++ b/Master/tlpkg/TeXLive/TLPOBJ.pm
@@ -893,47 +893,6 @@ sub allbinfiles {
return @ret;
}
-sub make_return_hash_from_executes {
- my $self = shift;
- my $type = shift;
- if (!defined($type) || (($type ne "enable") && ($type ne "disable"))) {
- die "make_return_hash_from_executes: enable or disable, not type $type";
- }
- my %ret;
- my (@maps, @formats, @dats);
- if ($self->runfiles) {
- $ret{'mktexlsr'} = 1;
- }
- if ($self->srcfiles) {
- $ret{'mktexlsr'} = 1;
- }
- if ($self->docfiles) {
- $ret{'mktexlsr'} = 1;
- }
- foreach my $e ($self->executes) {
- if ($e =~ m/^add((Mixed)?Map)\s+([^\s]+)\s*$/) {
- if ($type eq "enable") {
- push @maps, "enable $1=$3";
- } else {
- push @maps, "disable $3";
- }
- } elsif ($e =~ m/^AddFormat\s+(.*)\s*$/) {
- push @formats, $1;
- } elsif ($e =~ m/^AddHyphen\s+(.*)\s*$/) {
- push @dats, $1;
- } else {
- tlwarn("Unknown execute $e in ", $self->name, "\n");
- }
- }
- $ret{'map'} = [ @maps ] if (@maps);
- $ret{'format'} = [ @formats ] if (@formats);
- $ret{'language'} = [ @dats ] if (@dats);
- return(\%ret);
-}
-
-
-
-
#
# execute stuff
#
diff --git a/Master/tlpkg/TeXLive/TLPaper.pm b/Master/tlpkg/TeXLive/TLPaper.pm
index 301d6abb65a..66e39adeb07 100644
--- a/Master/tlpkg/TeXLive/TLPaper.pm
+++ b/Master/tlpkg/TeXLive/TLPaper.pm
@@ -139,8 +139,7 @@ sub get_paper_list {
=item C<do_paper($prog,$texmfsysconfig,@args)>
-Call the paper subroutine for C<$prog>, passing args. Return hash of
-necessary post-install programs for C<handle_ret_hash> to run.
+Call the paper subroutine for C<$prog>, passing args.
=cut
@@ -166,11 +165,9 @@ hashes.
=cut
sub paper_all {
- my %ret;
for my $p (sort keys %paper_sub) {
- merge_into(\%ret, &{$paper_sub{$p}} (@_));
+ &{$paper_sub{$p}} (@_);
}
- return \%ret;
}
@@ -212,7 +209,7 @@ sub paper_xdvi {
my $newpaper = shift;
my $inp = &find_paper_file("xdvi", "other text files", "XDvi");
- return () unless $inp;
+ return unless $inp;
my $outcomp = $paper_config_path_component{"xdvi"}
|| $default_paper_config_path_component{"xdvi"};
@@ -242,14 +239,13 @@ sub paper_xdvi {
sub paper_pdftex {
my $outtree = shift;
my $newpaper = shift;
- my %ret;
my $outcomp = $paper_config_path_component{"pdftex"}
|| $default_paper_config_path_component{"pdftex"};
my $outfile = "$outtree/$outcomp";
my $inp = &find_paper_file("pdftex", "tex", "pdftexconfig.tex");
- return () unless $inp;
+ return unless $inp;
open(FOO, "<$inp") || die "$0: open($inp) failed: $!";
my @lines = <FOO>;
@@ -338,15 +334,16 @@ sub paper_pdftex {
info("$0: setting paper size for pdftex to $newpaper.\n");
mkdirhier(dirname($outfile));
# if we create the outfile we have to call mktexlsr
- $ret{"mktexlsr"} = 1 unless (-r $outfile);
+ TeXLive::TLUtils::announce_execute_actions("files-changed")
+ unless (-r $outfile);
if (!open(TMP, ">$outfile")) {
tlwarn("$0: Cannot write to $outfile: $!\n");
tlwarn("Not setting paper size for pdftex.\n");
- return ();
+ return;
}
for (@lines) { print TMP; }
close(TMP) || warn "$0: close(>$outfile) failed: $!";
- $ret{"format-regenerate"} = 1;
+ TeXLive::TLUtils::announce_execute_actions("regenerate-formats");
} else {
tlwarn("$0: Not a valid paper size for pdftex: $newpaper\n");
}
@@ -354,7 +351,6 @@ sub paper_pdftex {
} else {
info("Current pdftex paper size (from $inp): $currentpaper\n");
}
- return \%ret;
}
@@ -388,10 +384,9 @@ sub paper_pdftex {
sub paper_dvips {
my $outtree = shift;
my $newpaper = shift;
- my %ret;
my $inp = &find_paper_file("dvips", "dvips config", "config.ps");
- return () unless $inp;
+ return unless $inp;
my $outcomp = $paper_config_path_component{"dvips"}
|| $default_paper_config_path_component{"dvips"};
@@ -461,7 +456,8 @@ sub paper_dvips {
info("$0: setting paper size for dvips to $newpaper.\n");
mkdirhier(dirname($outfile));
# if we create the outfile we have to call mktexlsr
- $ret{"mktexlsr"} = 1 unless (-r $outfile);
+ TeXLive::TLUtils::announce_execute_actions("files-changed")
+ unless (-r $outfile);
if (!open(TMP, ">$outfile")) {
tlwarn("$0: Cannot write to $outfile: $!\n");
tlwarn("Not setting paper size for dvips.\n");
@@ -476,7 +472,6 @@ sub paper_dvips {
} else {
info("Current dvips paper size (from $inp): $papersizes[0]\n");
}
- return \%ret;
}
@@ -587,8 +582,6 @@ sub paper_context {
sub paper_do_simple {
my ($inp, $prog, $firstre, $secondre, $bl, $outp, $paplist, $defaultpaper, $defaultline, $newpaper) = @_;
- my %ret;
-
debug("file used for $prog: $inp\n");
open(FOO, "<$inp") or die("cannot open file $inp: $!");
@@ -648,7 +641,8 @@ sub paper_do_simple {
info("$0: setting paper size for $prog to $newpaper.\n");
mkdirhier(dirname($outp));
# if we create the outfile we have to call mktexlsr
- $ret{"mktexlsr"} = 1 unless (-r $outp);
+ TeXLive::TLUtils::announce_execute_actions("files-changed")
+ unless (-r $outp);
if (!open(TMP, ">$outp")) {
tlwarn("$0: Cannot write to $outp: $!\n");
tlwarn("Not setting paper size for $prog.\n");
@@ -656,7 +650,8 @@ sub paper_do_simple {
}
for (@newlines) { print TMP; }
close(TMP) || warn "$0: close(>$outfile) failed: $!";
- $ret{"format-regenerate"} = 1 if $prog eq "context";
+ TeXLive::TLUtils::announce_execute_actions("regenerate-formats")
+ if ($prog eq "context");
} else {
tlwarn("$0: Not a valid paper size for $prog: $newpaper\n");
}
@@ -665,7 +660,6 @@ sub paper_do_simple {
# return the current value
info("Current $prog paper size (from $inp): $currentpaper\n");
}
- return \%ret;
}
1;
diff --git a/Master/tlpkg/TeXLive/TLUtils.pm b/Master/tlpkg/TeXLive/TLUtils.pm
index 78f622506dd..e58eefc7d37 100644
--- a/Master/tlpkg/TeXLive/TLUtils.pm
+++ b/Master/tlpkg/TeXLive/TLUtils.pm
@@ -60,6 +60,7 @@ C<TeXLive::TLUtils> -- utilities used in the TeX Live infrastructure
TeXLive::TLUtils::install_packages($from_tlpdb,$media,$to_tlpdb,$what,$opt_src, $opt_doc)>);
TeXLive::TLUtils::install_package($what, $filelistref, $target, $platform);
TeXLive::TLUtils::do_postaction($how, $tlpobj);
+ TeXLive::TLUtils::announce_execute_actions($how, @executes);
=head2 Miscellaneous
@@ -121,6 +122,7 @@ BEGIN {
&tlmd5
&xsystem
&run_cmd
+ &announce_execute_actions
);
@EXPORT = qw(setup_programs download_file process_logging_options
tlwarn info log debug ddebug dddebug debug_hash
@@ -1621,6 +1623,54 @@ sub parse_into_keywords {
return($error, %ret);
}
+=item C<announce_execute_actions($how, $tlpobj)>
+
+Announces that the actions given in C<$tlpobj> should be executed
+after all packages have been unpacked.
+
+=cut
+
+sub announce_execute_actions {
+ my ($type, $tlp) = @_;
+ if (defined($type) && ($type eq "regenerate-formats")) {
+ $::regenerate_all_formats = 1;
+ return;
+ }
+ if (defined($type) && ($type eq "files-changed")) {
+ $::files_changed = 1;
+ return;
+ }
+ if (!defined($type) || (($type ne "enable") && ($type ne "disable"))) {
+ die "announce_execute_actions: enable or disable, not type $type";
+ }
+ my (@maps, @formats, @dats);
+ if ($tlp->runfiles || $tlp->srcfiles || $tlp->docfiles) {
+ $::files_changed = 1;
+ }
+ foreach my $e ($tlp->executes) {
+ if ($e =~ m/^add((Mixed)?Map)\s+([^\s]+)\s*$/) {
+ $::execute_actions{$type}{'maps'}{$3} = "$1";
+ } elsif ($e =~ m/^AddFormat\s+(.*)\s*$/) {
+ my %r = TeXLive::TLUtils::parse_AddFormat_line("$1");
+ if (defined($r{"error"})) {
+ tlwarn ("$r{'error'} in parsing $e for return hash\n");
+ } else {
+ $::execute_actions{$type}{'formats'}{$r{'name'}} = \%r;
+ }
+ } elsif ($e =~ m/^AddHyphen\s+(.*)\s*$/) {
+ my %r = TeXLive::TLUtils::parse_AddHyphen_line("$1");
+ if (defined($r{"error"})) {
+ tlwarn ("$r{'error'} in parsing $e for return hash\n");
+ } else {
+ $::execute_actions{$type}{'hyphens'}{$r{'name'}} = \%r;
+ }
+ } else {
+ tlwarn("Unknown execute $e in ", $self->name, "\n");
+ }
+ }
+}
+
+
=item C<untar($tarfile,$targetdir, $remove_tarfile)>
Unpacked C<$tarfile> in C<$targetdir> (changing directories to