blob: 9dbb8dc720c03bd0e06753c267c34fce680a97a1 [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 Drake77b76b62000-10-10 19:35:40 +000039rx = re.compile(r":ext:(?:[a-zA-Z0-9]+)@cvs\.([a-zA-Z0-9]+).sourceforge.net:"
40 r"/cvsroot/\1")
Fred Drake9f2b4201999-08-02 20:19:17 +000041
42
43def main():
44 global quiet
45 try:
46 opts, args = getopt.getopt(sys.argv[1:], "abgtzq",
47 ["all", "bzip2", "gzip", "tools", "zip",
48 "quiet"])
49 except getopt.error, e:
50 usage(warning=str(e))
51 sys.exit(2)
52 if len(args) not in (1, 2):
53 usage(warning="wrong number of parameters")
54 sys.exit(2)
55 tools = 0
56 formats = {}
57 for opt, arg in opts:
58 if opt in ("-t", "--tools"):
59 tools = 1
60 elif opt in ("-q", "--quiet"):
61 quiet = quiet + 1
62 elif opt in ("-b", "--bzip2"):
63 formats["bzip2"] = 1
64 elif opt in ("-g", "--gzip"):
65 formats["gzip"] = 1
66 elif opt in ("-z", "--zip"):
67 formats["zip"] = 1
68 elif opt in ("-a", "--all"):
69 formats["bzip2"] = 1
70 formats["gzip"] = 1
71 formats["zip"] = 1
Fred Drake9f2b4201999-08-02 20:19:17 +000072 if formats:
73 # make order human-predictable
Fred Drakebc3974c2001-01-22 21:34:20 +000074 formats = formats.keys()
Fred Drake9f2b4201999-08-02 20:19:17 +000075 formats.sort()
76 else:
77 formats = ["gzip"]
78 release = args[0]
79 cvstag = None
80 if len(args) > 1:
81 cvstag = args[1]
82 tempdir = tempfile.mktemp()
83 os.mkdir(tempdir)
Fred Drake1a0199a2002-08-09 20:20:50 +000084 pkgdir = os.path.join(tempdir, "Python-Docs-" + release)
Fred Drake77b76b62000-10-10 19:35:40 +000085 os.mkdir(pkgdir)
86 pwd = os.getcwd()
87 mydir = os.path.abspath(os.path.dirname(sys.argv[0]))
88 info = cvsinfo.RepositoryInfo(mydir)
89 cvsroot = info.get_cvsroot()
90 m = rx.match(cvsroot)
91 if m:
92 # If this is an authenticated SourceForge repository, convert to
93 # anonymous usage for the export/checkout, since that avoids the
94 # SSH overhead.
95 group = m.group(1)
96 cvsroot = ":pserver:anonymous@cvs.%s.sourceforge.net:/cvsroot/%s" \
97 % (group, group)
98 # For some reason, SourceForge/CVS doesn't seem to care that we
99 # might not have done a "cvs login" to the anonymous server.
100 # That avoids a lot of painful gunk here.
Fred Drake1a0199a2002-08-09 20:20:50 +0000101 os.chdir(tempdir)
Fred Drake77b76b62000-10-10 19:35:40 +0000102 if not quiet:
103 print "--- current directory is:", pkgdir
Fred Drake9f2b4201999-08-02 20:19:17 +0000104 if cvstag:
Fred Drake1a0199a2002-08-09 20:20:50 +0000105 run("cvs -d%s export -r %s -d Python-Docs-%s python/dist/src/Doc"
106 % (cvsroot, cvstag, release))
Fred Drake9f2b4201999-08-02 20:19:17 +0000107 else:
Fred Drake1a0199a2002-08-09 20:20:50 +0000108 run("cvs -Q -d%s checkout -d Python-Docs-%s python/dist/src/Doc"
109 % (cvsroot, release))
Fred Drake9f2b4201999-08-02 20:19:17 +0000110 # remove CVS directories
Fred Drake24da4772001-02-02 15:48:00 +0000111 for p in ('*/CVS', '*/*/CVS', '*/*/*/CVS'):
Fred Drake9f2b4201999-08-02 20:19:17 +0000112 map(shutil.rmtree, glob.glob(p))
Fred Drakec8083cf2003-09-27 22:07:05 +0000113 for f in ('.cvsignore', '*/.cvsignore'):
114 map(os.unlink, glob.glob(f))
115
116 # Copy in the version informtation, if we're not just going to
117 # rip it back out:
118 if not tools:
119 if not os.path.exists(patchlevel_tex):
120 run(os.path.join(here, "getversioninfo"))
121 dest = os.path.join("Python-Docs-" + release, "commontex",
122 "patchlevel.tex")
123 shutil.copyfile(patchlevel_tex, dest)
124
125 # Copy in the license file:
Fred Drakebc3974c2001-01-22 21:34:20 +0000126 LICENSE = os.path.normpath(
127 os.path.join(mydir, os.pardir, os.pardir, "LICENSE"))
Fred Drake1a0199a2002-08-09 20:20:50 +0000128 shutil.copyfile(LICENSE, "LICENSE")
Fred Drake9f2b4201999-08-02 20:19:17 +0000129 if tools:
Fred Drake77b76b62000-10-10 19:35:40 +0000130 archive = "doctools-" + release
Fred Drake9f2b4201999-08-02 20:19:17 +0000131 # we don't want the actual documents in this case:
Fred Drake77b76b62000-10-10 19:35:40 +0000132 for d in ("api", "dist", "doc", "ext", "inst",
Fred Drakec8083cf2003-09-27 22:07:05 +0000133 "lib", "mac", "ref", "tut", "commontex"):
Fred Drake1a0199a2002-08-09 20:20:50 +0000134 shutil.rmtree(os.path.join(pkgdir, d))
Fred Drake9f2b4201999-08-02 20:19:17 +0000135 else:
136 archive = "latex-" + release
137
138 # XXX should also remove the .cvsignore files at this point
139
140 os.chdir(tempdir)
Fred Drake77b76b62000-10-10 19:35:40 +0000141 archive = os.path.join(pwd, archive)
Fred Drake9f2b4201999-08-02 20:19:17 +0000142 for format in formats:
143 if format == "bzip2":
Fred Drake1a0199a2002-08-09 20:20:50 +0000144 run("tar cf - Python-Docs-%s | bzip2 -9 >%s.tar.bz2"
Fred Drake9f2b4201999-08-02 20:19:17 +0000145 % (release, archive))
146 elif format == "gzip":
Fred Drake1a0199a2002-08-09 20:20:50 +0000147 run("tar cf - Python-Docs-%s | gzip -9 >%s.tgz"
Fred Drake9f2b4201999-08-02 20:19:17 +0000148 % (release, archive))
149 elif format == "zip":
Fred Drakeba828782000-04-03 04:19:14 +0000150 if os.path.exists(archive + ".zip"):
151 os.unlink(archive + ".zip")
Fred Drake1a0199a2002-08-09 20:20:50 +0000152 run("zip -q -r9 %s.zip Python-Docs-%s"
Fred Drake9f2b4201999-08-02 20:19:17 +0000153 % (archive, release))
154
155 # clean up the work area:
Fred Drake77b76b62000-10-10 19:35:40 +0000156 os.chdir(pwd)
Fred Drake9f2b4201999-08-02 20:19:17 +0000157 shutil.rmtree(tempdir)
158
159
160def run(cmd):
161 if quiet < 2:
162 print "+++", cmd
163 if quiet:
Fred Drake77b76b62000-10-10 19:35:40 +0000164 cmd = "%s >/dev/null" % cmd
Fred Drake9f2b4201999-08-02 20:19:17 +0000165 rc = os.system(cmd)
166 if rc:
167 sys.exit(rc)
168
169
170def usage(warning=None):
171 stdout = sys.stdout
172 sys.stdout = sys.stderr
173 program = os.path.basename(sys.argv[0])
174 try:
175 if warning:
176 print "%s: %s\n" % (program, warning)
177 print __doc__ % {"program": program}
178 finally:
179 sys.stdout = stdout
180
181
182if __name__ == "__main__":
183 main()