\documentclass{slides}

\usepackage{times}
%\usepackage{graphicx}
%\usepackage{verbatim}
%\usepackage{moreverb}
\usepackage[obeyspaces]{url}

\newcommand\code{\begingroup \urlstyle{tt}\Url}
\newcommand\file{\begingroup \urlstyle{tt}\Url}

\title{Extension Building\\Considered Painful}
\author{Greg Ward}
\date{13 November, 1998}

\newcommand{\header}[1]{{\large\bfseries #1}}

\begin{document}

\raggedright
\maketitle

\begin{slide}
\header{Strawman \#1}
\begin{itemize}
  \item have every module include a \file{Makefile}
  \item lots of redundant labour
  \item still requires user participation:
  \begin{itemize}
    \item where is Python?
    \item what version?
    \item how to compile C files?
    \item where to install?
  \end{itemize}
\end{itemize}
\end{slide}

\begin{slide}
\header{Strawman \#2}
\begin{itemize}
  \item have every module include a \file{configure} script
  \item even more excessive and redundant labour
  \item but potentially more automated
  \item doesn't take advantage of Python's \file{configure} script
\end{itemize}
\end{slide}

\begin{slide}
\header{Strawman \#3 (current best approach)}
\begin{itemize}
  \item have every module include \file{Makefile.pre.in}
  \item presumably taken from Python distribution with few/no changes
  \item redundant labour reduced
  \item but user still has to intervene:
  \begin{itemize}
    \item where is Python?
    \item installation dirs?
    \item compiler and flags?
  \end{itemize}
  \item also, difficult to customize for module X (limited
    expressiveness of \code{make})
\end{itemize}
\end{slide}

\begin{slide}
\header{Proposed Solution: rip-off Perl}
\begin{itemize}
  \item have analogues to \code{MakeMaker} and \file{Makefile.PL}
  \item standard module \code{gen_make} (the ``Painless'' module)
  \item have every module distribution include \file{setup.py}:
\begin{verbatim}
from gen_make import gen_make
gen_make (name = 'mymod',
          version = '1.23',
          pyfiles = ['mymod.py'],
          cfiles = ['myext.c'])
\end{verbatim}
\end{itemize}
\end{slide}

\begin{slide}
\header{At Work (developer side)}
\begin{enumerate}
  \item module developer writes \file{setup.py} (\emph{or} it's created
    for him by a script that pokes around and guesses the right files)
  \item developer runs \file{setup.py}, creating a \file{Makefile}
    customized to \code{mymod} and current Python installation
  \item developer runs \code{make dist}, which bundles up everything
    (according to \file{MANIFEST} file) into \file{mymod-1.23.tar.gz},
    and uploads the result to an archive
\end{enumerate}
\emph{$\ldots$time passes$\ldots$}
\end{slide}

\begin{slide}
\header{At Work (user side)}
\begin{enumerate}
\setcounter{enumi}{3}   % will this work here?
  \item user downloads and unpacks \file{mymod-1.23.tar.gz}
  \item user runs \file{setup.py}, which generates a \file{Makefile}
    customized to \code{mymod} and \emph{user's} Python installation
  \item user runs \code{make; make test; make install}
\end{enumerate}
\end{slide}

\begin{slide}
\header{Social Engineering}
\begin{itemize}
  \item technical solutions are important, but not everything
  \item have to convince developers to use \code{gen_make}
  \item and installers must be shown how easy it is to 
    build/install modules
  \item other random issues:
  \begin{itemize}
    \item module naming
    \item granularity of distribution
    \item version numbers
    \item licensing terms
    \item documentation
  \end{itemize}
\end{itemize}
\end{slide}

\begin{slide}
\header{Related Topics}
\begin{itemize}
  \item{Python build process}
  \begin{itemize}
    \item additions to \file{configure.in}?
    \item possibly use \code{gen_make} to alleviate \file{Setup} editing?
    \item probably need new built-in module, \code{sys.config}, to store
        everything gleaned by \file{configure}
  \end{itemize}
\end{itemize}
\end{slide}

\begin{slide}
\header{Related Topics \emph{(cont'd)}}
\begin{itemize}
  \item{Trove}
  \begin{itemize}
    \item obviously, developer needs an archive to upload to
    \item archive software should be able to index package based on 
      information in \file{setup.py}
    \item would this make Trove too Python-specific (as CPAN is
      Perl-specific)?
  \end{itemize}
\end{itemize}
\end{slide}


\begin{slide}

\end{slide}

\end{document}
