# Makefile for Python documentation
# ---------------------------------
#
# See also the README file.
#
# This is a bit of a mess.  The documents are identified by short names:
#   api -- Python/C API Reference Manual
#   doc -- Documenting Python
#   ext -- Extending and Embedding the Python Interpreter
#   lib -- Library Reference Manual
#   mac -- Macintosh Library Modules
#   ref -- Python Reference Manual
#   tut -- Python Tutorial
#   inst -- Installing Python Modules
#   dist -- Distributing Python Modules
#
# The LaTeX sources for each of these documents are in subdirectories
# with the three-letter designations above as the directory names.
#
# The main target creates HTML for each of the documents.  You can
# also do "make lib" (etc.) to create the HTML versions of individual
# documents.
#
# The document classes and styles are in the texinputs/ directory.
# These define a number of macros that are similar in name and intent
# as macros in Texinfo (e.g. \code{...} and \emph{...}), as well as a
# number of environments for formatting function and data definitions.
# Documentation for the macros is included in "Documenting Python"; see
# http://www.python.org/doc/current/doc/doc.html, or the sources for
# this document in the doc/ directory.
#
# Everything is processed by LaTeX.  See the file `README' for more
# information on the tools needed for processing.
#
# There's a problem with generating the index which has been solved by
# a sed command applied to the index file.  The shell script fix_hack
# does this (the Makefile takes care of calling it).
#
# Additional targets attempt to convert selected LaTeX sources to
# various other formats.  These are generally site specific because
# the tools used are all but universal.  These targets are:
#
#   ps  -- convert all documents from LaTeX to PostScript
#   pdf -- convert all documents from LaTeX to the
#		Portable Document Format
#
# See the README file for more information on these targets.
#
# The formatted output is located in subdirectories.  For PDF and
# PostScript, look in the paper-$(PAPER)/ directory.  For HTML, look in
# the html/ directory.  If you want to fix the GNU info process, look
# in the info/ directory; please send patches to python-docs@python.org.

# This Makefile only includes information on how to perform builds; for
# dependency information, see Makefile.deps.

# Customization -- you *may* have to edit this

# You could set this to a4:
PAPER=letter

# Ideally, you shouldn't need to edit beyond this point

INFODIR=	info
TOOLSDIR=	tools

# This is the *documentation* release, and is used to construct the file
# names of the downloadable tarballs.
RELEASE=2.3a0

PYTHON=	   python
DVIPS=	   dvips -N0 -t $(PAPER)

MKDVI=	   $(PYTHON) ../tools/mkhowto --paper=$(PAPER) --dvi
MKHTML=	   $(PYTHON) tools/mkhowto --html --about html/stdabout.dat \
		--iconserver ../icons \
		--address $(PYTHONDOCS) --up-link ../index.html \
		--up-title "Python Documentation Index" \
		--global-module-index "../modindex.html" --dvips-safe
MKISILOHTML=$(PYTHON) tools/mkhowto --html --about html/stdabout.dat \
		--iconserver ../icons \
		--l2h-init perl/isilo.perl --numeric --split 1 \
		--dvips-safe
MKISILO=   iSilo386 -U -y -rCR -d0
MKPDF=	   $(PYTHON) ../tools/mkhowto --paper=$(PAPER) --pdf
MKPS=	   $(PYTHON) ../tools/mkhowto --paper=$(PAPER) --ps

BUILDINDEX=$(TOOLSDIR)/buildindex.py

PYTHONDOCS="See <i><a href=\"about.html\">About this document...</a></i> for information on suggesting changes."
HTMLBASE=  file:`pwd`

# The emacs binary used to build the info docs. GNU Emacs 21 is required.
EMACS=     emacs

# The end of this should reflect the major/minor version numbers of
# the release:
WHATSNEW=whatsnew23

# what's what
MANDVIFILES=	paper-$(PAPER)/api.dvi paper-$(PAPER)/ext.dvi \
		paper-$(PAPER)/lib.dvi paper-$(PAPER)/mac.dvi \
		paper-$(PAPER)/ref.dvi paper-$(PAPER)/tut.dvi
HOWTODVIFILES=	paper-$(PAPER)/doc.dvi paper-$(PAPER)/inst.dvi \
		paper-$(PAPER)/dist.dvi paper-$(PAPER)/$(WHATSNEW).dvi

MANPDFFILES=	paper-$(PAPER)/api.pdf paper-$(PAPER)/ext.pdf \
		paper-$(PAPER)/lib.pdf paper-$(PAPER)/mac.pdf \
		paper-$(PAPER)/ref.pdf paper-$(PAPER)/tut.pdf
HOWTOPDFFILES=	paper-$(PAPER)/doc.pdf paper-$(PAPER)/inst.pdf \
		paper-$(PAPER)/dist.pdf paper-$(PAPER)/$(WHATSNEW).pdf

MANPSFILES=	paper-$(PAPER)/api.ps paper-$(PAPER)/ext.ps \
		paper-$(PAPER)/lib.ps paper-$(PAPER)/mac.ps \
		paper-$(PAPER)/ref.ps paper-$(PAPER)/tut.ps
HOWTOPSFILES=	paper-$(PAPER)/doc.ps paper-$(PAPER)/inst.ps \
		paper-$(PAPER)/dist.ps paper-$(PAPER)/$(WHATSNEW).ps

DVIFILES=	$(MANDVIFILES) $(HOWTODVIFILES)
PDFFILES=	$(MANPDFFILES) $(HOWTOPDFFILES)
PSFILES=	$(MANPSFILES) $(HOWTOPSFILES)

HTMLCSSFILES=html/api/api.css \
	html/doc/doc.css \
	html/ext/ext.css \
	html/lib/lib.css \
	html/mac/mac.css \
	html/ref/ref.css \
	html/tut/tut.css \
	html/inst/inst.css \
	html/dist/dist.css

ISILOCSSFILES=isilo/api/api.css \
	isilo/doc/doc.css \
	isilo/ext/ext.css \
	isilo/lib/lib.css \
	isilo/mac/mac.css \
	isilo/ref/ref.css \
	isilo/tut/tut.css \
	isilo/inst/inst.css \
	isilo/dist/dist.css

ALLCSSFILES=$(HTMLCSSFILES) $(ISILOCSSFILES)

INDEXFILES=html/api/api.html \
	html/doc/doc.html \
	html/ext/ext.html \
	html/lib/lib.html \
	html/mac/mac.html \
	html/ref/ref.html \
	html/tut/tut.html \
	html/inst/inst.html \
	html/dist/dist.html \
	html/whatsnew/$(WHATSNEW).html

ALLHTMLFILES=$(INDEXFILES) html/index.html html/modindex.html html/acks.html

COMMONPERL= perl/manual.perl perl/python.perl perl/l2hinit.perl

ANNOAPI=api/refcounts.dat tools/anno-api.py

include Makefile.deps

# These must be declared phony since there
# are directories with matching names:
.PHONY: api doc ext lib mac ref tut inst dist
.PHONY: html info isilo


# Main target
default:	html
all:		html dvi ps pdf isilo

dvi:	$(DVIFILES)
pdf:	$(PDFFILES)
ps:	$(PSFILES)

world:	ps pdf html distfiles


# Rules to build PostScript and PDF formats
.SUFFIXES: .dvi .ps

.dvi.ps:
	$(DVIPS) -o $@ $<


# Targets for each document:
# Python/C API Reference Manual
paper-$(PAPER)/api.dvi: $(ANNOAPIFILES)
	cd paper-$(PAPER) && $(MKDVI) api.tex

paper-$(PAPER)/api.pdf: $(ANNOAPIFILES)
	cd paper-$(PAPER) && $(MKPDF) api.tex

paper-$(PAPER)/api.tex: api/api.tex
	cp api/api.tex $@

paper-$(PAPER)/abstract.tex: api/abstract.tex $(ANNOAPI)
	$(PYTHON) $(TOOLSDIR)/anno-api.py -o $@ api/abstract.tex

paper-$(PAPER)/concrete.tex: api/concrete.tex $(ANNOAPI)
	$(PYTHON) $(TOOLSDIR)/anno-api.py -o $@ api/concrete.tex

paper-$(PAPER)/exceptions.tex: api/exceptions.tex $(ANNOAPI)
	$(PYTHON) $(TOOLSDIR)/anno-api.py -o $@ api/exceptions.tex

paper-$(PAPER)/init.tex: api/init.tex $(ANNOAPI)
	$(PYTHON) $(TOOLSDIR)/anno-api.py -o $@ api/init.tex

paper-$(PAPER)/intro.tex: api/intro.tex
	cp api/intro.tex $@

paper-$(PAPER)/memory.tex: api/memory.tex $(ANNOAPI)
	$(PYTHON) $(TOOLSDIR)/anno-api.py -o $@ api/memory.tex

paper-$(PAPER)/newtypes.tex: api/newtypes.tex $(ANNOAPI)
	$(PYTHON) $(TOOLSDIR)/anno-api.py -o $@ api/newtypes.tex

paper-$(PAPER)/refcounting.tex: api/refcounting.tex $(ANNOAPI)
	$(PYTHON) $(TOOLSDIR)/anno-api.py -o $@ api/refcounting.tex

paper-$(PAPER)/utilities.tex: api/utilities.tex $(ANNOAPI)
	$(PYTHON) $(TOOLSDIR)/anno-api.py -o $@ api/utilities.tex

paper-$(PAPER)/veryhigh.tex: api/veryhigh.tex $(ANNOAPI)
	$(PYTHON) $(TOOLSDIR)/anno-api.py -o $@ api/veryhigh.tex

# Distributing Python Modules
paper-$(PAPER)/dist.dvi: $(DISTFILES)
	cd paper-$(PAPER) && $(MKDVI) ../dist/dist.tex

paper-$(PAPER)/dist.pdf: $(DISTFILES)
	cd paper-$(PAPER) && $(MKPDF) ../dist/dist.tex

# Documenting Python
paper-$(PAPER)/doc.dvi: $(DOCFILES)
	cd paper-$(PAPER) && $(MKDVI) ../doc/doc.tex

paper-$(PAPER)/doc.pdf: $(DOCFILES)
	cd paper-$(PAPER) && $(MKPDF) ../doc/doc.tex

# Extending and Embedding the Python Interpreter
paper-$(PAPER)/ext.dvi: $(EXTFILES)
	cd paper-$(PAPER) && $(MKDVI) ../ext/ext.tex

paper-$(PAPER)/ext.pdf: $(EXTFILES)
	cd paper-$(PAPER) && $(MKPDF) ../ext/ext.tex

# Installing Python Modules
paper-$(PAPER)/inst.dvi: $(INSTFILES)
	cd paper-$(PAPER) && $(MKDVI) ../inst/inst.tex

paper-$(PAPER)/inst.pdf: $(INSTFILES)
	cd paper-$(PAPER) && $(MKPDF) ../inst/inst.tex

# Python Library Reference
paper-$(PAPER)/lib.dvi: $(LIBFILES)
	cd paper-$(PAPER) && $(MKDVI) ../lib/lib.tex

paper-$(PAPER)/lib.pdf: $(LIBFILES)
	cd paper-$(PAPER) && $(MKPDF) ../lib/lib.tex

# Macintosh Library Modules
paper-$(PAPER)/mac.dvi: $(MACFILES)
	cd paper-$(PAPER) && $(MKDVI) ../mac/mac.tex

paper-$(PAPER)/mac.pdf: $(MACFILES)
	cd paper-$(PAPER) && $(MKPDF) ../mac/mac.tex

# Python Reference Manual
paper-$(PAPER)/ref.dvi: $(REFFILES)
	cd paper-$(PAPER) && $(MKDVI) ../ref/ref.tex

paper-$(PAPER)/ref.pdf: $(REFFILES)
	cd paper-$(PAPER) && $(MKPDF) ../ref/ref.tex

# Python Tutorial
paper-$(PAPER)/tut.dvi: $(TUTFILES)
	cd paper-$(PAPER) && $(MKDVI) ../tut/tut.tex

paper-$(PAPER)/tut.pdf: $(TUTFILES)
	cd paper-$(PAPER) && $(MKPDF) ../tut/tut.tex

# What's New in Python X.Y
paper-$(PAPER)/$(WHATSNEW).dvi:
	cd paper-$(PAPER) && $(MKDVI) ../whatsnew/$(WHATSNEW).tex

paper-$(PAPER)/$(WHATSNEW).pdf:
	cd paper-$(PAPER) && $(MKPDF) ../whatsnew/$(WHATSNEW).tex

# The remaining part of the Makefile is concerned with various
# conversions, as described above.  See also the README file.

info:
	cd $(INFODIR) && $(MAKE) EMACS=$(EMACS)

# Targets to convert the manuals to HTML using Nikos Drakos' LaTeX to
# HTML converter.  For more info on this program, see
# <URL:http://cbl.leeds.ac.uk/nikos/tex2html/doc/latex2html/latex2html.html>.

# Note that LaTeX2HTML inserts references to an icons directory in
# each page that it generates.  I have placed a copy of this directory
# in the distribution to simplify the process of creating a
# self-contained HTML distribution; for this purpose I have also added
# a (trivial) index.html.  Change the definition of $ICONSERVER in
# perl/l2hinit.perl to use a different location for the icons directory.

# If you have the standard LaTeX2HTML icons installed, the versions shipped
# with this documentation should be stored in a separate directory and used
# instead.  The standard set does *not* include all the icons used in the
# Python documentation.

$(ALLCSSFILES): html/style.css
	cp $< $@

$(INDEXFILES): $(COMMONPERL) html/about.dat tools/node2label.pl

html/acks.html: ACKS $(TOOLSDIR)/support.py $(TOOLSDIR)/mkackshtml
	$(PYTHON) $(TOOLSDIR)/mkackshtml --address $(PYTHONDOCS) \
		--output html/acks.html <ACKS


# html/index.html is dependent on $(INDEXFILES) since we want the date
# on the front index to be updated whenever any of the child documents
# are updated and boilerplate.tex uses \today as the date.  The index
# files are not used to actually generate content.

BOILERPLATE=texinputs/boilerplate.tex
html/index.html: $(INDEXFILES)
html/index.html: html/index.html.in $(BOILERPLATE) tools/rewrite.py
	$(PYTHON) tools/rewrite.py $(BOILERPLATE) \
		RELEASE=$(RELEASE) WHATSNEW=$(WHATSNEW) \
		<$< >$@

html/modindex.html: $(TOOLSDIR)/support.py $(TOOLSDIR)/mkmodindex
html/modindex.html: html/lib/lib.html html/mac/mac.html
	cd html && \
	 $(PYTHON) ../$(TOOLSDIR)/mkmodindex --columns 4 \
		--output modindex.html --address $(PYTHONDOCS) \
		lib/modindex.html mac/modindex.html

html:	$(ALLHTMLFILES) $(HTMLCSSFILES)

api: html/api/api.html html/api/api.css
html/api/api.html: $(APIFILES) api/refcounts.dat
	$(MKHTML) --dir html/api api/api.tex

doc: html/doc/doc.html html/doc/doc.css
html/doc/doc.html: $(DOCFILES)
	$(MKHTML) --dir html/doc doc/doc.tex

ext: html/ext/ext.html html/ext/ext.css
html/ext/ext.html: $(EXTFILES)
	$(MKHTML) --dir html/ext ext/ext.tex

lib: html/lib/lib.html html/lib/lib.css
html/lib/lib.html: $(LIBFILES)
	$(MKHTML) --dir html/lib lib/lib.tex

mac: html/mac/mac.html html/mac/mac.css
html/mac/mac.html: $(MACFILES)
	$(MKHTML) --dir html/mac mac/mac.tex

ref: html/ref/ref.html html/ref/ref.css
html/ref/ref.html: $(REFFILES)
	$(MKHTML) --dir html/ref ref/ref.tex

tut: html/tut/tut.html html/tut/tut.css
html/tut/tut.html: $(TUTFILES)
	$(MKHTML) --dir html/tut --numeric --split 3 tut/tut.tex

inst: html/inst/inst.html html/inst/inst.css
html/inst/inst.html: $(INSTFILES) perl/distutils.perl
	$(MKHTML) --dir html/inst --split 4 inst/inst.tex

dist: html/dist/dist.html html/dist/dist.css
html/dist/dist.html: $(DISTFILES) perl/distutils.perl
	$(MKHTML) --dir html/dist --split 4 dist/dist.tex

whatsnew: html/whatsnew/$(WHATSNEW).html
html/whatsnew/$(WHATSNEW).html: whatsnew/$(WHATSNEW).tex
	$(MKHTML) --dir html/whatsnew --split 4 whatsnew/$(WHATSNEW).tex


# The iSilo format is used by the iSilo document reader for PalmOS devices.

ISILOINDEXFILES=isilo/api/api.html \
	isilo/doc/doc.html \
	isilo/ext/ext.html \
	isilo/lib/lib.html \
	isilo/mac/mac.html \
	isilo/ref/ref.html \
	isilo/tut/tut.html \
	isilo/inst/inst.html \
	isilo/dist/dist.html \
	isilo/whatsnew/$(WHATSNEW).html

$(ISILOINDEXFILES): $(COMMONPERL) html/about.dat perl/isilo.perl

isilo:	isilo/python-api.pdb \
	isilo/python-doc.pdb \
	isilo/python-ext.pdb \
	isilo/python-lib.pdb \
	isilo/python-mac.pdb \
	isilo/python-ref.pdb \
	isilo/python-tut.pdb \
	isilo/python-dist.pdb \
	isilo/python-inst.pdb \
	isilo/python-whatsnew.pdb

isilo/python-api.pdb: isilo/api/api.html isilo/api/api.css
	$(MKISILO) "-iPython/C API Reference Manual" \
		isilo/api/api.html $@

isilo/python-doc.pdb: isilo/doc/doc.html isilo/doc/doc.css
	$(MKISILO) "-iDocumenting Python" \
		isilo/doc/doc.html $@

isilo/python-ext.pdb: isilo/ext/ext.html isilo/ext/ext.css
	$(MKISILO) "-iExtending & Embedding Python" \
		isilo/ext/ext.html $@

isilo/python-lib.pdb: isilo/lib/lib.html isilo/lib/lib.css
	$(MKISILO) "-iPython Library Reference" \
		isilo/lib/lib.html $@

isilo/python-mac.pdb: isilo/mac/mac.html isilo/mac/mac.css
	$(MKISILO) "-iPython/C API Reference Manual" \
		isilo/mac/mac.html $@

isilo/python-ref.pdb: isilo/ref/ref.html isilo/ref/ref.css
	$(MKISILO) "-iPython Reference Manual" \
		isilo/ref/ref.html $@

isilo/python-tut.pdb: isilo/tut/tut.html isilo/tut/tut.css
	$(MKISILO) "-iPython Tutorial" \
		isilo/tut/tut.html $@

isilo/python-dist.pdb: isilo/dist/dist.html isilo/dist/dist.css
	$(MKISILO) "-iDistributing Python Modules" \
		isilo/dist/dist.html $@

isilo/python-inst.pdb: isilo/inst/inst.html isilo/inst/inst.css
	$(MKISILO) "-iInstalling Python Modules" \
		isilo/inst/inst.html $@

isilo/python-whatsnew.pdb: isilo/whatsnew/$(WHATSNEW).html isilo/whatsnew/$(WHATSNEW).css
	$(MKISILO) "-iWhat's New in Python X.Y" \
		isilo/whatsnew/$(WHATSNEW).html $@

isilo/api/api.html: $(APIFILES) api/refcounts.dat
	$(MKISILOHTML) --dir isilo/api api/api.tex

isilo/doc/doc.html: $(DOCFILES)
	$(MKISILOHTML) --dir isilo/doc doc/doc.tex

isilo/ext/ext.html: $(EXTFILES)
	$(MKISILOHTML) --dir isilo/ext ext/ext.tex

isilo/lib/lib.html: $(LIBFILES)
	$(MKISILOHTML) --dir isilo/lib lib/lib.tex

isilo/mac/mac.html: $(MACFILES)
	$(MKISILOHTML) --dir isilo/mac mac/mac.tex

isilo/ref/ref.html: $(REFFILES)
	$(MKISILOHTML) --dir isilo/ref ref/ref.tex

isilo/tut/tut.html: $(TUTFILES)
	$(MKISILOHTML) --dir isilo/tut tut/tut.tex

isilo/inst/inst.html: $(INSTFILES) perl/distutils.perl
	$(MKISILOHTML) --dir isilo/inst inst/inst.tex

isilo/dist/dist.html: $(DISTFILES) perl/distutils.perl
	$(MKISILOHTML) --dir isilo/dist dist/dist.tex

isilo/whatsnew/$(WHATSNEW).html: whatsnew/$(WHATSNEW).tex
	$(MKISILOHTML) --dir isilo/whatsnew whatsnew/$(WHATSNEW).tex

# These are useful if you need to transport the iSilo-ready HTML to
# another machine to perform the conversion:

isilozip:  isilo-html-$(RELEASE).zip

isilo-html-$(RELEASE).zip:	$(ISILOINDEXFILES)
	rm -f $@
	cd isilo && \
		zip -q -9 ../$@ */*.css */*.html */*.txt


# webchecker needs an extra flag to process the huge index from the libref
WEBCHECKER=$(PYTHON) ../Tools/webchecker/webchecker.py
HTMLBASE=  file:`pwd`/html

webcheck: $(ALLHTMLFILES)
	$(WEBCHECKER) $(HTMLBASE)/api/
	$(WEBCHECKER) $(HTMLBASE)/doc/
	$(WEBCHECKER) $(HTMLBASE)/ext/
	$(WEBCHECKER) -m290000 $(HTMLBASE)/lib/
	$(WEBCHECKER) $(HTMLBASE)/mac/
	$(WEBCHECKER) $(HTMLBASE)/ref/
	$(WEBCHECKER) $(HTMLBASE)/tut/
	$(WEBCHECKER) $(HTMLBASE)/dist/
	$(WEBCHECKER) $(HTMLBASE)/inst/
	$(WEBCHECKER) $(HTMLBASE)/whatsnew/

fastwebcheck: $(ALLHTMLFILES)
	$(WEBCHECKER) -x $(HTMLBASE)/api/
	$(WEBCHECKER) -x $(HTMLBASE)/doc/
	$(WEBCHECKER) -x $(HTMLBASE)/ext/
	$(WEBCHECKER) -x -m290000 $(HTMLBASE)/lib/
	$(WEBCHECKER) -x $(HTMLBASE)/mac/
	$(WEBCHECKER) -x $(HTMLBASE)/ref/
	$(WEBCHECKER) -x $(HTMLBASE)/tut/
	$(WEBCHECKER) -x $(HTMLBASE)/dist/
	$(WEBCHECKER) -x $(HTMLBASE)/inst/
	$(WEBCHECKER) -x $(HTMLBASE)/whatsnew/


# Release packaging targets:

paper-$(PAPER)/README: $(PSFILES) $(TOOLSDIR)/getpagecounts
	cd paper-$(PAPER) && ../$(TOOLSDIR)/getpagecounts -r $(RELEASE) >../$@

info-$(RELEASE).tgz: info
	cd $(INFODIR) && tar cf - README python.dir python-*.info* \
		| gzip -9 >$@

info-$(RELEASE).tar.bz2: info
	cd $(INFODIR) && tar cf - README python.dir python-*.info* \
		| bzip2 -9 >$@

latex-$(RELEASE).tgz:
	$(PYTHON) $(TOOLSDIR)/mksourcepkg --gzip $(RELEASE)

latex-$(RELEASE).tar.bz2:
	$(PYTHON) $(TOOLSDIR)/mksourcepkg --bzip2 $(RELEASE)

latex-$(RELEASE).zip:
	rm -f $@
	$(PYTHON) $(TOOLSDIR)/mksourcepkg --zip $(RELEASE)

pdf-$(PAPER)-$(RELEASE).tar: $(PDFFILES)
	rm -f $@
	mkdir Python-Docs-$(RELEASE)
	cp paper-$(PAPER)/*.pdf Python-Docs-$(RELEASE)
	tar cf $@ Python-Docs-$(RELEASE)
	rm -r Python-Docs-$(RELEASE)

pdf-$(PAPER)-$(RELEASE).tgz: pdf-$(PAPER)-$(RELEASE).tar
	gzip -9 <$? >$@

pdf-$(PAPER)-$(RELEASE).tar.bz2: pdf-$(PAPER)-$(RELEASE).tar
	bzip2 -9 <$? >$@

pdf-$(PAPER)-$(RELEASE).zip: pdf
	rm -f $@
	mkdir Python-Docs-$(RELEASE)
	cp paper-$(PAPER)/*.pdf Python-Docs-$(RELEASE)
	zip -q -r -9 $@ Python-Docs-$(RELEASE)
	rm -r Python-Docs-$(RELEASE)

postscript-$(PAPER)-$(RELEASE).tar: $(PSFILES) paper-$(PAPER)/README
	rm -f $@
	mkdir Python-Docs-$(RELEASE)
	cp paper-$(PAPER)/*.ps Python-Docs-$(RELEASE)
	cp paper-$(PAPER)/README Python-Docs-$(RELEASE)
	tar cf $@ Python-Docs-$(RELEASE)
	rm -r Python-Docs-$(RELEASE)

postscript-$(PAPER)-$(RELEASE).tar.bz2: postscript-$(PAPER)-$(RELEASE).tar
	bzip2 -9 <$< >$@

postscript-$(PAPER)-$(RELEASE).tgz: postscript-$(PAPER)-$(RELEASE).tar
	gzip -9 <$< >$@

postscript-$(PAPER)-$(RELEASE).zip: $(PSFILES) paper-$(PAPER)/README
	rm -f $@
	mkdir Python-Docs-$(RELEASE)
	cp paper-$(PAPER)/*.ps Python-Docs-$(RELEASE)
	cp paper-$(PAPER)/README Python-Docs-$(RELEASE)
	zip -q -r -9 $@ Python-Docs-$(RELEASE)
	rm -r Python-Docs-$(RELEASE)

HTMLPKGFILES=*.html */*.css */*.html */*.gif */*.txt

html-$(RELEASE).tar:	$(ALLHTMLFILES) $(HTMLCSSFILES)
	mkdir Python-Docs-$(RELEASE)
	cd html && tar cf ../temp.tar $(HTMLPKGFILES)
	cd Python-Docs-$(RELEASE) && tar xf ../temp.tar
	rm temp.tar
	tar cf html-$(RELEASE).tar Python-Docs-$(RELEASE)
	rm -r Python-Docs-$(RELEASE)

html-$(RELEASE).tgz:	html-$(RELEASE).tar
	gzip -9 <$? >$@

html-$(RELEASE).tar.bz2: html-$(RELEASE).tar
	bzip2 -9 <$? >$@

html-$(RELEASE).zip:	$(ALLHTMLFILES) $(HTMLCSSFILES)
	rm -f $@
	mkdir Python-Docs-$(RELEASE)
	cd html && tar cf ../temp.tar $(HTMLPKGFILES)
	cd Python-Docs-$(RELEASE) && tar xf ../temp.tar
	rm temp.tar
	zip -q -r -9 $@ Python-Docs-$(RELEASE)
	rm -r Python-Docs-$(RELEASE)

isilo-$(RELEASE).zip:	isilo
	rm -f $@
	mkdir Python-Docs-$(RELEASE)
	cp isilo/python-*.pdb Python-Docs-$(RELEASE)
	zip -q -r -9 $@ Python-Docs-$(RELEASE)
	rm -r Python-Docs-$(RELEASE)


# convenience targets:

tarhtml:	html-$(RELEASE).tgz
tarinfo:	info-$(RELEASE).tgz
tarps:		postscript-$(PAPER)-$(RELEASE).tgz
tarpdf:		pdf-$(PAPER)-$(RELEASE).tgz
tarlatex:	latex-$(RELEASE).tgz

tarballs:	tarpdf tarps tarhtml

ziphtml:	html-$(RELEASE).zip
zipps:		postscript-$(PAPER)-$(RELEASE).zip
zippdf:		pdf-$(PAPER)-$(RELEASE).zip
ziplatex:	latex-$(RELEASE).zip
zipisilo:	isilo-$(RELEASE).zip

zips:		zippdf zipps ziphtml

bziphtml:	html-$(RELEASE).tar.bz2
bzipinfo:	info-$(RELEASE).tar.bz2
bzipps:		postscript-$(PAPER)-$(RELEASE).tar.bz2
bzippdf:	pdf-$(PAPER)-$(RELEASE).tar.bz2
bziplatex:	latex-$(RELEASE).tar.bz2

bzips:		bzippdf bzipps bziphtml

disthtml:	tarhtml bziphtml ziphtml
distinfo:	tarinfo bzipinfo
distps:		tarps bzipps zipps
distpdf:	tarpdf bzippdf zippdf
distlatex:	tarlatex bziplatex ziplatex

paperdist:	distpdf distps
edist:		disthtml zipisilo

distfiles:	paperdist edist
	$(TOOLSDIR)/mksourcepkg --all $(RELEASE)


# Housekeeping targets

# Remove temporary files; all except the following:
# - sources: .tex, .bib, .sty, *.cls
# - useful results: .dvi, .pdf, .ps, .texi, .info
clean:
	rm -f html-$(RELEASE).tar
	cd $(INFODIR) && $(MAKE) clean

# Remove temporaries as well as final products
clobber:
	rm -f html-$(RELEASE).tar
	rm -f html-$(RELEASE).tgz info-$(RELEASE).tgz
	rm -f pdf-$(RELEASE).tgz postscript-$(RELEASE).tgz
	rm -f latex-$(RELEASE).tgz html-$(RELEASE).zip
	rm -f pdf-$(RELEASE).zip postscript-$(RELEASE).zip
	rm -f $(DVIFILES) $(PSFILES) $(PDFFILES)
	cd $(INFODIR) && $(MAKE) clobber
	rm -f paper-$(PAPER)/*.tex paper-$(PAPER)/*.ind paper-$(PAPER)/*.idx
	rm -f paper-$(PAPER)/*.l2h paper-$(PAPER)/*.how paper-$(PAPER)/README
	rm -rf html/index.html html/modindex.html html/acks.html
	rm -rf html/api/ html/doc/ html/ext/ html/lib/ html/mac/
	rm -rf html/ref/ html/tut/ html/inst/ html/dist/
	rm -rf html/whatsnew/
	rm -rf isilo/api/ isilo/doc/ isilo/ext/ isilo/lib/ isilo/mac/
	rm -rf isilo/ref/ isilo/tut/ isilo/inst/ isilo/dist/
	rm -rf isilo/whatsnew/
	rm -f isilo/python-*.pdb isilo-$(RELEASE).zip

realclean distclean:  clobber
