OSDN Git Service

7ad2484e2164974836ebd7b536aad6b5d41113dc
[pf3gnuchains/gcc-fork.git] / contrib / gcc_build
1 #! /bin/sh
2
3 ########################################################################
4 #
5 # File:   gcc_build
6 # Author: Mark Mitchell
7 # Date:   2000-07-10
8 #
9 # Adapted to Subversion by Ben Elliston <bje@au.ibm.com>, 2005-07-14.
10 #
11 # Contents:
12 #   Script to automatically download and build GCC.
13 #
14 # Copyright (c) 2000, 2001, 2003, 2005 Free Software Foundation.
15 #
16 # This file is part of GCC.
17 #
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.
22 #
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.
27 #
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.
32 #
33 ########################################################################
34
35 ########################################################################
36 # Notes
37 ########################################################################
38
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:
42 #
43 #   MAKE                        The path to `make'.
44
45 ########################################################################
46 # Functions
47 ########################################################################
48
49 # Issue the error message given by $1 and exit with a non-zero
50 # exit code.
51
52 error() {
53     echo "gcc_build: error: $1"
54     exit 1
55 }
56
57 # Issue a usage message explaining how to use this script.
58
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
80 }
81
82 # Change to the directory given by $1.
83
84 changedir() {
85     cd $1 || \
86         error "Could not change directory to $1"
87 }
88
89 # Checkout a fresh copy of the GCC build tree.
90
91 checkout_gcc() {
92     # If the destination already exists, don't risk destroying it.
93     test -e ${DESTINATION} && \
94         error "${DESTINATION} already exists"
95
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}"
99
100     $GCC_SVN co $SVNROOT ${DESTINATION} || \
101         error "Could not check out GCC"
102 }
103
104 # Update GCC.
105
106 update_gcc() {
107     # If the destination does not already exist, complain.
108     test -d ${DESTINATION} || \
109         error "${DESTINATION} does not exist"
110
111     # Enter the destination directory.
112     changedir ${DESTINATION}
113
114     # Update the tree
115     ./contrib/gcc_update || \
116         error "Could not update GCC"
117 }
118
119 # Configure for a build of GCC.
120
121 configure_gcc() {
122     # Go to the source directory.
123     changedir ${DESTINATION}
124
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}
132
133     # Configure the tree.
134     echo "Configuring: ${DESTINATION}/configure ${CONFIGURE_OPTIONS}"
135     eval ${DESTINATION}/configure ${CONFIGURE_OPTIONS} || \
136         error "Could not configure the compiler"
137 }
138
139 # Bootstrap GCC.  Assume configuration has already occurred.
140
141 bootstrap_gcc() {
142     # Go to the source directory.
143     changedir ${DESTINATION}
144     # Go to the object directory.
145     changedir ${OBJDIR}
146
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"
151 }
152
153 # Test GCC.
154
155 test_gcc() {
156     # Go to the source directory.
157     changedir ${DESTINATION}
158     # Go to the object directory.
159     changedir ${OBJDIR}
160
161     echo "Running tests...  This will take a while."
162     eval \${MAKE} -k ${MAKE_CHECK_OPTIONS} check
163     ${DESTINATION}/contrib/test_summary
164 }
165
166 # Export the GCC source tree.
167
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}`
180 }
181
182 # Install GCC.
183
184 install_gcc() {
185     # Go to the source directory.
186     changedir ${DESTINATION}
187     # Go to the object directory.
188     changedir ${OBJDIR}
189
190     ${MAKE} install || error "Installation failed"
191 }
192
193 ########################################################################
194 # Initialization
195 ########################################################################
196
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 SVN_BRANCH="trunk"
205 # The SVN protocol to use.
206 SVN_PROTOCOL="svn"
207 # The username to use when connecting to the server.
208 # An empty string means anonymous.
209 SVN_USERNAME=""
210
211 # The directory where the checked out GCC will be placed.
212 DESTINATION="${HOME}/dev/gcc"
213 # The relative path from the top of the source tree to the 
214 # object directory.
215 OBJDIR="objdir"
216
217 # The file where the tarred up sources will be placed.
218 TARFILE="${HOME}/dev/gcc.tgz"
219
220 # Options to pass to configure.
221 CONFIGURE_OPTIONS=
222 # The `make' program.
223 MAKE=${MAKE:-make}
224 # Options to pass to "make bootstrap".
225 MAKE_BOOTSTRAP_OPTIONS=
226 # Options to pass to "make check".
227 MAKE_CHECK_OPTIONS=
228
229 # Modes of operation
230 BOOTSTRAP=0
231 CHECKOUT=0
232 CONFIGURE=0
233 EXPORT=0
234 INSTALL=0
235 TEST=0
236 UPDATE=0
237
238 ########################################################################
239 # Main Program
240 ########################################################################
241
242 # Issue usage if no parameters are given.
243 test $# -eq 0 && usage
244
245 # Parse the options.
246 while getopts "c:d:m:o:p:t:b:u:x:" ARG; do
247     case $ARG in
248     c)    CONFIGURE_OPTIONS="${OPTARG}";;
249     d)    DESTINATION="${OPTARG}";;
250     m)    MAKE_BOOTSTRAP_OPTIONS="${OPTARG}";;
251     o)    OBJDIR="${OPTARG}";;
252     p)    SVN_PROTOCOL="${OPTARG}";;
253     t)    TARFILE="${OPTARG}";;
254     x)    MAKE_CHECK_OPTIONS="${OPTARG}";;
255     b)    SVN_BRANCH="${OPTARG}";;
256     u)    SVN_USERNAME="${OPTARG}";;
257     \?)   usage;;
258     esac
259 done
260 shift `expr ${OPTIND} - 1`
261
262 # Handle the major modes.
263 while [ $# -ne 0 ]; do
264     case $1 in
265     bootstrap) BOOTSTRAP=1;;
266     build)    CONFIGURE=1; BOOTSTRAP=1;;
267     checkout) CHECKOUT=1;;
268     configure) CONFIGURE=1;;
269     export)   EXPORT=1;;
270     install)  INSTALL=1;;
271     test)     TEST=1;;
272     update)   UPDATE=1;;
273     *)        usage;;
274     esac
275     shift
276 done
277
278 # Check the arguments for sanity.
279 if [ ${CHECKOUT} -ne 0 ] && [ ${UPDATE} -ne 0 ]; then
280     error "Cannot checkout and update simultaneously"
281 fi
282
283 if [ ${CHECKOUT} -eq 0 ] && test -n "${SVN_BRANCH}"; then
284     error "Branch argument only makes sense when doing a checkout"
285 fi
286
287 # Validate the branch name.
288 if test "${SVN_BRANCH}" != "trunk"; then
289     SVN_BRANCH="branches/${SVN_BRANCH}";
290 fi
291
292 # Checkout the tree.
293 if [ ${CHECKOUT} -ne 0 ]; then
294     checkout_gcc
295 elif [ ${UPDATE} -ne 0 ]; then
296     update_gcc
297 fi
298
299 # Configure to build the tree.
300 if [ ${CONFIGURE} -ne 0 ]; then
301     configure_gcc
302 fi
303
304 # Bootstrap the compiler.
305 if [ ${BOOTSTRAP} -ne 0 ]; then
306     bootstrap_gcc
307 fi
308
309 # Test the compiler
310 if [ ${TEST} -ne 0 ]; then
311     test_gcc
312 fi
313
314 # Install the compiler.
315 if [ ${INSTALL} -ne 0 ]; then
316     install_gcc
317 fi
318
319 # Export the sources
320 if [ ${EXPORT} -ne 0 ]; then
321     export_gcc
322 fi