\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}