\documentclass{beamer}
\usefonttheme{serif}
\usefonttheme{professionalfonts}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{hhline,bm,xspace,url}
\usepackage[expert,seriftt]{lucidabr}
\renewcommand{\rmdefault}{hlhj}
\usepackage{fancyvrb}
\usepackage{url,xcolor}
\usepackage{marvosym}
\usepackage{listings}
\lstset{frame=lines,basicstyle=\ttfamily,showspaces=true,prebreak={\Righttorque},postbreak={\Lefttorque},breaklines}
\newcommand{\tl}{\TeX~Live}
\newcommand{\ctan}{CTAN}
\newcommand{\tpm}{\texttt{tpm}}
\newcommand{\tpms}{\tpm{}s}
\newcommand{\tlpsrc}{\texttt{tlpsrc}}
\newcommand{\tlpsrcs}{\tlpsrc{}s}
\newcommand{\tlpobj}{\texttt{tlpobj}}
\newcommand{\tlpobjs}{\tlpobj{}s}
\newcommand{\tlpdb}{\texttt{tlpdb}}
\newcommand{\tlpdbs}{\tlpdb{}s}

\hyphenation{infra-struc-ture}
\DefineShortVerb{\|}

\usetheme[headheight=10pt,footheight=10pt]{boxes}
\setbeamercolor*{black on white}{bg=white,fg=black}
%\setbeamerfont*{black on white}{series=\scshape}
\addfootbox{black on white}{\hbox{\vbox to 10pt{\hspace{3em}Norbert 
Preining, \tl's new infrastructure -- {\normalfont Bachotek~2008}
 \hfill \insertframenumber\hspace{3em}~~\vfill}}}
\addheadbox{black on white}{\hbox{\vbox to 10pt{~~~\hfill\leavevmode\vfill}}}
\setbeamertemplate{navigation symbols}{}

\setlength{\parskip}{\medskipamount}

\def\cred#1{{\color{red}#1}}
\def\prog#1{\texttt{#1}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% here begins the stuff
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\title{\tl's new infrastructure}
\author{Norbert Preining}
\institute{Vienna University of Technology, Austria}
\date{\textsc{Bachotek~2008}

Bachotek, Poland \hspace{\bigskipamount} 30~April 2008}

\begin{document}

\frame{\titlepage}


\begin{frame}
  \frametitle{The \tl\ distribution}

  \begin{itemize}
  \item includes all the free stuff from \textsc{ctan}
  \item available for a wide range of platform--operating system
    combinations
  \item currently is replacing te\TeX\ in many (Unix) distributions as
    default \TeX\ system
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Upstream organization}
  \begin{itemize}
  \item \textsc{svn} repository where many people have write permissions
  \item loads of supporting scripts doing a variety of jobs:
    \begin{itemize}
    \item preparing the installation for mastering
    \item installation from various media
    \item installation of packages from \textsc{ctan} into the
      \textsc{svn} repository
    \item performing various checks on the whole archive (coverage,
      double inclusion, etc.)
    \end{itemize}
  \end{itemize}

  \pause
  \begin{block}{Problems}
    \begin{itemize}
    \item hand-crafted, hard to read
    \item not easily extensible
    \item no documentation
    \end{itemize}
  \end{block}
\end{frame}


\begin{frame}
  \frametitle{Previous infrastructure: tpms}
  \TeX\ Package Manage[r/ment] files collected a variety of
  information into on \textsc{xml} file:
  \begin{itemize}
  \item file patterns and file lists
  \item title, description, license, versions
  \item activation of map files, formats, hyphenation patterns
  \end{itemize}
  \pause
  \begin{block}{Problems with tpms}
    \begin{itemize}
    \item mixture of generated and static information
    \item duplicated information (version, license, descriptions,
      \ldots) which were outdated
    \item hard to parse, thus the necessity to generate another set of
      files for the installer
    \end{itemize}
  \end{block}
\end{frame}

\begin{frame}
  \frametitle{Aims of the new infrastructure}
  \begin{itemize}
  \item Separation of static from generated content\\
    Going from a `source' to the `object' should include automatically
    data from various other sources (mainly the Catalogue and the
    repository) \pause
  \item Getting rid of any `additional' files (list files)\\
    any additional files tend to be outdated, all the necessary
    information should be present in \emph{one} place and be easily
    parseable. \pause
  \item Single package updates via the web\\
    updates to single packages (e.g., a new beamer release)\pause
  \item Better documentation\\
    since \tl\ is replacing te\TeX\ we want to give people
    incorporating \tl\ into distributions a better documented and
    easier to handle system
  \end{itemize}
\end{frame}


\begin{frame}
  \frametitle{The central \texttt{texlive.tlpdb}}
  One installation or media is now completely described by one file,
  the \TeX~Live Database:
  \begin{itemize}
  \item simple text file -- easily parseable
  \item revision number for the single packages
  \item generated from static content (the tlpsrc files)
  \item enriched with information from the \TeX~Catalogue
  \item format documented in detail (\textsc{pod} documentation in the
    respective perl module)
  \end{itemize}
\end{frame}

\begin{frame}[fragile]
  \frametitle{How does \texttt{texlive.tlpdb} look like}
  \begin{lstlisting}[title={texlive.tlpdb}]
name abbr
...

name memoir
...

\end{lstlisting}
  \begin{itemize}
  \item sequence of \texttt{key value} pairs
  \item separated by an empty line (or more)
  \item one group per package
  \item some `meta'-packages for configuration options and special
    purpose packages
  \end{itemize}
\end{frame}

\begin{frame}[fragile]
  \frametitle{The single package: \tlpobj\ by example I}
  \begin{lstlisting}[basicstyle=\ttfamily\tiny,title={a0poster.tlpobj},label=a0poster]
name a0poster
category Package
revision 7340
shortdesc Support for designing posters on large paper.
longdesc Provides fonts in sizes of 12pt up to 107pt and also makes sure
longdesc that in math formulas the symbols appear in the right size. Can
longdesc also create a PostScript header file for dvips which ensures
longdesc that the poster will be printed in the right size. Supported
longdesc sizes are DIN A0, DIN A1, DIN A2 and DIN A3.
docfiles size=47
 texmf-dist/doc/latex/a0poster/a0.pdf details="Package documentation (German)" language="de"
 texmf-dist/doc/latex/a0poster/a0.tex
 texmf-dist/doc/latex/a0poster/a0_eng.pdf details="Package documentation (English)" language="en"
 texmf-dist/doc/latex/a0poster/a0_eng.tex
runfiles size=4
 texmf-dist/tex/latex/a0poster/a0poster.cls
 texmf-dist/tex/latex/a0poster/a0size.sty
catalogue-version 1.22b
catalogue-date 2006-11-28 22:38:04 +0100
catalogue-ctan /macros/latex/contrib/a0poster
catalogue-license lppl
\end{lstlisting}
\end{frame}

\begin{frame}[fragile]
  \frametitle{The origin of this \texttt{a0poster.tlpobj}}
  \begin{lstlisting}[basicstyle=\ttfamily\small,title={a0poster.tlpsrc},label=a0poster.tlpsrc]
name a0poster
category Package
\end{lstlisting}
  \begin{itemize}
  \item minimal input file with static data
  \item rest is generated from actual svn repository (revision, size)
  \item enriched with information from the \TeX\ Catalogue
    (catalogue-*, specification of the documentation files)
  \item tagged documentation files (details, language), information
    again from the Catalogue
  \end{itemize}
\end{frame}

\begin{frame}[fragile]
  \frametitle{The single packages: \tlpobj\ by example II}
  \begin{lstlisting}[basicstyle=\ttfamily\tiny,title={bin-bibtex8 and friends},label=bibtex8]
name bin-bibtex8
category TLCore
revision 7340
depend bin-bibtex8.ARCH
docfiles size=15
 texmf/doc/bibtex8/00readme.txt
 texmf/doc/bibtex8/HISTORY
 texmf/doc/bibtex8/csfile.txt
 texmf/doc/bibtex8/file_id.diz
runfiles size=10
 texmf-dist/bibtex/csf/base/88592pl.csf
 texmf-dist/bibtex/csf/base/cp1250pl.csf
 texmf-dist/bibtex/csf/base/cp852pl.csf
 texmf-dist/bibtex/csf/base/iso8859-7.csf

name bin-bibtex8.alpha-linux
category TLCore
revision 7340
shortdesc binary files of bin-bibtex8 for alpha-linux
binfiles arch=alpha-linux size=62
 bin/alpha-linux/bibtex8

...
name bin-bibtex8.win32
category TLCore
revision 7340
shortdesc binary files of bin-bibtex8 for win32
binfiles arch=win32 size=25
 bin/win32/bibtex8.exe
\end{lstlisting}
\end{frame}

\begin{frame}[fragile]
  \frametitle{The origin of the above \texttt{bin-bibtex8}}
  \begin{lstlisting}[basicstyle=\ttfamily\small,title={bin-bibtex8.tlpsrc},label=bin-dvipsk.tlpsrc]
name bin-bibtex8
category TLCore
runpattern d texmf-dist/bibtex/csf/base
docpattern f texmf/doc/bibtex8/*
binpattern f bin/${ARCH}/bibtex8
\end{lstlisting} % for stupid emacs: $
  \begin{itemize}
  \item various patterns for capturing files
  \item tricks to capture binaries on unix and windows
  \item separate objects for the binary files of the package
  \end{itemize}
\end{frame}

\begin{frame}[fragile]
  \frametitle{The pattern language}
  patterns are of the form
  \begin{center}
    |[PREFIX]TYPE PAT|
  \end{center}
  where |PREFIX| can be |+|, |!+|, or |!|,\pause and |TYPE PAT| can be:
  \begin{description}
  \item[f path]
    includes all files which match |path| where \emph{only} the last
    component of |path| can contain the usual glob characters * and ?
    (but no others!).\pause
  \item[d path]
    includes all the files in and below the directory specified as
    |path|. \pause
  \item[t word1 ... wordN wordL]
    includes all the files in and below all directories of the form
    \begin{center}
      \path{word1/word2/.../wordN/.../any/dirs/.../wordL/}
    \end{center}\pause
  \item[r regexp]
    includes all files matching the Perl regexp \verb+/^regexp$/+
  \end{description}
\end{frame}


\begin{frame}[fragile]
  \frametitle{Example patterns}
  \begin{itemize}
  \item |runpattern f texmf/chktex/*|\\
    includes all files \emph{in} Master/texmf/chktex/\pause
  \item |binpattern f bin/${ARCH}/bibtex|\\   % for stupid emacs $
    includes the bibtex binaries into the bin-bibtex package,
    depending on the architecture\pause
  \item |runpattern d texmf/tex/lambda/base|\\
    includes all files in and under the above path\pause
  \item |runpattern t texmf-dist omega uni2char|\\
    includes all files in texmf-dist/omega/\ldots/uni2char/\pause
  \item |runpattern r .*/foobar|\\
    includes the files matching the regexp
  \end{itemize}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Autogenerated patterns}
  To keep \tlpsrc\ files small, if a pattern section is empty or all
  patterns are prefixed with |+|, the following patterns are
  automatically generated:
  \begin{itemize}
  \item runpatterns in category Package:
    \begin{center}
      |t texmf-dist topdir name|
    \end{center}
  \item docpatterns in category Package:
    \begin{center}
      |t texmf-dist doc name|
    \end{center}
  \item docpatterns in category Documentation:
    \begin{center}
      |t texmf-doc doc name|
    \end{center}
  \item srcpatterns in category Package:
    \begin{center}
      |t texmf-dist source name|
    \end{center}
  \item srcpatterns in category Documentation:
    \begin{center}
      |t texmf-doc source name|
    \end{center}
  \end{itemize}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Additional tricks}
  \begin{description}
  \item[arch expansion]
    In case the string \verb+${ARCH}+ occurs in one |binpattern| it is 
    automatically expanded to the respective architecture.
  \item[bat/exe/dll/texlua for win32]
    For |binpatterns| of the form |f bin/win32/foobar| files
    |foobar.bat|, |foobar.dll|, |foobar.exe|, and |foobar.texlua| are
    also matched.
  \end{description}
  \pause
  \begin{block}{Effects of auto generation and tricks}
    total number of tlpsrc files: 1644\\
    total number of tlpsrc files with patterns: 172\\
    number of bin- and hyphen- tlpsrc files with patterns: 123\\
    number of `normal' packages with patterns: 49
  \end{block}
\end{frame}


\begin{frame}[fragile]
  \frametitle{Allowed fields for \tlpobj}
  \begin{itemize}
  \item name: identifies the package
  \item category: one of (currently) |Collection|, |Scheme|, |TLCore|,
    |Documentation|, |Package|
  \item shortdesc, longdesc: description of the package
  \item depend: |Name| (multiple entries possible)
  \item execute: activating maps, formats, hyphenation patterns
  \item runfiles, docfiles, srcfiles, binfiles\\
    every files section has a size attribute, and the
    binfiles section can occur more then once with different
    arch tags (see above)
  \item revision: maximum svn revision number of the 
    contained files, since version numbers are not
    parseable, trustworthy, or not even present
  \item catalogue-* keys: stuff taken from the catalogue\\
    for example catalogue-version, catalogue-authors, 
    catalogue-license
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Some special packages}
  Some packages do not relate to actual files but are used to save
  options and configurations into the database by putting them into a
  depend line.
  \begin{itemize}
  \item \texttt{00texlive.config} general configuration (release,
    src/doc container split)
  \item \texttt{00texlive-installation.config} only present in a final
    installation and contains the choices the admin made when doing
    the installation (paper a4/letter, pre-generate formats,
    installation location, \ldots)
  \item \texttt{00texlive.core} actually contains files, but those are
    never installed and this package is only here to collect files
    which are not contained in any package, thus making the coverage
    check squeak
  \end{itemize}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Perl programming \textsc{api}}
  Important for `users' or integrators
  \begin{description}
  \item[TeXLive::TLPOBJ] for \tlpobj\ files, basic
    functionality like read, write, and member access and change
    functions, etc.
  \item[TeXLive::TLPDB] access to the \tl\ database.
  \item[TeXLive::TLPostInstall] collects post installation actions
  \end{description}
  
  \pause
  Important for `us' as developer:
  \begin{description}
  \item[TeXLive::TLTREE] properties of the subversion 
    repository, in principle it is |svn status -v| 
  \item[TeXLive::TeXCatalogue] simple interface to the \TeX\
    Catalogue
  \item[TeXLive::TLPSRC] for \tlpsrc\ files, basic
    functionality like reade, write, etc
  \item[TeXLive::TLUtils] some handy functions 
  \item[TeXLive::TLMedia] abstracts an arbitrary installation media
  \end{description}
\end{frame}

\begin{frame}
  \frametitle{Other (planned/wished) \textsc{api}s}
  \begin{description}
  \item[texlua] next on the list to be done, would really help us a lot
  \item[python] minimal code present (by Jim Hefferon)
  \item[C] some code present, was a \textsc{GSoC} project, but no slot
    available (code by Jjgod Jiang)
  \item[bash] maybe, some code present (by the author)
  \item[\ldots] no idea what else \ldots
  \end{description}
\end{frame}

\begin{frame}
  \frametitle{Documentation}
  \begin{itemize}
  \item all modules contain a full documentation in pod format
  \item additional text \textsc{api} document
  \item article in Ars\TeX nica, 2007:4, 69--73, and in proceedings of
    this conference (hopefully)
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{What to do with this stuff}
  \begin{itemize}
  \item installer: more or less done, see other talk
  \item distribution inclusion: will hopefully work well
  \item texdoctk++: tagged documentation files could be used to write
    a better texdoctk, but depends on the information of the authors
    in the \TeX~Catalogue
  \item `\TeX\ Live Manager' \texttt{tlmgr}
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{\TeX\ Live Manager \texttt{tlmgr}}
  New program collection several scripts under one hood, currently
  supports:
  \begin{itemize}
  \item installation of additional packages or collections, with or
    without automatic dependency installation
  \item same with removal
  \item update all packages to the newest versions available
  \item paper configuration like texconfig, but also for Windows
  \item listing of available and installed architectures, and adding
    new architectures to the installation
  \item searching the installed and all available packages
  \item list all schemes, collections, packages
  \item setting some default values like the installation location
  \item regenerate fmtutil.cnf, language.dat, and updmap.cfg from the
    information stored in the database and local additions
  \item uninstall the whole installation
  \end{itemize}
\end{frame}
\begin{frame}
  \frametitle{Resources}
  \begin{itemize}
    \item \url{tex-live@tug.org} -- main contact point
  \item \path{www.tug.org/texlive} -- the main entry point, with
  links to developers' resources, documentation
\item \path{www.tug.org/svn/texlive/trunk/} -- web view onto the
  subversion repository;
\item \path{svn://tug.org/texlive/trunk} -- svn repository, anonymous
  access
\item \path{www.tug.org/texlive/pkgupdate.html} -- an
  explanation how updates from \ctan\ to \tl\ are done.
  \end{itemize}
\end{frame}
\end{document}
