From 75d6ef94ce62506d8e90017e564b87bf631eab3f Mon Sep 17 00:00:00 2001 From: Siep Kroonenberg Date: Fri, 28 Mar 2008 22:53:32 +0000 Subject: Edits in BachoTeX paper git-svn-id: svn://tug.org/texlive/trunk@7206 c570f23f-e606-0410-a88d-b1316a301751 --- Master/tlpkg/doc/tlinst-BT08.tex | 131 ++++++++++++++++++++++----------------- Master/tlpkg/doc/wingoo-demo.pl | 56 ++++++++++------- 2 files changed, 107 insertions(+), 80 deletions(-) diff --git a/Master/tlpkg/doc/tlinst-BT08.tex b/Master/tlpkg/doc/tlinst-BT08.tex index dbfc433cd09..4789924a1c2 100644 --- a/Master/tlpkg/doc/tlinst-BT08.tex +++ b/Master/tlpkg/doc/tlinst-BT08.tex @@ -4,8 +4,8 @@ % Article presented on the 16th BachoTeX meeting, Bachotek ?? May 2008 % % Copyright 2007 Norbert Preining at al. -% You can redistribute and/or modify this document under the terms of the -% GNU General Public License as published by the Free Software Foundation; +% You can redistribute and/or modify this document under the terms of the +% GNU General Public License as published by the Free Software Foundation; % either version 2 of the License, or (at your option) any later version. % %\documentclass{arstexnica} @@ -100,50 +100,41 @@ \section{Introduction} \label{sec:intro} +In this paper we introduce the new \tl\ installer. Its creation was +necessitated by the brand-new package infrastructure -- described +elsewhere in these proceedings. +However, there is more news, also from a user's point of view. In +particular: +\begin{itemize} +\item It will be possible to install \tl\ from the internet. +\item The Windows version is much more in line with Unix versions. +\item There is just one installer, which can run either in text mode + or in GUI mode. +\end{itemize} +\section{\tlu} -\section{What's new?} - -\subsection{Multiplatform Installations} -It had always been possible to install \tl\ on a UNIX server and mount -the \tl\ directory on many platforms. On Windows there had been some -restrictions. Since \tl\ for Windows had been regarded as a -single-user system in the past, *|-sys|-Programs like |fmtutil-sys| or -|updmap-sys| had not been provided. Thus, it was necessary to provide -a separate |texmf.cnf| file for Windows. - -The *|-sys| programs could be implemented easily in |texlua|. There -are several reasons to use |texlua| for this purpose: +Nowadays \TeX{} contains a customized copy of Lua as embedded +scripting language. When called as \tlu, it acts as a standalone Lua +interpreter, customized for a \TeX{} environment. This is a very +attractive scripting solution: \begin{itemize} -\item |texlua| is a scripting language and therefore the programs are - platform independent and much easier to maintain than C programs. -\item |texlua| has \kpse\ compiled in. In a |texlua| script the +\item no discrepancies between versions: \tlu{} scripts should + simply match the \TeX{} version they are part of. +\item \tlu{} has \kpse\ compiled in. In a \tlu{} script the location of a particular file can be determined very fast. -\item |texlua| is a small, simple but very powerful programming - language. Its simplicity makes the code easy to maintain. +\item An embedded scripting language is immune from the kind of + bloat suffered by popular scripting languages such as \pl{} and + Ruby. \end{itemize} +Under Windows, |.texlua| files are made executable by the installer. -In order to allow to use the same |texmf.cnf| for all platforms, Karl -Berry implemented tilde expansion to \kpse. That means that the entry -\begin{verbatim} - ~/texmf -\end{verbatim} -in |texmf.cnf| expands to -\begin{verbatim} - $HOME/texmf -\end{verbatim} -on UNIX, but to -\begin{verbatim} - %USERPROFILE%\texmf -\end{verbatim} -on Windows. - -\subsection{Install \tl\ from the Internet} +\section{Install \tl\ from the Internet}\label{texlua} It is now possible to install \tl\ from a remote server. Thanks to the new infrastructure, the package database which is needed by the installer in order to determine which packages have to be downloaded -and how to install them is a single file. +and how to install them is a single file. Two installers for network downloads are provided. |install-tl.tar.gz.| supports UNIX only. |install-tl.zip| @@ -153,33 +144,61 @@ supported by \tl. The sole reason for providing a separate package for UNIX is its significantly smaller size. -\subsection{A new compression Algorithm} +\section{A new compression Algorithm} Using |.tar.lzma| compression instead of |.zip| reduces the size of the compressed packages by 20\%. It cannot be assumed that |lzma| decompressors are available on any platform, hence they have to be -provided for all platforms supported by \tl\. Fortunately there is a +provided for all platforms supported by \tl. Fortunately there is a program `|lzmadec|' available for all platforms. The size of the -executable file is only 12\,kB. - -\subsection{Perl and Ghostscript} -Though it can be assumed that \pl\ and \gs\ are installed on every -UNIX system, this is quite uncommon on Windows. Former versions of -\tl\ installed these programs on demand but it is quite difficult to -avoid conflicts with instances of these programs already installed. - -A better solution is to hide these programs and make them visible only -to the scripts which need them. This is done by wrapper scripts -written in \tlu The purpose of these scripts is to start another -program in a changed environment, and \tlu\ turned out to be the -ultimate programming language for such wrappers because it has \kpse\ -built in. - -The most important batch files provided by \gs\ had been ported to -\tlu\ too. +executable file is only 12\,kB. + +\section{Bringing Windows in line with Unix} + +\tl\ 2008 supports Windows 2000 and later. By dropping older Windows +versions, there is much less need to treat Windows specially. + +\subsection{\texttt{\$HOME} and multi-user support} +Under Windows 2000 and later, users have a real home directory, +viz. \verb+%USERPROFILE%+, usually +\verb+C:\Documents and Settings\+\textit{username}. + +This is now reflected in tilde expansion by \kpse, thanks to Karl +Berry: \verb+~/texmf+ is expanded to \verb+%USERPROFILE%\texmf+ +under Windows and to \verb+$HOME+ under Unix. + +It is also possible to differentiate between system settings and +user settings. Now there is no reason any more to have a different +set of \texttt{texmf} trees or to leave out scripts such as +\texttt{fmtutil-sys} and \texttt{updmap-sys}. It also shares the +Unix \texttt{texmf.cnf}. + +\subsection{Scripting} +We cannot count on the presence of the usual Unix scripting +languages. We deal with this by including a limited subset of \pl{} +for Windows, which contains just enough modules to run the installer +and the \pl{} scripts which are part of \tl. + +To prevent interference with any pre-existing \pl, we make it +invisible to the system by not placing it on the searchpath and by +not creating or changing any \pl-related settings. Instead, the +\tl\ \pl\ scripts are called via wrapper scripts that know how to +find Perl and that create the necessary environment variables for +the hidden \pl{} for the duration of the job. In the case of the +installer itself, the wrapper is a simple batchfile (but not so +simple that it would have worked under earlier Windows +versions). But in most cases, the wrapper is written in \tlu; see +section \ref{texlua}. + +\subsection{\gs} + +\tl{} for Windows also includes a hidden copy of \gs, another +fixture of Unix systems that is usually absent under Windows. The +most important batch files provided by \gs\ have been ported to +\tlu{}, see \ref{texlua}. %\bibliographystyle{arstexnica} %\bibliography{atsample} - + %\end{article} \end{document} diff --git a/Master/tlpkg/doc/wingoo-demo.pl b/Master/tlpkg/doc/wingoo-demo.pl index 1b2944e9385..84c0a455a77 100644 --- a/Master/tlpkg/doc/wingoo-demo.pl +++ b/Master/tlpkg/doc/wingoo-demo.pl @@ -26,7 +26,9 @@ BEGIN { } use TeXLive::TLUtils qw( get_system_tmpdir ); -use TeXLive::TLWinGoo qw( +use TeXLive::TLWinGooTry qw( + &win_version + &is_vista &admin &non_admin &admin_again @@ -65,13 +67,12 @@ sub maybenot { sub create_file { my $name = shift; - return if -e $name; - eval { - open DUMMY, ">".$name; - print DUMMY 's = tostring(0.0000001)'; # lua: 1e-7; texlua: 0 - print DUMMY ('print("0.0000001 becomes " .. s)'); - close DUMMY; - } ; + return 1 if -e $name; + return 0 unless open DUMMY, ">".$name; + print DUMMY 's = tostring(0.0000001)'; # lua: 1e-7; texlua: 0 + print DUMMY ('print("0.0000001 becomes " .. s)'); + close DUMMY; + return 1; } sub print_search_paths { @@ -130,6 +131,11 @@ if (admin()) { print "\nGlobal tempdir: " . global_tmpdir()."\n"; +# Windows version + +print "Windows version: ".win_version()."\n"; +print maybenot(is_vista()). " Vista\n"; + if ($^O !~ /^MSWin(32|64)$/i) { print "Not Windows; bailing out...\n"; exit; @@ -137,8 +143,8 @@ if ($^O !~ /^MSWin(32|64)$/i) { ### end of non-windows -my @winversion = Win32::GetOSVersion(); -print "Windows version: " . $winversion[1] . "\n"; +#my @winversion = Win32::GetOSVersion(); +#print "Windows version: " . $winversion[1] . "\n"; # country @@ -222,30 +228,32 @@ while (1) { # running this first as admin (if possible) and then as non-admin if (admin()) { non_admin(); next; - } elsif ($winversion[1]>=6) { last; } - #vista: don't try this + } # the problem case: no admin, but TeX on system path print( "\nNon-admin path problem\n" ); my $fn = expand_string("%windir%")."/TEX.EXE"; $fn =~ s/\\/\//g; - create_file($fn); # a tex.exe on the system path! - add_texbindir_to_path(expand_string($wr_dir2)); - my @wge = wg_error(); - if (@wge) { - print $wge[1]."\n"; + if (create_file($fn)) { # a tex.exe on the system path! + add_texbindir_to_path(expand_string($wr_dir2)); + my @wge = wg_error(); + if (@wge) { + print $wge[1]."\n"; + } + print( "Cannot remove tex from system searchpath\n" ); + print_search_paths(); + print "Wrong tex.exe found in " . win_which_dir("tex.exe") . "\n"; + unlink $fn; + remove_texbindirs_from_path(); + broadcast_env(); + pause( "Non-admin: check environment in new dosbox" ); + } else { + print "Cannot test; cannot create $fn\n"; } - print( "Cannot remove tex from system searchpath\n" ); - print_search_paths(); - print "Wrong tex.exe found in " . win_which_dir("tex.exe") . "\n"; - unlink $fn; - remove_texbindirs_from_path(); # broadcast environment changes - broadcast_env(); - pause( "Non-admin: check environment in new dosbox" ); if (!admin()) { last; } } -- cgit v1.2.3