#! /bin/sh
# Update copyright year lists.
# Copyright (C) 2012-2014 Free Software Foundation, Inc.
# This file is part of the GNU C Library.

# The GNU C Library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.

# The GNU C Library 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
# Lesser General Public License for more details.

# You should have received a copy of the GNU Lesser General Public
# License along with the GNU C Library; if not, see
# <http://www.gnu.org/licenses/>.

# Run this script with the first argument being the location of
# gnulib's update-copyright script.  Any other arguments are ignored.
# FSF copyright notices in the glibc source directory containing this
# script will be updated; glibc must then be built to update generated
# files.  Copyright dates in --version copyright notices are not
# updated.

set -e

export LC_ALL=C
export UPDATE_COPYRIGHT_FORCE=1
export UPDATE_COPYRIGHT_USE_INTERVALS=2
export UPDATE_COPYRIGHT_MAX_LINE_LENGTH=79

update_script=$1

if ! [ -f "$update_script" ]; then
  echo "error: first argument must point to gnulib update-copyright script" >&2
  exit 1
fi

cd "$(dirname "$0")/.."

files=$(find . -type f | sed 's|^\./||' | grep -v '^\.git/')

for f in $files; do
  case $f in
    COPYING | COPYING.LIB | manual/fdl-1.3.texi | manual/lgpl-2.1.texi)
      # Licenses imported verbatim from FSF sources.
      ;;
    manual/texinfo.tex | scripts/config.guess | scripts/config.sub \
      | scripts/install-sh | scripts/mkinstalldirs | scripts/move-if-change)
      # Other files imported verbatim from other GNU repositories.
      ;;
    po/*.po)
      # Files imported verbatim from the Translation Project.
      ;;
    INSTALL | intl/plural.c | locale/C-translit.h \
      | locale/programs/charmap-kw.h | locale/programs/locfile-kw.h \
      | po/libc.pot | sysdeps/gnu/errlist.c)
      # Generated files.
      ;;
    configure | */configure | preconfigure | */preconfigure)
      # Possibly generated files.
      if ! [ -f "$f.ac" ]; then
	"$update_script" "$f"
      fi
      ;;
    grp/initgroups.c | misc/bits/stab.def | posix/regex.h \
      | sysdeps/wordsize-32/divdi3.c)
      # Pre-1991 gaps in copyright years, so cannot use a single range.
      UPDATE_COPYRIGHT_USE_INTERVALS=1 "$update_script" "$f"
      ;;
    *)
      "$update_script" "$f"
      ;;
  esac
done
