2007-01-19 Basile Starynkevitch <basile@starynkevitch.net>
[official-gcc.git] / contrib / gcc_build
blob722645ed10345e8a8b12cd0cb80bbb5a8298ebf3
1 #! /bin/sh
3 ########################################################################
5 # File: gcc_build
6 # Author: Mark Mitchell
7 # Date: 2000-07-10
9 # Adapted to Subversion by Ben Elliston <bje@au.ibm.com>, 2005-07-14.
11 # Contents:
12 # Script to automatically download and build GCC.
14 # Copyright (c) 2000, 2001, 2003, 2005 Free Software Foundation.
16 # This file is part of GCC.
18 # GCC is free software; you can redistribute it and/or modify
19 # it under the terms of the GNU General Public License as published by
20 # the Free Software Foundation; either version 2, or (at your option)
21 # any later version.
23 # GCC is distributed in the hope that it will be useful,
24 # but WITHOUT ANY WARRANTY; without even the implied warranty of
25 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 # GNU General Public License for more details.
28 # You should have received a copy of the GNU General Public License
29 # along with GCC; see the file COPYING. If not, write to
30 # the Free Software Foundation, 51 Franklin Street, Fifth Floor,
31 # Boston, MA 02110-1301, USA.
33 ########################################################################
35 ########################################################################
36 # Notes
37 ########################################################################
39 # You can set the following variables in the environment. They
40 # have no corresponding command-line options because they should
41 # only be needed infrequently:
43 # MAKE The path to `make'.
45 ########################################################################
46 # Functions
47 ########################################################################
49 # Issue the error message given by $1 and exit with a non-zero
50 # exit code.
52 error() {
53 echo "gcc_build: error: $1"
54 exit 1
57 # Issue a usage message explaining how to use this script.
59 usage() {
60 cat <<EOF
61 gcc_build [-c configure_options]
62 [-d destination_directory]
63 [-m make_boot_options]
64 [-o objdir]
65 [-b branch_name]
66 [-u username]
67 [-p protocol]
68 [-t tarfile]
69 [-x make_check_options]
70 [bootstrap]
71 [build]
72 [checkout]
73 [configure]
74 [export]
75 [install]
76 [test]
77 [update]
78 EOF
79 exit 1
82 # Change to the directory given by $1.
84 changedir() {
85 cd $1 || \
86 error "Could not change directory to $1"
89 # Checkout a fresh copy of the GCC build tree.
91 checkout_gcc() {
92 # If the destination already exists, don't risk destroying it.
93 test -e ${DESTINATION} && \
94 error "${DESTINATION} already exists"
96 # Checkout the tree
97 test -n "${SVN_USERNAME}" && SVN_USERNAME="${SVN_USERNAME}@"
98 SVNROOT="${SVN_PROTOCOL}://${SVN_USERNAME}${SVN_SERVER}${SVN_REPOSITORY}${SVN_BRANCH}"
100 $GCC_SVN co $SVNROOT ${DESTINATION} || \
101 error "Could not check out GCC"
104 # Update GCC.
106 update_gcc() {
107 # If the destination does not already exist, complain.
108 test -d ${DESTINATION} || \
109 error "${DESTINATION} does not exist"
111 # Enter the destination directory.
112 changedir ${DESTINATION}
114 # Update the tree
115 ./contrib/gcc_update || \
116 error "Could not update GCC"
119 # Configure for a build of GCC.
121 configure_gcc() {
122 # Go to the source directory.
123 changedir ${DESTINATION}
125 # Remove the object directory.
126 rm -rf ${OBJDIR}
127 # Create it again.
128 mkdir ${OBJDIR} || \
129 error "Could not create ${OBJDIR}"
130 # Enter it.
131 changedir ${OBJDIR}
133 # Configure the tree.
134 echo "Configuring: ${DESTINATION}/configure ${CONFIGURE_OPTIONS}"
135 eval ${DESTINATION}/configure ${CONFIGURE_OPTIONS} || \
136 error "Could not configure the compiler"
139 # Bootstrap GCC. Assume configuration has already occurred.
141 bootstrap_gcc() {
142 # Go to the source directory.
143 changedir ${DESTINATION}
144 # Go to the object directory.
145 changedir ${OBJDIR}
147 # Bootstrap the compiler
148 echo "Building: ${MAKE} ${MAKE_BOOTSTRAP_OPTIONS} bootstrap"
149 eval ${MAKE} ${MAKE_BOOTSTRAP_OPTIONS} bootstrap || \
150 error "Could not bootstrap the compiler"
153 # Test GCC.
155 test_gcc() {
156 # Go to the source directory.
157 changedir ${DESTINATION}
158 # Go to the object directory.
159 changedir ${OBJDIR}
161 echo "Running tests... This will take a while."
162 eval \${MAKE} -k ${MAKE_CHECK_OPTIONS} check
163 ${DESTINATION}/contrib/test_summary
166 # Export the GCC source tree.
168 export_gcc() {
169 # Go to the source directory.
170 changedir ${DESTINATION}
171 # Go up one level.
172 changedir ..
173 # Build a tarball of the source directory.
174 tar czf ${TARFILE} \
175 --exclude=${OBJDIR} \
176 --exclude=.svn \
177 --exclude='.#*' \
178 --exclude='*~' \
179 `basename ${DESTINATION}`
182 # Install GCC.
184 install_gcc() {
185 # Go to the source directory.
186 changedir ${DESTINATION}
187 # Go to the object directory.
188 changedir ${OBJDIR}
190 ${MAKE} install || error "Installation failed"
193 ########################################################################
194 # Initialization
195 ########################################################################
197 # SVN command
198 GCC_SVN=${GCC_SVN-${SVN-svn}}
199 # The SVN server containing the GCC repository.
200 SVN_SERVER="gcc.gnu.org"
201 # The path to the repository on that server.
202 SVN_REPOSITORY="/svn/gcc/"
203 # The branch to check out from that server.
204 # Defaults to trunk if no branch is defined with -b.
205 SVN_BRANCH=""
206 # The SVN protocol to use.
207 SVN_PROTOCOL="svn"
208 # The username to use when connecting to the server.
209 # An empty string means anonymous.
210 SVN_USERNAME=""
212 # The directory where the checked out GCC will be placed.
213 DESTINATION="${HOME}/dev/gcc"
214 # The relative path from the top of the source tree to the
215 # object directory.
216 OBJDIR="objdir"
218 # The file where the tarred up sources will be placed.
219 TARFILE="${HOME}/dev/gcc.tgz"
221 # Options to pass to configure.
222 CONFIGURE_OPTIONS=
223 # The `make' program.
224 MAKE=${MAKE:-make}
225 # Options to pass to "make bootstrap".
226 MAKE_BOOTSTRAP_OPTIONS=
227 # Options to pass to "make check".
228 MAKE_CHECK_OPTIONS=
230 # Modes of operation
231 BOOTSTRAP=0
232 CHECKOUT=0
233 CONFIGURE=0
234 EXPORT=0
235 INSTALL=0
236 TEST=0
237 UPDATE=0
239 ########################################################################
240 # Main Program
241 ########################################################################
243 # Issue usage if no parameters are given.
244 test $# -eq 0 && usage
246 # Parse the options.
247 while getopts "c:d:m:o:p:t:b:u:x:" ARG; do
248 case $ARG in
249 c) CONFIGURE_OPTIONS="${OPTARG}";;
250 d) DESTINATION="${OPTARG}";;
251 m) MAKE_BOOTSTRAP_OPTIONS="${OPTARG}";;
252 o) OBJDIR="${OPTARG}";;
253 p) SVN_PROTOCOL="${OPTARG}";;
254 t) TARFILE="${OPTARG}";;
255 x) MAKE_CHECK_OPTIONS="${OPTARG}";;
256 b) SVN_BRANCH="${OPTARG}";;
257 u) SVN_USERNAME="${OPTARG}";;
258 \?) usage;;
259 esac
260 done
261 shift `expr ${OPTIND} - 1`
263 # Handle the major modes.
264 while [ $# -ne 0 ]; do
265 case $1 in
266 bootstrap) BOOTSTRAP=1;;
267 build) CONFIGURE=1; BOOTSTRAP=1;;
268 checkout) CHECKOUT=1;;
269 configure) CONFIGURE=1;;
270 export) EXPORT=1;;
271 install) INSTALL=1;;
272 test) TEST=1;;
273 update) UPDATE=1;;
274 *) usage;;
275 esac
276 shift
277 done
279 # Check the arguments for sanity.
280 if [ ${CHECKOUT} -ne 0 ] && [ ${UPDATE} -ne 0 ]; then
281 error "Cannot checkout and update simultaneously"
284 if [ ${CHECKOUT} -eq 0 ] && test -n "${SVN_BRANCH}"; then
285 error "Branch argument only makes sense when doing a checkout"
288 # Validate the branch name.
289 if test -n "${SVN_BRANCH}"; then
290 SVN_BRANCH="branches/${SVN_BRANCH}";
291 else
292 SVN_BRANCH="trunk";
295 # Checkout the tree.
296 if [ ${CHECKOUT} -ne 0 ]; then
297 checkout_gcc
298 elif [ ${UPDATE} -ne 0 ]; then
299 update_gcc
302 # Configure to build the tree.
303 if [ ${CONFIGURE} -ne 0 ]; then
304 configure_gcc
307 # Bootstrap the compiler.
308 if [ ${BOOTSTRAP} -ne 0 ]; then
309 bootstrap_gcc
312 # Test the compiler
313 if [ ${TEST} -ne 0 ]; then
314 test_gcc
317 # Install the compiler.
318 if [ ${INSTALL} -ne 0 ]; then
319 install_gcc
322 # Export the sources
323 if [ ${EXPORT} -ne 0 ]; then
324 export_gcc