http://scons.tigris.org/issues/show_bug.cgi?id=2345
[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     'python-all-dev',
76     'rcs',
77     'rpm',
78     'sun-java5-jdk',
79     'sun-java6-jdk',
80     'swig',
81     'texlive-base-bin',
82     'texlive-extra-utils',
83     'texlive-latex-base',
84     'texlive-latex-extra',
85     'zip',
86 ]
87
88 BUILDBOT_PACKAGES = [
89     'buildbot',
90     'cron',
91 ]
92
93 default_args = [
94     'upgrade',
95     'checkout',
96     'building',
97     'testing',
98     'python-versions',
99     'scons-versions',
100 ]
101
102 def main(argv=None):
103     if argv is None:
104         argv = sys.argv
105
106     short_options = 'hnqy'
107     long_options = ['help', 'no-exec', 'password=', 'quiet', 'username=',
108                     'yes', 'assume-yes']
109
110     helpstr = """\
111 Usage:  scons_dev_master.py [-hnqy] [--password PASSWORD] [--username USER]
112                             [ACTIONS ...]
113
114     ACTIONS (in default order):
115         upgrade                 Upgrade the system
116         checkout                Check out SCons
117         building                Install packages for building SCons
118         testing                 Install packages for testing SCons
119         scons-versions          Install versions of SCons
120         python-versions         Install versions of Python
121
122     ACTIONS (optional):
123         buildbot                Install packages for running BuildBot
124 """
125
126     scons_url = 'http://scons.tigris.org/svn/scons/trunk'
127     sudo = 'sudo'
128     password = '""'
129     username = 'guest'
130     yesflag = ''
131
132     try:
133         try:
134             opts, args = getopt.getopt(argv[1:], short_options, long_options)
135         except getopt.error, msg:
136             raise Usage(msg)
137
138         for o, a in opts:
139             if o in ('-h', '--help'):
140                 print helpstr
141                 sys.exit(0)
142             elif o in ('-n', '--no-exec'):
143                 CommandRunner.execute = CommandRunner.do_not_execute
144             elif o in ('--password'):
145                 password = a
146             elif o in ('-q', '--quiet'):
147                 CommandRunner.display = CommandRunner.do_not_display
148             elif o in ('--username'):
149                 username = a
150             elif o in ('-y', '--yes', '--assume-yes'):
151                 yesflag = o
152     except Usage, err:
153         sys.stderr.write(str(err.msg) + '\n')
154         sys.stderr.write('use -h to get help\n')
155         return 2
156
157     if not args:
158         args = default_args
159
160     initial_packages = ' '.join(INITIAL_PACKAGES)
161     install_packages = ' '.join(INSTALL_PACKAGES)
162     building_packages = ' '.join(BUILDING_PACKAGES)
163     testing_packages = ' '.join(TESTING_PACKAGES)
164     buildbot_packages = ' '.join(BUILDBOT_PACKAGES)
165     python_packages = ' '.join(PYTHON_PACKAGES)
166
167     cmd = CommandRunner(locals())
168
169     for arg in args:
170         if arg == 'upgrade':
171             cmd.run('%(sudo)s apt-get %(yesflag)s upgrade')
172         elif arg == 'checkout':
173             cmd.run('%(sudo)s apt-get %(yesflag)s install %(initial_packages)s')
174             cmd.run('svn co --username guest --password "" %(scons_url)s')
175         elif arg == 'building':
176             cmd.run('%(sudo)s apt-get %(yesflag)s install %(building_packages)s')
177         elif arg == 'testing':
178             cmd.run('%(sudo)s apt-get %(yesflag)s install %(testing_packages)s')
179         elif arg == 'buildbot':
180             cmd.run('%(sudo)s apt-get %(yesflag)s install %(buildbot_packages)s')
181         elif arg == 'python-versions':
182             if install_packages:
183                 cmd.run('%(sudo)s apt-get %(yesflag)s install %(install_packages)s')
184                 install_packages = None
185             cmd.run('%(sudo)s apt-get %(yesflag)s install %(python_packages)s')
186             try:
187                 import install_python
188             except ImportError:
189                 msg = 'Could not import install_python; skipping python-versions.\n'
190                 sys.stderr.write(msg)
191             else:
192                 install_python.main(['install_python.py', '-a'])
193         elif arg == 'scons-versions':
194             if install_packages:
195                 cmd.run('%(sudo)s apt-get %(yesflag)s install %(install_packages)s')
196                 install_packages = None
197             try:
198                 import install_scons
199             except ImportError:
200                 msg = 'Could not import install_scons; skipping scons-versions.\n'
201                 sys.stderr.write(msg)
202             else:
203                 install_scons.main(['install_scons.py', '-a'])
204         else:
205             msg = '%s:  unknown argument %s\n'
206             sys.stderr.write(msg % (argv[0], repr(arg)))
207             sys.exit(1)
208
209 if __name__ == "__main__":
210     sys.exit(main())
211
212 # Local Variables:
213 # tab-width:4
214 # indent-tabs-mode:nil
215 # End:
216 # vim: set expandtab tabstop=4 shiftwidth=4: