Updates to SCons development system admin scripts:
[scons.git] / bin / scons_dev_master.py
1 #!/bin/sh
2 #
3
4 # A script for turning a generic Ubuntu system into a master for
5 # SCons development.
6
7 import getopt
8 import sys
9
10 from Command import CommandRunner, Usage
11
12 INITIAL_PACKAGES = [
13     'subversion',
14 ]
15
16 INSTALL_PACKAGES = [
17     'wget',
18 ]
19
20 PYTHON_PACKAGES = [
21     'g++',
22     'gcc',
23     'make',
24     'zlib1g-dev',
25 ]
26
27 BUILDING_PACKAGES = [
28     'docbook',
29     'docbook-dsssl',
30     'docbook-utils',
31     'docbook-xml',
32     'groff-base',
33     'jade',
34     'jadetex',
35     'man2html',
36     'python-epydoc',
37     'rpm',
38     'sp',
39     'tar',
40
41     # additional packages that Bill Deegan's web page suggests
42     #'docbook-to-man',
43     #'docbook-xsl',
44     #'docbook2x',
45     #'tetex-bin',
46     #'tetex-latex',
47 ]
48
49 DOCUMENTATION_PACKAGES = [
50     'docbook-doc',
51     'epydoc-doc',
52     'gcc-doc',
53     'pkg-config',
54     'python-doc',
55     'sun-java5-doc',
56     'sun-java6-doc',
57     'swig-doc',
58     'texlive-doc',
59 ]
60
61 TESTING_PACKAGES = [
62     'bison',
63     'cssc',
64     'cvs',
65     'flex',
66     'g++',
67     'gcc',
68     'gcj',
69     'ghostscript',
70     'libgcj7-dev',
71     'm4',
72     'openssh-client',
73     'openssh-server',
74     'python-profiler',
75     'rcs',
76     'rpm',
77     'sun-java5-jdk',
78     'sun-java6-jdk',
79     'swig',
80     'texlive-base-bin',
81     'texlive-latex-base',
82     'texlive-latex-extra',
83     'zip',
84 ]
85
86 default_args = [
87     'upgrade',
88     'checkout',
89     'building',
90     'testing',
91     'python-versions',
92     'scons-versions',
93 ]
94
95 def main(argv=None):
96     if argv is None:
97         argv = sys.argv
98
99     short_options = 'hnqy'
100     long_options = ['help', 'no-exec', 'password=', 'quiet', 'username=',
101                     'yes', 'assume-yes']
102
103     helpstr = """\
104 Usage:  scons_dev_master.py [-hnqy] [--password PASSWORD] [--username USER]
105                             [ACTIONS ...]
106
107     ACTIONS (in default order):
108         upgrade                 Upgrade the system
109         checkout                Check out SCons
110         building                Install packages for building SCons
111         testing                 Install packages for testing SCons
112         scons-versions          Install versions of SCons
113         python-versions         Install versions of Python
114 """
115
116     scons_url = 'http://scons.tigris.org/svn/scons/trunk'
117     sudo = 'sudo'
118     password = '""'
119     username = 'guest'
120     yesflag = ''
121
122     try:
123         try:
124             opts, args = getopt.getopt(argv[1:], short_options, long_options)
125         except getopt.error, msg:
126             raise Usage(msg)
127
128         for o, a in opts:
129             if o in ('-h', '--help'):
130                 print helpstr
131                 sys.exit(0)
132             elif o in ('-n', '--no-exec'):
133                 CommandRunner.execute = CommandRunner.do_not_execute
134             elif o in ('--password'):
135                 password = a
136             elif o in ('-q', '--quiet'):
137                 CommandRunner.display = CommandRunner.do_not_display
138             elif o in ('--username'):
139                 username = a
140             elif o in ('-y', '--yes', '--assume-yes'):
141                 yesflag = o
142     except Usage, err:
143         sys.stderr.write(str(err.msg) + '\n')
144         sys.stderr.write('use -h to get help\n')
145         return 2
146
147     if not args:
148         args = default_args
149
150     initial_packages = ' '.join(INITIAL_PACKAGES)
151     install_packages = ' '.join(INSTALL_PACKAGES)
152     building_packages = ' '.join(BUILDING_PACKAGES)
153     testing_packages = ' '.join(TESTING_PACKAGES)
154     python_packages = ' '.join(PYTHON_PACKAGES)
155
156     cmd = CommandRunner(locals())
157
158     for arg in args:
159         if arg == 'upgrade':
160             cmd.run('%(sudo)s apt-get %(yesflag)s upgrade')
161         elif arg == 'checkout':
162             cmd.run('%(sudo)s apt-get %(yesflag)s install %(initial_packages)s')
163             cmd.run('svn co --username guest --password "" %(scons_url)s')
164         elif arg == 'building':
165             cmd.run('%(sudo)s apt-get %(yesflag)s install %(building_packages)s')
166         elif arg == 'testing':
167             cmd.run('%(sudo)s apt-get %(yesflag)s install %(testing_packages)s')
168         elif arg == 'python-versions':
169             if install_packages:
170                 cmd.run('%(sudo)s apt-get %(yesflag)s install %(install_packages)s')
171                 install_packages = None
172             cmd.run('%(sudo)s apt-get %(yesflag)s install %(python_packages)s')
173             try:
174                 import install_python
175             except ImportError:
176                 msg = 'Could not import install_python; skipping python-versions.\n'
177                 sys.stderr.write(msg)
178             else:
179                 install_python.main(['install_python.py', '-a'])
180         elif arg == 'scons-versions':
181             if install_packages:
182                 cmd.run('%(sudo)s apt-get %(yesflag)s install %(install_packages)s')
183                 install_packages = None
184             try:
185                 import install_scons
186             except ImportError:
187                 msg = 'Could not import install_scons; skipping scons-versions.\n'
188                 sys.stderr.write(msg)
189             else:
190                 install_scons.main(['install_scons.py', '-a'])
191         else:
192             msg = '%s:  unknown argument %s\n'
193             sys.stderr.write(msg % (argv[0], repr(arg)))
194             sys.exit(1)
195
196 if __name__ == "__main__":
197     sys.exit(main())