blob: cad2b442b0518f1a74a93c975994f47eab49a21b [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 Drake77b76b62000-10-10 19:35:40 +000027import cvsinfo
28
Fred Drakec8083cf2003-09-27 22:07:05 +000029try:
30 __file__
31except NameError:
32 __file__ = sys.argv[0]
33
34tools = os.path.dirname(os.path.abspath(__file__))
35Doc = os.path.dirname(tools)
36patchlevel_tex = os.path.join(Doc, "commontex", "patchlevel.tex")
Fred Drake9f2b4201999-08-02 20:19:17 +000037
38quiet = 0
Fred Drake664a2712003-10-03 15:21:38 +000039rx = re.compile(r":ext:(?:[a-zA-Z0-9]+@)?cvs\.([a-zA-Z0-9]+).sourceforge.net:"
Fred Drake77b76b62000-10-10 19:35:40 +000040 r"/cvsroot/\1")
Fred Drake9f2b4201999-08-02 20:19:17 +000041
42
43def main():
44 global quiet
Fred Drake664a2712003-10-03 15:21:38 +000045 anonymous = False
Fred Drake9f2b4201999-08-02 20:19:17 +000046 try:
Fred Drake664a2712003-10-03 15:21:38 +000047 opts, args = getopt.getopt(sys.argv[1:], "Aabgtzq",
Fred Drake9f2b4201999-08-02 20:19:17 +000048 ["all", "bzip2", "gzip", "tools", "zip",
Fred Drake664a2712003-10-03 15:21:38 +000049 "quiet", "anonymous"])
Fred Drake9f2b4201999-08-02 20:19:17 +000050 except getopt.error, e:
51 usage(warning=str(e))
52 sys.exit(2)
53 if len(args) not in (1, 2):
54 usage(warning="wrong number of parameters")
55 sys.exit(2)
56 tools = 0
57 formats = {}
58 for opt, arg in opts:
59 if opt in ("-t", "--tools"):
60 tools = 1
61 elif opt in ("-q", "--quiet"):
62 quiet = quiet + 1
63 elif opt in ("-b", "--bzip2"):
64 formats["bzip2"] = 1
65 elif opt in ("-g", "--gzip"):
66 formats["gzip"] = 1
67 elif opt in ("-z", "--zip"):
68 formats["zip"] = 1
69 elif opt in ("-a", "--all"):
70 formats["bzip2"] = 1
71 formats["gzip"] = 1
72 formats["zip"] = 1
Fred Drake664a2712003-10-03 15:21:38 +000073 elif opt in ("-A", "--anonymous"):
74 anonymous = True
Fred Drake9f2b4201999-08-02 20:19:17 +000075 if formats:
76 # make order human-predictable
Fred Drakebc3974c2001-01-22 21:34:20 +000077 formats = formats.keys()
Fred Drake9f2b4201999-08-02 20:19:17 +000078 formats.sort()
79 else:
80 formats = ["gzip"]
81 release = args[0]
82 cvstag = None
83 if len(args) > 1:
84 cvstag = args[1]
85 tempdir = tempfile.mktemp()
86 os.mkdir(tempdir)
Fred Drake1a0199a2002-08-09 20:20:50 +000087 pkgdir = os.path.join(tempdir, "Python-Docs-" + release)
Fred Drake77b76b62000-10-10 19:35:40 +000088 os.mkdir(pkgdir)
89 pwd = os.getcwd()
90 mydir = os.path.abspath(os.path.dirname(sys.argv[0]))
91 info = cvsinfo.RepositoryInfo(mydir)
92 cvsroot = info.get_cvsroot()
93 m = rx.match(cvsroot)
Fred Drake664a2712003-10-03 15:21:38 +000094 if m and anonymous:
Fred Drake77b76b62000-10-10 19:35:40 +000095 # If this is an authenticated SourceForge repository, convert to
96 # anonymous usage for the export/checkout, since that avoids the
97 # SSH overhead.
98 group = m.group(1)
99 cvsroot = ":pserver:anonymous@cvs.%s.sourceforge.net:/cvsroot/%s" \
100 % (group, group)
101 # For some reason, SourceForge/CVS doesn't seem to care that we
102 # might not have done a "cvs login" to the anonymous server.
103 # That avoids a lot of painful gunk here.
Fred Drake1a0199a2002-08-09 20:20:50 +0000104 os.chdir(tempdir)
Fred Drake77b76b62000-10-10 19:35:40 +0000105 if not quiet:
106 print "--- current directory is:", pkgdir
Fred Drake9f2b4201999-08-02 20:19:17 +0000107 if cvstag:
Fred Drake1a0199a2002-08-09 20:20:50 +0000108 run("cvs -d%s export -r %s -d Python-Docs-%s python/dist/src/Doc"
109 % (cvsroot, cvstag, release))
Fred Drake9f2b4201999-08-02 20:19:17 +0000110 else:
Fred Drake1a0199a2002-08-09 20:20:50 +0000111 run("cvs -Q -d%s checkout -d Python-Docs-%s python/dist/src/Doc"
112 % (cvsroot, release))
Fred Drake9f2b4201999-08-02 20:19:17 +0000113 # remove CVS directories
Fred Drake24da4772001-02-02 15:48:00 +0000114 for p in ('*/CVS', '*/*/CVS', '*/*/*/CVS'):
Fred Drake9f2b4201999-08-02 20:19:17 +0000115 map(shutil.rmtree, glob.glob(p))
Fred Drakec8083cf2003-09-27 22:07:05 +0000116 for f in ('.cvsignore', '*/.cvsignore'):
117 map(os.unlink, glob.glob(f))
118
119 # Copy in the version informtation, if we're not just going to
120 # rip it back out:
121 if not tools:
122 if not os.path.exists(patchlevel_tex):
123 run(os.path.join(here, "getversioninfo"))
124 dest = os.path.join("Python-Docs-" + release, "commontex",
125 "patchlevel.tex")
126 shutil.copyfile(patchlevel_tex, dest)
127
128 # Copy in the license file:
Fred Drakebc3974c2001-01-22 21:34:20 +0000129 LICENSE = os.path.normpath(
130 os.path.join(mydir, os.pardir, os.pardir, "LICENSE"))
Fred Drake1a0199a2002-08-09 20:20:50 +0000131 shutil.copyfile(LICENSE, "LICENSE")
Fred Drake9f2b4201999-08-02 20:19:17 +0000132 if tools:
Fred Drake77b76b62000-10-10 19:35:40 +0000133 archive = "doctools-" + release
Fred Drake9f2b4201999-08-02 20:19:17 +0000134 # we don't want the actual documents in this case:
Fred Drake77b76b62000-10-10 19:35:40 +0000135 for d in ("api", "dist", "doc", "ext", "inst",
Fred Drakec8083cf2003-09-27 22:07:05 +0000136 "lib", "mac", "ref", "tut", "commontex"):
Fred Drake1a0199a2002-08-09 20:20:50 +0000137 shutil.rmtree(os.path.join(pkgdir, d))
Fred Drake9f2b4201999-08-02 20:19:17 +0000138 else:
139 archive = "latex-" + release
140
141 # XXX should also remove the .cvsignore files at this point
142
143 os.chdir(tempdir)
Fred Drake77b76b62000-10-10 19:35:40 +0000144 archive = os.path.join(pwd, archive)
Fred Drake9f2b4201999-08-02 20:19:17 +0000145 for format in formats:
146 if format == "bzip2":
Fred Drake1a0199a2002-08-09 20:20:50 +0000147 run("tar cf - Python-Docs-%s | bzip2 -9 >%s.tar.bz2"
Fred Drake9f2b4201999-08-02 20:19:17 +0000148 % (release, archive))
149 elif format == "gzip":
Fred Drake1a0199a2002-08-09 20:20:50 +0000150 run("tar cf - Python-Docs-%s | gzip -9 >%s.tgz"
Fred Drake9f2b4201999-08-02 20:19:17 +0000151 % (release, archive))
152 elif format == "zip":
Fred Drakeba828782000-04-03 04:19:14 +0000153 if os.path.exists(archive + ".zip"):
154 os.unlink(archive + ".zip")
Fred Drake1a0199a2002-08-09 20:20:50 +0000155 run("zip -q -r9 %s.zip Python-Docs-%s"
Fred Drake9f2b4201999-08-02 20:19:17 +0000156 % (archive, release))
157
158 # clean up the work area:
Fred Drake77b76b62000-10-10 19:35:40 +0000159 os.chdir(pwd)
Fred Drake9f2b4201999-08-02 20:19:17 +0000160 shutil.rmtree(tempdir)
161
162
163def run(cmd):
164 if quiet < 2:
165 print "+++", cmd
166 if quiet:
Fred Drake77b76b62000-10-10 19:35:40 +0000167 cmd = "%s >/dev/null" % cmd
Fred Drake9f2b4201999-08-02 20:19:17 +0000168 rc = os.system(cmd)
169 if rc:
170 sys.exit(rc)
171
172
173def usage(warning=None):
174 stdout = sys.stdout
175 sys.stdout = sys.stderr
176 program = os.path.basename(sys.argv[0])
177 try:
178 if warning:
179 print "%s: %s\n" % (program, warning)
180 print __doc__ % {"program": program}
181 finally:
182 sys.stdout = stdout
183
184
185if __name__ == "__main__":
186 main()