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