ref: 02fa26f4cdb6b2da96afddb56d4482c67ba6ff78
dir: /src/tools/update-copyright-year/
eval '(exit $?0)' && eval 'exec perl -wS -i "$0" ${1+"$@"}' & eval 'exec perl -wS -i "$0" $argv:q' if 0; # Copyright (C) 2015-2022 by # Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, # and distributed under the terms of the FreeType project license, # LICENSE.TXT. By continuing to use, modify, or distribute this file you # indicate that you have read the license and understand and accept it # fully. # [Note: This script is expected to be called by the shell, which in turn # calls perl automatically. The nifty start-up code above is based on # gnulib's `update-copyright' script; it is a more portable replacement for # the shebang, using the first `perl' program in the shell's path instead.] # Usage: # # update-copyright-year file1 [file2 ...] # This script handles copyright entries like # # Copyright 2000 by # foobar # # or # # /* Copyright (c) 2000, 2001, 2004-2007 by */ # /* foobar */ # # and replaces them uniformly with # # Copyright (C) 2000-2021 # foobar # # and # # /* Copyright (C) 2000-2021 by */ # /* foobar */ # # (assuming that the current year is 2021). As can be seen, the line length # is retained if there is non-whitespace after the word `by' on the same # line. use strict; my (undef, undef, undef, undef, undef, $year, undef, undef, undef) = localtime(time); $year += 1900; my $replaced = 0; # Loop over all input files; option `-i' (issued at the very beginning of # this script) makes perl edit them in-place. while (<>) { # Only handle the first copyright notice in a file. if (!$replaced) { # First try: Search multiple copyright years. s { (?<begin>.*) Copyright (?<space1>(\ + | \ +\(C\)\ +)) (?<first>[12][0-9][0-9][0-9]) (?<middle>.+) (?<last>[12][0-9][0-9][0-9]) (?<space2>\ +) by (?<space3>\ *) (?<end>.*) } { # Fill line to the same length (if appropriate); we skip the middle # part but insert `(C)', three spaces, and `-'. my $space = length($+{space1}) + length($+{middle}) + length($+{space2}) + length($+{space3}) - (length("(C)") + 3 + 1); print "$+{begin}"; print "Copyright\ (C)\ $+{first}-$year\ by"; print ' ' x $space if length($+{end}); print "$+{end}\n"; $replaced = 1; }ex || # Second try: Search a single copyright year. s { (?<begin>.*) Copyright (?<space1>(\ + | \ +\(C\)\ +)) (?<first>[12][0-9][0-9][0-9]) (?<space2>\ +) by (?<space3>\ *) (?<end>.*) } { if ($+{first} < $year) { # Fill line to the same length (if appropriate); we insert three # spaces, the string `(C)', a `-', and the current year. my $space = length($+{space1}) + length($+{space2}) + length($+{space3}) - (length($year) + length("(C)") + 3 + 1); print "$+{begin}"; print "Copyright\ (C)\ $+{first}-$year\ by"; # If $space is negative this inserts nothing. print ' ' x $space if length($+{end}); print "$+{end}\n"; $replaced = 1; } else { # Fill line to the same length (if appropriate); we insert three # spaces and the string `(C)'. my $space = length($+{space1}) + length($+{space2}) + length($+{space3}) - (length("(C)") + 3); print "$+{begin}"; print "Copyright\ (C)\ $+{first}\ by"; # If $space is negative this inserts nothing. print ' ' x $space if length($+{end}); print "$+{end}\n"; $replaced = 1; } }ex || # Otherwise print line unaltered. print; } else { print; } } continue { # Reset $replaced before processing the next file. $replaced = 0 if eof; } # EOF