1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
#!/usr/bin/env python
#
# A script for unpacking and installing different historic versions of
# Python in a consistent manner for side-by-side development testing.
#
# This was written for a Linux system (specifically Ubuntu) but should
# be reasonably generic to any POSIX-style system with a /usr/local
# hierarchy.
import getopt
import os
import shutil
import sys
from Command import CommandRunner, Usage
all_versions = [
#'1.5.2', # no longer available at python.org
'2.0.1',
'2.1.3',
'2.2',
'2.3.7',
'2.4.5',
#'2.5.2',
'2.6',
]
def main(argv=None):
if argv is None:
argv = sys.argv
all = False
downloads_dir = 'Downloads'
downloads_url = 'http://www.python.org/ftp/python'
sudo = 'sudo'
prefix = '/usr/local'
short_options = 'ad:hnp:q'
long_options = ['all', 'help', 'no-exec', 'prefix=', 'quiet']
helpstr = """\
sage: installs-scons.py [-ahnq] [-d DIR] [-p PREFIX] [VERSION ...]
-a, --all Install all SCons versions.
-d DIR, --downloads=DIR Downloads directory.
-h, --help Print this help and exit
-n, --no-exec No execute, just print the command line
-p PREFIX, --prefix=PREFIX Installation prefix.
-q, --quiet Quiet, don't print the command line
"""
try:
try:
opts, args = getopt.getopt(argv[1:], short_options, long_options)
except getopt.error, msg:
raise Usage(msg)
for o, a in opts:
if o in ('-a', '--all'):
all = True
elif o in ('-d', '--downloads'):
downloads_dir = a
elif o in ('-h', '--help'):
print helpstr
sys.exit(0)
elif o in ('-n', '--no-exec'):
CommandRunner.execute = CommandRunner.do_not_execute
elif o in ('-p', '--prefix'):
prefix = a
elif o in ('-q', '--quiet'):
CommandRunner.display = CommandRunner.do_not_display
except Usage, err:
sys.stderr.write(str(err.msg) + '\n')
sys.stderr.write('use -h to get help\n')
return 2
if all:
if args:
msg = 'install-scons.py: -a and version arguments both specified'
sys.stderr.write(msg)
sys.exit(1)
args = all_versions
cmd = CommandRunner()
for version in args:
python = 'Python-' + version
tar_gz = os.path.join(downloads_dir, python + '.tgz')
tar_gz_url = os.path.join(downloads_url, version, python + '.tgz')
if (version.startswith('1.5') or
version.startswith('1.6') or
version.startswith('2.0')):
configureflags = '--with-threads'
else:
configureflags = ''
cmd.subst_dictionary(locals())
if not os.path.exists(tar_gz):
if not os.path.exists(downloads_dir):
cmd.run((os.mkdir, downloads_dir),
'mkdir %(downloads_dir)s')
cmd.run('wget -O %(tar_gz)s %(tar_gz_url)s')
cmd.run('tar zxf %(tar_gz)s')
cmd.run((os.chdir, python), 'cd %(python)s')
if (version.startswith('1.6') or
version.startswith('2.0')):
def edit_modules_setup_in():
content = open('Modules/Setup.in', 'r').read()
content = content.replace('\n#zlib', '\nzlib')
open('Modules/Setup.in', 'w').write(content)
display = 'ed Modules/Setup.in <<EOF\ns/^#zlib/zlib/\nw\nq\nEOF\n'
cmd.run((edit_modules_setup_in,), display)
cmd.run('./configure --prefix=%(prefix)s %(configureflags)s 2>&1 | tee configure.out')
cmd.run('make 2>&1 | tee make.out')
cmd.run('%(sudo)s make install')
cmd.run('%(sudo)s rm -f %(prefix)s/bin/{idle,pydoc,python,python-config,smtpd.py}')
cmd.run((os.chdir, '..'), 'cd ..')
cmd.run((shutil.rmtree, python), 'rm -rf %(python)s')
if __name__ == "__main__":
sys.exit(main())
|