update_copyrights revision 43d2e7a90517587f4549a58af1b450e476eab8f6
333fe280eb574439ef3f828d8755dd9e243ec855Andreas Gustafsson#!/usr/local/bin/perl -w
276e28f813ffef042d5a6e9f3373ef4e2ad37996Mark Andrews#
a6a23642eaf383add7a0be045c01e7dd8278ccafAndreas Gustafsson# Copyright (C) 1998-2001, 2004-2010, 2012-2017 Internet Systems Consortium, Inc. ("ISC")
250ed9e230b3903b1b264dd1ed2f691fc7cd2f8fAndreas Gustafsson#
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews# This Source Code Form is subject to the terms of the Mozilla Public
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews# License, v. 2.0. If a copy of the MPL was not distributed with this
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews# file, You can obtain one at http://mozilla.org/MPL/2.0/.
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrewsrequire 5.002;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews# Map copyright owners to the files containing copyright messages.
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews# The first line of the copyright message is not in the file;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews# it is constructed by this script.
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews#
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews# Usage:
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews#
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews# perl util/update_copyrights <util/copyrights
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrewsmy %owner2filename = (
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews "" => "util/COPYRIGHT",
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews "NAI" => "util/COPYRIGHT.NAI",
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews "NOM" => "util/COPYRIGHT.NOM",
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews "BSDI" => "util/COPYRIGHT.BSDI",
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews "BRIEF" => "util/COPYRIGHT.BRIEF",
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews "PORTION" => "util/COPYRIGHT.PORTION",
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews# Map each copyright owner name to a reference to an array containing
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews# the lines of the copyright message.
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrewsmy %owner2text = ();
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrewsmy $keyword_pat = '\$(Id:.*|Revision:.*|Id|Revision)\$';
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrewsforeach $owner (keys %owner2filename) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews my $f = $owner2filename{$owner};
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews open(COPYRIGHT, "<$f") || die "can't open $f: $!";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews @copyright_text = <COPYRIGHT>;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews close(COPYRIGHT);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $owner2text{$owner} = [ @copyright_text ];
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews}
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrewsmy %file_types = ();
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrewsmy %file_years = ();
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrewsmy $years_list;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrewsmy $parent;
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater($dummy,$dummy,$dummy,$dummy,$this_month,$this_year,$dummy,$dummy,$dummy) = localtime(time());
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews$this_year += 1900;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrewswhile (<>) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews chomp;
250ed9e230b3903b1b264dd1ed2f691fc7cd2f8fAndreas Gustafsson ($file, $type, $years) = split(/\s+/);
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews $file_types{$file} = $type;
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews $file_years{$file} = $years;
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews}
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrewssub getyears {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $parent = $_[0];
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews $parent =~ s/PARENT://;
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews $years_list = $file_years{$parent};
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if (defined($years_list) && $years_list =~ /^PARENT:/) {
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews print "BAD PARENT:$parent\n";
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews undefine($years_list);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews}
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrewssub docbook {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $parent = $_[0];
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $parent =~ s/\.[^.]*$/.docbook/;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $years_list = $file_years{$parent};
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews}
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
0ddeab91cf922fd977f37318620b4c69dccf8364Automatic Updatersub copyright {
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews my $holder = shift;
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater my $result = "";
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater return $result unless (@_);
7a7a44400d49122d4cc207b43922a7b9c5afe443Automatic Updater $result = "$result <copyright>\n";
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson $result = "$result <year>$_</year>\n" foreach (@_);
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews $result = "$result <holder>$holder</holder>\n";
e2e4d321999340802f77adaacd19c797d04b4b95Automatic Updater $result = "$result </copyright>\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews return $result;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews}
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrewssub copyrights {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews my $a = copyright("Internet Systems Consortium, Inc. (\"ISC\")", @_);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews return "$a";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews}
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrewsforeach $file (keys %file_types) {
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson $typeandowner = $file_types{$file};
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson $years_list = $file_years{$file};
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater if ( ! -f $file ) {
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater print "$file: missing\n";
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater next;
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews # print "Doing: $file";
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews if ($years_list =~ /PARENT:/) {
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews getyears($years_list);
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews if (!defined $years_list) {
089c63b69cdf6803aa8901aae3f2fbae58969511Automatic Updater print "$file: has bad parent $parent\n";
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews next;
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews }
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews }
089c63b69cdf6803aa8901aae3f2fbae58969511Automatic Updater
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews # copyright notice is now generated from the source.
1f8dc520d4bbc5406d551724282df1e5f7626e19Automatic Updater next if ($years_list eq "DOCBOOK");
1f8dc520d4bbc5406d551724282df1e5f7626e19Automatic Updater
1f8dc520d4bbc5406d551724282df1e5f7626e19Automatic Updater if ($years_list eq "DOCBOOK") {
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson docbook($file);
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews if (!defined $years_list) {
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews print "$file: has bad parent $parent\n";
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews next;
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews }
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson }
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson @years = split(/,/, $years_list);
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews my ($type, $owner) = split(/\./, $typeandowner);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $owner = "" if !defined $owner;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson $textp = $owner2text{$owner};
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson if (!defined $textp) {
97bb3725292d3f74bcb0a32be6a76b2da34ba494Andreas Gustafsson print "$file: unknown copyright owner $owner\n";
428dc9698871ecfeda63eab31cd3523dd4befb31Mark Andrews next;
97bb3725292d3f74bcb0a32be6a76b2da34ba494Andreas Gustafsson }
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews if ($file eq "./CHANGES" || $file eq "./EXCLUDED" ||
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $file eq "./CHANGES.SE")
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews {
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson open(SOURCE, "<$file") || die "can't open $file: $!";
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson my $body = "";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews while (<SOURCE>) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews # Process leading white space.
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson # Remove 1-7 spaces followed by a tab into a single
276e28f813ffef042d5a6e9f3373ef4e2ad37996Mark Andrews # tab if at start of line or proceeded by tabs.
8b1cba45ade83893c009b37f47d5478e97eb61d2Automatic Updater s/^(\t*) {1,7}\t/$1\t/ while (/^\t* {1,7}\t/);
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews s/^(\s{0,3}\d*\.)\s(\[\w{1,5}\])\s+(\S+)/$1\t$2\t\t$3/;
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews s/^(\s{0,3}\d*\.)\s(\[\w{6,}\])\s+(\S+)/$1\t$2\t$3/;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews # Convert 8 spaces into tabs if at start of line
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews # or preceeded by tabs.
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews s/^(\t*) /$1\t/ while (/^\t* /);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews # Remove trailing white space.
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews s/[ \t]*$//;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $body = "$body$_";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $_ = $body;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews open(TARGET, ">$file.new") || die "can't open $file.new: $!";
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews print TARGET $_;
71eeac3530eabb7f70f4b6bdba5addb40a5bca27Mark Andrews close(TARGET);
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson close(SOURCE);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if (system("cmp -s $file.new $file") == 0) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews unlink("$file.new");
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews } else {
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews rename("$file.new", "$file")
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews or die "rename($file.new, $file): $!";
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson }
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews next if $type eq "X" or $type eq "BAT";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $before_copyright = "";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $c_comment = 0;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $shell_comment = 0;
97bb3725292d3f74bcb0a32be6a76b2da34ba494Andreas Gustafsson $m4_comment = 0;
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson $sgml_comment = 0;
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews $mkd_comment = 0;
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews $zone_comment = 0;
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews $man_comment = 0;
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews $python_comment = 0;
8dcabaace18bbfd2f9a09a0cb0f524cbb326cbabMark Andrews $python_bin_comment = 0;
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater $start_comment = "";
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater $end_comment = "";
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson $first = "";
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews if ($type =~ /^(C|YACC|CONF-C)$/) {
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews $c_comment = 1;
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson $start_comment = "/*\n";
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews $prefix = " * ";
9011c72c568aedd03709f56f21d639fd55944a74Automatic Updater $end_comment = " */\n";
4a71c59d2bf32585c5dd18f4630d5f10e56a1ab3Automatic Updater } elsif ($type =~ /^(SH|PERL|TCL|MAKE|CONF-SH|RNC)$/) {
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews $shell_comment = 1;
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews $prefix = "# ";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews } elsif ($type =~ /^PYTHON-BIN$/) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $python_bin_comment = 1;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $start_comment = "############################################################################\n";
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson $prefix = "# ";
1e6032fe392369df4645874f1f273bb8aa859c00Automatic Updater $end_comment = "############################################################################\n"
3cddb2c552ee6582e8db0849c28747f6b6ca57feAutomatic Updater } elsif ($type =~ /^PYTHON$/) {
3cddb2c552ee6582e8db0849c28747f6b6ca57feAutomatic Updater $python_comment = 1;
3cddb2c552ee6582e8db0849c28747f6b6ca57feAutomatic Updater $start_comment = "############################################################################\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $prefix = "# ";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $end_comment = "############################################################################\n"
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews } elsif ($type eq "ZONE" || $type eq "MC") {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $zone_comment = 1;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $prefix = "; ";
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson } elsif ($type eq "MAN") {
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson $man_comment = 1;
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson $prefix = ".\\\" ";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews } elsif ($type eq "M4") {
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson $m4_comment = 1;
2fd63cf561135572339d4e2ff0c06695e3dcf1baMark Andrews $prefix = "dnl ";
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson } elsif ($type eq "HTML" || $type eq "SGML") {
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson $sgml_comment = 1;
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews $start_comment = "<!--\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $prefix = " - ";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $end_comment = "-->\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews } elsif ($type eq "MKD") {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $mkd_comment = 1;
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson $start_comment = "<!--\n";
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson $prefix = " - ";
a3edcadfffbe617a419cdbe1bebb95f68a0eda1eMark Andrews $end_comment = "-->";
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson } elsif ($type eq "TXT") {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $prefix = "";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews } else {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews print "$file: type '$type' not supported yet; skipping\n";
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson next;
22f0b13f28a7df3b348b18848d0ccd745ea88c3cAndreas Gustafsson }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater ($nonspaceprefix = $prefix) =~ s/\s+$//;
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater
97bb3725292d3f74bcb0a32be6a76b2da34ba494Andreas Gustafsson open(SOURCE, "<$file") || die "can't open $file: $!";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $_ = <SOURCE>;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if ($type eq "YACC") {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews unless ($_ eq "%{\n") {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews print "$file: unexpected yacc file start ",
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews "(expected \"%{\\n\")\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews close(SOURCE);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews next;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $before_copyright = "$_";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $_ = <SOURCE>;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if ($c_comment && /^\/\*/) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $_ = <SOURCE>;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if ($_ !~ /[Cc]opyright/) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews print "$file: non-copyright comment\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews close(SOURCE);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews next;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if ($_ !~ /\*\//) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews while (<SOURCE>) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews last if $_ =~ /\*\//;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews } elsif ($shell_comment) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if (/^\#\!/) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $before_copyright = "$_#\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $_ = <SOURCE>;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $_ = <SOURCE> if $_ eq "#\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if (/^\#/) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if ($_ !~ /[Cc]opyright/) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews print "$file: non-copyright comment\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews close(SOURCE);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews next;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews while (<SOURCE>) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if ($_ !~ /^\#/) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $first = $_;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews last;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews } else {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $first = $_;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews } elsif ($python_comment || $python_bin_comment) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if ($python_bin_comment && /^\#\!/) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $before_copyright = "$_";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $_ = <SOURCE>;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $_ = <SOURCE> if $_ eq "#\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $_ = <SOURCE> if $_ eq "############################################################################\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews } elsif ($python_comment && /^\#/) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $_ = <SOURCE> if $_ eq "#\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $_ = <SOURCE> if $_ eq "############################################################################\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if (/^\#/) {
e2e4d321999340802f77adaacd19c797d04b4b95Automatic Updater if ($_ !~ /[Cc]opyright/) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews print "$file: non-copyright comment\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews close(SOURCE);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews next;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews while (<SOURCE>) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if ($_ !~ /^\#/) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $first = $_;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews last;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews } else {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $first = $_;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews } elsif (($m4_comment || $zone_comment || $man_comment) &&
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews /^\Q$nonspaceprefix\E/) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews while (/^\Q$nonspaceprefix\E\s*$/) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $_ = <SOURCE>;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if ($_ !~ /[Cc]opyright/) {
089c63b69cdf6803aa8901aae3f2fbae58969511Automatic Updater print "$file: non-copyright comment\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews close(SOURCE);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews next;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
089c63b69cdf6803aa8901aae3f2fbae58969511Automatic Updater while (<SOURCE>) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if ($_ !~ /^\Q$nonspaceprefix\E/ ||
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $_ =~ /$keyword_pat/) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $first = $_;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews last;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews } elsif ($sgml_comment) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $before_copyright = "";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews while (/^<!DOCTYPE/ || /^<!ENTITY/ || /^<\?xml-stylesheet/ || /^<\?xml /) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews # print "SGML: $_";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $before_copyright = "$before_copyright$_";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if (/\]>$/ ) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $_ = <SOURCE>;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews close(SOURCE) if (eof(SOURCE));
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews next;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if (/^<!DOCTYPE.*\[$/) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews while (!eof(SOURCE)) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $_ = <SOURCE>;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews next if (eof(SOURCE));
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater $before_copyright =
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews "$before_copyright$_";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if (/]>$/) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $_ = <SOURCE>;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews last;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews close(SOURCE) if (eof(SOURCE));
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews next;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if (/>$/ ) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $_ = <SOURCE>;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews close(SOURCE) if (eof(SOURCE));
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews next;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $_ = <SOURCE>;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews while (!eof(SOURCE) && ! /^<!/ ) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $before_copyright = "$before_copyright$_";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $_ = <SOURCE>;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if (eof(SOURCE)) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews close(SOURCE);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews next;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if (/^<!--/) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $_ = <SOURCE> if $_ eq "<!--\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if ($_ !~ /[Cc]opyright/) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews print "$file: non-copyright comment\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews close(SOURCE);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews next;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews while (defined($_)) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews last if s/.*-->//;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $_ = <SOURCE>;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews print "$file: unterminated comment\n"
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews unless defined($_);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if ($_ ne "\n") {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $first = $_;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews } else {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $first = <SOURCE>;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews } else {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $first = $_;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews } elsif ($mkd_comment) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $before_copyright = "";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if (/^<!/) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $_ = <SOURCE> if $_ eq "<!---\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if ($_ !~ /[Cc]opyright/) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews print "$file: non-copyright comment\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews close(SOURCE);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews next;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews while (defined($_)) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews last if s/.*--->//;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $_ = <SOURCE>;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews print "$file: unterminated comment\n"
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews unless defined($_);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if ($_ ne "\n") {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $first = $_;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews } else {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $first = <SOURCE>;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews } else {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $first = $_;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews } elsif ($type eq "TXT") {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if ($_ =~ /[Cc]opyright/) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $/ = ""; # paragraph at a time
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews while (<SOURCE>) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews # Not very maintainable, but ok enough for now.
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews last if /Portions of this code/;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews last unless
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews /[Cc]opyright/ ||
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews /This Source Code Form is subject to the terms of the Mozilla Public/ ||
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews /If a copy of the MPL was not distributed with this/ ||
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews /You can obtain one at http:\/\/mozilla.org\/MPL\/2.0\// ||
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews /See COPYRIGHT in the source root/ ||
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews /Permission to use, copy, modify, and / ||
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews /THE SOFTWARE IS PROVIDED "AS IS" AND /;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $/ = "\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $first = $_;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews } else {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $first = $_;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $first = "" if ! defined($first);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews open(TARGET, ">$file.new") || die "can't open $file.new: $!";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews print TARGET $before_copyright if $before_copyright;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews print TARGET $start_comment if $start_comment;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
3b2c6af63e0367c6eabe0a21ca23841ca87cd22fAutomatic Updater $sysyears = "";
e2e4d321999340802f77adaacd19c797d04b4b95Automatic Updater $nomyears = "";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews #
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews # Nominum: up to 2001.
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews #
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $last_year = 0;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $anchor_year = 0;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $years = "";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews foreach $year (@years) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if ($year >= 2002) { next; }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if ($last_year != 0 && $year == $last_year + 1) {
089c63b69cdf6803aa8901aae3f2fbae58969511Automatic Updater if ($year > $anchor_year + 1) {
089c63b69cdf6803aa8901aae3f2fbae58969511Automatic Updater substr($years, $anchor_end) = "-$year";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews } else {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $years .= ", $year";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews } else {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $years .= $last_year == 0 ? "$year" : ", $year";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews #if ($anchor_year != 0) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews # print "$file: noncontiguous year: ",
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews # "$year != $last_year + 1\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews #}
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $anchor_year = $year;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $anchor_end = length($years);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $last_year = $year;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $nomyears = $years;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews #
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews # Internet Systems Consortium: 2004 onwards.
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews #
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $last_year = 0;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $anchor_year = 0;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $years = "";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $anchor_end = length($years);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews my $andor = 0;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews my $noid = 0;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews foreach $year (@years) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $andor = 1 if ($year >= 2007);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $noid = 1 if ($year > 2012 || ($year == 2012 && $this_month >= 5) );
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if ($last_year != 0 && $year == $last_year + 1) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if ($year > $anchor_year + 1) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews substr($years, $anchor_end) = "-$year";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews } else {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $years .= ", $year";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews } else {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $years .= $last_year == 0 ? "$year" : ", $year";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews #if ($anchor_year != 0) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews # print "$file: noncontiguous year: ",
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews # "$year != $last_year + 1\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews #}
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $anchor_year = $year;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $anchor_end = length($years);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $last_year = $year;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
3cddb2c552ee6582e8db0849c28747f6b6ca57feAutomatic Updater $sysyears = $years;
3cddb2c552ee6582e8db0849c28747f6b6ca57feAutomatic Updater
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews # make a copy
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews @lines = @$textp;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews foreach $_ (@lines) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews next if (/\@SYSYEARS\@/ && $sysyears eq "");
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews s:modify, and distribute:modify, and/or distribute: if ($andor);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews print TARGET (/^$/ ? $nonspaceprefix : $prefix);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews s/\@SYSYEARS\@/$sysyears/;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews s/\@NOMYEARS\@/$nomyears/;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews print TARGET "$_";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews print TARGET $end_comment if $end_comment;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if ($first eq "") {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $first = <SOURCE>;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if (defined($first)) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if ($type eq 'MAN') {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews print TARGET "$nonspaceprefix\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews } else {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews print TARGET "\n";
3b2c6af63e0367c6eabe0a21ca23841ca87cd22fAutomatic Updater }
e2e4d321999340802f77adaacd19c797d04b4b95Automatic Updater
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if (($type eq "C" || $type eq "CONF-C") &&
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $sysyears =~ /$this_year/) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews my $body = "";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews while (<SOURCE>) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews # Process leading white space.
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews # Remove 1-7 spaces followed by a tab into a single
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews # tab if at start of line or proceeded by tabs.
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews s/^(\t*) {1,7}\t/$1\t/ while (/^\t* {1,7}\t/);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews # Convert 8 spaces into tabs if at start of line
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews # or preceeded by tabs.
089c63b69cdf6803aa8901aae3f2fbae58969511Automatic Updater s/^(\t*) {8}/$1\t/ while (/^\t* {8}/);
089c63b69cdf6803aa8901aae3f2fbae58969511Automatic Updater # Remove trailing white space.
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews s/[ \t]*$//;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $body = "$body$_";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $_ = $body;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews } elsif (($type eq "SGML" || $type eq "HTML" ||
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $type eq "MAKE") &&
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $sysyears =~ /$this_year/) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews my $body = "";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews while (<SOURCE>) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews # Remove trailing white space.
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews s/[ \t]*$//;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $body = "$body$_";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $_ = $body;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews } else {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews undef $/;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $_ = <SOURCE>;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $/ = "\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if ($type eq 'SGML' && m:<articleinfo>.*?</articleinfo>:s) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews # print "docinfo: $file\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews my $r = copyrights(@years);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews s:<articleinfo>.*?</articleinfo>:<articleinfo>\n$r </articleinfo>:s;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if ($type eq 'SGML' && m:<docinfo>.*?</docinfo>:s) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews # print "docinfo: $file\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews my $r = copyrights(@years);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews s:<docinfo>.*?</docinfo>:<docinfo>\n$r </docinfo>:s;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if ($type eq 'SGML' && m:<bookinfo>.*?</bookinfo>:s) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews # print "bookinfo: $file\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews my $r = copyrights(@years);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews $r .= " <xi:include href=\"releaseinfo.xml\"/>\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews s:<bookinfo>.*?</bookinfo>:<bookinfo>\n$r </bookinfo>:s;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews if ($type eq 'SGML' && m:<!-- insert copyright start -->.*?<!-- insert copyright end -->:s) {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews my $r = copyrights(@years);
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews s:<!-- insert copyright start -->.*?<!-- insert copyright end -->:<!-- insert copyright start -->\n$r <!-- insert copyright end -->:s;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews }
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews
3cddb2c552ee6582e8db0849c28747f6b6ca57feAutomatic Updater my ($start, $end);
3cddb2c552ee6582e8db0849c28747f6b6ca57feAutomatic Updater if ($type =~ /^PYTHON(|-BIN)$/) {
3cddb2c552ee6582e8db0849c28747f6b6ca57feAutomatic Updater ($start = $prefix) =~ s/\s*\n//;
3cddb2c552ee6582e8db0849c28747f6b6ca57feAutomatic Updater $end = "\n";
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews } elsif ($start_comment ne "") {
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews ($start = $start_comment) =~ s/\s*\n/ /;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews ($end = $end_comment) =~ s/^\s*(.*)\n/ $1\n/;
848dcebe28e032abfc66e7f10686e1b04a8516feMark Andrews } elsif ($prefix ne "") {
113251976d99be74da788bdb78300957b77a1381Andreas Gustafsson ($start = $prefix) =~ s/\s*\n//;
$end = "\n";
} else {
$start = "";
$end = "\n";
}
if (!$noid && $first !~ /$keyword_pat/ &&
(!defined($_) || $_ !~ /$keyword_pat/)) {
$end = "\n$nonspaceprefix" if ($type eq "MAN");
print TARGET "$start\$";
print TARGET "Id";
print TARGET "\$$end\n";
}
print TARGET $first if $first !~ /^\s*$/;
print TARGET $_ if (defined($_));
}
close(TARGET);
close(SOURCE);
$mode = (stat $file)[2]&511;
chmod $mode, "$file.new";
if (system("cmp -s $file.new $file") == 0) {
unlink("$file.new");
} else {
rename("$file.new", "$file")
or die "rename($file.new, $file): $!";
}
}