[Python-checkins] python/nondist/sandbox/distutilsref distref.tex,1.2,1.3

anthonybaxter@users.sourceforge.net anthonybaxter@users.sourceforge.net
Tue, 13 May 2003 03:14:16 -0700


Update of /cvsroot/python/python/nondist/sandbox/distutilsref
In directory sc8-pr-cvs1:/tmp/cvs-serv29063

Modified Files:
	distref.tex 
Log Message:
Placeholders for all modules now. much utility documentation.
Correct LaTeX use for section/subsection/&c. 


Index: distref.tex
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/distutilsref/distref.tex,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** distref.tex	13 May 2003 08:15:19 -0000	1.2
--- distref.tex	13 May 2003 10:14:14 -0000	1.3
***************
*** 1,7 ****
! \section{\module{distutils} ---
!          Building and installing Python modules, reference.}
  
! \sectionauthor {Anthony Baxter}{anthony@interlink.com.au}
! \sectionauthor {Greg Ward}{gward@python.net}
  
  The \module{distutils} package provides support for building and
--- 1,10 ----
! \chapter{Building and installing Python modules, the Compleat Reference.}
  
! 
! %\sectionauthor {Anthony Baxter}{anthony@interlink.com.au}
! %\sectionauthor {Greg Ward}{gward@python.net}
! 
! \index{distutils}
! \declaremodule{standard}{distutils}
  
  The \module{distutils} package provides support for building and
***************
*** 15,18 ****
--- 18,25 ----
  \section{The simple interface}
  
+ \index{setup.py}
+ 
+ \subsection{\module{distutils.core} -- Core Distutils functionality}
+ 
  \declaremodule{standard}{distutils.core}
  \modulesynopsis{The core Distutils functionality}
***************
*** 32,36 ****
  \begin{tableiii}{c|l|l}{argument name}{argument name}{value}{notes}
  \lineiii{name}{The name of the package}{a string}
! \lineiii{version}{The version number of the package}{See \module{distutils.Version}}
  \lineiii{description}{A single line describing the package}{a string}
  \lineiii{long_description}{Longer description of the package}{a string}
--- 39,43 ----
  \begin{tableiii}{c|l|l}{argument name}{argument name}{value}{notes}
  \lineiii{name}{The name of the package}{a string}
! \lineiii{version}{The version number of the package}{See \refmodule{distutils.version}}
  \lineiii{description}{A single line describing the package}{a string}
  \lineiii{long_description}{Longer description of the package}{a string}
***************
*** 41,50 ****
  \lineiii{url}{A URL for the package (homepage)}{a URL}
  \lineiii{download_url}{A URL to download the package}{a URL}
! \lineiii{packages}{A list of python packages that distutils will manipulate}{a list of strings}
! \lineiii{py_modules}{A list of python modules that distutils will manipulate}{a list of strings}
  \lineiii{scripts}{A list of standalone script files to be built and installed}{a list of strings}
! \lineiii{ext_modules}{A list of python extensions to be built. A list of 
  instances of \class{distutils.core.Extension}}
! \lineiii{classifiers}{A list of Trove categories for the package} {XXX link to better definition}
  \lineiii{distclass}{}{}
  \lineiii{script_name}{}{}
--- 48,57 ----
  \lineiii{url}{A URL for the package (homepage)}{a URL}
  \lineiii{download_url}{A URL to download the package}{a URL}
! \lineiii{packages}{A list of Python packages that distutils will manipulate}{a list of strings}
! \lineiii{py_modules}{A list of Python modules that distutils will manipulate}{a list of strings}
  \lineiii{scripts}{A list of standalone script files to be built and installed}{a list of strings}
! \lineiii{ext_modules}{A list of Python extensions to be built}{A list of 
  instances of \class{distutils.core.Extension}}
! \lineiii{classifiers}{A list of Trove categories for the package}{XXX link to better definition}
  \lineiii{distclass}{}{}
  \lineiii{script_name}{}{}
***************
*** 60,66 ****
  
  \begin{itemize}
! \item The \class{Distribution} from \module{distutils.dist}
! \item The \class{Command} from \module{distutils.cmd}
! \item The \class{Extension} from \module{distutils.extension}
  \end{itemize}
  
--- 67,73 ----
  
  \begin{itemize}
! \item The \class{Distribution} from \refmodule{distutils.dist}
! \item The \class{Command} from \refmodule{distutils.cmd}
! \item The \class{Extension} from \refmodule{distutils.extension}
  \end{itemize}
  
***************
*** 102,106 ****
  \end{funcdesc}
  
! \section{The more complex interface}
  
  Most people will never need anything other than the \function{setup()} 
--- 109,113 ----
  \end{funcdesc}
  
! \section{The low-level interface}
  
  Most people will never need anything other than the \function{setup()} 
***************
*** 109,112 ****
--- 116,120 ----
  a whole host of additional modules and functionality provided.
  
+ \subsection{\module{distutils.ccompiler} -- CCompiler base class}
  \declaremodule{standard}{distutils.ccompiler}
  \modulesynopsis{Abstract CCompiler class}
***************
*** 130,139 ****
  \begin{funcdesc}{gen_preprocess_options}{macros, include_dirs}
  Generate C pre-processor options (-D, -U, -I) as used by at least
! two types of compilers: the typical Unix compiler and Visual C++.
  \var{macros} is the usual thing, a list of 1- or 2-tuples, where \var{(name,)}
  means undefine (-U) macro \var{name}, and \var{(name,value)} means define (-D)
  macro \var{name} to \var{value}.  \var{include_dirs} is just a list of directory
  names to be added to the header file search path (-I).  Returns a list
! of command-line options suitable for either Unix compilers or Visual
  C++.
  \end{funcdesc}
--- 138,147 ----
  \begin{funcdesc}{gen_preprocess_options}{macros, include_dirs}
  Generate C pre-processor options (-D, -U, -I) as used by at least
! two types of compilers: the typical \UNIX compiler and Visual C++.
  \var{macros} is the usual thing, a list of 1- or 2-tuples, where \var{(name,)}
  means undefine (-U) macro \var{name}, and \var{(name,value)} means define (-D)
  macro \var{name} to \var{value}.  \var{include_dirs} is just a list of directory
  names to be added to the header file search path (-I).  Returns a list
! of command-line options suitable for either \UNIX compilers or Visual
  C++.
  \end{funcdesc}
***************
*** 156,163 ****
  defaults to the default compiler for that platform. Currently only \var{posix} 
  and \var{nt} are supported, and the default compilers are "traditional
! Unix interface" (\class{UnixCCompiler} class) and Visual C++ 
  (\class{MSVCCompiler} class). Note that it's perfectly possible to ask 
! for a Unix compiler object under Windows, and a Microsoft compiler object 
! under Unix -- if you supply a value for \var{compiler}, \var{plat} is ignored.
  \end{funcdesc}
  
--- 164,171 ----
  defaults to the default compiler for that platform. Currently only \var{posix} 
  and \var{nt} are supported, and the default compilers are "traditional
! \UNIX interface" (\class{UnixCCompiler} class) and Visual C++ 
  (\class{MSVCCompiler} class). Note that it's perfectly possible to ask 
! for a \UNIX compiler object under Windows, and a Microsoft compiler object 
! under \UNIX -- if you supply a value for \var{compiler}, \var{plat} is ignored.
  \end{funcdesc}
  
***************
*** 293,298 ****
  \begin{methoddesc}{detect_language}{sources}
  Detect the language of a given file, or list of files. Uses the 
! instance attributes \var{language_map} (a dictionary), and \var{language_order}
! (a list) to do the job.
  \end{methoddesc}
  
--- 301,306 ----
  \begin{methoddesc}{detect_language}{sources}
  Detect the language of a given file, or list of files. Uses the 
! instance attributes \member{language_map} (a dictionary), and 
! \member{language_order} (a list) to do the job.
  \end{methoddesc}
  
***************
*** 340,347 ****
  \end{tableii}
  
! On platforms with a command-line (Unix, DOS/Windows), each of these
  is a string that will be split into executable name and (optional)
  list of arguments.  (Splitting the string is done similarly to how
! Unix shells operate: words are delimited by spaces, but quotes and
  backslashes can override this.  See
  \function{distutils.util.split_quoted()}.)
--- 348,355 ----
  \end{tableii}
  
! On platforms with a command-line (\UNIX, DOS/Windows), each of these
  is a string that will be split into executable name and (optional)
  list of arguments.  (Splitting the string is done similarly to how
! \UNIX shells operate: words are delimited by spaces, but quotes and
  backslashes can override this.  See
  \function{distutils.util.split_quoted()}.)
***************
*** 364,371 ****
  
  If \var{output_dir} is given, object files will be put under it, while
! retaining their original path component.  That is, \var{foo/bar.c}
! normally compiles to \var{foo/bar.o} (for a Unix implementation); if
  \var{output_dir} is \var{build}, then it would compile to
! \var{build/foo/bar.o}.
  
  \var{macros}, if given, must be a list of macro definitions.  A macro
--- 372,379 ----
  
  If \var{output_dir} is given, object files will be put under it, while
! retaining their original path component.  That is, \file{foo/bar.c}
! normally compiles to \file{foo/bar.o} (for a \UNIX implementation); if
  \var{output_dir} is \var{build}, then it would compile to
! \file{build/foo/bar.o}.
  
  \var{macros}, if given, must be a list of macro definitions.  A macro
***************
*** 384,388 ****
  
  \var{extra_preargs} and \var{extra_postargs} are implementation- dependent.
! On platforms that have the notion of a command-line (e.g. Unix,
  DOS/Windows), they are most likely lists of strings: extra
  command-line arguments to prepand/append to the compiler command
--- 392,396 ----
  
  \var{extra_preargs} and \var{extra_postargs} are implementation- dependent.
! On platforms that have the notion of a command-line (e.g. \UNIX,
  DOS/Windows), they are most likely lists of strings: extra
  command-line arguments to prepand/append to the compiler command
***************
*** 437,442 ****
  \var{libraries} is a list of libraries to link against.  These are
  library names, not filenames, since they're translated into
! filenames in a platform-specific way (eg. "foo" becomes "libfoo.a"
! on Unix and "foo.lib" on DOS/Windows).  However, they can include a
  directory component, which means the linker will look in that
  specific directory rather than searching all the normal locations.
--- 445,450 ----
  \var{libraries} is a list of libraries to link against.  These are
  library names, not filenames, since they're translated into
! filenames in a platform-specific way (eg. \var{foo} becomes \file{libfoo.a}
! on \UNIX and \file{foo.lib} on DOS/Windows).  However, they can include a
  directory component, which means the linker will look in that
  specific directory rather than searching all the normal locations.
***************
*** 449,453 ****
  directories that will be embedded into the shared library and used
  to search for other shared libraries that *it* depends on at
! run-time.  (This may only be relevant on Unix.)
  
  \var{export_symbols} is a list of symbols that the shared library will
--- 457,461 ----
  directories that will be embedded into the shared library and used
  to search for other shared libraries that *it* depends on at
! run-time.  (This may only be relevant on \UNIX.)
  
  \var{export_symbols} is a list of symbols that the shared library will
***************
*** 459,464 ****
  mostly for form's sake).
  
! \var{extra_preargs} and \var{extra_postargs} are as for \method{compile()} (except
! of course that they supply command-line arguments for the
  particular linker being used).
  
--- 467,472 ----
  mostly for form's sake).
  
! \var{extra_preargs} and \var{extra_postargs} are as for \method{compile()} 
! (except of course that they supply command-line arguments for the
  particular linker being used).
  
***************
*** 507,518 ****
  Returns the filename of the executable for the given \var{basename}. 
  Typically for non-Windows platforms this is the same as the basename, 
! while Windows will get a '.exe' added.
  \end{methoddesc}
  
  \begin{methoddesc}{library_filename}{libname\optional{, lib_type='static', strip_dir=0, output_dir=''}}
  Returns the filename for the given library name on the current platform.
! On unix a library with \var{lib_type} of 'static' will typically be of the 
! form "liblibname.a", while a \var{lib_type} of 'dynamic' will be of 
! the form "liblibname.so".
  \end{methoddesc}
  
--- 515,526 ----
  Returns the filename of the executable for the given \var{basename}. 
  Typically for non-Windows platforms this is the same as the basename, 
! while Windows will get a \file{.exe} added.
  \end{methoddesc}
  
  \begin{methoddesc}{library_filename}{libname\optional{, lib_type='static', strip_dir=0, output_dir=''}}
  Returns the filename for the given library name on the current platform.
! On \UNIX a library with \var{lib_type} of 'static' will typically be of the 
! form \file{liblibname.a}, while a \var{lib_type} of 'dynamic' will be of 
! the form \file{liblibname.so}.
  \end{methoddesc}
  
***************
*** 528,532 ****
  \begin{methoddesc}{execute}{func, args\optional{, msg=None, level=1}}
  Invokes \function{distutils.util.execute()} This method invokes a 
! python function \var{func} with the given arguments \var{args}, after 
  logging and taking into account the \var{dry_run} flag. XXX see also.
  \end{methoddesc}
--- 536,540 ----
  \begin{methoddesc}{execute}{func, args\optional{, msg=None, level=1}}
  Invokes \function{distutils.util.execute()} This method invokes a 
! Python function \var{func} with the given arguments \var{args}, after 
  logging and taking into account the \var{dry_run} flag. XXX see also.
  \end{methoddesc}
***************
*** 566,578 ****
  
  The following modules implement concrete subclasses of the abstract 
! CCompiler class. They should not be instantiated directly, but should
  be created using \function{distutils.ccompiler.new_compiler()} factory 
  function.
  
! \declaremodule{distutils.unixccompiler}
! \modulesynopsis{Unix C Compiler}
  
  This module provides the \class{UnixCCompiler} class, a subclass of 
! \class{CCompiler} that handles the "typical" Unix-style command-line 
  C compiler:
  
--- 574,587 ----
  
  The following modules implement concrete subclasses of the abstract 
! \class{CCompiler} class. They should not be instantiated directly, but should
  be created using \function{distutils.ccompiler.new_compiler()} factory 
  function.
  
! \subsubsection{\module{distutils.unixccompiler} -- Unix C Compiler}
! \declaremodule{standard}{distutils.unixccompiler}
! \modulesynopsis{UNIX C Compiler}
  
  This module provides the \class{UnixCCompiler} class, a subclass of 
! \class{CCompiler} that handles the "typical" \UNIX-style command-line 
  C compiler:
  
***************
*** 589,593 ****
  \end{itemize}
  
! \declaremodule{distutils.msvccompiler}
  \modulesynopsis{Microsoft Compiler}
  
--- 598,603 ----
  \end{itemize}
  
! \subsubsection{\module{distutils.msvccompiler} -- Microsoft Compiler}
! \declaremodule{standard}{distutils.msvccompiler}
  \modulesynopsis{Microsoft Compiler}
  
***************
*** 597,605 ****
  download link.
  
! \declaremodule{distutils.bcppcompiler}
! 
  This module provides \class{BorlandCCompiler}, an subclass of the abstract \class{CCompiler} class for the Borland C++ compiler.
  
! \declaremodule{distutils.cygwinccompiler}
  
  This module provides the \class{CygwinCCompiler} class, a subclass of \class{UnixCCompiler} that
--- 607,616 ----
  download link.
  
! \subsubsection{\module{distutils.bcppcompiler} -- Borland Compiler}
! \declaremodule{standard}{distutils.bcppcompiler}
  This module provides \class{BorlandCCompiler}, an subclass of the abstract \class{CCompiler} class for the Borland C++ compiler.
  
! \subsubsection{\module{distutils.cygwincompiler} -- Cygwin Compiler}
! \declaremodule{standard}{distutils.cygwinccompiler}
  
  This module provides the \class{CygwinCCompiler} class, a subclass of \class{UnixCCompiler} that
***************
*** 608,675 ****
  cygwin in no-cygwin mode).
  
! \declaremodule{distutils.emxccompiler}
  This module provides the EMXCCompiler class, a subclass of \class{UnixCCompiler} that handles the EMX port of the GNU C compiler to OS/2.
  
! \declaremodule{distutils.mwerkscompiler}
! Contains \class{MWerksCompiler}, an implementation of the abstract CCompiler class for MetroWerks CodeWarrior on the Macintosh. Needs work to support CW on
! Windows.
  
  \subsection{Utility modules}
  
! The following modules all provide general utility functions. Haven't 
! been documented yet.
  
  \declaremodule{standard}{distutils.util}
! \modulesynopsis{ }
  
! \declaremodule{standard}{distutils.archive_util}
! \modulesynopsis{ }
  
- \declaremodule{standard}{distutils.dep_util}
- \modulesynopsis{ }
  
! \declaremodule{standard}{distutils.dir_util}
! \modulesynopsis{ }
  
! \declaremodule{standard}{distutils.file_util}
! \modulesynopsis{ }
  
- \subsection{Ungrouped modules}
  
  The following haven't been moved into a more appropriate section yet.
  
  \declaremodule{standard}{distutils.debug}
! \modulesynopsis{ }
  
! \declaremodule{standard}{distutils.dist}
! \modulesynopsis{ }
  
  \declaremodule{standard}{distutils.errors}
! \modulesynopsis{ }
  
! \declaremodule{standard}{distutils.extension}
! \modulesynopsis{ }
  
! \declaremodule{standard}{distutils.fancy_getopt}
! \modulesynopsis{ }
  
  \declaremodule{standard}{distutils.filelist}
! \modulesynopsis{ }
  
  \declaremodule{standard}{distutils.log}
! \modulesynopsis{ }
  
- \declaremodule{standard}{distutils.magic}
- \modulesynopsis{ }
  
  \declaremodule{standard}{distutils.spawn}
! \modulesynopsis{ }
  
  \declaremodule{standard}{distutils.sysconfig}
! \modulesynopsis{ }
  
- \declaremodule{standard}{distutils.text_file}
- \modulesynopsis{ }
  
  \declaremodule{standard}{distutils.version}
  \modulesynopsis{implements classes that represent module version numbers. }
--- 619,886 ----
  cygwin in no-cygwin mode).
  
! \subsubsection{\module{distutils.emxccompiler} -- OS/2 EMX Compiler}
! \declaremodule{standard}{distutils.emxccompiler}
! \modulesynopsis{OS/2 EMX Compiler support}
! 
  This module provides the EMXCCompiler class, a subclass of \class{UnixCCompiler} that handles the EMX port of the GNU C compiler to OS/2.
  
! \subsubsection{\module{distutils.mwerkscompiler} -- Metrowerks CodeWarrior support}
! \declaremodule{standard}{distutils.mwerkscompiler}
! \modulesynopsis{Metrowerks CodeWarrior support}
! 
! Contains \class{MWerksCompiler}, an implementation of the abstract 
! \class{CCompiler} class for MetroWerks CodeWarrior on the Macintosh. Needs work to support CW on Windows.
! 
! \subsubsection{Implementing a new compiler}
! 
! This will discuss steps needed to support a new compiler.
  
  \subsection{Utility modules}
  
! The following modules all provide general utility functions. They havent 
! all been documented yet.
! 
! \subsubsection{\module{distutils.archive_util} -- 
! 			Archiving utilities}
! \declaremodule[distutils.archiveutil]{standard}{distutils.archive_util}
! \modulesynopsis{Utility functions for creating archive files (tarballs, zip files, ...)}
! 
! This module provides a few functions for creating archive files, such as 
! tarballs or zipfiles.
! 
! \begin{funcdesc}{make_archive}{base_name, format\optional{, root_dir=None, base_dir=None, verbose=0, dry_run=0}}
! Create an archive file (eg. \code{zip} or \code{tar}).  \var{base_name} 
! is the name of the file to create, minus any format-specific extension; 
! \var{format} is the archive format: one of \code{zip}, \code{tar}, 
! \code{ztar}, or \code{gztar}.
! \var{root_dir} is a directory that will be the root directory of the
! archive; ie. we typically \code{chdir} into \var{root_dir} before 
! creating the archive.  \var{base_dir} is the directory where we start 
! archiving from; ie. \var{base_dir} will be the common prefix of all files and
! directories in the archive.  \var{root_dir} and \var{base_dir} both default
! to the current directory.  Returns the name of the archive file.
! 
! \warning{This should be changed to support bz2 files}
! \end{funcdesc}
! 
! \begin{funcdesc}{make_tarball}{base_name, base_dir\optional{, compress="gzip", verbose=0, dry_run=0}}
! Create an (optional compressed) archive as a tar file from all files in and under \var{base_dir}. \var{compress} must be \code{"gzip"} (the default), 
! \code{"compress"}, \code{"bzip2"}, or \code{None}.  Both \code{"tar"} 
! and the compression utility named by \var{'compress'} must be on the 
! default program search path, so this is probably Unix-specific.  The 
! output tar file will be named \var{'base_dir'} +
! \code{".tar"}, possibly plus the appropriate compression extension 
! (\code{".gz"}, \code{".bz2"} or \code{".Z"}).  Return the output filename.
! 
! \warning{This should be replaced with calls to the \refmodule{tarfile} module.}
! \end{funcdesc}
! 
! \begin{funcdesc}{make_zipfile}{base_name, base_dir\optional{, verbose=0, dry_run=0}}
! Create a zip file from all files in and under \var{base_dir}.  The output
! zip file will be named \var{base_dir} + \file{.zip}.  Uses either the 
! \refmodule{zipfile} Python module (if available) or the InfoZIP \file{zip} 
! utility (if installed and found on the default search path).  If neither 
! tool is available, raises \exception{DistutilsExecError}.  
! Returns the name of the output zip file.
! \end{funcdesc}
! 
! \subsubsection{\module{distutils.dep_util} -- Dependency checking}
! \declaremodule[distutils.deputil]{standard}{distutils.dep_util}
! \modulesynopsis{Utility functions for simple dependency checking}
! 
! This module provides functions for performing simple, timestamp-based 
! dependency of files and groups of files; also, functions based entirely 
! on such timestamp dependency analysis.
! 
! 
! \subsubsection{\module{distutils.dir_util} -- Directory tree operations}
! \declaremodule[distutils.dirutil]{standard}{distutils.dir_util}
! \modulesynopsis{Utility functions for operating on directories and directory trees}
! 
! This module provides functions for operating on directories and trees
! of directories.
! 
! \begin{funcdesc}{mkpath}{name\optional{, mode=0777, verbose=0, dry_run=0}}
! Create a directory and any missing ancestor directories.  If the
! directory already exists (or if \var{name} is the empty string, which
! means the current directory, which of course exists), then do
! nothing.  Raise \exception{DistutilsFileError} if unable to create some
! directory along the way (eg. some sub-path exists, but is a file
! rather than a directory).  If \var{verbose} is true, print a one-line
! summary of each mkdir to stdout.  Return the list of directories
! actually created.
! \end{funcdesc}
! 
! \begin{funcdesc}{create_tree}{base_dir, files\optional{, mode=0777, verbose=0, dry_run=0}}
! Create all the empty directories under \var{base_dir} needed to
! put \var{files} there.  \var{base_dir} is just the a name of a directory
! which doesn't necessarily exist yet; \var{files} is a list of filenames
! to be interpreted relative to \var{base_dir}.  \var{base_dir} + the
! directory portion of every file in \var{files} will be created if it
! doesn't already exist.  \var{mode}, \var{verbose} and \var{dry_run} flags 
! are as for \function{mkpath()}.
! \end{funcdesc}
! 
! \begin{funcdesc}{copy_tree}{src, dst\optional{preserve_mode=1, preserve_times=1, preserve_symlinks=0, update=0, verbose=0, dry_run=0}}
! Copy an entire directory tree \var{src} to a new location \var{dst}.  Both
! \var{src} and \var{dst} must be directory names.  If \var{src} is not a
! directory, raise \exception{DistutilsFileError}.  If \var{dst} does 
! not exist, it is created with \var{mkpath()}.  The end result of the 
! copy is that every file in \var{src} is copied to \var{dst}, and 
! directories under \var{src} are recursively copied to \var{dst}.  
! Return the list of files that were copied or might have been copied,
! using their output name. The return value is unaffected by \var{update}
! or \var{dry_run}: it is simply the list of all files under \var{src},
! with the names changed to be under \var{dst}.
! 
! \var{preserve_mode} and \var{preserve_times} are the same as for
! \function{copy_file} in \refmodule{distutil.file_util}; note that they 
! only apply to regular files, not to directories.  If \var{preserve_symlinks} 
! is true, symlinks will be copied as symlinks (on platforms that support 
! them!); otherwise (the default), the destination of the symlink will 
! be copied.  \var{update} and \var{verbose} are the same as for 
! \function{copy_file}.
! \end{funcdesc}
! 
! \begin{funcdesc}{remove_tree}{directory\optional{verbose, dry_run}}
! Recursively remove \var{directory} and all files and directories underneath
! it. Any errors are ignored (apart from being reported to stdout if 
! \var{verbose} is true).
! \end{funcdesc}
! 
! \warning{Some of this could be replaced with the shutil module?}
! 
! \subsubsection{\module{distutils.file_util} -- Single file operations}
! \declaremodule[distutils.fileutil]{standard}{distutils.file_util}
! \modulesynopsis{Utility functions for operating on single files}
! 
! This module contains some utility functions for operating on individual files.
! 
! \begin{funcdesc}{copy_file}{src, dst\optional{preserve_mode, preserve_times, update, link, verbose, dry_run}}
! Copy file \var{src} to \var{dst}. XXX todo
! \end{funcdesc}
! 
! \begin{funcdesc}{move_file}{src, dst\optional{verbose, dry_run}}
! Move file \var{src} to \var{dst}. If \var{dst} is a directory, the file will
! be moved into it with the same name; otherwise, \var{src} is just renamed
! to 'dst'.  Return the new full name of the file.
! XXX todo    Handles cross-device moves on Unix using 'copy_file()'.  What about
! other systems???
! \end{funcdesc}
  
+ 
+ \subsubsection{\module{distutils.utils} -- Miscellaneous other utility functions}
  \declaremodule{standard}{distutils.util}
! \modulesynopsis{Miscellaneous other utility functions}
  
! This module contains other assorted bits and pieces that don't fit into 
! any other utility module.
  
  
! \subsection{Distutils objects}
  
! \subsubsection{\module{distutils.dist} -- The Distribution class}
! \declaremodule{standard}{distutils.dist}
! \modulesynopsis{Provides the Distribution class, which represents the module distribution
! being built/installed/distributed}
! 
! This module provides the \class{Distribution} class, which represents the module distribution
! being built/installed/distributed.
  
  
+ \subsubsection{\module{distutils.extension} -- The Extension class}
+ \declaremodule{standard}{distutils.extension}
+ \modulesynopsis{Provides the Extension class, used to describe C/C++ extension modules in setup scripts}
+ 
+ This module provides the \class{Extension} class, used to describe C/C++ extension
+ modules in setup scripts.
+ 
+ \subsection{Ungrouped modules}
  The following haven't been moved into a more appropriate section yet.
  
+ \subsubsection{\module{distutils.debug} -- Distutils debug mode}
  \declaremodule{standard}{distutils.debug}
! \modulesynopsis{Provides the debug flag for distutils}
  
! This module provides the DEBUG flag.
  
+ \subsubsection{\module{distutils.errors} -- Distutils exceptions}
  \declaremodule{standard}{distutils.errors}
! \modulesynopsis{Provides standard distutils exceptions}
  
! Provides exceptions used by the Distutils modules.  Note that Distutils
! modules may raise standard exceptions; in particular, SystemExit is
! usually raised for errors that are obviously the end-user's fault
! (eg. bad command-line arguments).
  
! This module is safe to use in \samp{from ... import *} mode; it only exports
! symbols whose names start with \code{Distutils} and end with \code{Error}.
  
+ \subsubsection{\module{distutils.fancy_getopt} -- Wrapper around the standard getopt module}
+ \declaremodule[distutils.fancygetopt]{standard}{distutils.fancy_getopt}
+ \modulesynopsis{Additional getopt functionality }
+ 
+ This module provides a wrapper around the standard \refmodule{getopt} module that 
+ provides the following
+ additional features:
+ \begin{itemize}
+ \item short and long options are tied together
+ \item options have help strings, so fancy_getopt could potentially create a complete usage summary
+ \item options set attributes of a passed-in object
+ \end{itemize}
+ 
+ \warning{Should be replaced with optik (which is also now known as \refmodule{optparse})}
+ 
+ \subsubsection{\module{distutils.filelist} -- The FileList class}
  \declaremodule{standard}{distutils.filelist}
! \modulesynopsis{The FileList class, used for poking about the filesystem and building lists of files.  }
  
+ This module provides the \class{FileList} class, used for poking about the filesystem
+ and building lists of files.
+ 
+ 
+ \subsubsection{\module{distutils.log} -- Simple PEP282-style logging}
  \declaremodule{standard}{distutils.log}
! \modulesynopsis{A simple logging mechanism, PEP282-style}
! 
! \warning{Should be replaced with standard \refmodule{logging} module.}
! 
! %\subsubsection{\module{} -- }
! %\declaremodule{standard}{distutils.magic}
! %\modulesynopsis{ }
  
  
+ \subsubsection{\module{distutils.spawn} -- Spawn a sub-process}
  \declaremodule{standard}{distutils.spawn}
! \modulesynopsis{Provides the spawn() function}
! 
! This module provides the \function{spawn()} function, a front-end to 
! various platform-specific functions for launching another program in a 
! sub-process.
! Also provides \function{find_executable()} to search the path for a given
! executable name.
  
+ \subsubsection{\module{distutils.sysconfig} -- Python configuration}
  \declaremodule{standard}{distutils.sysconfig}
! \modulesynopsis{Access to Python's configuration}
! 
! This module provides access to Python's configuration information.  
! The specific configuration variables available depend heavily on the 
! platform and configuration.  The values may be retrieved using
! \code{get_config_var(name)}, and the list of variables is available via
! \code{get_config_vars().keys()}.  Additional convenience functions are also
! available.
  
  
+ \subsubsection{\module{distutils.text_file} -- The TextFile class}
+ \declaremodule[distutils.textfile]{standard}{distutils.text_file}
+ \modulesynopsis{provides the TextFile class, a simple interface to text files}
+ 
+ This module provides the \class{TextFile} class, which gives an interface to text files
+ that (optionally) takes care of stripping comments, ignoring blank
+ lines, and joining lines with backslashes.
+ 
+ 
+ \subsubsection{\module{distutils.version} -- Version number classes}
  \declaremodule{standard}{distutils.version}
  \modulesynopsis{implements classes that represent module version numbers. }
***************
*** 678,687 ****
  
  This part of Distutils implements the various Distutils commands, such
! as 'build', 'install' &c. 
  
  \declaremodule{standard}{distutils.cmd}
  \modulesynopsis{This module provides the abstract base class Command. This
! class is subclassed by the modules in the distutils.command subpackage. }
  
  \declaremodule{standard}{distutils.command}
  \modulesynopsis{This subpackage contains one module for each standard Distutils command.}
--- 889,903 ----
  
  This part of Distutils implements the various Distutils commands, such
! as 'build', 'install' \&c. 
! 
  
+ \subsubsection{\module{distutils.cmd} -- Abstract base class for Distutils commands}
  \declaremodule{standard}{distutils.cmd}
  \modulesynopsis{This module provides the abstract base class Command. This
! class is subclassed by the modules in the \refmodule{distutils.command} 
! subpackage. }
! 
  
+ \subsubsection{\module{distutils.command} -- Individual Distutils commands}
  \declaremodule{standard}{distutils.command}
  \modulesynopsis{This subpackage contains one module for each standard Distutils command.}
***************
*** 689,752 ****
  \subsubsection{Individual Distutils commands}
  
  \declaremodule{standard}{distutils.command.bdist}
  \modulesynopsis{Build a binary installer for a package}
  
! \declaremodule{standard}{distutils.command.bdist_packager}
  \modulesynopsis{Abstract base class for packagers}
  
! \declaremodule{standard}{distutils.command.bdist_dumb}
  \modulesynopsis{Build a "dumb" installer - a simple archive of files}
  
! %\declaremodule{standard}{distutils.command.bdist_pkgtool}
  %\modulesynopsis{ }
  
! %\declaremodule{standard}{distutils.command.bdist_sdux}
  %\modulesynopsis{ }
  
! \declaremodule{standard}{distutils.command.bdist_rpm}
  \modulesynopsis{Build a binary distribution as a Redhat RPM and SRPM}
  
! \declaremodule{standard}{distutils.command.bdist_wininst}
  \modulesynopsis{Build a Windows installer}
  
  \declaremodule{standard}{distutils.command.sdist}
  \modulesynopsis{Build a source distribution}
  
  \declaremodule{standard}{distutils.command.build}
  \modulesynopsis{Build all files of a package}
  
! \declaremodule{standard}{distutils.command.build_clib}
  \modulesynopsis{Build any C libraries in a package}
  
! \declaremodule{standard}{distutils.command.build_ext}
  \modulesynopsis{Build any extensions in a package}
  
! \declaremodule{standard}{distutils.command.build_py}
  \modulesynopsis{Build the .py/.pyc files of a package}
  
! \declaremodule{standard}{distutils.command.build_scripts}
  \modulesynopsis{Build the scripts of a package}
  
  \declaremodule{standard}{distutils.command.clean}
  \modulesynopsis{Clean a package build area}
  
  \declaremodule{standard}{distutils.command.config}
  \modulesynopsis{Perform package configuration}
  
  \declaremodule{standard}{distutils.command.install}
  \modulesynopsis{Install a package}
  
! \declaremodule{standard}{distutils.command.install_data}
  \modulesynopsis{Install data files from a package}
  
! \declaremodule{standard}{distutils.command.install_headers}
  \modulesynopsis{Install C/C++ header files from a package}
  
! \declaremodule{standard}{distutils.command.install_lib}
  \modulesynopsis{Install library files from a package}
  
! \declaremodule{standard}{distutils.command.install_scripts}
  \modulesynopsis{Install script files from a package}
  
  \declaremodule{standard}{distutils.command.register}
  \modulesynopsis{Register a module with the Python Package Index}
--- 905,1010 ----
  \subsubsection{Individual Distutils commands}
  
+ 
+ \subsubsection{\module{distutils.command.bdist} -- Build a binary installer}
  \declaremodule{standard}{distutils.command.bdist}
  \modulesynopsis{Build a binary installer for a package}
  
! 
! \subsubsection{\module{distutils.command.bdist_packager} -- Abstract base class for packagers}
! \declaremodule[distutils.command.bdistpackager]{standard}{distutils.command.bdist_packager}
  \modulesynopsis{Abstract base class for packagers}
  
! 
! \subsubsection{\module{distutils.command.bdist_dumb} -- Build a "dumb" installer}
! \declaremodule[distutils.command.bdistdumb]{standard}{distutils.command.bdist_dumb}
  \modulesynopsis{Build a "dumb" installer - a simple archive of files}
  
! 
! %\subsubsection{\module{} -- }
! %\declaremodule[distutils.command.bdistpkgtool]{standard}{distutils.command.bdist_pkgtool}
  %\modulesynopsis{ }
  
! 
! %\subsubsection{\module{} -- }
! %\declaremodule[distutils.command.bdistsdux]{standard}{distutils.command.bdist_sdux}
  %\modulesynopsis{ }
  
! 
! \subsubsection{\module{distutils.command.bdist_rpm} -- Build a binary distribution as a Redhat RPM and SRPM}
! \declaremodule[distutils.command.bdistrpm]{standard}{distutils.command.bdist_rpm}
  \modulesynopsis{Build a binary distribution as a Redhat RPM and SRPM}
  
! 
! \subsubsection{\module{distutils.command.bdist_wininst} -- Build a Windows installer}
! \declaremodule[distutils.command.bdistwininst]{standard}{distutils.command.bdist_wininst}
  \modulesynopsis{Build a Windows installer}
  
+ 
+ \subsubsection{\module{distutils.command.sdist} -- Build a source distribution}
  \declaremodule{standard}{distutils.command.sdist}
  \modulesynopsis{Build a source distribution}
  
+ 
+ \subsubsection{\module{distutils.command.build} -- Build all files of a package}
  \declaremodule{standard}{distutils.command.build}
  \modulesynopsis{Build all files of a package}
  
! 
! \subsubsection{\module{distutils.command.build_clib} -- Build any C libraries in a package}
! \declaremodule[distutils.command.buildclib]{standard}{distutils.command.build_clib}
  \modulesynopsis{Build any C libraries in a package}
  
! 
! \subsubsection{\module{distutils.command.build_ext} -- Build any extensions in a package}
! \declaremodule[distutils.command.buildext]{standard}{distutils.command.build_ext}
  \modulesynopsis{Build any extensions in a package}
  
! 
! \subsubsection{\module{distutils.command.build_py} -- Build the .py/.pyc files of a package}
! \declaremodule[distutils.command.buildpy]{standard}{distutils.command.build_py}
  \modulesynopsis{Build the .py/.pyc files of a package}
  
! 
! \subsubsection{\module{distutils.command.build_scripts} -- Build the scripts of a package}
! \declaremodule[distutils.command.buildscripts]{standard}{distutils.command.build_scripts}
  \modulesynopsis{Build the scripts of a package}
  
+ 
+ \subsubsection{\module{distutils.command.clean} -- Clean a package build area}
  \declaremodule{standard}{distutils.command.clean}
  \modulesynopsis{Clean a package build area}
  
+ 
+ \subsubsection{\module{distutils.command.config} -- Perform package configuration}
  \declaremodule{standard}{distutils.command.config}
  \modulesynopsis{Perform package configuration}
  
+ 
+ \subsubsection{\module{distutils.command.install} -- Install a package}
  \declaremodule{standard}{distutils.command.install}
  \modulesynopsis{Install a package}
  
! 
! \subsubsection{\module{distutils.command.install_data} -- Install data files from a package}
! \declaremodule[distutils.command.installdata]{standard}{distutils.command.install_data}
  \modulesynopsis{Install data files from a package}
  
! 
! \subsubsection{\module{distutils.command.install_headers} -- Install C/C++ header files from a package}
! \declaremodule[distutils.command.installheaders]{standard}{distutils.command.install_headers}
  \modulesynopsis{Install C/C++ header files from a package}
  
! 
! \subsubsection{\module{distutils.command.install_lib} -- Install library files from a package}
! \declaremodule[distutils.command.installlib]{standard}{distutils.command.install_lib}
  \modulesynopsis{Install library files from a package}
  
! 
! \subsubsection{\module{distutils.command.install_scripts} -- Install script files from a package}
! \declaremodule[distutils.command.installscripts]{standard}{distutils.command.install_scripts}
  \modulesynopsis{Install script files from a package}
  
+ 
+ \subsubsection{\module{distutils.command.register} -- Register a module with the Python Package Index}
  \declaremodule{standard}{distutils.command.register}
  \modulesynopsis{Register a module with the Python Package Index}