eval '(exit $?0)' && eval 'exec perl -wS -0777 -pi "$0" ${1+"$@"}'
  & eval 'exec perl -wS -0777 -pi "$0" $argv:q'
    if 0;
# Update an FSF copyright year list to include the current year.

my $VERSION = '2012-02-05.21:39'; # UTC

# Copyright (C) 2009-2012 Free Software Foundation, Inc.
#
# This program 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 3, or (at your option)
# any later version.
#
# This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.

# Written by Jim Meyering and Joel E. Denny

# The arguments to this script should be names of files that contain
# copyright statements to be updated.  The copyright holder's name
# defaults to "Free Software Foundation, Inc." but may be changed to
# any other name by using the "UPDATE_COPYRIGHT_HOLDER" environment
# variable.
#
# For example, you might wish to use the update-copyright target rule
# in maint.mk from gnulib's maintainer-makefile module.
#
# Iff a copyright statement is recognized in a file and the final
# year is not the current year, then the statement is updated for the
# new year and it is reformatted to:
#
#   1. Fit within 72 columns.
#   2. Convert 2-digit years to 4-digit years by prepending "19".
#   3. Expand copyright year intervals.  (See "Environment variables"
#      below.)
#
# A warning is printed for every file for which no copyright
# statement is recognized.
#
# Each file's copyright statement must be formatted correctly in
# order to be recognized.  For example, each of these is fine:
#
#   Copyright @copyright{} 1990-2005, 2007-2009 Free Software
#   Foundation, Inc.
#
#   # Copyright (C) 1990-2005, 2007-2009 Free Software
#   # Foundation, Inc.
#
#   /*
#    * Copyright &copy; 90,2005,2007-2009
#    * Free Software Foundation, Inc.
#    */
#
# However, the following format is not recognized because the line
# prefix changes after the first line:
#
#   ## Copyright (C) 1990-2005, 2007-2009 Free Software
#   #  Foundation, Inc.
#
# However, any correctly formatted copyright statement following
# a non-matching copyright statements would be recognized.
#
# The exact conditions that a file's copyright statement must meet
# to be recognized are:
#
#   1. It is the first copyright statement that meets all of the
#      following conditions.  Subsequent copyright statements are
#      ignored.
#   2. Its format is "Copyright (C)", then a list of copyright years,
#      and then the name of the copyright holder.
#   3. The "(C)" takes one of the following forms or is omitted
#      entirely:
#
#        A. (C)
#        B. (c)
#        C. @copyright{}
#        D. &copy;
#
#   4. The "Copyright" appears at the beginning of a line, except that it
#      may be prefixed by any sequence (e.g., a comment) of no more than
#      5 characters -- including white space.
#   5. Iff such a prefix is present, the same prefix appears at the
#      beginning of each remaining line within the FSF copyright
#      statement.  There is one exception in order to support C-style
#      comments: if the first line's prefix contains nothing but
#      whitespace surrounding a "/*", then the prefix for all subsequent
#      lines is the same as the first line's prefix except with each of
#      "/" and possibly "*" replaced by a " ".  The replacement of "*"
#      by " " is consistent throughout all subsequent lines.
#   6. Blank lines, even if preceded by the prefix, do not appear
#      within the FSF copyright statement.
#   7. Each copyright year is 2 or 4 digits, and years are separated by
#      commas or dashes.  Whitespace may appear after commas.
#
# Environment variables:
#
#   1. If UPDATE_COPYRIGHT_FORCE=1, a recognized FSF copyright statement
#      is reformatted even if it does not need updating for the new
#      year.  If unset or set to 0, only updated FSF copyright
#      statements are reformatted.
#   2. If UPDATE_COPYRIGHT_USE_INTERVALS=1, every series of consecutive
#      copyright years (such as 90, 1991, 1992-2007, 2008) in a
#      reformatted FSF copyright statement is collapsed to a single
#      interval (such as 1990-2008).  If unset or set to 0, all existing
#      copyright year intervals in a reformatted FSF copyright statement
#      are expanded instead.
#      If UPDATE_COPYRIGHT_USE_INTERVALS=2, convert a sequence with gaps
#      to the minimal containing range.  For example, convert
#      2000, 2004-2007, 2009 to 2000-2009.
#   3. For testing purposes, you can set the assumed current year in
#      UPDATE_COPYRIGHT_YEAR.
#   4. The default maximum line length for a copyright line is 72.
#      Set UPDATE_COPYRIGHT_MAX_LINE_LENGTH to use a different length.
#   5. Set UPDATE_COPYRIGHT_HOLDER if the copyright holder is other
#      than "Free Software Foundation, Inc.".

use strict;
use warnings;

my $copyright_re = 'Copyright';
my $circle_c_re = '(?:\([cC]\)|@copyright{}|&copy;)';
my $holder = $ENV{UPDATE_COPYRIGHT_HOLDER};
$holder ||= 'Free Software Foundation, Inc.';
my $prefix_max = 5;
my $margin = $ENV{UPDATE_COPYRIGHT_MAX_LINE_LENGTH};
!$margin || $margin !~ m/^\d+$/
  and $margin = 72;

my $tab_width = 8;

my $this_year = $ENV{UPDATE_COPYRIGHT_YEAR};
if (!$this_year || $this_year !~ m/^\d{4}$/)
  {
    my ($sec, $min, $hour, $mday, $month, $year) = localtime (time ());
    $this_year = $year + 1900;
  }

# Unless the file consistently uses "\r\n" as the EOL, use "\n" instead.
my $eol = /(?:^|[^\r])\n/ ? "\n" : "\r\n";

my $leading;
my $prefix;
my $ws_re;
my $stmt_re;
while (/(^|\n)(.{0,$prefix_max})$copyright_re/g)
  {
    $leading = "$1$2";
    $prefix = $2;
    if ($prefix =~ /^(\s*\/)\*(\s*)$/)
      {
        $prefix =~ s,/, ,;
        my $prefix_ws = $prefix;
        $prefix_ws =~ s/\*/ /; # Only whitespace.
        if (/\G(?:[^*\n]|\*[^\/\n])*\*?\n$prefix_ws/)
          {
            $prefix = $prefix_ws;
          }
      }
    $ws_re = '[ \t\r\f]'; # \s without \n
    $ws_re =
      "(?:$ws_re*(?:$ws_re|\\n" . quotemeta($prefix) . ")$ws_re*)";
    my $holder_re = $holder;
    $holder_re =~ s/\s/$ws_re/g;
    my $stmt_remainder_re =
      "(?:$ws_re$circle_c_re)?"
      . "$ws_re(?:(?:\\d\\d)?\\d\\d(?:,$ws_re?|-))*"
      . "((?:\\d\\d)?\\d\\d)$ws_re$holder_re";
    if (/\G$stmt_remainder_re/)
      {
        $stmt_re =
          quotemeta($leading) . "($copyright_re$stmt_remainder_re)";
        last;
      }
  }
if (defined $stmt_re)
  {
    /$stmt_re/ or die; # Should never die.
    my $stmt = $1;
    my $final_year_orig = $2;

    # Handle two-digit year numbers like "98" and "99".
    my $final_year = $final_year_orig;
    $final_year <= 99
      and $final_year += 1900;

    if ($final_year != $this_year)
      {
        # Update the year.
        $stmt =~ s/$final_year_orig/$final_year, $this_year/;
      }
    if ($final_year != $this_year || $ENV{'UPDATE_COPYRIGHT_FORCE'})
      {
        # Normalize all whitespace including newline-prefix sequences.
        $stmt =~ s/$ws_re/ /g;

        # Put spaces after commas.
        $stmt =~ s/, ?/, /g;

        # Convert 2-digit to 4-digit years.
        $stmt =~ s/(\b\d\d\b)/19$1/g;

        # Make the use of intervals consistent.
        if (!$ENV{UPDATE_COPYRIGHT_USE_INTERVALS})
          {
            $stmt =~ s/(\d{4})-(\d{4})/join(', ', $1..$2)/eg;
          }
        else
          {
            $stmt =~
              s/
                (\d{4})
                (?:
                  (,\ |-)
                  ((??{
                    if    ($2 eq '-') { '\d{4}'; }
                    elsif (!$3)       { $1 + 1;  }
                    else              { $3 + 1;  }
                  }))
                )+
              /$1-$3/gx;

            # When it's 2, emit a single range encompassing all year numbers.
            $ENV{UPDATE_COPYRIGHT_USE_INTERVALS} == 2
              and $stmt =~ s/\b(\d{4})\b.*\b(\d{4})\b/$1-$2/;
          }

        # Format within margin.
        my $stmt_wrapped;
        my $text_margin = $margin - length($prefix);
        if ($prefix =~ /^(\t+)/)
          {
            $text_margin -= length($1) * ($tab_width - 1);
          }
        while (length $stmt)
          {
            if (($stmt =~ s/^(.{1,$text_margin})(?: |$)//)
                || ($stmt =~ s/^([\S]+)(?: |$)//))
              {
                my $line = $1;
                $stmt_wrapped .= $stmt_wrapped ? "$eol$prefix" : $leading;
                $stmt_wrapped .= $line;
              }
            else
              {
                # Should be unreachable, but we don't want an infinite
                # loop if it can be reached.
                die;
              }
          }

        # Replace the old copyright statement.
        s/$stmt_re/$stmt_wrapped/;
      }
  }
else
  {
    print STDERR "$ARGV: warning: copyright statement not found\n";
  }

# Local variables:
# mode: perl
# indent-tabs-mode: nil
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "my $VERSION = '"
# time-stamp-format: "%:y-%02m-%02d.%02H:%02M"
# time-stamp-time-zone: "UTC"
# time-stamp-end: "'; # UTC"
# End:
