head	1.1;
branch	1.1.1;
access;
symbols
	RELENG_9_1_0_RELEASE:1.1.1.2
	RELENG_9_1:1.1.1.2.0.52
	RELENG_9_1_BP:1.1.1.2
	RELENG_8_3_0_RELEASE:1.1.1.2
	RELENG_8_3:1.1.1.2.0.50
	RELENG_8_3_BP:1.1.1.2
	RELENG_9_0_0_RELEASE:1.1.1.2
	RELENG_9_0:1.1.1.2.0.48
	RELENG_9_0_BP:1.1.1.2
	RELENG_9:1.1.1.2.0.46
	RELENG_9_BP:1.1.1.2
	RELENG_7_4_0_RELEASE:1.1.1.2
	RELENG_8_2_0_RELEASE:1.1.1.2
	RELENG_7_4:1.1.1.2.0.44
	RELENG_7_4_BP:1.1.1.2
	RELENG_8_2:1.1.1.2.0.42
	RELENG_8_2_BP:1.1.1.2
	RELENG_8_1_0_RELEASE:1.1.1.2
	RELENG_8_1:1.1.1.2.0.40
	RELENG_8_1_BP:1.1.1.2
	RELENG_7_3_0_RELEASE:1.1.1.2
	RELENG_7_3:1.1.1.2.0.38
	RELENG_7_3_BP:1.1.1.2
	RELENG_8_0_0_RELEASE:1.1.1.2
	RELENG_8_0:1.1.1.2.0.36
	RELENG_8_0_BP:1.1.1.2
	RELENG_8:1.1.1.2.0.34
	RELENG_8_BP:1.1.1.2
	RELENG_7_2_0_RELEASE:1.1.1.2
	RELENG_7_2:1.1.1.2.0.32
	RELENG_7_2_BP:1.1.1.2
	RELENG_7_1_0_RELEASE:1.1.1.2
	RELENG_6_4_0_RELEASE:1.1.1.2
	RELENG_7_1:1.1.1.2.0.30
	RELENG_7_1_BP:1.1.1.2
	RELENG_6_4:1.1.1.2.0.28
	RELENG_6_4_BP:1.1.1.2
	RELENG_7_0_0_RELEASE:1.1.1.2
	RELENG_6_3_0_RELEASE:1.1.1.2
	RELENG_7_0:1.1.1.2.0.26
	RELENG_7_0_BP:1.1.1.2
	RELENG_6_3:1.1.1.2.0.24
	RELENG_6_3_BP:1.1.1.2
	RELENG_7:1.1.1.2.0.22
	RELENG_7_BP:1.1.1.2
	RELENG_6_2_0_RELEASE:1.1.1.2
	RELENG_6_2:1.1.1.2.0.20
	RELENG_6_2_BP:1.1.1.2
	RELENG_5_5_0_RELEASE:1.1.1.2
	RELENG_5_5:1.1.1.2.0.18
	RELENG_5_5_BP:1.1.1.2
	RELENG_6_1_0_RELEASE:1.1.1.2
	RELENG_6_1:1.1.1.2.0.16
	RELENG_6_1_BP:1.1.1.2
	RELENG_6_0_0_RELEASE:1.1.1.2
	RELENG_6_0:1.1.1.2.0.14
	RELENG_6_0_BP:1.1.1.2
	RELENG_6:1.1.1.2.0.12
	RELENG_6_BP:1.1.1.2
	RELENG_5_4_0_RELEASE:1.1.1.2
	RELENG_5_4:1.1.1.2.0.10
	RELENG_5_4_BP:1.1.1.2
	RELENG_5_3_0_RELEASE:1.1.1.2
	RELENG_5_3:1.1.1.2.0.8
	RELENG_5_3_BP:1.1.1.2
	RELENG_5:1.1.1.2.0.6
	RELENG_5_BP:1.1.1.2
	RELENG_5_2_1_RELEASE:1.1.1.2
	RELENG_5_2_0_RELEASE:1.1.1.2
	RELENG_5_2:1.1.1.2.0.4
	RELENG_5_2_BP:1.1.1.2
	RELENG_5_1_0_RELEASE:1.1.1.2
	RELENG_5_1:1.1.1.2.0.2
	RELENG_5_1_BP:1.1.1.2
	RELENG_5_0_0_RELEASE:1.1.1.1
	RELENG_5_0:1.1.1.1.0.2
	RELENG_5_0_BP:1.1.1.1
	gcc_3_2_1:1.1.1.1
	FSF:1.1.1;
locks; strict;
comment	@# @;


1.1
date	2002.12.04.15.15.05;	author obrien;	state Exp;
branches
	1.1.1.1;
next	;

1.1.1.1
date	2002.12.04.15.15.05;	author obrien;	state Exp;
branches;
next	1.1.1.2;

1.1.1.2
date	2003.03.26.18.12.00;	author kan;	state dead;
branches;
next	;


desc
@@


1.1
log
@Initial revision
@
text
@#! /bin/sh

########################################################################
#
# File:   gcc_build
# Author: Mark Mitchell
# Date:   07/10/2000
#
# Contents:
#   Script to automatically download and build GCC.
#
# Copyright (c) 2000, 2001 Free Software Foundation.
#
# This file is part of GNU CC.
#
# GNU CC is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# GNU CC is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNU CC; see the file COPYING.  If not, write to
# the Free Software Foundation, 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
#
########################################################################

########################################################################
# Notes
########################################################################

# If you are using password-based CVS, you must manually log in, and
# not log out from, the CVS server before running this script.

# You can set the following variables in the environment.  They 
# have no corresponding command-line options because they should
# only be needed infrequently:
#
#   MAKE                        The path to `make'.

########################################################################
# Functions
########################################################################

# Issue the error message given by $1 and exit with a non-zero
# exit code.

error() {
    echo "gcc_build: error: $1"
    exit 1
}

# Issue a usage message explaining how to use this script.

usage() {
cat <<EOF
gcc_build        [-c configure_options] 
		 [-d destination_directory]
		 [-m make_boot_options]
		 [-o objdir]
		 [-u username]
		 [-p protocol]
		 [-t tarfile]
		 [bootstrap]
		 [build]
		 [checkout]
		 [configure]
		 [export]
		 [install]
		 [test]
		 [update]
EOF
    exit 1
}

# Change to the directory given by $1.

changedir() {
    cd $1 || \
	error "Could not change directory to $1"
}

# Set up CVS environment variables

cvs_setup() {
    CVSROOT=":${CVS_PROTOCOL}:${CVS_USERNAME}@@"
    CVSROOT="${CVSROOT}${CVS_SERVER}:${CVS_REPOSITORY}"
    export CVSROOT
}

# Checkout a fresh copy of the GCC build tree.

checkout_gcc() {
    # Tell CVS where to find everything.
    cvs_setup

    # If the destination already exists, don't risk destroying it.
    test -e ${DESTINATION} && \
	error "${DESTINATION} already exists"

    # CVS doesn't allow an absolute path for the destination directory.
    DESTINATION_PARENT=`dirname ${DESTINATION}`
    test -d ${DESTINATION_PARENT} || \
	error "${DESTINATION_PARENT} is not a directory"
    changedir ${DESTINATION_PARENT}

    # Checkout the tree
    cvs -z 9 co -d `basename ${DESTINATION}` gcc || \
	error "Could not check out GCC"
}

# Update GCC.

update_gcc() {
    # Tell CVS where to find everything
    cvs_setup

    # If the destination does not already exist, complain.
    test -d ${DESTINATION} || \
	error "{$DESTINATION} does not exist"
    # Enter the destination directory.
    changedir ${DESTINATION}

    # Update the tree
    ./contrib/gcc_update -d || \
	error "Could not update GCC"
}

# Configure for a build of GCC.

configure_gcc() {
    # Go to the source directory.
    changedir ${DESTINATION}

    # Remove the object directory.
    rm -rf ${OBJDIR}
    # Create it again.
    mkdir ${OBJDIR} || \
	error "Could not create ${OBJDIR}"
    # Enter it.
    changedir ${OBJDIR}

    # Configure the tree.
    echo "Configuring: ${DESTINATION}/configure ${CONFIGURE_OPTIONS}"
    eval ${DESTINATION}/configure ${CONFIGURE_OPTIONS} || \
	error "Could not configure the compiler"
}

# Bootstrap GCC.  Assume configuration has already occurred.

bootstrap_gcc() {
    # Go to the source directory.
    changedir ${DESTINATION}
    # Go to the object directory.
    changedir ${OBJDIR}

    # Bootstrap the compiler
    echo "Building: ${MAKE} ${MAKE_BOOTSTRAP_OPTIONS} bootstrap"
    eval ${MAKE} ${MAKE_BOOTSTRAP_OPTIONS} bootstrap || \
	error "Could not bootstrap the compiler"
}

# Test GCC.

test_gcc() {
    # Go to the source directory.
    changedir ${DESTINATION}
    # Go to the object directory.
    changedir ${OBJDIR}

    echo "Running tests...  This will take a while."
    ${MAKE} -k check
    ${DESTINATION}/contrib/test_summary
}

# Export the GCC source tree.

export_gcc() {
    # Go to the source directory.
    changedir ${DESTINATION}
    # Go up one level.
    changedir ..
    # Build a tarball of the source directory.
    tar czf ${TARFILE} \
	--exclude=${OBJDIR} \
	--exclude=CVS \
	--exclude='.#*' \
	--exclude='*~' \
	`basename ${DESTINATION}`
}

# Install GCC.

install_gcc() {
    # Go to the source directory.
    changedir ${DESTINATION}
    # Go to the object directory.
    changedir ${OBJDIR}

    ${MAKE} install || error "Installation failed"
}

########################################################################
# Initialization
########################################################################

# The CVS server containing the GCC repository.
CVS_SERVER="gcc.gnu.org"
# The path to the repository on that server.
CVS_REPOSITORY="/cvs/gcc"
# The CVS protocol to use.
CVS_PROTOCOL="pserver"
# The username to use when connecting to the server.
CVS_USERNAME="anoncvs"

# The directory where the checked out GCC will be placed.
DESTINATION="${HOME}/dev/gcc"
# The relative path from the top of the source tree to the 
# object directory.
OBJDIR="objdir"

# The file where the tarred up sources will be placed.
TARFILE="${HOME}/dev/gcc.tgz"

# Options to pass to configure.
CONFIGURE_OPTIONS=
# The `make' program.
MAKE=${MAKE:-make}
# Options to pass to make.
MAKE_BOOTSTRAP_OPTIONS=

# Modes of operation
BOOTSTRAP=0
CHECKOUT=0
CONFIGURE=0
EXPORT=0
INSTALL=0
TEST=0
UPDATE=0

########################################################################
# Main Program
########################################################################

# Parse the options.
while getopts "c:d:m:o:p:t:u:" ARG; do
    case $ARG in
    c)    CONFIGURE_OPTIONS="${OPTARG}";;
    d)    DESTINATION="${OPTARG}";;
    m)    MAKE_BOOTSTRAP_OPTIONS="${OPTARG}";;
    o)    OBJDIR="${OPTARG}";;
    p)    CVS_PROTOCOL="${OPTARG}";;
    t)    CVS_TARGFILE="${OPTARG}";;
    u)    CVS_USERNAME="${OPTARG}";;
    \?)   usage;;
    esac
done
shift `expr ${OPTIND} - 1`

# Handle the major modes.
while [ $# -ne 0 ]; do
    case $1 in
    bootstrap) BOOTSTRAP=1;;
    build)    CONFIGURE=1; BOOTSTRAP=1;;
    checkout) CHECKOUT=1;;
    configure) CONFIGURE=1;;
    export)   EXPORT=1;;
    install)  INSTALL=1;;
    test)     TEST=1;;
    update)   UPDATE=1;;
    *)        usage;;
    esac
    shift
done

# Check the arguments for sanity.
if [ ${CHECKOUT} -ne 0 ] && [ ${UPDATE} -ne 0 ]; then
    error "Cannot checkout and update simultaneously"
fi

# Checkout the tree.
if [ ${CHECKOUT} -ne 0 ]; then
    checkout_gcc
elif [ ${UPDATE} -ne 0 ]; then
    update_gcc
fi

# Configure to build the tree.
if [ ${CONFIGURE} -ne 0 ]; then
    configure_gcc
fi

# Bootstrap the compiler.
if [ ${BOOTSTRAP} -ne 0 ]; then
    bootstrap_gcc
fi

# Test the compiler
if [ ${TEST} -ne 0 ]; then
    test_gcc
fi

# Install the compiler.
if [ ${INSTALL} -ne 0 ]; then
    install_gcc
fi

# Export the sources
if [ ${EXPORT} -ne 0 ]; then
    export_gcc
fi
@


1.1.1.1
log
@Gcc 3.2.1 release virgin vendor import. (19-Nov-2002)
@
text
@@


1.1.1.2
log
@Remove files incidentally imported from the wrong place during
3.2.1 import. They are not used by any of our system GCC versions
and will be physically removed from repository soon.

Reviewed by:	obrien
@
text
@@

