#! /bin/sh
#
# Update a local CVS tree from the egcs repository, with an emphasis
# on treating generated files correctly, so that autoconf, bison et
# al are not required for the ``end'' user.
#
# By default all command-line options are passed to `cvs update` in
# addition to $UPDATE_OPTIONS (defined below). If the first parameter
# reads --nostdflags, $UPDATE_OPTIONS as well as this parameter itself
# are omitted. 
# 
# Examples:
#
# contrib/egcs_update -r egcs_latest_snapshot
# contrib/egcs_update -A
# contrib/egcs_update --nostdflags -P -r egcs_1_1_branch gcc/testsuite
#
#
# (C) 1998 Free Software Foundation
# Originally by Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>, August 1998.
#
# This script is Free Software, and it can be copied, distributed and
# modified as defined in the GNU General Public License.  A copy of
# its license can be downloaded from http://www.gnu.org/copyleft/gpl.html


UPDATE_OPTIONS=-P
# Add -d to create any directories that exist in the repository but not
#        locally.
# Add -A to reset any sticky tags, dates, or `-k' options.


echo "Current directory is `pwd`."

# First of all, check whether this indeed looks like a local CVS of egcs.
if [ ! -d CVS ] || [ ! -f gcc/version.c ]; then
	echo "This does not seem to be an egcs CVS tree!"
	exit
fi

# Check command-line options

if [ x"${1}"x = x"--nostdflags"x ]; then
    shift
else
    set -- $UPDATE_OPTIONS ${1+"$@"}
fi


echo "Pass 1: Updating autoconf and bison generated files"
# Do a CVS update on those files that exist in CVS directories.  libg++
# makes sense to drop into the tree, but it isn't CVS-controlled.
X=`for i in \`find . -name configure.in -o -name '*.y'\`
do
    D=\`dirname $i\`/CVS
    if [ -f $i -a -d $D ]; then 
        echo $i
    fi
done`
cvs -q update $X
if [ $? -ne 0 ]; then 
    echo "CVS update of generated files failed." >&2
    exit 1
fi


echo "Pass 2: Updating full tree"
cvs -q update ${1+"$@"}
if [ $? -ne 0 ]; then 
    echo "CVS update of full tree failed." >&2
    exit 1
fi

echo "Pass 3: Fixing local tree"
# Please also update the FAQ accordingly if you change the list of
# files below. Note that generated files should be touched only
# after the corresponding *.y files.
touch `find . -name configure -print`
touch `find texinfo -name Makefile.in -print`
touch `find texinfo -name \*.pot -print`
touch `find texinfo -name \*.gmo -print`
for f in gcc/c-parse.y \
	 gcc/c-parse.h \
	 gcc/c-parse.c \
	 gcc/cstamp-h.in \
	 gcc/c-gperf.h \
	 gcc/cexp.c \
	 gcc/cp/parse.c \
	 gcc/cp/parse.h \
	 gcc/objc/objc-parse.y \
	 gcc/objc/objc-parse.c \
	 gcc/java/parse.h \
	 gcc/java/parse.c \
	 gcc/java/parse-scan.c \
	 libf2c/libU77/stamp-h.in \
	 contrib/fixinc/fixincl.x \
	 contrib/fixinc/inclhack.sh \
	 contrib/fixinc/fixincl.sh \
	 gcc/fixinc/fixincl.x \
	 gcc/fixinc/inclhack.sh \
	 gcc/fixinc/fixincl.sh
do
	if [ -f $f ]; then
		touch $f
	fi
done
