blob: 4b21f7747f36835efc4bca0cd3f9e676d4e49c68 [file] [log] [blame]
Fred Drake9f2b4201999-08-02 20:19:17 +00001#! /usr/bin/env python
2# -*- Python -*-
3
4"""%(program)s - script to create the latex source distribution
5
6usage:
7 %(program)s [-t|--tools] release [tag]
8
9with -t|--tools: doesn't include the documents, only the framework
10
11without [tag]: generate from the current version that's checked in
12 (*NOT* what's in the current directory!)
13
14with [tag]: generate from the named tag
15"""
16#* should be modified to get the Python version number automatically
17# from the Makefile or someplace.
18
Fred Drake9f2b4201999-08-02 20:19:17 +000019import getopt
20import glob
21import os
Fred Drake77b76b62000-10-10 19:35:40 +000022import re
Fred Drake9f2b4201999-08-02 20:19:17 +000023import shutil
24import sys
25import tempfile
26
Fred Drakec8083cf2003-09-27 22:07:05 +000027try:
28 __file__
29except NameError:
30 __file__ = sys.argv[0]
31
32tools = os.path.dirname(os.path.abspath(__file__))
33Doc = os.path.dirname(tools)
34patchlevel_tex = os.path.join(Doc, "commontex", "patchlevel.tex")
Fred Drake9f2b4201999-08-02 20:19:17 +000035
36quiet = 0
Fred Drake664a2712003-10-03 15:21:38 +000037rx = re.compile(r":ext:(?:[a-zA-Z0-9]+@)?cvs\.([a-zA-Z0-9]+).sourceforge.net:"
Fred Drake77b76b62000-10-10 19:35:40 +000038 r"/cvsroot/\1")
Fred Drake9f2b4201999-08-02 20:19:17 +000039
40
41def main():
42 global quiet
Fred Drake664a2712003-10-03 15:21:38 +000043 anonymous = False
Fred Drake9f2b4201999-08-02 20:19:17 +000044 try:
Fred Drake664a2712003-10-03 15:21:38 +000045 opts, args = getopt.getopt(sys.argv[1:], "Aabgtzq",
Fred Drake9f2b4201999-08-02 20:19:17 +000046 ["all", "bzip2", "gzip", "tools", "zip",
Fred Drake664a2712003-10-03 15:21:38 +000047 "quiet", "anonymous"])
Fred Drake9f2b4201999-08-02 20:19:17 +000048 except getopt.error, e:
49 usage(warning=str(e))
50 sys.exit(2)
51 if len(args) not in (1, 2):
52 usage(warning="wrong number of parameters")
53 sys.exit(2)
54 tools = 0
55 formats = {}
56 for opt, arg in opts:
57 if opt in ("-t", "--tools"):
58 tools = 1
59 elif opt in ("-q", "--quiet"):
60 quiet = quiet + 1
61 elif opt in ("-b", "--bzip2"):
62 formats["bzip2"] = 1
63 elif opt in ("-g", "--gzip"):
64 formats["gzip"] = 1
65 elif opt in ("-z", "--zip"):
66 formats["zip"] = 1
67 elif opt in ("-a", "--all"):
68 formats["bzip2"] = 1
69 formats["gzip"] = 1
70 formats["zip"] = 1
Fred Drake664a2712003-10-03 15:21:38 +000071 elif opt in ("-A", "--anonymous"):
72 anonymous = True
Fred Drake9f2b4201999-08-02 20:19:17 +000073 if formats:
74 # make order human-predictable
Fred Drakebc3974c2001-01-22 21:34:20 +000075 formats = formats.keys()
Fred Drake9f2b4201999-08-02 20:19:17 +000076 formats.sort()
77 else:
78 formats = ["gzip"]
79 release = args[0]
Fred Drakeaaa28df2006-01-02 07:22:12 +000080 svntag = None
Fred Drake9f2b4201999-08-02 20:19:17 +000081 if len(args) > 1:
Fred Drakeaaa28df2006-01-02 07:22:12 +000082 svntag = args[1]
Fred Drake9f2b4201999-08-02 20:19:17 +000083 tempdir = tempfile.mktemp()
84 os.mkdir(tempdir)
Fred Drake1a0199a2002-08-09 20:20:50 +000085 pkgdir = os.path.join(tempdir, "Python-Docs-" + release)
Fred Drake77b76b62000-10-10 19:35:40 +000086 pwd = os.getcwd()
87 mydir = os.path.abspath(os.path.dirname(sys.argv[0]))
Fred Drake1a0199a2002-08-09 20:20:50 +000088 os.chdir(tempdir)
Fred Drake77b76b62000-10-10 19:35:40 +000089 if not quiet:
Fred Drakeaaa28df2006-01-02 07:22:12 +000090 print "--- current directory is:", tempdir
91 if not svntag:
92 svntag = "trunk"
93 svnbase = "http://svn.python.org/projects/python"
94 run("svn export %s/%s/Doc Python-Docs-%s"
95 % (svnbase, svntag, release))
Fred Drakec8083cf2003-09-27 22:07:05 +000096
97 # Copy in the version informtation, if we're not just going to
98 # rip it back out:
99 if not tools:
100 if not os.path.exists(patchlevel_tex):
101 run(os.path.join(here, "getversioninfo"))
102 dest = os.path.join("Python-Docs-" + release, "commontex",
103 "patchlevel.tex")
104 shutil.copyfile(patchlevel_tex, dest)
105
106 # Copy in the license file:
Fred Drakebc3974c2001-01-22 21:34:20 +0000107 LICENSE = os.path.normpath(
108 os.path.join(mydir, os.pardir, os.pardir, "LICENSE"))
Fred Drake1a0199a2002-08-09 20:20:50 +0000109 shutil.copyfile(LICENSE, "LICENSE")
Fred Drake9f2b4201999-08-02 20:19:17 +0000110 if tools:
Fred Drake77b76b62000-10-10 19:35:40 +0000111 archive = "doctools-" + release
Fred Drake9f2b4201999-08-02 20:19:17 +0000112 # we don't want the actual documents in this case:
Fred Drake77b76b62000-10-10 19:35:40 +0000113 for d in ("api", "dist", "doc", "ext", "inst",
Fred Drakec8083cf2003-09-27 22:07:05 +0000114 "lib", "mac", "ref", "tut", "commontex"):
Fred Drake1a0199a2002-08-09 20:20:50 +0000115 shutil.rmtree(os.path.join(pkgdir, d))
Fred Drake9f2b4201999-08-02 20:19:17 +0000116 else:
117 archive = "latex-" + release
118
119 # XXX should also remove the .cvsignore files at this point
120
121 os.chdir(tempdir)
Fred Drake77b76b62000-10-10 19:35:40 +0000122 archive = os.path.join(pwd, archive)
Fred Drake9f2b4201999-08-02 20:19:17 +0000123 for format in formats:
124 if format == "bzip2":
Fred Drake1a0199a2002-08-09 20:20:50 +0000125 run("tar cf - Python-Docs-%s | bzip2 -9 >%s.tar.bz2"
Fred Drake9f2b4201999-08-02 20:19:17 +0000126 % (release, archive))
127 elif format == "gzip":
Fred Drake1a0199a2002-08-09 20:20:50 +0000128 run("tar cf - Python-Docs-%s | gzip -9 >%s.tgz"
Fred Drake9f2b4201999-08-02 20:19:17 +0000129 % (release, archive))
130 elif format == "zip":
Fred Drakeba828782000-04-03 04:19:14 +0000131 if os.path.exists(archive + ".zip"):
132 os.unlink(archive + ".zip")
Fred Drake1a0199a2002-08-09 20:20:50 +0000133 run("zip -q -r9 %s.zip Python-Docs-%s"
Fred Drake9f2b4201999-08-02 20:19:17 +0000134 % (archive, release))
135
136 # clean up the work area:
Fred Drake77b76b62000-10-10 19:35:40 +0000137 os.chdir(pwd)
Fred Drake9f2b4201999-08-02 20:19:17 +0000138 shutil.rmtree(tempdir)
139
140
141def run(cmd):
142 if quiet < 2:
143 print "+++", cmd
144 if quiet:
Fred Drake77b76b62000-10-10 19:35:40 +0000145 cmd = "%s >/dev/null" % cmd
Fred Drake9f2b4201999-08-02 20:19:17 +0000146 rc = os.system(cmd)
147 if rc:
148 sys.exit(rc)
149
150
151def usage(warning=None):
152 stdout = sys.stdout
153 sys.stdout = sys.stderr
154 program = os.path.basename(sys.argv[0])
155 try:
156 if warning:
157 print "%s: %s\n" % (program, warning)
158 print __doc__ % {"program": program}
159 finally:
160 sys.stdout = stdout
161
162
163if __name__ == "__main__":
164 main()