#!/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 autovect-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
