source: branches/libc-0.6/src/gcc/contrib/gcc_build

Last change on this file was 1392, checked in by bird, 21 years ago

This commit was generated by cvs2svn to compensate for changes in r1391,
which included commits to RCS files with non-trunk default branches.

  • Property cvs2svn:cvs-rev set to 1.1.1.2
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 7.7 KB
Line 
1#! /bin/sh
2
3########################################################################
4#
5# File: gcc_build
6# Author: Mark Mitchell
7# Date: 07/10/2000
8#
9# Contents:
10# Script to automatically download and build GCC.
11#
12# Copyright (c) 2000, 2001 Free Software Foundation.
13#
14# This file is part of GNU CC.
15#
16# GNU CC is free software; you can redistribute it and/or modify
17# it under the terms of the GNU General Public License as published by
18# the Free Software Foundation; either version 2, or (at your option)
19# any later version.
20#
21# GNU CC is distributed in the hope that it will be useful,
22# but WITHOUT ANY WARRANTY; without even the implied warranty of
23# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24# GNU General Public License for more details.
25#
26# You should have received a copy of the GNU General Public License
27# along with GNU CC; see the file COPYING. If not, write to
28# the Free Software Foundation, 59 Temple Place - Suite 330,
29# Boston, MA 02111-1307, USA.
30#
31########################################################################
32
33########################################################################
34# Notes
35########################################################################
36
37# If you are using password-based CVS, you must manually log in, and
38# not log out from, the CVS server before running this script.
39
40# You can set the following variables in the environment. They
41# have no corresponding command-line options because they should
42# only be needed infrequently:
43#
44# MAKE The path to `make'.
45
46########################################################################
47# Functions
48########################################################################
49
50# Issue the error message given by $1 and exit with a non-zero
51# exit code.
52
53error() {
54 echo "gcc_build: error: $1"
55 exit 1
56}
57
58# Issue a usage message explaining how to use this script.
59
60usage() {
61cat <<EOF
62gcc_build [-c configure_options]
63 [-d destination_directory]
64 [-m make_boot_options]
65 [-o objdir]
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]
78EOF
79 exit 1
80}
81
82# Change to the directory given by $1.
83
84changedir() {
85 cd $1 || \
86 error "Could not change directory to $1"
87}
88
89# Set up CVS environment variables
90
91cvs_setup() {
92 CVSROOT=":${CVS_PROTOCOL}:${CVS_USERNAME}@"
93 CVSROOT="${CVSROOT}${CVS_SERVER}:${CVS_REPOSITORY}"
94 export CVSROOT
95}
96
97# Checkout a fresh copy of the GCC build tree.
98
99checkout_gcc() {
100 # Tell CVS where to find everything.
101 cvs_setup
102
103 # If the destination already exists, don't risk destroying it.
104 test -e ${DESTINATION} && \
105 error "${DESTINATION} already exists"
106
107 # CVS doesn't allow an absolute path for the destination directory.
108 DESTINATION_PARENT=`dirname ${DESTINATION}`
109 test -d ${DESTINATION_PARENT} || \
110 error "${DESTINATION_PARENT} is not a directory"
111 changedir ${DESTINATION_PARENT}
112
113 # Checkout the tree
114 cvs -z 9 co -d `basename ${DESTINATION}` gcc || \
115 error "Could not check out GCC"
116}
117
118# Update GCC.
119
120update_gcc() {
121 # Tell CVS where to find everything
122 cvs_setup
123
124 # If the destination does not already exist, complain.
125 test -d ${DESTINATION} || \
126 error "{$DESTINATION} does not exist"
127 # Enter the destination directory.
128 changedir ${DESTINATION}
129
130 # Update the tree
131 ./contrib/gcc_update -d || \
132 error "Could not update GCC"
133}
134
135# Configure for a build of GCC.
136
137configure_gcc() {
138 # Go to the source directory.
139 changedir ${DESTINATION}
140
141 # Remove the object directory.
142 rm -rf ${OBJDIR}
143 # Create it again.
144 mkdir ${OBJDIR} || \
145 error "Could not create ${OBJDIR}"
146 # Enter it.
147 changedir ${OBJDIR}
148
149 # Configure the tree.
150 echo "Configuring: ${DESTINATION}/configure ${CONFIGURE_OPTIONS}"
151 eval ${DESTINATION}/configure ${CONFIGURE_OPTIONS} || \
152 error "Could not configure the compiler"
153}
154
155# Bootstrap GCC. Assume configuration has already occurred.
156
157bootstrap_gcc() {
158 # Go to the source directory.
159 changedir ${DESTINATION}
160 # Go to the object directory.
161 changedir ${OBJDIR}
162
163 # Bootstrap the compiler
164 echo "Building: ${MAKE} ${MAKE_BOOTSTRAP_OPTIONS} bootstrap"
165 eval ${MAKE} ${MAKE_BOOTSTRAP_OPTIONS} bootstrap || \
166 error "Could not bootstrap the compiler"
167}
168
169# Test GCC.
170
171test_gcc() {
172 # Go to the source directory.
173 changedir ${DESTINATION}
174 # Go to the object directory.
175 changedir ${OBJDIR}
176
177 echo "Running tests... This will take a while."
178 eval \${MAKE} -k ${MAKE_CHECK_OPTIONS} check
179 ${DESTINATION}/contrib/test_summary
180}
181
182# Export the GCC source tree.
183
184export_gcc() {
185 # Go to the source directory.
186 changedir ${DESTINATION}
187 # Go up one level.
188 changedir ..
189 # Build a tarball of the source directory.
190 tar czf ${TARFILE} \
191 --exclude=${OBJDIR} \
192 --exclude=CVS \
193 --exclude='.#*' \
194 --exclude='*~' \
195 `basename ${DESTINATION}`
196}
197
198# Install GCC.
199
200install_gcc() {
201 # Go to the source directory.
202 changedir ${DESTINATION}
203 # Go to the object directory.
204 changedir ${OBJDIR}
205
206 ${MAKE} install || error "Installation failed"
207}
208
209########################################################################
210# Initialization
211########################################################################
212
213# The CVS server containing the GCC repository.
214CVS_SERVER="gcc.gnu.org"
215# The path to the repository on that server.
216CVS_REPOSITORY="/cvs/gcc"
217# The CVS protocol to use.
218CVS_PROTOCOL="pserver"
219# The username to use when connecting to the server.
220CVS_USERNAME="anoncvs"
221
222# The directory where the checked out GCC will be placed.
223DESTINATION="${HOME}/dev/gcc"
224# The relative path from the top of the source tree to the
225# object directory.
226OBJDIR="objdir"
227
228# The file where the tarred up sources will be placed.
229TARFILE="${HOME}/dev/gcc.tgz"
230
231# Options to pass to configure.
232CONFIGURE_OPTIONS=
233# The `make' program.
234MAKE=${MAKE:-make}
235# Options to pass to "make bootstrap".
236MAKE_BOOTSTRAP_OPTIONS=
237# Options to pass to "make check".
238MAKE_CHECK_OPTIONS=
239
240# Modes of operation
241BOOTSTRAP=0
242CHECKOUT=0
243CONFIGURE=0
244EXPORT=0
245INSTALL=0
246TEST=0
247UPDATE=0
248
249########################################################################
250# Main Program
251########################################################################
252
253# Parse the options.
254while getopts "c:d:m:o:p:t:u:x:" ARG; do
255 case $ARG in
256 c) CONFIGURE_OPTIONS="${OPTARG}";;
257 d) DESTINATION="${OPTARG}";;
258 m) MAKE_BOOTSTRAP_OPTIONS="${OPTARG}";;
259 o) OBJDIR="${OPTARG}";;
260 p) CVS_PROTOCOL="${OPTARG}";;
261 t) TARFILE="${OPTARG}";;
262 x) MAKE_CHECK_OPTIONS="${OPTARG}";;
263 u) CVS_USERNAME="${OPTARG}";;
264 \?) usage;;
265 esac
266done
267shift `expr ${OPTIND} - 1`
268
269# Handle the major modes.
270while [ $# -ne 0 ]; do
271 case $1 in
272 bootstrap) BOOTSTRAP=1;;
273 build) CONFIGURE=1; BOOTSTRAP=1;;
274 checkout) CHECKOUT=1;;
275 configure) CONFIGURE=1;;
276 export) EXPORT=1;;
277 install) INSTALL=1;;
278 test) TEST=1;;
279 update) UPDATE=1;;
280 *) usage;;
281 esac
282 shift
283done
284
285# Check the arguments for sanity.
286if [ ${CHECKOUT} -ne 0 ] && [ ${UPDATE} -ne 0 ]; then
287 error "Cannot checkout and update simultaneously"
288fi
289
290# Checkout the tree.
291if [ ${CHECKOUT} -ne 0 ]; then
292 checkout_gcc
293elif [ ${UPDATE} -ne 0 ]; then
294 update_gcc
295fi
296
297# Configure to build the tree.
298if [ ${CONFIGURE} -ne 0 ]; then
299 configure_gcc
300fi
301
302# Bootstrap the compiler.
303if [ ${BOOTSTRAP} -ne 0 ]; then
304 bootstrap_gcc
305fi
306
307# Test the compiler
308if [ ${TEST} -ne 0 ]; then
309 test_gcc
310fi
311
312# Install the compiler.
313if [ ${INSTALL} -ne 0 ]; then
314 install_gcc
315fi
316
317# Export the sources
318if [ ${EXPORT} -ne 0 ]; then
319 export_gcc
320fi
Note: See TracBrowser for help on using the repository browser.