#!/bin/sh
#
# Update the current version date in all files in the tree containing
# it.  Consider all release branches except those matching the regular
# expression in $IGNORE_BRANCHES, and also consider those branches listed
# in $ADD_BRANCHES.

CVSROOT=${CVSROOT:-/cvs/gcc}
IGNORE_BRANCHES='gcc-(2_95|3_0|3_1|3_2)-branch'
ADD_BRANCHES='HEAD tree-ssa-20020619-branch lno-branch'

# Run this from /tmp.
export CVSROOT
/bin/rm -rf /tmp/$$
/bin/mkdir /tmp/$$
cd /tmp/$$

# The path to cvs.
CVS=${CVS:-/usr/local/bin/cvs}

# Compute the branches which we should update.
$CVS co gcc/ChangeLog
BRANCHES=`$CVS status -v gcc/ChangeLog \
          | awk '{print $1;}' \
          | egrep 'gcc-[0-9]+_[0-9]+-branch$' \
          | egrep -v $IGNORE_BRANCHES`
# Always update the mainline.
BRANCHES="${BRANCHES} ${ADD_BRANCHES}"

# ARGS is passed to 'cvs co'
CURR_DATE=`/bin/date +"%Y%m%d"`

# version is contained within a char*
textstring_FILES="gcc/gcc/version.c"

# version is contained within a #define
cppdefine_FILES="gcc/libstdc++-v3/include/bits/c++config"

# Assume all will go well.
RESULT=0

for BRANCH in $BRANCHES; do
  echo "Working on \"$BRANCH\"."
  # Check out the files on the branch.  HEAD is a special case; if
  # you check out files with -r HEAD, CVS will not let you check 
  # in changes.
  if test "$BRANCH" = HEAD; then 
    ${CVS} co $textstring_FILES $cppdefine_FILES
  else
    ${CVS} co -r $BRANCH $textstring_FILES $cppdefine_FILES
  fi

  # There are no files to commit yet.
  COMMIT_FILES=""

  for file in $textstring_FILES; do
    if test -f $file; then 
      /bin/sed  <$file >$file.new -e \
  "s/\(.*\"[^ ]*\) [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/\1 ${CURR_DATE}/" 

      if /usr/bin/cmp -s $file $file.new; then
	rm -f $file.new
      else
	mv -f $file.new $file
        COMMIT_FILES="$COMMIT_FILES $file"
      fi
    fi
  done

  for file in $cppdefine_FILES; do
    if test -f $file; then
      /bin/sed <$file >$file.new -e \
  "s/\(#.*\) [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/\1 ${CURR_DATE}/"

      if /usr/bin/cmp -s $file $file.new; then
	rm -f $file.new
      else
	mv -f $file.new $file
        COMMIT_FILES="$COMMIT_FILES $file"
      fi
    fi
  done

  if test -n "$COMMIT_FILES" \
     && ! ${CVS} commit -m "Daily bump." $COMMIT_FILES; then
    # If we could not commit the files, indicate failure.
    RESULT=1
  fi

  # Remove the files.
  rm -rf gcc
done

/bin/rm -rf /tmp/$$
exit $RESULT
