From 4d2a3e89c58e5ada3e1792f609aa53931e26289e Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Wed, 11 Feb 2009 19:02:59 +0000 Subject: do some patch reorganization git-svn-id: svn://tug.org/texlive/trunk@12143 c570f23f-e606-0410-a88d-b1316a301751 --- .../archive/rej.postaction-code-in-tlpsrc.patch | 309 ++++ Master/tlpkg/etc/2009.combined.patch | 1759 ++++++++++++++++++++ Master/tlpkg/etc/2009.combined.patch.README | 38 + .../tlpkg/etc/dev.postaction-code-in-tlpsrc.patch | 309 ---- Master/tlpkg/etc/dev.postaction-in-tlpsrc.patch | 398 +++++ .../etc/dev.postaction-in-tlpsrc.patch.README | 29 + 6 files changed, 2533 insertions(+), 309 deletions(-) create mode 100644 Master/tlpkg/archive/rej.postaction-code-in-tlpsrc.patch create mode 100644 Master/tlpkg/etc/2009.combined.patch create mode 100644 Master/tlpkg/etc/2009.combined.patch.README delete mode 100644 Master/tlpkg/etc/dev.postaction-code-in-tlpsrc.patch create mode 100644 Master/tlpkg/etc/dev.postaction-in-tlpsrc.patch create mode 100644 Master/tlpkg/etc/dev.postaction-in-tlpsrc.patch.README diff --git a/Master/tlpkg/archive/rej.postaction-code-in-tlpsrc.patch b/Master/tlpkg/archive/rej.postaction-code-in-tlpsrc.patch new file mode 100644 index 00000000000..a8bf9cdc332 --- /dev/null +++ b/Master/tlpkg/archive/rej.postaction-code-in-tlpsrc.patch @@ -0,0 +1,309 @@ +Index: install-tl +=================================================================== +--- install-tl (revision 11393) ++++ install-tl (working copy) +@@ -59,12 +59,12 @@ + which getenv win32 unix info log debug tlwarn ddebug + get_system_tmpdir member process_logging_options rmtree + mkdirhier make_var_skeleton make_local_skeleton install_package copy ++ run_postinst_code + install_packages dirname setup_programs welcome welcome_paths); + use TeXLive::TLMedia; + use TeXLive::TLPOBJ; + use TeXLive::TLPDB; + use TeXLive::TLConfig; +-use TeXLive::TLPostActions; + use Pod::Usage; + use Cwd 'abs_path'; + +@@ -1034,13 +1034,15 @@ + } + + foreach my $package (sort keys %install) { +- if ($install{$package} && defined($PostInstall{$package})) { +- info("running post install action for $package\n"); +- &{$PostInstall{$package}}($TEXDIR, $TEXDIRW, $TEXMFSYSVAR, $TEXMFLOCAL); ++ if ($install{$package}) { ++ my $tlpobj = $tlpdb->get_package($package); ++ next if (!defined($tlpobj)); # should not happen ... ++ run_postinst_code($tlpobj, $TEXDIR, $TEXDIRW, $TEXMFSYSVAR, $TEXMFLOCAL); + } + } + # $opt_portable: no %install but we still want xetex postinstall +- &{$PostInstall{'xetex'}}($TEXDIR, $TEXDIRW, $TEXMFSYSVAR, $TEXMFLOCAL) ++ run_postinst_code($tlpdb->get_package("xetex"), ++ $TEXDIR, $TEXDIRW, $TEXMFSYSVAR, $TEXMFLOCAL) + if $opt_portable; + update_assocs() if win32(); + +Index: tlpkg/TeXLive/TLPSRC.pm +=================================================================== +--- tlpkg/TeXLive/TLPSRC.pm (revision 11393) ++++ tlpkg/TeXLive/TLPSRC.pm (working copy) +@@ -30,6 +30,8 @@ + srcpatterns => $params{'srcpatterns'}, + docpatterns => $params{'docpatterns'}, + binpatterns => $params{'binpatterns'}, ++ postinst => $params{'postinst'}, ++ postrm => $params{'postrm'}, + executes => defined($params{'executes'}) ? $params{'executes'} : [], + depends => defined($params{'depends'}) ? $params{'depends'} : [], + }; +@@ -65,6 +67,8 @@ + my $shortdesc = ""; + my $longdesc= ""; + my $catalogue = ""; ++ my $postinst = ""; ++ my $postrm = ""; + my (@executes, @depends); + my (@runpatterns, @docpatterns, @binpatterns, @srcpatterns); + my $started = 0; +@@ -114,6 +118,12 @@ + } elsif ($line =~ /^catalogue\s+(.*)\s*$/) { + $catalogue = $1; + next; ++ } elsif ($line =~ /^postinst\s+(.*)\s*$/) { ++ $postinst = $1; ++ next; ++ } elsif ($line =~ /^postrm\s+(.*)\s*$/) { ++ $postrm = $1; ++ next; + } elsif ($line =~ /^runpattern\s+(.*)\s*$/) { + push @runpatterns, $1 if ($1 ne ""); + next; +@@ -143,6 +153,8 @@ + $self->catalogue($catalogue) if $catalogue; + $self->shortdesc($shortdesc) if $shortdesc; + $self->longdesc($longdesc) if $longdesc; ++ $self->postinst($postinst) if $postinst; ++ $self->postrm($postrm) if $postrm; + $self->srcpatterns(@srcpatterns) if @srcpatterns; + $self->runpatterns(@runpatterns) if @runpatterns; + $self->binpatterns(@binpatterns) if @binpatterns; +@@ -161,6 +173,8 @@ + print $fd "category ", $self->category, "\n"; + defined($self->{'catalogue'}) && print $fd "catalogue $self->{'catalogue'}\n"; + defined($self->{'shortdesc'}) && print $fd "shortdesc $self->{'shortdesc'}\n"; ++ defined($self->{'postinst'}) && print $fd "postinst $self->{'postinst'}\n"; ++ defined($self->{'postrm'}) && print $fd "postrm $self->{'postrm'}\n"; + if (defined($self->{'longdesc'})) { + $_tmp = "$self->{'longdesc'}"; + write $fd; +@@ -211,6 +225,8 @@ + $tlp->category($self->category); + $tlp->shortdesc($self->{'shortdesc'}) if (defined($self->{'shortdesc'})); + $tlp->longdesc($self->{'longdesc'}) if (defined($self->{'longdesc'})); ++ $tlp->postinst($self->{'postinst'}) if (defined($self->{'postinst'})); ++ $tlp->postrm($self->{'postrm'}) if (defined($self->{'postrm'})); + $tlp->catalogue($self->{'catalogue'}) if (defined($self->{'catalogue'})); + $tlp->executes(@{$self->{'executes'}}) if (defined($self->{'executes'})); + $tlp->depends(@{$self->{'depends'}}) if (defined($self->{'depends'})); +@@ -476,6 +492,16 @@ + if (@_) { $self->{'longdesc'} = shift } + return $self->{'longdesc'}; + } ++sub postinst { ++ my $self = shift; ++ if (@_) { $self->{'postinst'} = shift } ++ return $self->{'postinst'}; ++} ++sub postrm { ++ my $self = shift; ++ if (@_) { $self->{'postrm'} = shift } ++ return $self->{'postrm'}; ++} + sub catalogue { + my $self = shift; + if (@_) { $self->{'catalogue'} = shift } +@@ -566,6 +592,7 @@ + I I + + where I can be C, C, C, C, ++C, C, + C, C, C, C, C, + C, or C. + +@@ -691,6 +718,18 @@ + concatenated into a long text. In TeX Live only used for collections and + schemes. + ++=item C ++ ++a perl sub definition that does not contain the surrounding sub { ... } ++part. This stub will be evaluated after installation of the package. ++Please see the examples in various .tlpsrc files. ++ ++=item C ++ ++a perl sub definition that does not contain the surrounding sub { ... } ++part. This stub will be evaluated after removal of the package. ++Please see the examples in various .tlpsrc files. ++ + =item C + + gives the list of dependencies, which are just other package names. +Index: tlpkg/TeXLive/TLPOBJ.pm +=================================================================== +--- tlpkg/TeXLive/TLPOBJ.pm (revision 11393) ++++ tlpkg/TeXLive/TLPOBJ.pm (working copy) +@@ -24,6 +24,8 @@ + category => defined($params{'category'}) ? $params{'category'} : $DefaultCategory, + shortdesc => $params{'shortdesc'}, + longdesc => $params{'longdesc'}, ++ postinst => $params{'postinst'}, ++ postrm => $params{'postrm'}, + catalogue => $params{'catalogue'}, + runfiles => defined($params{'runfiles'}) ? $params{'runfiles'} : [], + runsize => $params{'runsize'}, +@@ -198,6 +200,14 @@ + $self->catalogue("$1"); + $lastcmd = "catalogue"; + next; ++ } elsif ($line =~ /^postinst\s+(.*)\s*/o) { ++ $self->postinst("$1"); ++ $lastcmd = "postinst"; ++ next; ++ } elsif ($line =~ /^postrm\s+(.*)\s*/o) { ++ $self->postrm("$1"); ++ $lastcmd = "postrm"; ++ next; + } elsif ($line =~ /^(doc|src|run)files\s+/o) { + my $type = $1; + my @words = split ' ',$line; +@@ -301,6 +311,8 @@ + defined($self->{'revision'}) && print $fd "revision $self->{'revision'}\n"; + defined($self->{'catalogue'}) && print $fd "catalogue $self->{'catalogue'}\n"; + defined($self->{'shortdesc'}) && print $fd "shortdesc $self->{'shortdesc'}\n"; ++ defined($self->{'postinst'}) && print $fd "postinst $self->{'postinst'}\n"; ++ defined($self->{'postrm'}) && print $fd "postrm $self->{'postrm'}\n"; + defined($self->{'license'}) && print $fd "license $self->{'license'}\n"; + # ugly hack to get rid of use FileHandle; see man perlform + #format_name $fd "multilineformat"; +@@ -823,6 +835,16 @@ + if (@_) { $self->{'longdesc'} = shift } + return $self->{'longdesc'}; + } ++sub postinst { ++ my $self = shift; ++ if (@_) { $self->{'postinst'} = shift } ++ return $self->{'postinst'}; ++} ++sub postrm { ++ my $self = shift; ++ if (@_) { $self->{'postrm'} = shift } ++ return $self->{'postrm'}; ++} + sub revision { + my $self = shift; + if (@_) { $self->{'revision'} = shift } +Index: tlpkg/TeXLive/TLUtils.pm +=================================================================== +--- tlpkg/TeXLive/TLUtils.pm (revision 11393) ++++ tlpkg/TeXLive/TLUtils.pm (working copy) +@@ -64,6 +64,8 @@ + TeXLive::TLUtils::conv_to_w32_path($path); + TeXLive::TLUtils::give_ctan_mirror($path); + TeXLive::TLUtils::tlmd5($path); ++ TeXLive::TLUtils::run_postinst_code($tlpobj, @args); ++ TeXLive::TLUtils::run_postrm_code($tlpobj, @args); + + =head1 DESCRIPTION + +@@ -112,6 +114,8 @@ + &welcome_paths + &give_ctan_mirror + &tlmd5 ++ &run_postinst_code ++ &run_postrm_code + ); + @EXPORT = qw(setup_programs download_file info log debug ddebug dddebug + tlwarn process_logging_options win32); +@@ -1924,6 +1928,26 @@ + } + } + ++sub run_postinst_code { ++ my $tlpobj = shift; ++ _run_code_block($tlpobj->postinst, @_) if $tlpobj->postinst; ++} ++ ++sub run_postrm_code { ++ my $tlpobj = shift; ++ _run_code_block($tlpobj->postrm, @_) if $tlpobj->postrm; ++} ++ ++sub _run_code_block { ++ my $code = shift; ++ my $fun = "sub temp_fun_texlive_run_code_block { $code } "; ++ eval $fun; ++ my $ret = eval { temp_fun_texlive_run_code_block(@_); }; ++ undef &temp_fun_texlive_run_code_block; ++ return $ret; ++} ++ ++ + ############################################# + # + # Taken from Text::ParseWords +Index: tlpkg/tlpsrc/xetex.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/xetex.tlpsrc (revision 11393) ++++ tlpkg/tlpsrc/xetex.tlpsrc (working copy) +@@ -23,4 +23,56 @@ + binpattern f bin/win32/fc-* + binpattern f bin/win32/icu*.dll + depend xetexconfig +- ++postinst \ ++ my ($texdir, $texdirw, $texmfsysvar) = @_; \ ++ if (!defined($texmfsysvar)) { \ ++ $texmfsysvar = `kpsewhich -var-value=TEXMFSYSVAR`; \ ++ chomp($texmfsysvar); \ ++ } \ ++ if (-r "$texdir/bin/win32/conf/fonts.conf") { \ ++ mkdirhier("$texmfsysvar/fonts"); \ ++ TeXLive::TLUtils::rmtree("$texmfsysvar/fonts/conf"); \ ++ TeXLive::TLUtils::rmtree("$texmfsysvar/fonts/cache"); \ ++ my @cpycmd; \ ++ if (win32()) { \ ++ push @cpycmd, "xcopy", "/e", "/i", "/q", "/y"; \ ++ } else { \ ++ push @cpycmd, "cp", "-R"; \ ++ } \ ++ system(@cpycmd, \ ++ (win32() ? conv_to_w32_path("$texdir/bin/win32/conf") : \ ++ "$texdir/bin/win32/conf"), \ ++ (win32() ? conv_to_w32_path("$texmfsysvar/fonts/conf") : \ ++ "$texmfsysvar/fonts/conf")); \ ++ system(@cpycmd, \ ++ (win32() ? conv_to_w32_path("$texdir/bin/win32/cache") : \ ++ "$texdir/bin/win32/cache"), \ ++ (win32() ? conv_to_w32_path("$texmfsysvar/fonts/cache") : \ ++ "$texmfsysvar/fonts/cache")); \ ++ if (open(FONTSCONF, "<$texdir/bin/win32/conf/fonts.conf")) { \ ++ my @lines = ; \ ++ close(FONTSCONF); \ ++ if (open(FONTSCONF, ">$texmfsysvar/fonts/conf/fonts.conf")) { \ ++ my $winfontdir; \ ++ if (win32()) { \ ++ $winfontdir = $ENV{'SystemRoot'}.'/fonts'; \ ++ $winfontdir =~ s!\\!/!g; \ ++ } \ ++ } \ ++ foreach (@lines) { \ ++ $_ =~ s!c:/Program Files/texlive/2008!$texdir!; \ ++ $_ =~ s!c:/windows/fonts!$winfontdir! if win32(); \ ++ print FONTSCONF; \ ++ } \ ++ close(FONTSCONF); \ ++ } else { \ ++ warn("Cannot open $texmfsysvar/fonts/conf/fonts.conf for writing\n"); \ ++ } \ ++ } else { \ ++ warn("Cannot open $texdir/bin/win32/conf/fonts.conf\n"); \ ++ } \ ++ } \ ++ if (win32()) { \ ++ info("Running fc-cache -v -r\n"); \ ++ log(`fc-cache -v -r 2>&1`); \ ++ } diff --git a/Master/tlpkg/etc/2009.combined.patch b/Master/tlpkg/etc/2009.combined.patch new file mode 100644 index 00000000000..6a588c3f50c --- /dev/null +++ b/Master/tlpkg/etc/2009.combined.patch @@ -0,0 +1,1759 @@ +Index: texmf/scripts/texlive/tlmgr.pl +=================================================================== +--- texmf/scripts/texlive/tlmgr.pl (revision 12142) ++++ texmf/scripts/texlive/tlmgr.pl (working copy) +@@ -557,6 +557,9 @@ + info("running post remove action for $pkg\n"); + &{$PostRemove{$pkg}}($localtlpdb->root); + } ++ # ++ # Run the post installation code in the postaction tlpsrc entries ++ &TeXLive::TLUtils::do_postaction_code("remove", $tlp); + } + return \%ret; + } +Index: texmf/scripts/texlive/uninstall-win32.pl +=================================================================== +--- texmf/scripts/texlive/uninstall-win32.pl (revision 12142) ++++ texmf/scripts/texlive/uninstall-win32.pl (working copy) +@@ -17,6 +17,11 @@ + } + + use TeXLive::TLWinGoo; ++use TeXLive::TLPDB; ++use TeXLive::TLPOBJ; ++use TeXLive::TLPostActions; ++use TeXLive::TLConfig; ++use TeXLive::TLUtils; + use Tk; + use Tk::Dialog; + +@@ -39,6 +44,23 @@ + $cancel->pack(-side => 'left' , -padx => "3m"); + + sub doit { ++ # first we remove the whole bunch of shortcuts and menu entries ++ # by calling all the post action codes for the installed packages ++ my $localtlpdb = TeXLive::TLPDB->new ("root" => $Master); ++ if (!defined($localtlpdb)) { ++ tlwarn("Cannot load the TLPDB from $Master, are you sure there is an installation?\n"); ++ } else { ++ for my $pkg ($localtlpdb->list_packages) { ++ if (defined($PostRemove{$pkg})) { ++ info("running post remove action for $pkg\n"); ++ &{$PostRemove{$pkg}}($Master); ++ } ++ } ++ &TeXLive::TLUtils::do_postaction_code("remove", $pkg); ++ } ++ my $menupath = &TeXLive::TLWinGoo::menu_path(); ++ $menupath =~ s!/!\\!g; ++ `rmdir /s /q "$menupath\\$TeXLive::TLConfig::WindowsMainMenuName" 2>nul`; + remove_texbindirs_from_path(); + unsetenv_reg("TEXBINDIR"); + # from_dvd case: +Index: install-tl +=================================================================== +--- install-tl (revision 12142) ++++ install-tl (working copy) +@@ -82,7 +82,6 @@ + &add_menu_shortcut + &remove_desktop_shortcut + &remove_menu_shortcut +- &init_unshortbat + &create_uninstaller + )); + } +@@ -1052,6 +1051,11 @@ + # post install actions + # + ++ # in case we are running from DVD we use the tlpdb from the DVD, otherwise ++ # the one we have locally created, for all the further actions ++ my $usedtlpdb = $vars{'from_dvd'} ? $tlpdb : $localtlpdb; ++ ++ + if (win32()) { + debug "Actual environment:\n".`set`."\n\n"; + debug 'Effective TEXMFCNF: '.`kpsewhich -expand-path=\$TEXMFCNF`."\n"; +@@ -1060,15 +1064,24 @@ + # (re-)initialize batchfile for uninstalling shortcuts + if (win32() and !$opt_portable) { + mkdirhier("$TEXDIRW/tlpkg/installer") if $vars{'from_dvd'}; +- init_unshortbat($TEXDIRW); + } + ++ # Run the post installation code in TLPostAction.pm + foreach my $package (sort keys %install) { + if ($install{$package} && defined($PostInstall{$package})) { + info("running post install action for $package\n"); + &{$PostInstall{$package}}($TEXDIR, $TEXDIRW, $TEXMFSYSVAR, $TEXMFLOCAL); + } + } ++ # Run the post installation code in the postaction tlpsrc entries ++ foreach my $package (sort keys %install) { ++ if ($install{$package}) { ++ &TeXLive::TLUtils::do_postaction_code("install", ++ $usedtlpdb->get_package($package)); ++ } ++ } ++ info ("finished with package specific postactions\n"); ++ + # $opt_portable: no %install but we still want xetex postinstall + &{$PostInstall{'xetex'}}($TEXDIR, $TEXDIRW, $TEXMFSYSVAR, $TEXMFLOCAL) + if $opt_portable; +@@ -1085,25 +1098,25 @@ + # texconfig generate * but Win32 does not have texconfig. But we have + # $localtlpdb and this is simple code, so do it directly, i.e., duplicate + # the code from the various generate-*.pl scripts ++ + info("writing fmtutil.cnf data to $TEXMFSYSVAR/web2c/fmtutil.cnf\n"); +- my $tlp = $vars{'from_dvd'} ? $tlpdb : $localtlpdb; +- TeXLive::TLUtils::create_fmtutil($tlp, #$localtlpdb, ++ TeXLive::TLUtils::create_fmtutil($usedtlpdb, + "$TEXMFSYSVAR/web2c/fmtutil.cnf", + "$TEXMFLOCAL/web2c/fmtutil-local.cnf"); + + mkdirhier "$vars{'TEXMFSYSCONFIG'}/web2c"; + info("writing updmap.cfg to $TEXMFSYSCONFIG/web2c/updmap.cfg\n"); +- TeXLive::TLUtils::create_updmap ($tlp, #$localtlpdb, ++ TeXLive::TLUtils::create_updmap ($usedtlpdb, + "$TEXMFSYSCONFIG/web2c/updmap.cfg", + "$TEXMFLOCAL/web2c/updmap-local.cfg"); + + info("writing language.dat data to $TEXMFSYSVAR/tex/generic/config/language.dat\n"); +- TeXLive::TLUtils::create_language_dat($tlp, #$localtlpdb, ++ TeXLive::TLUtils::create_language_dat($usedtlpdb, + "$TEXMFSYSVAR/tex/generic/config/language.dat", + "$TEXMFLOCAL/tex/generic/config/language-local.dat"); + + info("writing language.def data to $TEXMFSYSVAR/tex/generic/config/language.def\n"); +- TeXLive::TLUtils::create_language_def($tlp, #$localtlpdb, ++ TeXLive::TLUtils::create_language_def($usedtlpdb, + "$TEXMFSYSVAR/tex/generic/config/language.def", + "$TEXMFLOCAL/tex/generic/config/language-local.def"); + +Index: tlpkg/TeXLive/TLPDB.pm +=================================================================== +--- tlpkg/TeXLive/TLPDB.pm (revision 12142) ++++ tlpkg/TeXLive/TLPDB.pm (working copy) +@@ -1239,26 +1239,64 @@ + =cut + sub fmtutil_cnf_lines { + my $self = shift; +- my %fmtcnffiles; +- foreach my $p ($self->list_packages) { +- my $obj = $self->get_package ($p); +- die "$0: No TeX Live package named $p, strange" if ! $obj; ++ my @fmtlines = (); ++ ++ foreach my $pkg ($self->list_packages) { ++ my $obj = $self->get_package ($pkg); ++ die "No TeX Live package named $pkg, too strange" if ! $obj; ++ my $first = 1; + foreach my $e ($obj->executes) { +- if ($e =~ m/BuildFormat (.*)$/) { +- $fmtcnffiles{$1} = 1; +- } +- # others are ignored here ++ if ($e =~ m/AddFormat\s+(.*)\s*/) { ++ my $name; ++ my $engine; ++ my $patterns = "-"; ++ my $options = ""; ++ my $mode = ""; ++ if ($first) { ++ push @fmtlines, "# from $pkg:\n"; ++ $first = 0; ++ } ++ foreach my $p (&TeXLive::TLUtils::quotewords('\s+', 0, "$1")) { ++ # foreach my $p (split(' ', $1)) { ++ my ($a, $b); ++ if ($p =~ m/^(name|engine|mode|patterns|options)=(.*)$/) { ++ $a = $1; ++ $b = $2; ++ } else { ++ die "Unknown format directive in $pkg: $e"; ++ } ++ if ($a eq "name") { ++ die "AddFormat line needs name=something: $pkg, $e" unless $b; ++ $name = $b; next; ++ } ++ if ($a eq "engine") { ++ die "AddFormat line needs engine=something: $pkg, $e" unless $b; ++ $engine = $b; next; ++ } ++ if ($a eq "patterns") { ++ $patterns = ( $b ? $b : "-"); ++ next; ++ } ++ if ($a eq "mode") { ++ if ($b eq "disabled") { ++ $mode = "#! "; ++ } else { ++ $mode = ""; ++ } ++ next; ++ } ++ if ($a eq "options") { ++ $options = ( $b ? $b : ""); ++ next; ++ } ++ # should not be reached at all ++ die "Unknown language directive in $pkg: $e"; ++ } ++ push @fmtlines, "$mode$name $engine $patterns $options\n"; ++ } + } + } +- my @formatlines; +- foreach my $f (sort keys %fmtcnffiles) { +- open(INFILE,"<$self->{'root'}/texmf/fmtutil/format.$f.cnf") +- or tlwarn("Cannot open $self->{'root'}/texmf/fmtutil/format.$f.cnf\nThe generated fmtutil.cnf file might be incomplete.\nError: $!\n"); +- @tmp = ; +- close(INFILE); +- push @formatlines, @tmp; +- } +- return(@formatlines); ++ return @fmtlines; + } + + =item C<< $tlpdb->updmap_cfg_lines >> +Index: tlpkg/TeXLive/TLConfig.pm +=================================================================== +--- tlpkg/TeXLive/TLConfig.pm (revision 12142) ++++ tlpkg/TeXLive/TLConfig.pm (working copy) +@@ -28,6 +28,7 @@ + $WinSpecialUpdatePackagesRegexp + @CriticalPackagesList + @AllowedConfigOptions ++ $WindowsMainMenuName + ); + @EXPORT = @EXPORT_OK; + } +@@ -82,6 +83,8 @@ + autobackup + /; + ++our $WindowsMainMenuName = "TeX Live 2008"; ++ + 1; + + +Index: tlpkg/TeXLive/TLPostActions.pm +=================================================================== +--- tlpkg/TeXLive/TLPostActions.pm (revision 12142) ++++ tlpkg/TeXLive/TLPostActions.pm (working copy) +@@ -20,48 +20,13 @@ + use TeXLive::TLUtils qw(win32 mkdirhier copy conv_to_w32_path log debug info + touch tlwarn); + use TeXLive::TLWinGoo; ++use TeXLive::TLConfig; + +-my $mainmenu = "TeX Live 2008"; ++my $mainmenu = $TeXLive::TLConfig::WindowsMainMenuName; + + our %PostInstall; + our %PostRemove; + +-# NOT ENABLED !!!!! +-# context post install actions +-sub do_install_bin_context { +- my ($texdir, $texdirw, $texmfsysvar) = @_; +- # set up texmfcnf.lua +- my $TMF = "$texdirw/texmf/web2c/texmfcnf.lua"; +- if (! -r $TMF) { +- open(TMF, ">$TMF") || die "open($TMF) failed: $!\n"; +- print TMF 'local conf = {}', "\n"; +- print TMF "conf.TEXMFCACHE = \"$texmfsysvar\"\n"; +- #print TMP "conf.CACHEINTDS = 't'\n"; +- print TMF "return conf\n"; +- close(TMF) || warn "close($TMF) failed: $!"; +- } +- # update the luatools cache +- system("luatools", "--generate"); +- # build the context formats based on luatex +- system("context", "--make", "--compile", "cont-en"); +- # update the font cache +- system("mtxrun", "--script", "fonts", "--reload"); +-} +-# +-# That has to be sorted out and maybe changed at a later time, so do NOT +-# enable that for now. +-###$PostInstall{"bin-context"} = \&do_install_bin_context; +- +- +-# ATM do the same for luatex as for context +-sub do_install_luatex { +- do_install_bin_context(@_); +-} +-# +-# SEE ABOVE +-# $PostInstall{"luatex"} = \&do_install_luatex; +- +- + # xetex + # + sub do_install_xetex { +@@ -149,136 +114,13 @@ + } + $PostInstall{"xetex"} = \&do_install_xetex; + +-# +-# bin-dviout.win32 +-# +-sub do_install_bin_dviout_win32 { +- my ($texdir, $texdirw) = @_; +- if (win32()) { +- my $texdir_bsl = conv_to_w32_path($texdir); +- add_menu_shortcut( +- $mainmenu, +- 'DVIOUT Dvi Viewer', +- $texdir.'/tlpkg/dviout/dviout.exe', # for the icon +- 'wscript', +- $texdir_bsl."\\bin\\win32\\dviout.vbs", +- '', +- ); +- } +-} +-sub do_remove_bin_dviout_win32 { +- my ($texdir) = @_; +- if (win32()) { +- remove_menu_shortcut($mainmenu, 'DVIOUT Dvi Viewer'); +- } +-} +-$PostInstall{'bin-dviout.win32'} = \&do_install_bin_dviout_win32; +-$PostRemove{'bin-dviout.win32'} = \&do_remove_bin_dviout_win32; + +- + # +-# bin-texdoc +-# +-sub do_install_bin_texdoc { +- my ($texdir, $texdirw) = @_; +- if (win32()) { +- #add_desktop_shortcut( +- # $texdirw, +- # 'TeXdoc GUI', +- # '', # $vars{'TEXDIR'}.'/tlpkg/doc/notes.ico', # the icon +- # $texdir.'/bin/win32/texdoctk.bat', +- # '', # no args +- # 'batgui', # any non-null value to hide command-prompt +- #); +- add_menu_shortcut( +- $mainmenu, +- 'TeXdoc GUI', +- '', # $vars{'TEXDIR'}.'/tlpkg/doc/notes.ico', # the icon +- $texdir.'/bin/win32/texdoctk.bat', +- '', # no args +- 'batgui', # any non-null value to hide command-prompt +- ); +- } +-} +-sub do_remove_bin_texdoc { +- my ($texdir) = @_; +- if (win32()) { +- # remove_desktop_shortcut('TeXdoc GUI'); +- remove_menu_shortcut($mainmenu, 'TeXdoc GUI'); +- } +-} +-$PostInstall{'bin-texdoc'} = \&do_install_bin_texdoc; +-$PostRemove{'bin-texdoc'} = \&do_remove_bin_texdoc; +- +-# +-# bin-tlpsv.win32 +-# +-sub do_install_bin_tlpsv_win32 { +- my ($texdir, $texdirw) = @_; +- if (win32()) { +- add_desktop_shortcut( +- $texdirw, +- 'PS_View', +- $texdir.'/tlpkg/tlpsv/psv.exe', # icon, not prog! +- $texdir.'/bin/win32/psv.bat', +- '', # no args +- 'batgui', # any non-null value to hide command-prompt +- ); +- add_menu_shortcut( +- $mainmenu, +- 'PS_View', +- $texdir.'/tlpkg/tlpsv/psv.exe', # icon, not prog! +- $texdir.'/bin/win32/psv.bat', +- '', # no args +- 'batgui', # any non-null value to hide command-prompt +- ); +- #register_extension(".ps", "PostScript"); +- #register_extension(".eps", "PostScript"); +- ##register_file_type("PostScript", '"'.$texdir.'/bin/win32/psv.bat"'); +- #register_file_type("PostScript", +- # '"'.$texdir.'/tlpkg/tlpsv/gswxlua.exe" -g '. +- # '"'.$texdir.'/tlpkg/tlgs/bin/gsdll32.dll" -l '. +- # '"'.$texdir.'/tlpkg/tlpsv/psv.wx.lua" -p '. +- # '"'.$texdir.'/tlpkg/tlpsv/psv_view.ps" -sINPUT="%1"'); +- #update_assocs(); +- } +-} +-sub do_remove_bin_tlpsv_win32 { +- my ($texdir) = @_; +- if (win32()) { +- remove_desktop_shortcut('PS_View'); +- remove_menu_shortcut($mainmenu, 'PS_View'); +- #unregister_extension(".ps"); +- #unregister_extension(".eps"); +- #unregister_file_type("PostScript"); +- #update_assocs(); +- } +-} +-$PostRemove{'bin-tlpsv.win32'} = \&do_remove_bin_tlpsv_win32; +-$PostInstall{'bin-tlpsv.win32'} = \&do_install_bin_tlpsv_win32; +- +-# + # bin-texlive + # + sub do_install_bin_texlive { + my ($texdir, $texdirw) = @_; + if (win32()) { +- add_menu_shortcut( +- $mainmenu, +- 'TeX Live Manager', +- '', # $texdir.'/tlpkg/doc/dummy.ico', +- $texdir.'/bin/win32/tlmgr.bat', +- 'gui', +- 'batgui', +- ); +- add_menu_shortcut( +- $mainmenu, +- 'Release notes', +- '', +- 'http://tug.org/texlive/windows.html', +- '', +- '', +- ); + if (uc(TeXLive::TLWinGoo::win_which_dir('tex.exe')) ne + uc($texdir.'/bin/win32') or + uc(TeXLive::TLWinGoo::win_which_dir('pdftex.exe')) ne +@@ -296,7 +138,6 @@ + '', + ); + add_desktop_shortcut( +- $texdirw, + 'TeX Live Prompt', + '', + $ENV{'COMSPEC'}, +@@ -309,8 +150,6 @@ + sub do_remove_bin_texlive { + my ($texdir) = @_; + if (win32()) { +- remove_menu_shortcut($mainmenu, 'TeX Live Manager'); +- remove_menu_shortcut($mainmenu, 'Release notes'); + remove_menu_shortcut($mainmenu, 'TeX Live Prompt'); + remove_desktop_shortcut('TeX Live Prompt'); + } +@@ -318,431 +157,6 @@ + $PostInstall{'bin-texlive'} = \&do_install_bin_texlive; + $PostRemove{'bin-texlive'} = \&do_remove_bin_texlive; + +-# +-# texlive.infra +-# ships all the readme.html/readme.XX.html files, and the index of all +-# documents +-sub do_install_texlive_infra { +- my ($texdir) = @_; +- if (win32()) { +- if (!defined($texdir)) { +- tlwarn("do_install_texlive_infra: texdir not defined, returning\n"); +- return; +- } +- add_menu_shortcut( +- $mainmenu, +- 'TeX Live Toplevel Readme Index', +- '', # default pdf icon +- $texdir.'/index.html', +- '', +- '', +- ); +- } +-} +-sub do_remove_texlive_infra { +- my ($texdir) = @_; +- if (win32()) { +- remove_menu_shortcut($mainmenu,'TeX Live Toplevel Readme Index'); +- } +-} +-$PostInstall{'texlive.infra'} = \&do_install_texlive_infra; +-$PostRemove{'texlive.infra'} = \&do_remove_texlive_infra; +- +-# +-# texlive-en +-# +-sub do_install_texlive_en { +- my ($texdir) = @_; +- if (win32()) { +- if (!defined($texdir)) { +- tlwarn("do_install_texlive_en: texdir not defined, returning\n"); +- return; +- } +- add_menu_shortcut( +- $mainmenu, +- 'TeX Live Manual (en) (HTML)', +- '', # default pdf icon +- $texdir.'/texmf-doc/doc/english/texlive-en/texlive-en.html', +- '', +- '', +- ); +- add_menu_shortcut( +- $mainmenu, +- 'TeX Live Manual (en) (PDF)', +- '', # default pdf icon +- $texdir.'/texmf-doc/doc/english/texlive-en/texlive-en.pdf', +- '', +- '', +- ); +- } +-} +-sub do_remove_texlive_en { +- my ($texdir) = @_; +- if (win32()) { +- remove_menu_shortcut($mainmenu,'TeX Live Manual (en) (HTML)'); +- remove_menu_shortcut($mainmenu,'TeX Live Manual (en) (PDF)'); +- } +-} +-$PostInstall{'texlive-en'} = \&do_install_texlive_en; +-$PostRemove{'texlive-en'} = \&do_remove_texlive_en; +- +-# +-# texlive-cz +-# +-sub do_install_texlive_cz { +- my ($texdir) = @_; +- if (win32()) { +- if (!defined($texdir)) { +- tlwarn("do_install_texlive_cz: texdir not defined, returning\n"); +- return; +- } +- add_menu_shortcut( +- $mainmenu, +- 'TeX Live Manual (cz) (PDF)', +- '', # default pdf icon +- $texdir.'/texmf-doc/doc/czechslovak/texlive-cz/texlive-cz.pdf', +- '', +- '', +- ); +- add_menu_shortcut( +- $mainmenu, +- 'TeX Live Manual (cz) (HTML)', +- '', # default pdf icon +- $texdir.'/texmf-doc/doc/czechslovak/texlive-cz/texlive-cz.html', +- '', +- '', +- ); +- } +-} +-sub do_remove_texlive_cz { +- my ($texdir) = @_; +- if (win32()) { +- remove_menu_shortcut($mainmenu,'TeX Live Manual (cz) (PDF)'); +- remove_menu_shortcut($mainmenu,'TeX Live Manual (cz) (HTML)'); +- } +-} +-$PostInstall{'texlive-cz'} = \&do_install_texlive_cz; +-$PostRemove{'texlive-cz'} = \&do_remove_texlive_cz; +- +-# +-# texlive-fr +-# +-sub do_install_texlive_fr { +- my ($texdir) = @_; +- if (win32()) { +- if (!defined($texdir)) { +- tlwarn("do_install_texlive_fr: texdir not defined, returning\n"); +- return; +- } +- add_menu_shortcut( +- $mainmenu, +- 'TeX Live Manual (fr) (PDF)', +- '', # default pdf icon +- $texdir.'/texmf-doc/doc/french/texlive-fr/texlive-fr.pdf', +- '', +- '', +- ); +- add_menu_shortcut( +- $mainmenu, +- 'TeX Live Manual (fr) (HTML)', +- '', # default pdf icon +- $texdir.'/texmf-doc/doc/french/texlive-fr/texlive-fr.html', +- '', +- '', +- ); +- } +-} +-sub do_remove_texlive_fr { +- my ($texdir) = @_; +- if (win32()) { +- remove_menu_shortcut($mainmenu,'TeX Live Manual (fr) (HTML)'); +- remove_menu_shortcut($mainmenu,'TeX Live Manual (fr) (PDF)'); +- } +-} +-$PostInstall{'texlive-fr'} = \&do_install_texlive_fr; +-$PostRemove{'texlive-fr'} = \&do_remove_texlive_fr; +- +-# +-# texlive-de +-# +-sub do_install_texlive_de { +- my ($texdir) = @_; +- if (win32()) { +- if (!defined($texdir)) { +- tlwarn("do_install_texlive_de: texdir not defined, returning\n"); +- return; +- } +- add_menu_shortcut( +- $mainmenu, +- 'TeX Live Manual (de) (PDF)', +- '', # default pdf icon +- $texdir.'/texmf-doc/doc/german/texlive-de/texlive-de.pdf', +- '', +- '', +- ); +- add_menu_shortcut( +- $mainmenu, +- 'TeX Live Manual (de) (HTML)', +- '', # default pdf icon +- $texdir.'/texmf-doc/doc/german/texlive-de/texlive-de.html', +- '', +- '', +- ); +- } +-} +-sub do_remove_texlive_de { +- my ($texdir) = @_; +- if (win32()) { +- remove_menu_shortcut($mainmenu,'TeX Live Manual (de) (PDF)'); +- remove_menu_shortcut($mainmenu,'TeX Live Manual (de) (HTML)'); +- } +-} +-$PostInstall{'texlive-de'} = \&do_install_texlive_de; +-$PostRemove{'texlive-de'} = \&do_remove_texlive_de; +- +-# +-# texlive-pl +-# +-sub do_install_texlive_pl { +- my ($texdir) = @_; +- if (win32()) { +- if (!defined($texdir)) { +- tlwarn("do_install_texlive_pl: texdir not defined, returning\n"); +- return; +- } +- add_menu_shortcut( +- $mainmenu, +- 'TeX Live Manual (pl) (PDF)', +- '', # default pdf icon +- $texdir.'/texmf-doc/doc/polish/texlive-pl/texlive-pl.pdf', +- '', +- '', +- ); +- add_menu_shortcut( +- $mainmenu, +- 'TeX Live Manual (pl) (HTML)', +- '', # default pdf icon +- $texdir.'/texmf-doc/doc/polish/texlive-pl/texlive-pl.html', +- '', +- '', +- ); +- } +-} +-sub do_remove_texlive_pl { +- my ($texdir) = @_; +- if (win32()) { +- remove_menu_shortcut($mainmenu,'TeX Live Manual (pl) (PDF)'); +- remove_menu_shortcut($mainmenu,'TeX Live Manual (pl) (HTML)'); +- } +-} +-$PostInstall{'texlive-pl'} = \&do_install_texlive_pl; +-$PostRemove{'texlive-pl'} = \&do_remove_texlive_pl; +- +-# +-# texlive-ru +-# +-sub do_install_texlive_ru { +- my ($texdir) = @_; +- if (win32()) { +- if (!defined($texdir)) { +- tlwarn("do_install_texlive_ru: texdir not defined, returning\n"); +- return; +- } +- add_menu_shortcut( +- $mainmenu, +- 'TeX Live Manual (ru) (PDF)', +- '', # default pdf icon +- $texdir.'/texmf-doc/doc/russian/texlive-ru/texlive-ru.pdf', +- '', +- '', +- ); +- add_menu_shortcut( +- $mainmenu, +- 'TeX Live Manual (ru) (HTML)', +- '', # default pdf icon +- $texdir.'/texmf-doc/doc/russian/texlive-ru/texlive-ru.html', +- '', +- '', +- ); +- } +-} +-sub do_remove_texlive_ru { +- my ($texdir) = @_; +- if (win32()) { +- remove_menu_shortcut($mainmenu,'TeX Live Manual (ru) (HTML)'); +- remove_menu_shortcut($mainmenu,'TeX Live Manual (ru) (PDF)'); +- } +-} +-$PostInstall{'texlive-ru'} = \&do_install_texlive_ru; +-$PostRemove{'texlive-ru'} = \&do_remove_texlive_ru; +- +-# +-# texlive-zh-cn +-# +-sub do_install_texlive_zh_cn { +- my ($texdir) = @_; +- if (win32()) { +- if (!defined($texdir)) { +- tlwarn("do_install_texlive_zh_cn: texdir not defined, returning\n"); +- return; +- } +- add_menu_shortcut( +- $mainmenu, +- 'TeX Live Manual (zh-cn)', +- '', # default pdf icon +- $texdir.'/texmf-doc/doc/chinese/texlive-zh-cn/texlive-zh-cn.pdf', +- '', +- '', +- ); +- } +-} +-sub do_remove_texlive_zh_cn { +- my ($texdir) = @_; +- if (win32()) { +- remove_menu_shortcut($mainmenu,'TeX Live Manual (zh-cn)'); +- } +-} +-$PostInstall{'texlive-zh-cn'} = \&do_install_texlive_zh_cn; +-$PostRemove{'texlive-zh-cn'} = \&do_remove_texlive_zh_cn; +- +- +-# +-# FROM HERE ON ONLY DISABLED POST INSTALL AND REMOVE ACTIONS!!!!!!! +-# +- +-# disabled +-sub do_bin_xdvi { +- my ($TEXDIR, $TEXMFSYSVAR) = @_; +- if (!defined($TEXMFSYSVAR)) { +- $TEXMFSYSVAR = `kpsewhich -var-value=TEXMFSYSVAR`; +- chomp($TEXMFSYSVAR); +- } +- copy ("$TEXDIR/texmf/xdvi/XDvi", "$TEXMFSYSVAR/xdvi"); +-} +-# $PostInstall{"bin-xdvi"} = \&do_bin_xdvi; +- +- +-# disabled +-sub do_plain { +- my ($TEXDIR, $TEXMFSYSVAR) = @_; +- if (!defined($TEXMFSYSVAR)) { +- $TEXMFSYSVAR = `kpsewhich -var-value=TEXMFSYSVAR`; +- chomp($TEXMFSYSVAR); +- } +- # install some copies from texmf(-dist) into texmf-var +- copy ("$TEXDIR/texmf-dist/tex/generic/config/language.def", +- "$TEXMFSYSVAR/tex/generic/config"); +-} +-# $PostInstall{"plain"} = \&do_plain; +- +- +-# disabled +-sub do_bin_dvipsk { +- my ($TEXDIR, $TEXMFSYSVAR) = @_; +- if (!defined($TEXMFSYSVAR)) { +- $TEXMFSYSVAR = `kpsewhich -var-value=TEXMFSYSVAR`; +- chomp($TEXMFSYSVAR); +- } +- # those files must exist +- copy ("$TEXDIR/texmf/dvips/config/config.ps", +- "$TEXMFSYSVAR/dvips/config"); +-} +-# $PostInstall{"bin-dvipsk"} = \&do_bin_dvipsk; +- +-# disabled +-sub do_bin_dvipdfm { +- my ($TEXDIR, $TEXMFSYSVAR) = @_; +- if (!defined($TEXMFSYSVAR)) { +- $TEXMFSYSVAR = `kpsewhich -var-value=TEXMFSYSVAR`; +- chomp($TEXMFSYSVAR); +- } +- # fix up dvipdfm config file to contain the right # piping command +- mkdirhier("$TEXMFSYSVAR/dvipdfm/config"); +- open(DVIPDFMCONFIGDIST, "<$TEXDIR/texmf/dvipdfm/config/config") +- or die("Cannot open $TEXDIR/texmf/dvipdfm/config/config"); +- open(DVIPDFMCONFIGINST, ">$TEXMFSYSVAR/dvipdfm/config/config") +- or die("Cannot open $TEXMFSYSVAR/dvipdfm/config/config"); +- while () { +- if (m/^D /) { +- print DVIPDFMCONFIGINST 'D "epstopdf --outfile=%o --nocompress %i"', "\n"; +- } else { +- print DVIPDFMCONFIGINST; +- } +- } +- close(DVIPDFMCONFIGDIST); +- close(DVIPDFMCONFIGINST); +-} +-# $PostInstall{"bin-dvipdfm"} = \&do_bin_dvipdfm; +- +-# disabled +-sub do_bin_dvipdfmx { +- my ($TEXDIR, $TEXMFSYSVAR) = @_; +- if (!defined($TEXMFSYSVAR)) { +- $TEXMFSYSVAR = `kpsewhich -var-value=TEXMFSYSVAR`; +- chomp($TEXMFSYSVAR); +- } +- # dvipdfmx.cfg +- open(DVIPDFMCONFIGDIST, "<$TEXDIR/texmf/dvipdfmx/dvipdfmx.cfg") +- or die("Cannot open $TEXDIR/texmf/dvipdfmx/dvipdfmx.cfg"); +- open(DVIPDFMCONFIGINST, ">$TEXMFSYSVAR/dvipdfmx/dvipdfmx.cfg") +- or die("Cannot open $TEXMFSYSVAR/dvipdfmx/dvipdfmx.cfg"); +- while () { +- # current dvipdfmx.cfg already contains the right rungs incantation +- # so do just copy the file to texmf-var +- #if (m/^D /) { +- # print DVIPDFMCONFIGINST "%$_"; +- # print DVIPDFMCONFIGINST "\n%% GhostScript (TeX Live (Unix and Win32)):\n"; +- # print DVIPDFMCONFIGINST 'D "rungs -q -dNOPAUSE -dBATCH -sPAPERSIZE=a0 -sDEVICE=pdfwrite -dCompatibilityLevel=1.3 -dAutoFilterGrayImages=false -dGrayImageFilter=/FlateEncode -dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode -dUseFlateCompression=true -sOutputFile=%o %i -c quit"', "\n\n"; +- #} else { +- print DVIPDFMCONFIGINST; +- #} +- } +- close(DVIPDFMCONFIGDIST); +- close(DVIPDFMCONFIGINST); +-} +-# $PostInstall{"bin-dvipdfmx"} = \&do_bin_dvipdfmx; +- +- +-# disabled +-sub do_bin_kpathsea { +- my ($TEXDIR, $TEXMFSYSVAR) = @_; +- if (!defined($TEXMFSYSVAR)) { +- $TEXMFSYSVAR = `kpsewhich -var-value=TEXMFSYSVAR`; +- chomp($TEXMFSYSVAR); +- } +- copy ("$TEXDIR/texmf/web2c/mktex.cnf", +- "$TEXMFSYSVAR/web2c"); +-} +-# $PostInstall{"bin-kpathsea"} = \&do_bin_kpathsea; +- +-# disabled +-sub do_bin_pdftex { +- my ($TEXDIR, $TEXMFSYSVAR) = @_; +- if (!defined($TEXMFSYSVAR)) { +- $TEXMFSYSVAR = `kpsewhich -var-value=TEXMFSYSVAR`; +- chomp($TEXMFSYSVAR); +- } +- # the old installer copied from CDDIR, but shouldn't this be installed +- # in ANY case since it is in bin-pdftex??? +- copy ("$TEXDIR/texmf/tex/generic/config/pdftexconfig.tex", +- "$TEXMFSYSVAR/tex/generic/config"); +-} +-# $PostInstall{"bin-pdftex"} = \&do_bin_pdftex; +- +-# disabled +-sub do_context { +- my ($TEXDIR, $TEXMFSYSVAR) = @_; +- if (!defined($TEXMFSYSVAR)) { +- $TEXMFSYSVAR = `kpsewhich -var-value=TEXMFSYSVAR`; +- chomp($TEXMFSYSVAR); +- } +- # old installer did this, should we do this, TOO???? +- copy ("$TEXDIR/texmf-dist/tex/context/config/cont-usr.tex", +- "$TEXMFSYSVAR/tex/context/config"); +-} +-# $PostInstall{"context"} = \&do_context; +- +- + 1; + + +Index: tlpkg/TeXLive/TLPSRC.pm +=================================================================== +--- tlpkg/TeXLive/TLPSRC.pm (revision 12142) ++++ tlpkg/TeXLive/TLPSRC.pm (working copy) +@@ -30,6 +30,7 @@ + srcpatterns => $params{'srcpatterns'}, + docpatterns => $params{'docpatterns'}, + binpatterns => $params{'binpatterns'}, ++ postactions => $params{'postactions'}, + executes => defined($params{'executes'}) ? $params{'executes'} : [], + depends => defined($params{'depends'}) ? $params{'depends'} : [], + }; +@@ -67,6 +68,7 @@ + my $catalogue = ""; + my (@executes, @depends); + my (@runpatterns, @docpatterns, @binpatterns, @srcpatterns); ++ my (@postactions); + my $started = 0; + my $finished = 0; + my $savedline = ""; +@@ -132,6 +134,9 @@ + } elsif ($line =~ /^depend\s+(.*)\s*$/) { + push @depends, $1 if ($1 ne ""); + next; ++ } elsif ($line =~ /^postaction\s+(.*)\s*$/) { ++ push @postactions, $1 if ($1 ne ""); ++ next; + } else { + tlwarn("$srcfile:$.: unknown tlpsrc directive, please fix: $line\n"); + } +@@ -149,6 +154,7 @@ + $self->docpatterns(@docpatterns) if @docpatterns; + $self->executes(@executes) if @executes; + $self->depends(@depends) if @depends; ++ $self->postactions(@postactions) if @postactions; + } + + +@@ -175,6 +181,11 @@ + print $fd "execute $_\n"; + } + } ++ if (defined($self->{'postactions'})) { ++ foreach (@{$self->{'postactions'}}) { ++ print $fd "postaction $_\n"; ++ } ++ } + if (defined($self->{'srcpatterns'}) && (@{$self->{'srcpatterns'}})) { + foreach (sort @{$self->{'srcpatterns'}}) { + print $fd "srcpattern $_\n"; +@@ -213,6 +224,7 @@ + $tlp->longdesc($self->{'longdesc'}) if (defined($self->{'longdesc'})); + $tlp->catalogue($self->{'catalogue'}) if (defined($self->{'catalogue'})); + $tlp->executes(@{$self->{'executes'}}) if (defined($self->{'executes'})); ++ $tlp->postactions(@{$self->{'postactions'}}) if (defined($self->{'postactions'})); + $tlp->depends(@{$self->{'depends'}}) if (defined($self->{'depends'})); + $tlp->revision(0); + my $filemax; +@@ -540,6 +552,11 @@ + if (@_) { @{ $self->{'executes'} } = @_ } + return @{ $self->{'executes'} }; + } ++sub postactions { ++ my $self = shift; ++ if (@_) { @{ $self->{'postactions'} } = @_ } ++ return @{ $self->{'postactions'} }; ++} + + format multilineformat = + longdesc ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~ +@@ -580,7 +597,7 @@ + + where I can be C, C, C, C, + C, C, C, C, C, +-C, or C. ++C, C, or C. + + Continuation lines are supported via a trailing backslash. That is, if + the C<.tlpsrc> file contains two physical lines like this: +@@ -737,12 +754,49 @@ + C, C (both integers), and C (a + comma-separated list of alias names for that hyphenation). + +-=item C I ++=item C engine=I [I...]> + +-build the format I, as specified in the C file. ++activates the format with name I based on the engine I. The ++additional variables I are: ++C which can only be equal to C in which case the format ++will only be mentioned but disabled (prefixed with C<#!>; ++C which gives the patterns file, if not present C<-> is used; ++C which gives the additional options for the C file. + + =back + ++=item ++ ++gives a free from entry of post install and removal actions to be ++executed. The difference to the C statement is that ++C is concerned with system integration, i.e., adjusting ++things outside the installation directory, while C touches ++only things within the installation. ++ ++Currently the following Cs are understood: ++ ++=over 4 ++ ++=item C type=menu|desktop icon=I cmd=I args=I hide=0|1> ++ ++On W32 creates a shortcut either in the main TeX Live menu or on the ++desktop. Please see the documentation of TeXLive::TLWinGoo for details ++on the parameters. ++ ++=item C cmd=I> ++ ++On W32 associates the file type I with the command I. ++ ++=item C filetype=I> ++ ++On W32 declares files with the extenstion I<.ext> of file type I. ++ ++=item C> ++ ++TODO TODO I don't know how we want to do that ++ ++=back ++ + =item C<(src|run|doc|bin)pattern> I + + adds a pattern (next section) to the respective list of patterns. +Index: tlpkg/TeXLive/TLPOBJ.pm +=================================================================== +--- tlpkg/TeXLive/TLPOBJ.pm (revision 12142) ++++ tlpkg/TeXLive/TLPOBJ.pm (working copy) +@@ -29,6 +29,7 @@ + docfiles => defined($params{'docfiles'}) ? $params{'docfiles'} : [], + docsize => $params{'docsize'}, + executes => defined($params{'executes'}) ? $params{'executes'} : [], ++ postactions => defined($params{'postactions'}) ? $params{'postactions'} : [], + # note that binfiles is a HASH with keys of $arch! + binfiles => defined($params{'binfiles'}) ? $params{'binfiles'} : {}, + binsize => defined($params{'binsize'}) ? $params{'binsize'} : {}, +@@ -92,6 +93,7 @@ + ($lastcmd eq "docfiles") || + ($lastcmd eq "srcfiles") || + ($lastcmd eq "executes") || ++ ($lastcmd eq "postaction") || + ($lastcmd eq "depend") ) { + $line =~ s/^ /${lastcmd}continued /; + } else { +@@ -216,6 +218,10 @@ + push @{$self->{'executes'}}, "$2" unless "$2" eq ""; + $lastcmd = "execute"; + next; ++ } elsif ($line =~ /^postaction(continued)?\s*(.*)\s*/o) { ++ push @{$self->{'postactions'}}, "$2" unless "$2" eq ""; ++ $lastcmd = "postaction"; ++ next; + } elsif ($line =~ /^depend(continued)?\s*(.*)\s*/o) { + push @{$self->{'depends'}}, "$2" unless "$2" eq ""; + $lastcmd = "depend"; +@@ -316,6 +322,11 @@ + print $fd "execute $_\n"; + } + } ++ if (defined($self->{'postactions'})) { ++ foreach (@{$self->{'postactions'}}) { ++ print $fd "postaction $_\n"; ++ } ++ } + if (defined($self->{'containersize'})) { + print $fd "containersize $self->{'containersize'}\n"; + } +@@ -388,6 +399,11 @@ + print $fd "execute $_\n"; + } + } ++ if (defined($self->{'postactions'})) { ++ foreach (@{$self->{'postactions'}}) { ++ print $fd "postaction $_\n"; ++ } ++ } + if (defined($self->{'docfiles'}) && (@{$self->{'docfiles'}})) { + print $fd "docfiles\n"; + foreach (sort @{$self->{'docfiles'}}) { +@@ -837,7 +853,7 @@ + } else { + push @maps, "disable $3"; + } +- } elsif ($e =~ m/^BuildFormat\s+([^\s]+)\s*$/) { ++ } elsif ($e =~ m/^AddFormat\s+([^\s]+)\s*$/) { + push @formats, $1; + } elsif ($e =~ m/^AddHyphen\s+(.*)\s*$/) { + push @dats, $1; +@@ -1026,6 +1042,11 @@ + if (@_) { $self->{'executes'} = [ @_ ] } + return @{ $self->{'executes'} }; + } ++sub postactions { ++ my $self = shift; ++ if (@_) { $self->{'postactions'} = [ @_ ] } ++ return @{ $self->{'postactions'} }; ++} + sub containerdir { + my @self = shift; + if (@_) { $_containerdir = $_[0] } +Index: tlpkg/TeXLive/TLMedia.pm +=================================================================== +--- tlpkg/TeXLive/TLMedia.pm (revision 12142) ++++ tlpkg/TeXLive/TLMedia.pm (working copy) +@@ -208,6 +208,9 @@ + info("running post install action for $pkg\n"); + &{$PostInstall{$pkg}}($totlpdb->root); + } ++ # ++ # Run the post installation code in the postaction tlpsrc entries ++ &TeXLive::TLUtils::do_postaction_code("install", $tlpobj); + } + return \%ret; + } +Index: tlpkg/TeXLive/TLUtils.pm +=================================================================== +--- tlpkg/TeXLive/TLUtils.pm (revision 12142) ++++ tlpkg/TeXLive/TLUtils.pm (working copy) +@@ -56,6 +56,7 @@ + TeXLive::TLUtils::create_language_def($tlpdb,$dest,$localconf); + 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_code($how, $tlpobj); + + =head2 Miscellaneous + +@@ -1224,7 +1225,111 @@ + return 1; + } + ++=item C + ++Evaluates the C code in the C<$tlpobj> ++MISSING DOCUMENTATION TODO TODO ++ ++Returns 1 on success, and 0 on failure. ++ ++=cut ++ ++sub do_postaction_code { ++ my ($how, $tlpobj) = @_; ++ my $ret = 1; ++ if (!defined($tlpobj)) { ++ tlwarn("do_postaction_code: didn't get a tlpobj\n"); ++ return 0; ++ } ++ debug("running postaction $how code for " . $tlpobj->name . "\n") ++ if $tlpobj->postactions; ++ for my $pa ($tlpobj->postactions) { ++ if ($pa =~ m/^\s*shortcut\s+(.*)\s*$/) { ++ $ret &&= _do_postaction_shortcut($how, $tlpobj, $1); ++ } elsif ($pa =~ m/\s*filetype\s+(.*)\s*$/) { ++ $ret &&= _do_postaction_filetype($how, $tlpobj, $1); ++ } elsif ($pa =~ m/\s*fileassoc\s+(.*)\s*$/) { ++ $ret &&= _do_postaction_fileassoc($how, $tlpobj, $1); ++ } elsif ($pa =~ m/\s*code\s+(.*)\s*$/) { ++ $ret &&= _do_postaction_code($how, $tlpobj, $1); ++ } else { ++ tlwarn("do_postaction_code: don't know how to do $pa\n"); ++ $ret = 0; ++ } ++ } ++ # nothing to do ++ return $ret; ++} ++ ++sub _do_postaction_shortcut { ++ my ($how, $tlpobj, $pa) = @_; ++ return 1 unless win32(); ++ my @words = quotewords('\s+', 0, "$pa"); ++ my $type; ++ my $icon = ''; ++ my $cmd = ''; ++ my $args = ''; ++ my $name; ++ my $hide = '0'; ++ while (@words) { ++ $_ = shift @words; ++ if (/^type=(.*)$/) { ++ $type = $1; ++ if (($type ne "menu") && ($type ne "desktop")) { ++ tlwarn("type of shortcut postaction $type is unknown (menu, desktop)\n"); ++ return 0; ++ } ++ } elsif (/^name=(.*)$/) { ++ $name = $1; ++ } elsif (/^icon=(.*)$/) { ++ $icon = $1; ++ } elsif (/^cmd=(.*)$/) { ++ $cmd = $1; ++ } elsif (/^args=(.*)$/) { ++ $args = $1; ++ } elsif (/^hide=(.*)$/) { ++ $hide = $1; ++ if (($hide ne "0") && ($hide ne "1")) { ++ tlwarn("hide of shortcut postaction $hide is unknown (0, 1)\n"); ++ return 0; ++ } ++ } else { ++ tlwarn("Unknown tag for postaction shortcut $pa: $_\n"); ++ return 0; ++ } ++ } ++ if ($how eq "install") { ++ my $texdir = `kpsewhich -var-value=SELFAUTOPARENT`; ++ chomp($texdir); ++ my $texdir_bsl = conv_to_w32_path($texdir); ++ $icon =~ s!^TEXDIR/!$texdir/!; ++ $args =~ s!^TEXDIR/!$texdir/!; ++ $args = conv_to_w32_path($args); ++ if ($type eq "menu") { ++ add_menu_shortcut($TeXLive::TLConfig::WindowsMainMenuName, ++ $name, $icon, $cmd, $args, $hide); ++ } elsif ($type eq "desktop") { ++ add_desktop_shortcut($name, $icon, $cmd, $args, $hide); ++ } else { ++ tlwarn("Unknown type of shortcut: $type\n"); ++ return 0; ++ } ++ } elsif ($how eq "remove") { ++ if ($type eq "menu") { ++ remove_menu_shortcut($TeXLive::TLConfig::WindowsMainMenuName, $name); ++ } elsif ($type eq "desktop") { ++ remove_desktop_shortcut($name); ++ } else { ++ tlwarn("Unknown type of shortcut: $type\n"); ++ return 0; ++ } ++ } else { ++ tlwarn("Unknown mode $how\n"); ++ return 0; ++ } ++ return 1; ++} ++ + =item C + + Unpacked C<$tarfile> in C<$targetdir> (changing directories to +Index: tlpkg/TeXLive/TLWinGoo.pm +=================================================================== +--- tlpkg/TeXLive/TLWinGoo.pm (revision 12142) ++++ tlpkg/TeXLive/TLWinGoo.pm (working copy) +@@ -58,7 +58,6 @@ + $prog, $args, $batgui); + TeXLive::TLWinGoo::add_menu_shortcut($place, $name, $icon, + $prog, $args, $batgui); +- TeXLive::TLWinGoo::init_unshortbat($texdir); + TeXLive::TLWinGoo::remove_desktop_shortcut($name); + TeXLive::TLWinGoo::remove_menu_shortcut($place, $name); + +@@ -104,7 +103,6 @@ + &add_menu_shortcut + &remove_desktop_shortcut + &remove_menu_shortcut +- &init_unshortbat + &create_uninstaller + &unregister_uninstaller + ); +@@ -862,8 +860,7 @@ + + =pod + +-=item C ++=item C + + Add a desktop shortcut, with name $name and icon $icon, pointing to + program $prog with parameters $args (a string). Use a non-null +@@ -871,14 +868,10 @@ + batchfile. Then the inevitable command prompt will be hidden + rightaway, leaving only the gui program visible. + +-The parameter $texdir is merely used to locate the batchfile +-unshort.bat for uninstalling desktop shortcuts, which needs to be +-updated. +- + =cut + + sub add_desktop_shortcut { +- my ($texdir, $name, $icon, $prog, $args, $batgui) = @_; ++ my ($name, $icon, $prog, $args, $batgui) = @_; + + # create shortcut + my ($shc, $shpath, $shfile); +@@ -889,15 +882,6 @@ + $shc->{'ShowCmd'} = $batgui ? SW_SHOWMINNOACTIVE : SW_SHOWNORMAL; + $shfile = desktop_path().'/'.$name.'.lnk'; + $shc->Save($shfile); +- +- # update batchfile for uninstalling shortcuts +- if (open UNSHORT, ">>$texdir/tlpkg/installer/unshort.bat") { +- $shfile =~ s!/!\\!g; +- print UNSHORT 'del "'.$shfile."\" 2>nul\n"; +- close UNSHORT; +- } else { +- warn "Cannot open $texdir/tlpkg/installer/unshort.bat for appending: $!"; +- } + } + + =pod +@@ -937,39 +921,16 @@ + + =pod + +-=item C +- +-Reinitialize unshort.bat, the shortcuts uninstaller. +- +-=cut +- +-sub init_unshortbat { +- my $texdirw = shift; +- my $menupath = menu_path(); +- $menupath =~ s!/!\\!g; +- +- # batchfile for uninstalling shortcuts +- if (open UNSHORT, ">$texdirw/tlpkg/installer/unshort.bat") { +- print UNSHORT 'rmdir /s /q "'.$menupath."\\TeX Live 2008\" 2>nul\n"; +- close UNSHORT; +- } else { +- warn "Cannot create $texdirw/tlpkg/installer/unshort.bat: $!"; +- } +-} +- +-=pod +- + =item C + +-For uninstallation of an individual package. We leave unshort.bat +-alone because redundant entries are no big deal. ++For uninstallation of an individual package. + + =cut + + sub remove_desktop_shortcut { + my $name = shift; + unlink desktop_path().'/'.$name.'.lnk'; +-} ++} + + =pod + +@@ -1040,7 +1001,6 @@ + set PERL5LIB= + \"$td\\tlpkg\\tlperl\\bin\\perl.exe\" \"$td\\texmf\\scripts\\texlive\\uninstall-win32.pl\" + if errorlevel 1 exit +-call \"$tdw\\tlpkg\\installer\\unshort.bat\" + copy \"$tdw\\tlpkg\\installer\\uninst2.bat\" \"\%TEMP\%\" + rem pause + \"\%TEMP\%\\uninst2.bat\" +Index: tlpkg/tlpsrc/bin-tex.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/bin-tex.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/bin-tex.tlpsrc (working copy) +@@ -1,7 +1,6 @@ + name bin-tex + category TLCore + depend bin-kpathsea +-execute BuildFormat tex +-runpattern f texmf/fmtutil/format.tex.cnf ++execute AddFormat name=tex engine=tex options="tex.ini" + docpattern f texmf/doc/man/man1/tex.* + binpattern f bin/${ARCH}/tex +Index: tlpkg/tlpsrc/bin-mex.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/bin-mex.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/bin-mex.tlpsrc (working copy) +@@ -2,10 +2,9 @@ + category TLCore + depend pdftex + depend bin-tex +-execute BuildFormat mex +-execute BuildFormat utf8mex +-runpattern f texmf/fmtutil/format.mex.cnf +-runpattern f texmf/fmtutil/format.utf8mex.cnf ++execute AddFormat name=mex engine=pdftex patterns=mexconf.tex options="-translate-file=cp227.tcx *mex.ini" ++execute AddFormat name=pdfmex engine=pdftex patterns=mexconf.tex options="-translate-file=cp227.tcx *pdfmex.ini" ++execute AddFormat name=utf8mex engine=pdftex patterns=mexconf.tex options="-enc *utf8mex.ini" + binpattern f bin/${ARCH}/mex + binpattern f bin/${ARCH}/pdfmex + binpattern f bin/${ARCH}/utf8mex +Index: tlpkg/tlpsrc/texlive-de.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/texlive-de.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/texlive-de.tlpsrc (working copy) +@@ -1,2 +1,4 @@ + name texlive-de + category Documentation ++postaction shortcut type=menu name="TeX Live Manual (de) (PDF)" cmd=TEXDIR/texmf-doc/doc/german/texlive-de/texlive-de.pdf ++postaction shortcut type=menu name="TeX Live Manual (de) (HTML)" cmd=TEXDIR/texmf-doc/doc/german/texlive-de/texlive-de.html +Index: tlpkg/tlpsrc/pdftex.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/pdftex.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/pdftex.tlpsrc (working copy) +@@ -1,8 +1,9 @@ + name pdftex + category TLCore + depend bin-kpathsea +-execute BuildFormat pdftex +-runpattern f texmf/fmtutil/format.pdftex.cnf ++execute AddFormat name=etex engine=pdftex patterns=language.def options="-translate-file=cp227.tcx *etex.ini" ++execute AddFormat name=pdfetex engine=pdftex patterns=language.def options="-translate-file=cp227.tcx *pdfetex.ini" ++execute AddFormat name=pdftex engine=pdftex patterns=language.def options="-translate-file=cp227.tcx *pdfetex.ini" + runpattern f texmf/fonts/map/pdftex/updmap/* + runpattern f texmf/tex/generic/config/pdftex*.tex + runpattern f texmf/tex/generic/pdftex/* +Index: tlpkg/tlpsrc/bin-csplain.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/bin-csplain.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/bin-csplain.tlpsrc (working copy) +@@ -1,7 +1,7 @@ + name bin-csplain + category TLCore + depend bin-tex +-execute BuildFormat csplain +-runpattern f texmf/fmtutil/format.csplain.cnf ++execute AddFormat name=csplain engine=pdftex options="-etex -translate-file=cp227.tcx csplain.ini" ++execute AddFormat name=pdfcsplain engine=pdftex options="-etex -translate-file=cp227.tcx csplain.ini" + binpattern f bin/${ARCH}/csplain + binpattern f bin/${ARCH}/pdfcsplain +Index: tlpkg/tlpsrc/bin-metapost.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/bin-metapost.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/bin-metapost.tlpsrc (working copy) +@@ -1,8 +1,8 @@ + name bin-metapost + category TLCore + depend bin-kpathsea +-execute BuildFormat metapost +-runpattern f texmf/fmtutil/format.metapost.cnf ++execute AddFormat name=mpost engine=mpost options="-translate-file=cp227.tcx mpost.mp" ++execute AddFormat name=mfplain engine=mpost options="-translate-file=cp227.tcx mfplain.ini" + docpattern f texmf/doc/man/man1/dmp.* + docpattern f texmf/doc/man/man1/dvitomp.* + docpattern f texmf/doc/man/man1/makempx.* +Index: tlpkg/tlpsrc/texlive-fr.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/texlive-fr.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/texlive-fr.tlpsrc (working copy) +@@ -1,2 +1,4 @@ + name texlive-fr + category Documentation ++postaction shortcut type=menu name="TeX Live Manual (fr) (PDF)" cmd=TEXDIR/texmf-doc/doc/french/texlive-fr/texlive-fr.pdf ++postaction shortcut type=menu name="TeX Live Manual (fr) (HTML)" cmd=TEXDIR/texmf-doc/doc/french/texlive-fr/texlive-fr.html +Index: tlpkg/tlpsrc/texlive-zh-cn.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/texlive-zh-cn.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/texlive-zh-cn.tlpsrc (working copy) +@@ -1,2 +1,3 @@ + name texlive-zh-cn + category Documentation ++postaction shortcut type=menu name="TeX Live Manual (zh-cn) (PDF)" cmd=TEXDIR/texmf-doc/doc/chinese/texlive-zh-cn/texlive-zh-cn.pdf +Index: tlpkg/tlpsrc/bin-dviout.win32.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/bin-dviout.win32.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/bin-dviout.win32.tlpsrc (working copy) +@@ -2,3 +2,4 @@ + category TLCore + binpattern d/win32 tlpkg/dviout + binpattern f bin/win32/dviout.vbs ++postaction shortcut type=menu name="DVIOUT Dvi Viewer" cmd=wscript args=TEXDIR/bin/win32/dviout.vbs hide=1 +Index: tlpkg/tlpsrc/bin-context.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/bin-context.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/bin-context.tlpsrc (working copy) +@@ -1,9 +1,15 @@ + name bin-context + category TLCore + depend pdftex +-execute BuildFormat context ++execute AddFormat name=cont-en engine=pdftex patterns=cont-usr.tex options="-8bit *cont-en.ini" ++execute AddFormat name=cont-cz mode=disabled engine=pdftex patterns=cont-usr.tex options="-8bit *cont-cz.ini" ++execute AddFormat name=cont-de mode=disabled engine=pdftex patterns=cont-usr.tex options="-8bit *cont-de.ini" ++execute AddFormat name=cont-nl mode=disabled engine=pdftex patterns=cont-usr.tex options="-8bit *cont-nl.ini" ++execute AddFormat name=cont-uk mode=disabled engine=pdftex patterns=cont-usr.tex options="-8bit *cont-uk.ini" ++execute AddFormat name=cont-en engine=xetex patterns=cont-usr.tex options="-8bit *cont-en.ini" ++execute AddFormat name=mptopdf engine=pdftex options="-translate-file=cp227.tcx mptopdf.tex" ++execute AddFormat name=metafun engine=mpost options="-translate-file=cp227.tcx metafun.mp" + runpattern f texmf-dist/tex/mptopdf/config/mptopdf.ini +-runpattern f texmf/fmtutil/format.context.cnf + docpattern f texmf/doc/man/man1/ctxtools.* + docpattern f texmf/doc/man/man1/makempy.* + docpattern f texmf/doc/man/man1/mptopdf.* +Index: tlpkg/tlpsrc/bin-mltex.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/bin-mltex.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/bin-mltex.tlpsrc (working copy) +@@ -1,7 +1,7 @@ + name bin-mltex + category TLCore + depend bin-latex +-execute BuildFormat mltex +-runpattern f texmf/fmtutil/format.mltex.cnf ++execute AddFormat name=mltex engine=pdftex options="-translate-file=cp227.tcx -mltex mltex.ini" ++execute AddFormat name=mllatex engine=pdftex patterns=language.dat options="-translate-file=cp227.tcx -mltex mllatex.ini" + binpattern f bin/${ARCH}/mllatex + binpattern f bin/${ARCH}/mltex +Index: tlpkg/tlpsrc/luatex.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/luatex.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/luatex.tlpsrc (working copy) +@@ -1,8 +1,8 @@ + name luatex + category TLCore +-execute BuildFormat luatex ++execute AddFormat name=luatex engine=luatex options="luatex.ini" ++execute AddFormat name=pdfluatex engine=luatex options="pdfluatex.ini" + docpattern d texmf-dist/doc/luatex +-runpattern f texmf/fmtutil/format.luatex.cnf + binpattern f/!hppa-hpux bin/${ARCH}/luatex + binpattern f/!hppa-hpux bin/${ARCH}/pdfluatex + binpattern f/!hppa-hpux bin/${ARCH}/texlua +Index: tlpkg/tlpsrc/bin-cslatex.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/bin-cslatex.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/bin-cslatex.tlpsrc (working copy) +@@ -1,7 +1,7 @@ + name bin-cslatex + category TLCore + depend bin-latex +-execute BuildFormat cslatex +-runpattern f texmf/fmtutil/format.cslatex.cnf ++execute AddFormat name=cslatex engine=pdftex options="-etex -translate-file=cp227.tcx cslatex.ini" ++execute AddFormat name=pdfcslatex engine=pdftex options="-etex -translate-file=cp227.tcx cslatex.ini" + binpattern f bin/${ARCH}/cslatex + binpattern f bin/${ARCH}/pdfcslatex +Index: tlpkg/tlpsrc/bin-texdoc.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/bin-texdoc.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/bin-texdoc.tlpsrc (working copy) +@@ -12,3 +12,4 @@ + binpattern f bin/${ARCH}/texdoctk + binpattern f bin/win32/texdocc + binpattern f bin/win32/tl-w32-texdoc-wrapper.texlua ++postaction shortcut type=menu name="TeXdoc GUI" cmd="TEXDIR/bin/win32/texdoctk.bat" hide=1 +Index: tlpkg/tlpsrc/bin-latex.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/bin-latex.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/bin-latex.tlpsrc (working copy) +@@ -4,12 +4,14 @@ + depend pdftex + depend latexconfig + depend latex-fonts +-execute BuildFormat latex ++execute AddFormat name=latex engine=pdftex patterns=language.dat options="-translate-file=cp227.tcx *latex.ini" ++execute AddFormat name=pdflatex engine=pdftex patterns=language.dat options="-translate-file=cp227.tcx *pdflatex.ini" ++execute AddFormat name=lualatex engine=luatex patterns=language.dat options="lualatex.ini" ++execute AddFormat name=pdflualatex engine=luatex patterns=language.dat options="pdflualatex.ini" + binpattern f bin/${ARCH}/latex + binpattern f/!hppa-hpux bin/${ARCH}/lualatex + binpattern f bin/${ARCH}/pdflatex + binpattern f/!hppa-hpux bin/${ARCH}/pdflualatex + docpattern f texmf/doc/man/man1/latex.* + docpattern f texmf/doc/man/man1/pdflatex.* +-runpattern f texmf/fmtutil/format.latex.cnf + runpattern d texmf/tex/latex/config +Index: tlpkg/tlpsrc/bin-omega.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/bin-omega.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/bin-omega.tlpsrc (working copy) +@@ -1,7 +1,7 @@ + name bin-omega + category TLCore +-execute BuildFormat omega +-runpattern f texmf/fmtutil/format.omega.cnf ++execute AddFormat name=omega engine=omega options="omega.ini" ++execute AddFormat name=lambda engine=omega patterns=language.dat options="lambda.ini" + docpattern f texmf/doc/man/man1/lambda.* + docpattern f texmf/doc/man/man1/omega.* + binpattern f bin/${ARCH}/lambda +Index: tlpkg/tlpsrc/bin-tlpsv.win32.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/bin-tlpsv.win32.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/bin-tlpsv.win32.tlpsrc (working copy) +@@ -5,3 +5,5 @@ + runpattern f bin/win32/psv.bat + runpattern f texmf/scripts/texlive/psv.tlu + runpattern d tlpkg/tlpsv ++postaction shortcut type=menu name="PS_View" icon=TEXDIR/tlpkg/tlpsv/psv.exe cmd=TEXDIR/bin/win32/psv.bat hide=1 ++postaction shortcut type=desktop name="PS_View" icon=TEXDIR/tlpkg/tlpsv/psv.exe cmd=TEXDIR/bin/win32/psv.bat hide=1 +Index: tlpkg/tlpsrc/bin-xmltex.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/bin-xmltex.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/bin-xmltex.tlpsrc (working copy) +@@ -2,7 +2,7 @@ + category TLCore + depend pdftex + depend bin-tex +-execute BuildFormat xmltex +-runpattern f texmf/fmtutil/format.xmltex.cnf ++execute AddFormat name=xmltex engine=pdftex patterns=language.dat options="&latex xmltex.ini" ++execute AddFormat name=pdfxmltex engine=pdftex patterns=language.dat options="&pdflatex pdfxmltex.ini" + binpattern f bin/${ARCH}/pdfxmltex + binpattern f bin/${ARCH}/xmltex +Index: tlpkg/tlpsrc/texlive-ru.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/texlive-ru.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/texlive-ru.tlpsrc (working copy) +@@ -1,2 +1,4 @@ + name texlive-ru + category Documentation ++postaction shortcut type=menu name="TeX Live Manual (ru) (PDF)" cmd=TEXDIR/texmf-doc/doc/russian/texlive-ru/texlive-ru.pdf ++postaction shortcut type=menu name="TeX Live Manual (ru) (HTML)" cmd=TEXDIR/texmf-doc/doc/russian/texlive-ru/texlive-ru.html +Index: tlpkg/tlpsrc/bin-texlive.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/bin-texlive.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/bin-texlive.tlpsrc (working copy) +@@ -25,3 +25,5 @@ + binpattern f bin/win32/tl-w32-wrapper.texlua + binpattern f bin/win32/symlinks4cygwin.sh + binpattern f/win32 texmf/scripts/texlive/w32_updater.bat ++postaction shortcut type=menu name="TeX Live Manager" cmd=TEXDIR/bin/win32/tlmgr.bat args=gui hide=1 ++postaction shortcut type=menu name="Release notes" cmd="http://tug.org/texlive/windows.html" +Index: tlpkg/tlpsrc/t2.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/t2.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/t2.tlpsrc (working copy) +@@ -1,5 +1,5 @@ + name t2 + category Package +-execute BuildFormat cyramstex +-execute BuildFormat cyrtex +-execute BuildFormat cyrtexinfo ++execute AddFormat name=cyramstex mode=disabled engine=pdftex patterns=language.dat options="-translate-file=cp227.tcx *cyramstx.ini" ++execute AddFormat name=cyrtex mode=disabled engine=pdftex patterns=language.dat options="-translate-file=cp227.tcx *cyrtex.ini" ++execute AddFormat name=cyrtexinfo mode=disabled engine=pdftex patterns=language.dat options="-translate-file=cp227.tcx *cyrtxinf.ini" +Index: tlpkg/tlpsrc/bin-texsis.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/bin-texsis.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/bin-texsis.tlpsrc (working copy) +@@ -1,6 +1,5 @@ + name bin-texsis + category TLCore + depend bin-tex +-execute BuildFormat texsis +-runpattern f texmf/fmtutil/format.texsis.cnf ++execute AddFormat name=texsis engine=pdftex options="-translate-file=cp227.tcx texsis.ini" + binpattern f bin/${ARCH}/texsis +Index: tlpkg/tlpsrc/texlive-en.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/texlive-en.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/texlive-en.tlpsrc (working copy) +@@ -1,2 +1,4 @@ + name texlive-en + category Documentation ++postaction shortcut type=menu name="TeX Live Manual (en) (PDF)" cmd=TEXDIR/texmf-doc/doc/english/texlive-en/texlive-en.pdf ++postaction shortcut type=menu name="TeX Live Manual (en) (HTML)" cmd=TEXDIR/texmf-doc/doc/english/texlive-en/texlive-en.html +Index: tlpkg/tlpsrc/bin-physe.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/bin-physe.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/bin-physe.tlpsrc (working copy) +@@ -1,6 +1,5 @@ + name bin-physe + category TLCore + depend bin-tex +-execute BuildFormat physe +-runpattern f texmf/fmtutil/format.physe.cnf ++execute AddFormat name=physe engine=pdftex options="physe.ini" + binpattern f bin/${ARCH}/physe +Index: tlpkg/tlpsrc/bin-phyzzx.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/bin-phyzzx.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/bin-phyzzx.tlpsrc (working copy) +@@ -1,6 +1,5 @@ + name bin-phyzzx + category TLCore + depend bin-tex +-execute BuildFormat phyzzx +-runpattern f texmf/fmtutil/format.phyzzx.cnf ++execute AddFormat name=phyzzx engine=pdftex options="physe.ini" + binpattern f bin/${ARCH}/phyzzx +Index: tlpkg/tlpsrc/bin-eplain.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/bin-eplain.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/bin-eplain.tlpsrc (working copy) +@@ -1,8 +1,7 @@ + name bin-eplain + category TLCore + depend pdftex +-execute BuildFormat eplain +-runpattern f texmf/fmtutil/format.eplain.cnf ++execute AddFormat name=eplain engine=pdftex options="-translate-file=cp227.tcx *eplain.ini" + docpattern f texmf/doc/info/eplain.info + docpattern f texmf/doc/man/man1/eplain.* + binpattern f bin/${ARCH}/eplain +Index: tlpkg/tlpsrc/texlive-cz.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/texlive-cz.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/texlive-cz.tlpsrc (working copy) +@@ -1,2 +1,4 @@ + name texlive-cz + category Documentation ++postaction shortcut type=menu name="TeX Live Manual (cz) (PDF)" cmd=TEXDIR/texmf-doc/doc/czechslovak/texlive-cz/texlive-cz.pdf ++postaction shortcut type=menu name="TeX Live Manual (cz) (HTML)" cmd=TEXDIR/texmf-doc/doc/czechslovak/texlive-cz/texlive-cz.html +Index: tlpkg/tlpsrc/bin-jadetex.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/bin-jadetex.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/bin-jadetex.tlpsrc (working copy) +@@ -2,7 +2,7 @@ + category TLCore + depend pdftex + depend bin-tex +-execute BuildFormat jadetex +-runpattern f texmf/fmtutil/format.jadetex.cnf ++execute AddFormat name=jadetex engine=pdftex patterns=language.dat options="&latex jadetex.ini" ++execute AddFormat name=pdfjadetex engine=pdftex patterns=language.dat options="&pdflatex pdfjadetex.ini" + binpattern f bin/${ARCH}/jadetex + binpattern f bin/${ARCH}/pdfjadetex +Index: tlpkg/tlpsrc/texlive-pl.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/texlive-pl.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/texlive-pl.tlpsrc (working copy) +@@ -1,2 +1,4 @@ + name texlive-pl + category Documentation ++postaction shortcut type=menu name="TeX Live Manual (pl) (PDF)" cmd=TEXDIR/texmf-doc/doc/polish/texlive-pl/texlive-pl.pdf ++postaction shortcut type=menu name="TeX Live Manual (pl) (HTML)" cmd=TEXDIR/texmf-doc/doc/polish/texlive-pl/texlive-pl.html +Index: tlpkg/tlpsrc/bin-amstex.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/bin-amstex.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/bin-amstex.tlpsrc (working copy) +@@ -1,7 +1,7 @@ + name bin-amstex + category TLCore + depend bin-tex +-execute BuildFormat amstex +-runpattern f texmf/fmtutil/format.amstex.cnf ++execute AddFormat name=amstex engine=pdftex options="-translate-file=cp227.tcx *amstex.ini" ++execute AddFormat name=pdfamstex mode=disabled engine=pdftex options="-translate-file=cp227.tcx *pdfamstex.ini" + docpattern f texmf/doc/man/man1/amstex.* + binpattern f bin/${ARCH}/amstex +Index: tlpkg/tlpsrc/bin-aleph.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/bin-aleph.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/bin-aleph.tlpsrc (working copy) +@@ -1,7 +1,7 @@ + name bin-aleph + category TLCore + depend bin-omega +-execute BuildFormat aleph +-runpattern f texmf/fmtutil/format.aleph.cnf ++execute AddFormat name=aleph engine=aleph options=*aleph.ini ++execute AddFormat name=lamed engine=aleph patterns=language.dat options=*lambda.ini + binpattern f bin/${ARCH}/aleph + binpattern f bin/${ARCH}/lamed +Index: tlpkg/tlpsrc/bin-metafont.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/bin-metafont.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/bin-metafont.tlpsrc (working copy) +@@ -1,8 +1,7 @@ + name bin-metafont + category TLCore + depend bin-kpathsea +-execute BuildFormat metafont +-runpattern f texmf/fmtutil/format.metafont.cnf ++execute AddFormat name=mf engine=mf-nowin options="-translate-file=cp227.tcx mf.ini" + docpattern f texmf/doc/man/man1/mf-nowin.* + docpattern f texmf/doc/man/man1/mf.* + binpattern f bin/${ARCH}/mf +Index: tlpkg/tlpsrc/texlive.infra.tlpsrc +=================================================================== +--- tlpkg/tlpsrc/texlive.infra.tlpsrc (revision 12142) ++++ tlpkg/tlpsrc/texlive.infra.tlpsrc (working copy) +@@ -36,3 +36,5 @@ + binpattern f/!i386-solaris,i386-linux,mips-irix,sparc-linux,alpha-linux,\ + powerpc-linux,i386-freebsd,x86_64-linux \ + tlpkg/installer/wget/wget.${ARCH} ++# post actions ++postaction shortcut type=menu name="TeX Live Toplevel Readme Index" cmd=TEXDIR/index.html diff --git a/Master/tlpkg/etc/2009.combined.patch.README b/Master/tlpkg/etc/2009.combined.patch.README new file mode 100644 index 00000000000..2fc173e596f --- /dev/null +++ b/Master/tlpkg/etc/2009.combined.patch.README @@ -0,0 +1,38 @@ +2009.combined.patch +=================== + +This patch collects all the stuff that we will change for 2009. Currently +implemented are: + +- removal of unshort.bat necessity: + remove from TLUtils everything related to unshort.bat + remove from TLWinGoo the necessity to pass $texdirw to add_desktop_shortcut + execute the TLPostAction PostRemoval and the postaction remove + in uninstall-w32.pl + remove the main menu in uninstall-w32.pl + define the name of the main menu in TLConfig.pm + +- rework of the fmtutil AddFormat execute line + no need for additional files + touches several tlpsrc + changes the parsing in TLPDB->fmtutil_cnf_lines + +- implement support for TLPSRC/TLPOBJ postaction line + move stuff from TLPostActions into the .tlpsrc files + format: + postaction shortcut name=name type=menu icon=... cmd=... args=... hide=0 + postaction shortcut name=name type=menu icon=... cmd=... args=... hide=0 + postaction shortcut name=name type=desktop icon=... cmd=... args=... hide=1 + postaction filetype name=TLPostScript cmd=... + postaction fileassoc extension=.ps filetype=TLPostScript + postaction code ...something till now undecided.... + + Execute the actions in install-tl (install), tlmgr:remove_package (remove), + and TLMedia.pm (install). + + . open question: how to implement the postaction code stuff. What about: + postaction code install=sub_name_a remove=sub_name_b file=texmf-dist/scripts/foo/bar/baz.pl + which will trigger the require of that script and at install time the + call of sub_name_a and at removal time the call of sub_name_b, both + within an eval to catch any errors. + diff --git a/Master/tlpkg/etc/dev.postaction-code-in-tlpsrc.patch b/Master/tlpkg/etc/dev.postaction-code-in-tlpsrc.patch deleted file mode 100644 index a8bf9cdc332..00000000000 --- a/Master/tlpkg/etc/dev.postaction-code-in-tlpsrc.patch +++ /dev/null @@ -1,309 +0,0 @@ -Index: install-tl -=================================================================== ---- install-tl (revision 11393) -+++ install-tl (working copy) -@@ -59,12 +59,12 @@ - which getenv win32 unix info log debug tlwarn ddebug - get_system_tmpdir member process_logging_options rmtree - mkdirhier make_var_skeleton make_local_skeleton install_package copy -+ run_postinst_code - install_packages dirname setup_programs welcome welcome_paths); - use TeXLive::TLMedia; - use TeXLive::TLPOBJ; - use TeXLive::TLPDB; - use TeXLive::TLConfig; --use TeXLive::TLPostActions; - use Pod::Usage; - use Cwd 'abs_path'; - -@@ -1034,13 +1034,15 @@ - } - - foreach my $package (sort keys %install) { -- if ($install{$package} && defined($PostInstall{$package})) { -- info("running post install action for $package\n"); -- &{$PostInstall{$package}}($TEXDIR, $TEXDIRW, $TEXMFSYSVAR, $TEXMFLOCAL); -+ if ($install{$package}) { -+ my $tlpobj = $tlpdb->get_package($package); -+ next if (!defined($tlpobj)); # should not happen ... -+ run_postinst_code($tlpobj, $TEXDIR, $TEXDIRW, $TEXMFSYSVAR, $TEXMFLOCAL); - } - } - # $opt_portable: no %install but we still want xetex postinstall -- &{$PostInstall{'xetex'}}($TEXDIR, $TEXDIRW, $TEXMFSYSVAR, $TEXMFLOCAL) -+ run_postinst_code($tlpdb->get_package("xetex"), -+ $TEXDIR, $TEXDIRW, $TEXMFSYSVAR, $TEXMFLOCAL) - if $opt_portable; - update_assocs() if win32(); - -Index: tlpkg/TeXLive/TLPSRC.pm -=================================================================== ---- tlpkg/TeXLive/TLPSRC.pm (revision 11393) -+++ tlpkg/TeXLive/TLPSRC.pm (working copy) -@@ -30,6 +30,8 @@ - srcpatterns => $params{'srcpatterns'}, - docpatterns => $params{'docpatterns'}, - binpatterns => $params{'binpatterns'}, -+ postinst => $params{'postinst'}, -+ postrm => $params{'postrm'}, - executes => defined($params{'executes'}) ? $params{'executes'} : [], - depends => defined($params{'depends'}) ? $params{'depends'} : [], - }; -@@ -65,6 +67,8 @@ - my $shortdesc = ""; - my $longdesc= ""; - my $catalogue = ""; -+ my $postinst = ""; -+ my $postrm = ""; - my (@executes, @depends); - my (@runpatterns, @docpatterns, @binpatterns, @srcpatterns); - my $started = 0; -@@ -114,6 +118,12 @@ - } elsif ($line =~ /^catalogue\s+(.*)\s*$/) { - $catalogue = $1; - next; -+ } elsif ($line =~ /^postinst\s+(.*)\s*$/) { -+ $postinst = $1; -+ next; -+ } elsif ($line =~ /^postrm\s+(.*)\s*$/) { -+ $postrm = $1; -+ next; - } elsif ($line =~ /^runpattern\s+(.*)\s*$/) { - push @runpatterns, $1 if ($1 ne ""); - next; -@@ -143,6 +153,8 @@ - $self->catalogue($catalogue) if $catalogue; - $self->shortdesc($shortdesc) if $shortdesc; - $self->longdesc($longdesc) if $longdesc; -+ $self->postinst($postinst) if $postinst; -+ $self->postrm($postrm) if $postrm; - $self->srcpatterns(@srcpatterns) if @srcpatterns; - $self->runpatterns(@runpatterns) if @runpatterns; - $self->binpatterns(@binpatterns) if @binpatterns; -@@ -161,6 +173,8 @@ - print $fd "category ", $self->category, "\n"; - defined($self->{'catalogue'}) && print $fd "catalogue $self->{'catalogue'}\n"; - defined($self->{'shortdesc'}) && print $fd "shortdesc $self->{'shortdesc'}\n"; -+ defined($self->{'postinst'}) && print $fd "postinst $self->{'postinst'}\n"; -+ defined($self->{'postrm'}) && print $fd "postrm $self->{'postrm'}\n"; - if (defined($self->{'longdesc'})) { - $_tmp = "$self->{'longdesc'}"; - write $fd; -@@ -211,6 +225,8 @@ - $tlp->category($self->category); - $tlp->shortdesc($self->{'shortdesc'}) if (defined($self->{'shortdesc'})); - $tlp->longdesc($self->{'longdesc'}) if (defined($self->{'longdesc'})); -+ $tlp->postinst($self->{'postinst'}) if (defined($self->{'postinst'})); -+ $tlp->postrm($self->{'postrm'}) if (defined($self->{'postrm'})); - $tlp->catalogue($self->{'catalogue'}) if (defined($self->{'catalogue'})); - $tlp->executes(@{$self->{'executes'}}) if (defined($self->{'executes'})); - $tlp->depends(@{$self->{'depends'}}) if (defined($self->{'depends'})); -@@ -476,6 +492,16 @@ - if (@_) { $self->{'longdesc'} = shift } - return $self->{'longdesc'}; - } -+sub postinst { -+ my $self = shift; -+ if (@_) { $self->{'postinst'} = shift } -+ return $self->{'postinst'}; -+} -+sub postrm { -+ my $self = shift; -+ if (@_) { $self->{'postrm'} = shift } -+ return $self->{'postrm'}; -+} - sub catalogue { - my $self = shift; - if (@_) { $self->{'catalogue'} = shift } -@@ -566,6 +592,7 @@ - I I - - where I can be C, C, C, C, -+C, C, - C, C, C, C, C, - C, or C. - -@@ -691,6 +718,18 @@ - concatenated into a long text. In TeX Live only used for collections and - schemes. - -+=item C -+ -+a perl sub definition that does not contain the surrounding sub { ... } -+part. This stub will be evaluated after installation of the package. -+Please see the examples in various .tlpsrc files. -+ -+=item C -+ -+a perl sub definition that does not contain the surrounding sub { ... } -+part. This stub will be evaluated after removal of the package. -+Please see the examples in various .tlpsrc files. -+ - =item C - - gives the list of dependencies, which are just other package names. -Index: tlpkg/TeXLive/TLPOBJ.pm -=================================================================== ---- tlpkg/TeXLive/TLPOBJ.pm (revision 11393) -+++ tlpkg/TeXLive/TLPOBJ.pm (working copy) -@@ -24,6 +24,8 @@ - category => defined($params{'category'}) ? $params{'category'} : $DefaultCategory, - shortdesc => $params{'shortdesc'}, - longdesc => $params{'longdesc'}, -+ postinst => $params{'postinst'}, -+ postrm => $params{'postrm'}, - catalogue => $params{'catalogue'}, - runfiles => defined($params{'runfiles'}) ? $params{'runfiles'} : [], - runsize => $params{'runsize'}, -@@ -198,6 +200,14 @@ - $self->catalogue("$1"); - $lastcmd = "catalogue"; - next; -+ } elsif ($line =~ /^postinst\s+(.*)\s*/o) { -+ $self->postinst("$1"); -+ $lastcmd = "postinst"; -+ next; -+ } elsif ($line =~ /^postrm\s+(.*)\s*/o) { -+ $self->postrm("$1"); -+ $lastcmd = "postrm"; -+ next; - } elsif ($line =~ /^(doc|src|run)files\s+/o) { - my $type = $1; - my @words = split ' ',$line; -@@ -301,6 +311,8 @@ - defined($self->{'revision'}) && print $fd "revision $self->{'revision'}\n"; - defined($self->{'catalogue'}) && print $fd "catalogue $self->{'catalogue'}\n"; - defined($self->{'shortdesc'}) && print $fd "shortdesc $self->{'shortdesc'}\n"; -+ defined($self->{'postinst'}) && print $fd "postinst $self->{'postinst'}\n"; -+ defined($self->{'postrm'}) && print $fd "postrm $self->{'postrm'}\n"; - defined($self->{'license'}) && print $fd "license $self->{'license'}\n"; - # ugly hack to get rid of use FileHandle; see man perlform - #format_name $fd "multilineformat"; -@@ -823,6 +835,16 @@ - if (@_) { $self->{'longdesc'} = shift } - return $self->{'longdesc'}; - } -+sub postinst { -+ my $self = shift; -+ if (@_) { $self->{'postinst'} = shift } -+ return $self->{'postinst'}; -+} -+sub postrm { -+ my $self = shift; -+ if (@_) { $self->{'postrm'} = shift } -+ return $self->{'postrm'}; -+} - sub revision { - my $self = shift; - if (@_) { $self->{'revision'} = shift } -Index: tlpkg/TeXLive/TLUtils.pm -=================================================================== ---- tlpkg/TeXLive/TLUtils.pm (revision 11393) -+++ tlpkg/TeXLive/TLUtils.pm (working copy) -@@ -64,6 +64,8 @@ - TeXLive::TLUtils::conv_to_w32_path($path); - TeXLive::TLUtils::give_ctan_mirror($path); - TeXLive::TLUtils::tlmd5($path); -+ TeXLive::TLUtils::run_postinst_code($tlpobj, @args); -+ TeXLive::TLUtils::run_postrm_code($tlpobj, @args); - - =head1 DESCRIPTION - -@@ -112,6 +114,8 @@ - &welcome_paths - &give_ctan_mirror - &tlmd5 -+ &run_postinst_code -+ &run_postrm_code - ); - @EXPORT = qw(setup_programs download_file info log debug ddebug dddebug - tlwarn process_logging_options win32); -@@ -1924,6 +1928,26 @@ - } - } - -+sub run_postinst_code { -+ my $tlpobj = shift; -+ _run_code_block($tlpobj->postinst, @_) if $tlpobj->postinst; -+} -+ -+sub run_postrm_code { -+ my $tlpobj = shift; -+ _run_code_block($tlpobj->postrm, @_) if $tlpobj->postrm; -+} -+ -+sub _run_code_block { -+ my $code = shift; -+ my $fun = "sub temp_fun_texlive_run_code_block { $code } "; -+ eval $fun; -+ my $ret = eval { temp_fun_texlive_run_code_block(@_); }; -+ undef &temp_fun_texlive_run_code_block; -+ return $ret; -+} -+ -+ - ############################################# - # - # Taken from Text::ParseWords -Index: tlpkg/tlpsrc/xetex.tlpsrc -=================================================================== ---- tlpkg/tlpsrc/xetex.tlpsrc (revision 11393) -+++ tlpkg/tlpsrc/xetex.tlpsrc (working copy) -@@ -23,4 +23,56 @@ - binpattern f bin/win32/fc-* - binpattern f bin/win32/icu*.dll - depend xetexconfig -- -+postinst \ -+ my ($texdir, $texdirw, $texmfsysvar) = @_; \ -+ if (!defined($texmfsysvar)) { \ -+ $texmfsysvar = `kpsewhich -var-value=TEXMFSYSVAR`; \ -+ chomp($texmfsysvar); \ -+ } \ -+ if (-r "$texdir/bin/win32/conf/fonts.conf") { \ -+ mkdirhier("$texmfsysvar/fonts"); \ -+ TeXLive::TLUtils::rmtree("$texmfsysvar/fonts/conf"); \ -+ TeXLive::TLUtils::rmtree("$texmfsysvar/fonts/cache"); \ -+ my @cpycmd; \ -+ if (win32()) { \ -+ push @cpycmd, "xcopy", "/e", "/i", "/q", "/y"; \ -+ } else { \ -+ push @cpycmd, "cp", "-R"; \ -+ } \ -+ system(@cpycmd, \ -+ (win32() ? conv_to_w32_path("$texdir/bin/win32/conf") : \ -+ "$texdir/bin/win32/conf"), \ -+ (win32() ? conv_to_w32_path("$texmfsysvar/fonts/conf") : \ -+ "$texmfsysvar/fonts/conf")); \ -+ system(@cpycmd, \ -+ (win32() ? conv_to_w32_path("$texdir/bin/win32/cache") : \ -+ "$texdir/bin/win32/cache"), \ -+ (win32() ? conv_to_w32_path("$texmfsysvar/fonts/cache") : \ -+ "$texmfsysvar/fonts/cache")); \ -+ if (open(FONTSCONF, "<$texdir/bin/win32/conf/fonts.conf")) { \ -+ my @lines = ; \ -+ close(FONTSCONF); \ -+ if (open(FONTSCONF, ">$texmfsysvar/fonts/conf/fonts.conf")) { \ -+ my $winfontdir; \ -+ if (win32()) { \ -+ $winfontdir = $ENV{'SystemRoot'}.'/fonts'; \ -+ $winfontdir =~ s!\\!/!g; \ -+ } \ -+ } \ -+ foreach (@lines) { \ -+ $_ =~ s!c:/Program Files/texlive/2008!$texdir!; \ -+ $_ =~ s!c:/windows/fonts!$winfontdir! if win32(); \ -+ print FONTSCONF; \ -+ } \ -+ close(FONTSCONF); \ -+ } else { \ -+ warn("Cannot open $texmfsysvar/fonts/conf/fonts.conf for writing\n"); \ -+ } \ -+ } else { \ -+ warn("Cannot open $texdir/bin/win32/conf/fonts.conf\n"); \ -+ } \ -+ } \ -+ if (win32()) { \ -+ info("Running fc-cache -v -r\n"); \ -+ log(`fc-cache -v -r 2>&1`); \ -+ } diff --git a/Master/tlpkg/etc/dev.postaction-in-tlpsrc.patch b/Master/tlpkg/etc/dev.postaction-in-tlpsrc.patch new file mode 100644 index 00000000000..c5bb45208b1 --- /dev/null +++ b/Master/tlpkg/etc/dev.postaction-in-tlpsrc.patch @@ -0,0 +1,398 @@ +Index: tlpkg/TeXLive/TLConfig.pm +=================================================================== +--- tlpkg/TeXLive/TLConfig.pm (revision 12142) ++++ tlpkg/TeXLive/TLConfig.pm (working copy) +@@ -28,6 +28,7 @@ + $WinSpecialUpdatePackagesRegexp + @CriticalPackagesList + @AllowedConfigOptions ++ $WindowsMainMenuName + ); + @EXPORT = @EXPORT_OK; + } +@@ -82,6 +83,8 @@ + autobackup + /; + ++our $WindowsMainMenuName = "TeX Live 2008"; ++ + 1; + + +Index: tlpkg/TeXLive/TLPSRC.pm +=================================================================== +--- tlpkg/TeXLive/TLPSRC.pm (revision 12142) ++++ tlpkg/TeXLive/TLPSRC.pm (working copy) +@@ -30,6 +30,7 @@ + srcpatterns => $params{'srcpatterns'}, + docpatterns => $params{'docpatterns'}, + binpatterns => $params{'binpatterns'}, ++ postactions => $params{'postactions'}, + executes => defined($params{'executes'}) ? $params{'executes'} : [], + depends => defined($params{'depends'}) ? $params{'depends'} : [], + }; +@@ -67,6 +68,7 @@ + my $catalogue = ""; + my (@executes, @depends); + my (@runpatterns, @docpatterns, @binpatterns, @srcpatterns); ++ my (@postactions); + my $started = 0; + my $finished = 0; + my $savedline = ""; +@@ -132,6 +134,9 @@ + } elsif ($line =~ /^depend\s+(.*)\s*$/) { + push @depends, $1 if ($1 ne ""); + next; ++ } elsif ($line =~ /^postaction\s+(.*)\s*$/) { ++ push @postactions, $1 if ($1 ne ""); ++ next; + } else { + tlwarn("$srcfile:$.: unknown tlpsrc directive, please fix: $line\n"); + } +@@ -149,6 +154,7 @@ + $self->docpatterns(@docpatterns) if @docpatterns; + $self->executes(@executes) if @executes; + $self->depends(@depends) if @depends; ++ $self->postactions(@postactions) if @postactions; + } + + +@@ -175,6 +181,11 @@ + print $fd "execute $_\n"; + } + } ++ if (defined($self->{'postactions'})) { ++ foreach (@{$self->{'postactions'}}) { ++ print $fd "postaction $_\n"; ++ } ++ } + if (defined($self->{'srcpatterns'}) && (@{$self->{'srcpatterns'}})) { + foreach (sort @{$self->{'srcpatterns'}}) { + print $fd "srcpattern $_\n"; +@@ -213,6 +224,7 @@ + $tlp->longdesc($self->{'longdesc'}) if (defined($self->{'longdesc'})); + $tlp->catalogue($self->{'catalogue'}) if (defined($self->{'catalogue'})); + $tlp->executes(@{$self->{'executes'}}) if (defined($self->{'executes'})); ++ $tlp->postactions(@{$self->{'postactions'}}) if (defined($self->{'postactions'})); + $tlp->depends(@{$self->{'depends'}}) if (defined($self->{'depends'})); + $tlp->revision(0); + my $filemax; +@@ -540,6 +552,11 @@ + if (@_) { @{ $self->{'executes'} } = @_ } + return @{ $self->{'executes'} }; + } ++sub postactions { ++ my $self = shift; ++ if (@_) { @{ $self->{'postactions'} } = @_ } ++ return @{ $self->{'postactions'} }; ++} + + format multilineformat = + longdesc ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~ +@@ -580,7 +597,7 @@ + + where I can be C, C, C, C, + C, C, C, C, C, +-C, or C. ++C, C, or C. + + Continuation lines are supported via a trailing backslash. That is, if + the C<.tlpsrc> file contains two physical lines like this: +@@ -743,6 +760,38 @@ + + =back + ++=item ++ ++gives a free from entry of post install and removal actions to be ++executed. The difference to the C statement is that ++C is concerned with system integration, i.e., adjusting ++things outside the installation directory, while C touches ++only things within the installation. ++ ++Currently the following Cs are understood: ++ ++=over 4 ++ ++=item C type=menu|desktop icon=I cmd=I args=I hide=0|1> ++ ++On W32 creates a shortcut either in the main TeX Live menu or on the ++desktop. Please see the documentation of TeXLive::TLWinGoo for details ++on the parameters. ++ ++=item C cmd=I> ++ ++On W32 associates the file type I with the command I. ++ ++=item C filetype=I> ++ ++On W32 declares files with the extenstion I<.ext> of file type I. ++ ++=item C> ++ ++TODO TODO I don't know how we want to do that ++ ++=back ++ + =item C<(src|run|doc|bin)pattern> I + + adds a pattern (next section) to the respective list of patterns. +Index: tlpkg/TeXLive/TLPOBJ.pm +=================================================================== +--- tlpkg/TeXLive/TLPOBJ.pm (revision 12142) ++++ tlpkg/TeXLive/TLPOBJ.pm (working copy) +@@ -29,6 +29,7 @@ + docfiles => defined($params{'docfiles'}) ? $params{'docfiles'} : [], + docsize => $params{'docsize'}, + executes => defined($params{'executes'}) ? $params{'executes'} : [], ++ postactions => defined($params{'postactions'}) ? $params{'postactions'} : [], + # note that binfiles is a HASH with keys of $arch! + binfiles => defined($params{'binfiles'}) ? $params{'binfiles'} : {}, + binsize => defined($params{'binsize'}) ? $params{'binsize'} : {}, +@@ -92,6 +93,7 @@ + ($lastcmd eq "docfiles") || + ($lastcmd eq "srcfiles") || + ($lastcmd eq "executes") || ++ ($lastcmd eq "postaction") || + ($lastcmd eq "depend") ) { + $line =~ s/^ /${lastcmd}continued /; + } else { +@@ -216,6 +218,10 @@ + push @{$self->{'executes'}}, "$2" unless "$2" eq ""; + $lastcmd = "execute"; + next; ++ } elsif ($line =~ /^postaction(continued)?\s*(.*)\s*/o) { ++ push @{$self->{'postactions'}}, "$2" unless "$2" eq ""; ++ $lastcmd = "postaction"; ++ next; + } elsif ($line =~ /^depend(continued)?\s*(.*)\s*/o) { + push @{$self->{'depends'}}, "$2" unless "$2" eq ""; + $lastcmd = "depend"; +@@ -316,6 +322,11 @@ + print $fd "execute $_\n"; + } + } ++ if (defined($self->{'postactions'})) { ++ foreach (@{$self->{'postactions'}}) { ++ print $fd "postaction $_\n"; ++ } ++ } + if (defined($self->{'containersize'})) { + print $fd "containersize $self->{'containersize'}\n"; + } +@@ -388,6 +399,11 @@ + print $fd "execute $_\n"; + } + } ++ if (defined($self->{'postactions'})) { ++ foreach (@{$self->{'postactions'}}) { ++ print $fd "postaction $_\n"; ++ } ++ } + if (defined($self->{'docfiles'}) && (@{$self->{'docfiles'}})) { + print $fd "docfiles\n"; + foreach (sort @{$self->{'docfiles'}}) { +@@ -1026,6 +1042,11 @@ + if (@_) { $self->{'executes'} = [ @_ ] } + return @{ $self->{'executes'} }; + } ++sub postactions { ++ my $self = shift; ++ if (@_) { $self->{'postactions'} = [ @_ ] } ++ return @{ $self->{'postactions'} }; ++} + sub containerdir { + my @self = shift; + if (@_) { $_containerdir = $_[0] } +Index: tlpkg/TeXLive/TLUtils.pm +=================================================================== +--- tlpkg/TeXLive/TLUtils.pm (revision 12142) ++++ tlpkg/TeXLive/TLUtils.pm (working copy) +@@ -56,6 +56,7 @@ + TeXLive::TLUtils::create_language_def($tlpdb,$dest,$localconf); + 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_code($how, $tlpdb, $TEXDIR, $TEXDIRW, $TEXMFSYSVAR, $TEXMFLOCAL); + + =head2 Miscellaneous + +@@ -1224,7 +1225,111 @@ + return 1; + } + ++=item C + ++Evaluates the C code in the C<$tlpobj> ++MISSING DOCUMENTATION TODO TODO ++ ++Returns 1 on success, and 0 on failure. ++ ++=cut ++ ++sub do_postaction_code { ++ my ($how, $tlpobj) = @_; ++ my $ret = 1; ++ if (!defined($tlpobj)) { ++ tlwarn("do_postaction_code: didn't get a tlpobj\n"); ++ return 0; ++ } ++ for my $pa ($tlpobj->postactions) { ++ if ($pa =~ m/^\s*shortcut\s+(.*)\s*$/) { ++ $ret &&= _do_postaction_shortcut($how, $tlpobj, $1); ++ } elsif ($pa =~ m/\s*filetype\s+(.*)\s*$/) { ++ $ret &&= _do_postaction_filetype($how, $tlpobj, $1); ++ } elsif ($pa =~ m/\s*fileassoc\s+(.*)\s*$/) { ++ $ret &&= _do_postaction_fileassoc($how, $tlpobj, $1); ++ } elsif ($pa =~ m/\s*code\s+(.*)\s*$/) { ++ $ret &&= _do_postaction_code($how, $tlpobj, $1); ++ } else { ++ tlwarn("do_postaction_code: don't know how to do $pa\n"); ++ $ret = 0; ++ } ++ } ++ # nothing to do ++ return $ret; ++} ++ ++sub _do_postaction_shortcut { ++ my ($how, $tlpobj, $pa) = @_; ++ my @words = quotewords('\s+', 0, "$pa"); ++ my $type; ++ my $icon = ''; ++ my $cmd = ''; ++ my $args = ''; ++ my $name; ++ my $hide = '0'; ++ while (@words) { ++ $_ = shift @words; ++ if (/^type=(.*)$/) { ++ $type = $1; ++ if (($type ne "menu") && ($type ne "desktop")) { ++ tlwarn("type of shortcut postaction $type is unknown (menu, desktop)\n"); ++ return 0; ++ } ++ } elsif (/^name=(.*)$/) { ++ $name = $1; ++ } elsif (/^icon=(.*)$/) { ++ $icon = $1; ++ } elsif (/^cmd=(.*)$/) { ++ $cmd = $1; ++ } elsif (/^args=(.*)$/) { ++ $args = $1; ++ } elsif (/^hide=(.*)$/) { ++ $hide = $1; ++ if (($hide ne "0") && ($hide ne "1")) { ++ tlwarn("hide of shortcut postaction $hide is unknown (0, 1)\n"); ++ return 0; ++ } ++ } else { ++ tlwarn("Unknown tag for postaction shortcut $pa: $_\n"); ++ return 0; ++ } ++ } ++ if ($how eq "install") { ++ my $texdir = `kpsewhich -var-value=SELFAUTOPARENT` ++ chomp($texdir); ++ my $texdir_bsl = conv_to_w32_path($texdir); ++ $icon =~ s!^TEXDIR/!$texdir/!; ++ $args =~ s!^TEXDIR/!$texdir/!; ++ $args = conv_to_w32_path($args); ++ if ($type eq "menu") { ++ add_menu_shortcut($TeXLive::TLConfig::WindowsMainMenuName, ++ $name, $icon, $cmd, $args, $hide); ++ } elsif ($type eq "desktop") { ++ # $texdirw here is only used for updating the unshort.bat script ++ # we could call all the TLPostRemove actions in the uninstall_w32.pl ++ # and get rid of the $texdirw completely... ++ add_desktop_shortcut(TODO $texdirw TODO, $name, $icon, $cmd, $args, $hide); ++ } else { ++ tlwarn("Unknown type of shortcut: $type\n"); ++ return 0; ++ } ++ } elsif ($how eq "remove") { ++ if ($type eq "menu") { ++ remove_menu_shortcut($TeXLive::TLConfig::WindowsMainMenuName, $name); ++ } elsif ($type eq "desktop") { ++ remove_desktop_shortcut($name); ++ } else { ++ tlwarn("Unknown type of shortcut: $type\n"); ++ return 0; ++ } ++ } else { ++ tlwarn("Unknown mode $how\n"); ++ return 0; ++ } ++ return 1; ++} ++ + =item C + + Unpacked C<$tarfile> in C<$targetdir> (changing directories to +Index: install-tl +=================================================================== +--- install-tl (revision 12142) ++++ install-tl (working copy) +@@ -1052,6 +1052,11 @@ + # post install actions + # + ++ # in case we are running from DVD we use the tlpdb from the DVD, otherwise ++ # the one we have locally created, for all the further actions ++ my $usedtlpdb = $vars{'from_dvd'} ? $tlpdb : $localtlpdb; ++ ++ + if (win32()) { + debug "Actual environment:\n".`set`."\n\n"; + debug 'Effective TEXMFCNF: '.`kpsewhich -expand-path=\$TEXMFCNF`."\n"; +@@ -1063,12 +1068,20 @@ + init_unshortbat($TEXDIRW); + } + ++ # Run the post installation code in TLPostAction.pm + foreach my $package (sort keys %install) { + if ($install{$package} && defined($PostInstall{$package})) { + info("running post install action for $package\n"); + &{$PostInstall{$package}}($TEXDIR, $TEXDIRW, $TEXMFSYSVAR, $TEXMFLOCAL); + } + } ++ # Run the post installation code in the postaction tlpsrc entries ++ foreach my $package (sort keys %install) { ++ if ($install{$package}) { ++ do_postaction_code("install", $usedtlpdb->get_package($package)); ++ } ++ } ++ + # $opt_portable: no %install but we still want xetex postinstall + &{$PostInstall{'xetex'}}($TEXDIR, $TEXDIRW, $TEXMFSYSVAR, $TEXMFLOCAL) + if $opt_portable; +@@ -1085,25 +1098,25 @@ + # texconfig generate * but Win32 does not have texconfig. But we have + # $localtlpdb and this is simple code, so do it directly, i.e., duplicate + # the code from the various generate-*.pl scripts ++ + info("writing fmtutil.cnf data to $TEXMFSYSVAR/web2c/fmtutil.cnf\n"); +- my $tlp = $vars{'from_dvd'} ? $tlpdb : $localtlpdb; +- TeXLive::TLUtils::create_fmtutil($tlp, #$localtlpdb, ++ TeXLive::TLUtils::create_fmtutil($usedtlpdb, + "$TEXMFSYSVAR/web2c/fmtutil.cnf", + "$TEXMFLOCAL/web2c/fmtutil-local.cnf"); + + mkdirhier "$vars{'TEXMFSYSCONFIG'}/web2c"; + info("writing updmap.cfg to $TEXMFSYSCONFIG/web2c/updmap.cfg\n"); +- TeXLive::TLUtils::create_updmap ($tlp, #$localtlpdb, ++ TeXLive::TLUtils::create_updmap ($usedtlpdb, + "$TEXMFSYSCONFIG/web2c/updmap.cfg", + "$TEXMFLOCAL/web2c/updmap-local.cfg"); + + info("writing language.dat data to $TEXMFSYSVAR/tex/generic/config/language.dat\n"); +- TeXLive::TLUtils::create_language_dat($tlp, #$localtlpdb, ++ TeXLive::TLUtils::create_language_dat($usedtlpdb, + "$TEXMFSYSVAR/tex/generic/config/language.dat", + "$TEXMFLOCAL/tex/generic/config/language-local.dat"); + + info("writing language.def data to $TEXMFSYSVAR/tex/generic/config/language.def\n"); +- TeXLive::TLUtils::create_language_def($tlp, #$localtlpdb, ++ TeXLive::TLUtils::create_language_def($usedtlpdb, + "$TEXMFSYSVAR/tex/generic/config/language.def", + "$TEXMFLOCAL/tex/generic/config/language-local.def"); + diff --git a/Master/tlpkg/etc/dev.postaction-in-tlpsrc.patch.README b/Master/tlpkg/etc/dev.postaction-in-tlpsrc.patch.README new file mode 100644 index 00000000000..ee6f6d67b39 --- /dev/null +++ b/Master/tlpkg/etc/dev.postaction-in-tlpsrc.patch.README @@ -0,0 +1,29 @@ +dev.postaction-in-tlpsrc.patch +============================== + +The idea is to move stuff from TLPostActions.pm into the tlpsrc files. +The format would be: + postaction shortcut name=name type=menu icon=... cmd=... args=... hide=0 + postaction shortcut name=name type=menu icon=... cmd=... args=... hide=0 + postaction shortcut name=name type=desktop icon=... cmd=... args=... hide=1 + postaction filetype name=TLPostScript cmd=... + postaction fileassoc extension=.ps filetype=TLPostScript + postaction code ...something till now undecided.... + +These actions would be called by install-tl and tlmgr on install time +and from tlmgr at removal time. + +Problems I have found while implementing: +- add_desktop_shortcut (from TLWinGoo) needs the $texdirw (writable + texdir) variable to update the unshort.bat script. + + What about getting rid of the unshort.bat completely and calling all + the TLPostActions.pm PostRemoval actions, and here the postactions with + "remove" argument, so that all shortcuts are removed that way. + +- how to implement the postaction code stuff. What about: + postaction code install=sub_name_a remove=sub_name_b file=texmf-dist/scripts/foo/bar/baz.pl + which will trigger the require of that script and at install time the + call of sub_name_a and at removal time the call of sub_name_b, both + within an eval to catch any errors. + -- cgit v1.2.3