fc9747c692ead4ef330ccc4db147af200c6bc048
[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     'python-doc',
54     'sun-java5-doc',
55     'sun-java6-doc',
56     'swig-doc',
57     'texlive-doc',
58 ]
59
60 TESTING_PACKAGES = [
61     'bison',
62     'cssc',
63     'cvs',
64     'flex',
65     'g++',
66     'gcc',
67     'gcj',
68     'ghostscript',
69     'libgcj7-dev',
70     'm4',
71     'openssh-client',
72     'openssh-server',
73     'python-profiler',
74     'rcs',
75     'rpm',
76     'sun-java5-jdk',
77     'sun-java6-jdk',
78     'swig',
79     'texlive-base-bin',
80     'texlive-latex-base',
81     'texlive-latex-extra',
82     'zip',
83 ]
84
85 default_args = [
86     'upgrade',
87     'checkout',
88     'building',
89     'testing',
90     'python-versions',
91     'scons-versions',
92 ]
93
94 def main(argv=None):
95     if argv is None:
96         argv = sys.argv
97
98     short_options = 'hnqy'
99     long_options = ['help', 'no-exec', 'password=', 'quiet', 'username=',
100                     'yes', 'assume-yes']
101
102     helpstr = """\
103 Usage:  scons_dev_master.py [-hnqy] [--password PASSWORD] [--username USER]
104                             [ACTIONS ...]
105
106     ACTIONS (in default order):
107         upgrade                 Upgrade the system
108         checkout                Check out SCons
109         building                Install packages for building SCons
110         testing                 Install packages for testing SCons
111         scons-versions          Install versions of SCons
112         python-versions         Install versions of Python
113 """
114
115     scons_url = 'http://scons.tigris.org/svn/scons/trunk'
116     sudo = 'sudo'
117     password = '""'
118     username = 'guest'
119     yesflag = ''
120
121     try:
122         try:
123             opts, args = getopt.getopt(argv[1:], short_options, long_options)
124         except getopt.error, msg:
125             raise Usage(msg)
126
127         for o, a in opts:
128             if o in ('-h', '--help'):
129                 print helpstr
130                 sys.exit(0)
131             elif o in ('-n', '--no-exec'):
132                 CommandRunner.execute = CommandRunner.do_not_execute
133             elif o in ('--password'):
134                 password = a
135             elif o in ('-q', '--quiet'):
136                 CommandRunner.display = CommandRunner.do_not_display
137             elif o in ('--username'):
138                 username = a
139             elif o in ('-y', '--yes', '--assume-yes'):
140                 yesflag = o
141     except Usage, err:
142         sys.stderr.write(str(err.msg) + '\n')
143         sys.stderr.write('use -h to get help\n')
144         return 2
145
146     if not args:
147         args = default_args
148
149     initial_packages = ' '.join(INITIAL_PACKAGES)
150     install_packages = ' '.join(INSTALL_PACKAGES)
151     building_packages = ' '.join(BUILDING_PACKAGES)
152     testing_packages = ' '.join(TESTING_PACKAGES)
153     python_packages = ' '.join(PYTHON_PACKAGES)
154
155     cmd = CommandRunner(locals())
156
157     for arg in args:
158         if arg == 'upgrade':
159             cmd.run('%(sudo)s apt-get %(yesflag)s upgrade')
160         elif arg == 'checkout':
161             cmd.run('%(sudo)s apt-get %(yesflag)s install %(initial_packages)s')
162             cmd.run('svn co --username guest --password "" %(scons_url)s')
163         elif arg == 'building':
164             cmd.run('%(sudo)s apt-get %(yesflag)s install %(building_packages)s')
165         elif arg == 'testing':
166             cmd.run('%(sudo)s apt-get %(yesflag)s install %(testing_packages)s')
167         elif arg == 'python-versions':
168             if install_packages:
169                 cmd.run('%(sudo)s apt-get %(yesflag)s install %(install_packages)s')
170                 install_packages = None
171             cmd.run('%(sudo)s apt-get %(yesflag)s install %(python_packages)s')
172             try:
173                 import install_python
174             except ImportError:
175                 msg = 'Could not import install_python; skipping python-versions.\n'
176                 sys.stderr.write(msg)
177             else:
178                 install_python.main(['install_python.py', '-a'])
179         elif arg == 'scons-versions':
180             if install_packages:
181                 cmd.run('%(sudo)s apt-get %(yesflag)s install %(install_packages)s')
182                 install_packages = None
183             try:
184                 import install_scons
185             except ImportError:
186                 msg = 'Could not import install_scons; skipping scons-versions.\n'
187                 sys.stderr.write(msg)
188             else:
189                 install_scons.main(['install_scons.py', '-a'])
190         else:
191             msg = '%s:  unknown argument %s\n'
192             sys.stderr.write(msg % (argv[0], repr(arg)))
193             sys.exit(1)
194
195 if __name__ == "__main__":
196     sys.exit(main())