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

my $VERSION = '2016-01-12.23:13'; # UTC

# Copyright (C) 2009-2017 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\{}|\\\\\(co|&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/\b$final_year_orig\b/$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: "UTC0"
# time-stamp-end: "'; # UTC"
# End:
