update_copyrights revision 59663800d2ec04777dae2791dd92aa563faf94c8
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder#!/usr/local/bin/perl -w
306763c67bb99228487345b32ab8c5c6cd41f23cChristian Maeder#
0ea2cddb8715a770e646895e16b7b8085f49167cChristian Maeder# Copyright (C) 1998-2001, 2004-2010, 2012-2016 Internet Systems Consortium, Inc. ("ISC")
97018cf5fa25b494adffd7e9b4e87320dae6bf47Christian Maeder#
306763c67bb99228487345b32ab8c5c6cd41f23cChristian Maeder# This Source Code Form is subject to the terms of the Mozilla Public
b4fbc96e05117839ca409f5f20f97b3ac872d1edTill Mossakowski# License, v. 2.0. If a copy of the MPL was not distributed with this
306763c67bb99228487345b32ab8c5c6cd41f23cChristian Maeder# file, You can obtain one at http://mozilla.org/MPL/2.0/.
306763c67bb99228487345b32ab8c5c6cd41f23cChristian Maeder
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maederrequire 5.002;
f3a94a197960e548ecd6520bb768cb0d547457bbChristian Maeder
679d3f541f7a9ede4079e045f7758873bb901872Till Mossakowski# Map copyright owners to the files containing copyright messages.
679d3f541f7a9ede4079e045f7758873bb901872Till Mossakowski# The first line of the copyright message is not in the file;
306763c67bb99228487345b32ab8c5c6cd41f23cChristian Maeder# it is constructed by this script.
306763c67bb99228487345b32ab8c5c6cd41f23cChristian Maeder#
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder# Usage:
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder#
d21dd452cd68abade683103a5c0cfe6d02c5f17bTill Mossakowski# perl util/update_copyrights <util/copyrights
d21dd452cd68abade683103a5c0cfe6d02c5f17bTill Mossakowski
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maedermy %owner2filename = (
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder "" => "util/COPYRIGHT",
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder "NAI" => "util/COPYRIGHT.NAI",
c83546084a1344bb2ef752b83d0e082823508db2Christian Maeder "NOM" => "util/COPYRIGHT.NOM",
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder "BSDI" => "util/COPYRIGHT.BSDI",
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder "BRIEF" => "util/COPYRIGHT.BRIEF",
f69658e57cba7ecb37c0d84181f4c563215c2534Till Mossakowski "PORTION" => "util/COPYRIGHT.PORTION",
ba904a15082557e939db689fcfba0c68c9a4f740Christian Maeder);
7bf4436b6f9987b070033a323757b206c898c1beChristian Maeder
ba904a15082557e939db689fcfba0c68c9a4f740Christian Maeder# Map each copyright owner name to a reference to an array containing
0799b5dc3f06d2640e66e9ab54b8b217348fd719Christian Maeder# the lines of the copyright message.
2d2826f9db2c17275f91b0104940a60a2f9fd44dChristian Maeder
ba904a15082557e939db689fcfba0c68c9a4f740Christian Maedermy %owner2text = ();
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maedermy $keyword_pat = '\$(Id:.*|Revision:.*|Id|Revision)\$';
ba904a15082557e939db689fcfba0c68c9a4f740Christian Maeder
e182d0ec56025d97d74829cac75ee31eec12b093Maciek Makowskiforeach $owner (keys %owner2filename) {
c83546084a1344bb2ef752b83d0e082823508db2Christian Maeder my $f = $owner2filename{$owner};
ba904a15082557e939db689fcfba0c68c9a4f740Christian Maeder open(COPYRIGHT, "<$f") || die "can't open $f: $!";
ba904a15082557e939db689fcfba0c68c9a4f740Christian Maeder @copyright_text = <COPYRIGHT>;
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski close(COPYRIGHT);
56cd0da55d058b262b1626ddcd78db6bd9a90551Christian Maeder $owner2text{$owner} = [ @copyright_text ];
ba904a15082557e939db689fcfba0c68c9a4f740Christian Maeder}
ba904a15082557e939db689fcfba0c68c9a4f740Christian Maeder
c616e681da8c052b62e14247fea522da099ac0e4Christian Maedermy %file_types = ();
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowskimy %file_years = ();
43b4c41fbb07705c9df321221ab9cb9832460407Christian Maedermy $years_list;
43b4c41fbb07705c9df321221ab9cb9832460407Christian Maedermy $parent;
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder($dummy,$dummy,$dummy,$dummy,$this_month,$this_year,$dummy,$dummy,$dummy) = localtime(time());
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder$this_year += 1900;
b0294d73dcefc502ddaa13e18b46103a5916971fTill Mossakowski
c83546084a1344bb2ef752b83d0e082823508db2Christian Maederwhile (<>) {
c83546084a1344bb2ef752b83d0e082823508db2Christian Maeder chomp;
c83546084a1344bb2ef752b83d0e082823508db2Christian Maeder ($file, $type, $years) = split(/\s+/);
c83546084a1344bb2ef752b83d0e082823508db2Christian Maeder $file_types{$file} = $type;
c83546084a1344bb2ef752b83d0e082823508db2Christian Maeder $file_years{$file} = $years;
c83546084a1344bb2ef752b83d0e082823508db2Christian Maeder}
c83546084a1344bb2ef752b83d0e082823508db2Christian Maeder
c83546084a1344bb2ef752b83d0e082823508db2Christian Maedersub getyears {
c83546084a1344bb2ef752b83d0e082823508db2Christian Maeder $parent = $_[0];
c83546084a1344bb2ef752b83d0e082823508db2Christian Maeder $parent =~ s/PARENT://;
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski $years_list = $file_years{$parent};
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski if (defined($years_list) && $years_list =~ /^PARENT:/) {
74885352ea11b26253d453af28dc904dadc4d530Christian Maeder print "BAD PARENT:$parent\n";
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder undefine($years_list);
74885352ea11b26253d453af28dc904dadc4d530Christian Maeder }
3bcd9d942601d59dd55a6069d8b2d1c33d7ced0eChristian Maeder}
21dae7237ac384abdb94a81e00b3f099873ec623Till Mossakowski
21dae7237ac384abdb94a81e00b3f099873ec623Till Mossakowskisub docbook {
3bcd9d942601d59dd55a6069d8b2d1c33d7ced0eChristian Maeder $parent = $_[0];
21dae7237ac384abdb94a81e00b3f099873ec623Till Mossakowski $parent =~ s/\.[^.]*$/.docbook/;
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $years_list = $file_years{$parent};
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder}
a3bcb365497d592616a4e527b426ec210dcd385cChristian Maeder
f0e85ee7e4accfc01f46aa0363acc59fcd248e8aTill Mossakowskisub copyright {
f0e85ee7e4accfc01f46aa0363acc59fcd248e8aTill Mossakowski my $holder = shift;
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder my $result = "";
f0e85ee7e4accfc01f46aa0363acc59fcd248e8aTill Mossakowski return $result unless (@_);
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $result = "$result <copyright>\n";
a3bcb365497d592616a4e527b426ec210dcd385cChristian Maeder $result = "$result <year>$_</year>\n" foreach (@_);
3bcd9d942601d59dd55a6069d8b2d1c33d7ced0eChristian Maeder $result = "$result <holder>$holder</holder>\n";
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $result = "$result </copyright>\n";
3bcd9d942601d59dd55a6069d8b2d1c33d7ced0eChristian Maeder return $result;
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder}
a3bcb365497d592616a4e527b426ec210dcd385cChristian Maeder
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maedersub copyrights {
3bcd9d942601d59dd55a6069d8b2d1c33d7ced0eChristian Maeder my $a = copyright("Internet Systems Consortium, Inc. (\"ISC\")", @_);
3bcd9d942601d59dd55a6069d8b2d1c33d7ced0eChristian Maeder return "$a";
3bcd9d942601d59dd55a6069d8b2d1c33d7ced0eChristian Maeder}
3bcd9d942601d59dd55a6069d8b2d1c33d7ced0eChristian Maeder
a3bcb365497d592616a4e527b426ec210dcd385cChristian Maederforeach $file (keys %file_types) {
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $typeandowner = $file_types{$file};
a3bcb365497d592616a4e527b426ec210dcd385cChristian Maeder $years_list = $file_years{$file};
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder
3bcd9d942601d59dd55a6069d8b2d1c33d7ced0eChristian Maeder if ( ! -f $file ) {
3bcd9d942601d59dd55a6069d8b2d1c33d7ced0eChristian Maeder print "$file: missing\n";
3bcd9d942601d59dd55a6069d8b2d1c33d7ced0eChristian Maeder next;
3bcd9d942601d59dd55a6069d8b2d1c33d7ced0eChristian Maeder }
a3bcb365497d592616a4e527b426ec210dcd385cChristian Maeder # print "Doing: $file";
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder
a3bcb365497d592616a4e527b426ec210dcd385cChristian Maeder if ($years_list =~ /PARENT:/) {
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder getyears($years_list);
15bceb77af626f79747d46d35979640f229a4c71Christian Maeder if (!defined $years_list) {
0ea2cddb8715a770e646895e16b7b8085f49167cChristian Maeder print "$file: has bad parent $parent\n";
15bceb77af626f79747d46d35979640f229a4c71Christian Maeder next;
15bceb77af626f79747d46d35979640f229a4c71Christian Maeder }
15bceb77af626f79747d46d35979640f229a4c71Christian Maeder }
0ea2cddb8715a770e646895e16b7b8085f49167cChristian Maeder
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder # copyright notice is now generated from the source.
0ea2cddb8715a770e646895e16b7b8085f49167cChristian Maeder next if ($years_list eq "DOCBOOK");
0ea2cddb8715a770e646895e16b7b8085f49167cChristian Maeder
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder if ($years_list eq "DOCBOOK") {
0ea2cddb8715a770e646895e16b7b8085f49167cChristian Maeder docbook($file);
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder if (!defined $years_list) {
a3bcb365497d592616a4e527b426ec210dcd385cChristian Maeder print "$file: has bad parent $parent\n";
21dae7237ac384abdb94a81e00b3f099873ec623Till Mossakowski next;
21dae7237ac384abdb94a81e00b3f099873ec623Till Mossakowski }
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder }
a3bcb365497d592616a4e527b426ec210dcd385cChristian Maeder
a3bcb365497d592616a4e527b426ec210dcd385cChristian Maeder @years = split(/,/, $years_list);
a3bcb365497d592616a4e527b426ec210dcd385cChristian Maeder
a3bcb365497d592616a4e527b426ec210dcd385cChristian Maeder my ($type, $owner) = split(/\./, $typeandowner);
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $owner = "" if !defined $owner;
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $textp = $owner2text{$owner};
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder if (!defined $textp) {
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder print "$file: unknown copyright owner $owner\n";
0ea2cddb8715a770e646895e16b7b8085f49167cChristian Maeder next;
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder }
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder if ($file eq "./CHANGES" || $file eq "./EXCLUDED" ||
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $file eq "./CHANGES.SE")
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder {
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder open(SOURCE, "<$file") || die "can't open $file: $!";
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder my $body = "";
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder while (<SOURCE>) {
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder # Process leading white space.
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder # Remove 1-7 spaces followed by a tab into a single
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder # tab if at start of line or proceeded by tabs.
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder s/^(\t*) {1,7}\t/$1\t/ while (/^\t* {1,7}\t/);
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder s/^(\s{0,3}\d*\.)\s(\[\w{1,5}\])\s+(\S+)/$1\t$2\t\t$3/;
15bceb77af626f79747d46d35979640f229a4c71Christian Maeder s/^(\s{0,3}\d*\.)\s(\[\w{6,}\])\s+(\S+)/$1\t$2\t$3/;
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder # Convert 8 spaces into tabs if at start of line
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder # or preceeded by tabs.
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder s/^(\t*) /$1\t/ while (/^\t* /);
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder # Remove trailing white space.
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder s/[ \t]*$//;
a3bcb365497d592616a4e527b426ec210dcd385cChristian Maeder $body = "$body$_";
21dae7237ac384abdb94a81e00b3f099873ec623Till Mossakowski }
c616e681da8c052b62e14247fea522da099ac0e4Christian Maeder $_ = $body;
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder open(TARGET, ">$file.new") || die "can't open $file.new: $!";
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder print TARGET $_;
0ea2cddb8715a770e646895e16b7b8085f49167cChristian Maeder close(TARGET);
3bcd9d942601d59dd55a6069d8b2d1c33d7ced0eChristian Maeder close(SOURCE);
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder if (system("cmp -s $file.new $file") == 0) {
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder unlink("$file.new");
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder } else {
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder rename("$file.new", "$file")
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder or die "rename($file.new, $file): $!";
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder }
3bcd9d942601d59dd55a6069d8b2d1c33d7ced0eChristian Maeder }
74885352ea11b26253d453af28dc904dadc4d530Christian Maeder
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder next if $type eq "X" or $type eq "BAT";
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder $before_copyright = "";
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $c_comment = 0;
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $shell_comment = 0;
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $m4_comment = 0;
aebf36d7483e5c012eff154d0b76de400d8fe3fcTill Mossakowski $sgml_comment = 0;
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder $mkd_comment = 0;
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder $zone_comment = 0;
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder $man_comment = 0;
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder $python_comment = 0;
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $python_bin_comment = 0;
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $start_comment = "";
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $end_comment = "";
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder $first = "";
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder if ($type =~ /^(C|YACC|CONF-C)$/) {
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $c_comment = 1;
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $start_comment = "/*\n";
a3bcb365497d592616a4e527b426ec210dcd385cChristian Maeder $prefix = " * ";
2d2826f9db2c17275f91b0104940a60a2f9fd44dChristian Maeder $end_comment = " */\n";
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder } elsif ($type =~ /^(SH|PERL|TCL|MAKE|CONF-SH|RNC)$/) {
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $shell_comment = 1;
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $prefix = "# ";
74885352ea11b26253d453af28dc904dadc4d530Christian Maeder } elsif ($type =~ /^PYTHON-BIN$/) {
26ed2a19326560786ff94dfc462309d6d5d862a8Heng Jiang $python_bin_comment = 1;
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski $start_comment = "############################################################################\n";
21dae7237ac384abdb94a81e00b3f099873ec623Till Mossakowski $prefix = "# ";
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski $end_comment = "############################################################################\n"
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski } elsif ($type =~ /^PYTHON$/) {
15bceb77af626f79747d46d35979640f229a4c71Christian Maeder $python_comment = 1;
21dae7237ac384abdb94a81e00b3f099873ec623Till Mossakowski $start_comment = "############################################################################\n";
21dae7237ac384abdb94a81e00b3f099873ec623Till Mossakowski $prefix = "# ";
e379124f467e5d0ef7d3c0ca238bff0521f70831Till Mossakowski $end_comment = "############################################################################\n"
e379124f467e5d0ef7d3c0ca238bff0521f70831Till Mossakowski } elsif ($type eq "ZONE" || $type eq "MC") {
503e836b34d3abed34520eb4a0a345b5e13f248dTill Mossakowski $zone_comment = 1;
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $prefix = "; ";
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder } elsif ($type eq "MAN") {
503e836b34d3abed34520eb4a0a345b5e13f248dTill Mossakowski $man_comment = 1;
e379124f467e5d0ef7d3c0ca238bff0521f70831Till Mossakowski $prefix = ".\\\" ";
ff49754b0e0b7ca133a66ce6c0b240c55128cde1Heng Jiang } elsif ($type eq "M4") {
e379124f467e5d0ef7d3c0ca238bff0521f70831Till Mossakowski $m4_comment = 1;
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $prefix = "dnl ";
e379124f467e5d0ef7d3c0ca238bff0521f70831Till Mossakowski } elsif ($type eq "HTML" || $type eq "SGML") {
e379124f467e5d0ef7d3c0ca238bff0521f70831Till Mossakowski $sgml_comment = 1;
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $start_comment = "<!--\n";
e379124f467e5d0ef7d3c0ca238bff0521f70831Till Mossakowski $prefix = " - ";
e379124f467e5d0ef7d3c0ca238bff0521f70831Till Mossakowski $end_comment = "-->\n";
e379124f467e5d0ef7d3c0ca238bff0521f70831Till Mossakowski } elsif ($type eq "MKD") {
ff49754b0e0b7ca133a66ce6c0b240c55128cde1Heng Jiang $mkd_comment = 1;
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder $start_comment = "<!--\n";
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $prefix = " - ";
8db14bfdbfec2f153de435718d748fe5e22fd634Heng Jiang $end_comment = "-->";
ff49754b0e0b7ca133a66ce6c0b240c55128cde1Heng Jiang } elsif ($type eq "TXT") {
50ea34ea29d0121f3e692b7029b09d28dc7988fdTill Mossakowski $prefix = "";
26ed2a19326560786ff94dfc462309d6d5d862a8Heng Jiang } else {
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder print "$file: type '$type' not supported yet; skipping\n";
26ed2a19326560786ff94dfc462309d6d5d862a8Heng Jiang next;
26ed2a19326560786ff94dfc462309d6d5d862a8Heng Jiang }
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder ($nonspaceprefix = $prefix) =~ s/\s+$//;
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder open(SOURCE, "<$file") || die "can't open $file: $!";
26ed2a19326560786ff94dfc462309d6d5d862a8Heng Jiang $_ = <SOURCE>;
26ed2a19326560786ff94dfc462309d6d5d862a8Heng Jiang if ($type eq "YACC") {
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder unless ($_ eq "%{\n") {
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder print "$file: unexpected yacc file start ",
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder "(expected \"%{\\n\")\n";
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder close(SOURCE);
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder next;
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder }
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $before_copyright = "$_";
2d2826f9db2c17275f91b0104940a60a2f9fd44dChristian Maeder $_ = <SOURCE>;
2d2826f9db2c17275f91b0104940a60a2f9fd44dChristian Maeder }
2d2826f9db2c17275f91b0104940a60a2f9fd44dChristian Maeder if ($c_comment && /^\/\*/) {
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder $_ = <SOURCE>;
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski if ($_ !~ /[Cc]opyright/) {
948f37fdb71c544ff4c907bc5863702648cf36e4Christian Maeder print "$file: non-copyright comment\n";
948f37fdb71c544ff4c907bc5863702648cf36e4Christian Maeder close(SOURCE);
948f37fdb71c544ff4c907bc5863702648cf36e4Christian Maeder next;
948f37fdb71c544ff4c907bc5863702648cf36e4Christian Maeder }
948f37fdb71c544ff4c907bc5863702648cf36e4Christian Maeder if ($_ !~ /\*\//) {
948f37fdb71c544ff4c907bc5863702648cf36e4Christian Maeder while (<SOURCE>) {
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski last if $_ =~ /\*\//;
21dae7237ac384abdb94a81e00b3f099873ec623Till Mossakowski }
21dae7237ac384abdb94a81e00b3f099873ec623Till Mossakowski }
21dae7237ac384abdb94a81e00b3f099873ec623Till Mossakowski } elsif ($shell_comment) {
21dae7237ac384abdb94a81e00b3f099873ec623Till Mossakowski if (/^\#\!/) {
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder $before_copyright = "$_#\n";
e379124f467e5d0ef7d3c0ca238bff0521f70831Till Mossakowski $_ = <SOURCE>;
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $_ = <SOURCE> if $_ eq "#\n";
e379124f467e5d0ef7d3c0ca238bff0521f70831Till Mossakowski }
948f37fdb71c544ff4c907bc5863702648cf36e4Christian Maeder if (/^\#/) {
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder if ($_ !~ /[Cc]opyright/) {
db7143998eee23e3d781f1f1e97e953bb831df1fTill Mossakowski print "$file: non-copyright comment\n";
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder close(SOURCE);
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder next;
db7143998eee23e3d781f1f1e97e953bb831df1fTill Mossakowski }
e379124f467e5d0ef7d3c0ca238bff0521f70831Till Mossakowski while (<SOURCE>) {
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder if ($_ !~ /^\#/) {
e379124f467e5d0ef7d3c0ca238bff0521f70831Till Mossakowski $first = $_;
74e82e43f5787027c5d4e523397525a259d6d001Christian Maeder last;
b645cf3dc1e449038ed291bbd11fcc6e02b2fc7fChristian Maeder }
e379124f467e5d0ef7d3c0ca238bff0521f70831Till Mossakowski }
e379124f467e5d0ef7d3c0ca238bff0521f70831Till Mossakowski } else {
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder $first = $_;
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski }
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski } elsif ($python_comment || $python_bin_comment) {
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski if ($python_bin_comment && /^\#\!/) {
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski $before_copyright = "$_";
21dae7237ac384abdb94a81e00b3f099873ec623Till Mossakowski $_ = <SOURCE>;
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski $_ = <SOURCE> if $_ eq "#\n";
948f37fdb71c544ff4c907bc5863702648cf36e4Christian Maeder $_ = <SOURCE> if $_ eq "############################################################################\n";
6a57a555c8ef0a79aa5d20e1d721400dbffa564aMaciek Makowski } elsif ($python_comment && /^\#/) {
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski $_ = <SOURCE> if $_ eq "#\n";
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski $_ = <SOURCE> if $_ eq "############################################################################\n";
e182d0ec56025d97d74829cac75ee31eec12b093Maciek Makowski }
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder if (/^\#/) {
2d2826f9db2c17275f91b0104940a60a2f9fd44dChristian Maeder if ($_ !~ /[Cc]opyright/) {
948f37fdb71c544ff4c907bc5863702648cf36e4Christian Maeder print "$file: non-copyright comment\n";
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder close(SOURCE);
2d2826f9db2c17275f91b0104940a60a2f9fd44dChristian Maeder next;
320198216ed3bde106b509c4024b857ce4345880Maciek Makowski }
320198216ed3bde106b509c4024b857ce4345880Maciek Makowski while (<SOURCE>) {
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder if ($_ !~ /^\#/) {
e182d0ec56025d97d74829cac75ee31eec12b093Maciek Makowski $first = $_;
320198216ed3bde106b509c4024b857ce4345880Maciek Makowski last;
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder }
b645cf3dc1e449038ed291bbd11fcc6e02b2fc7fChristian Maeder }
e182d0ec56025d97d74829cac75ee31eec12b093Maciek Makowski } else {
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $first = $_;
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder }
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder } elsif (($m4_comment || $zone_comment || $man_comment) &&
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder /^\Q$nonspaceprefix\E/) {
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder while (/^\Q$nonspaceprefix\E\s*$/) {
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $_ = <SOURCE>;
e182d0ec56025d97d74829cac75ee31eec12b093Maciek Makowski }
e182d0ec56025d97d74829cac75ee31eec12b093Maciek Makowski
503e836b34d3abed34520eb4a0a345b5e13f248dTill Mossakowski if ($_ !~ /[Cc]opyright/) {
948f37fdb71c544ff4c907bc5863702648cf36e4Christian Maeder print "$file: non-copyright comment\n";
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder close(SOURCE);
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder next;
e182d0ec56025d97d74829cac75ee31eec12b093Maciek Makowski }
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder while (<SOURCE>) {
e182d0ec56025d97d74829cac75ee31eec12b093Maciek Makowski if ($_ !~ /^\Q$nonspaceprefix\E/ ||
e182d0ec56025d97d74829cac75ee31eec12b093Maciek Makowski $_ =~ /$keyword_pat/) {
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder $first = $_;
b645cf3dc1e449038ed291bbd11fcc6e02b2fc7fChristian Maeder last;
e182d0ec56025d97d74829cac75ee31eec12b093Maciek Makowski }
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder }
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder } elsif ($sgml_comment) {
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder $before_copyright = "";
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder while (/^<!DOCTYPE/ || /^<!ENTITY/ || /^<\?xml-stylesheet/ || /^<\?xml /) {
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder # print "SGML: $_";
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder $before_copyright = "$before_copyright$_";
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski if (/\]>$/ ) {
b4b6cffb6746d672e2bb558b72f616f97ac98316Till Mossakowski $_ = <SOURCE>;
a3bcb365497d592616a4e527b426ec210dcd385cChristian Maeder close(SOURCE) if (eof(SOURCE));
a3bcb365497d592616a4e527b426ec210dcd385cChristian Maeder next;
948f37fdb71c544ff4c907bc5863702648cf36e4Christian Maeder }
948f37fdb71c544ff4c907bc5863702648cf36e4Christian Maeder if (/^<!DOCTYPE.*\[$/) {
b4b6cffb6746d672e2bb558b72f616f97ac98316Till Mossakowski while (!eof(SOURCE)) {
b4b6cffb6746d672e2bb558b72f616f97ac98316Till Mossakowski $_ = <SOURCE>;
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder next if (eof(SOURCE));
b4b6cffb6746d672e2bb558b72f616f97ac98316Till Mossakowski $before_copyright =
b4b6cffb6746d672e2bb558b72f616f97ac98316Till Mossakowski "$before_copyright$_";
b4b6cffb6746d672e2bb558b72f616f97ac98316Till Mossakowski if (/]>$/) {
b645cf3dc1e449038ed291bbd11fcc6e02b2fc7fChristian Maeder $_ = <SOURCE>;
b4b6cffb6746d672e2bb558b72f616f97ac98316Till Mossakowski last;
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder }
b4b6cffb6746d672e2bb558b72f616f97ac98316Till Mossakowski }
b4b6cffb6746d672e2bb558b72f616f97ac98316Till Mossakowski close(SOURCE) if (eof(SOURCE));
b4b6cffb6746d672e2bb558b72f616f97ac98316Till Mossakowski next;
b4b6cffb6746d672e2bb558b72f616f97ac98316Till Mossakowski }
b4b6cffb6746d672e2bb558b72f616f97ac98316Till Mossakowski if (/>$/ ) {
b4b6cffb6746d672e2bb558b72f616f97ac98316Till Mossakowski $_ = <SOURCE>;
b4b6cffb6746d672e2bb558b72f616f97ac98316Till Mossakowski close(SOURCE) if (eof(SOURCE));
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder next;
0e4b70274950d17f45c85d124bc600921e70fd87Christian Maeder }
0e4b70274950d17f45c85d124bc600921e70fd87Christian Maeder $_ = <SOURCE>;
948f37fdb71c544ff4c907bc5863702648cf36e4Christian Maeder while (!eof(SOURCE) && ! /^<!/ ) {
2d2826f9db2c17275f91b0104940a60a2f9fd44dChristian Maeder $before_copyright = "$before_copyright$_";
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski $_ = <SOURCE>;
a3bcb365497d592616a4e527b426ec210dcd385cChristian Maeder }
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder if (eof(SOURCE)) {
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder close(SOURCE);
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder next;
15bceb77af626f79747d46d35979640f229a4c71Christian Maeder }
a3bcb365497d592616a4e527b426ec210dcd385cChristian Maeder }
948f37fdb71c544ff4c907bc5863702648cf36e4Christian Maeder if (/^<!--/) {
948f37fdb71c544ff4c907bc5863702648cf36e4Christian Maeder $_ = <SOURCE> if $_ eq "<!--\n";
948f37fdb71c544ff4c907bc5863702648cf36e4Christian Maeder if ($_ !~ /[Cc]opyright/) {
2d2826f9db2c17275f91b0104940a60a2f9fd44dChristian Maeder print "$file: non-copyright comment\n";
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder close(SOURCE);
b645cf3dc1e449038ed291bbd11fcc6e02b2fc7fChristian Maeder next;
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder }
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski while (defined($_)) {
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski last if s/.*-->//;
948f37fdb71c544ff4c907bc5863702648cf36e4Christian Maeder $_ = <SOURCE>;
948f37fdb71c544ff4c907bc5863702648cf36e4Christian Maeder }
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski print "$file: unterminated comment\n"
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski unless defined($_);
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder if ($_ ne "\n") {
2d2826f9db2c17275f91b0104940a60a2f9fd44dChristian Maeder $first = $_;
42c01284bba8d7c8d995c8dfb96ace57d28ed1bcTill Mossakowski } else {
2d2826f9db2c17275f91b0104940a60a2f9fd44dChristian Maeder $first = <SOURCE>;
2d2826f9db2c17275f91b0104940a60a2f9fd44dChristian Maeder }
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski } else {
b645cf3dc1e449038ed291bbd11fcc6e02b2fc7fChristian Maeder $first = $_;
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder }
db7143998eee23e3d781f1f1e97e953bb831df1fTill Mossakowski } elsif ($mkd_comment) {
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $before_copyright = "";
db7143998eee23e3d781f1f1e97e953bb831df1fTill Mossakowski if (/^<!/) {
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski $_ = <SOURCE> if $_ eq "<!---\n";
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski if ($_ !~ /[Cc]opyright/) {
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski print "$file: non-copyright comment\n";
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski close(SOURCE);
587fb54160b66128cf17e4c9bca7494a7f2c3c4aChristian Maeder next;
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski }
7bf4436b6f9987b070033a323757b206c898c1beChristian Maeder while (defined($_)) {
7bf4436b6f9987b070033a323757b206c898c1beChristian Maeder last if s/.*--->//;
7297175957c5ad3c0498032190b1dee9ec5fb873Christian Maeder $_ = <SOURCE>;
bfa9e03532243ceb487f0384d0f6a447f1ce7670Till Mossakowski }
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski print "$file: unterminated comment\n"
58b671de3fe578346fef9642ffa3c5a0a0edb3cbTill Mossakowski unless defined($_);
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder if ($_ ne "\n") {
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder $first = $_;
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder } else {
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski $first = <SOURCE>;
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski }
4ea99e115bbade1632815267d5e0dcb9931aac1eChristian Maeder } else {
4ea99e115bbade1632815267d5e0dcb9931aac1eChristian Maeder $first = $_;
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski }
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder } elsif ($type eq "TXT") {
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder if ($_ =~ /[Cc]opyright/) {
e379124f467e5d0ef7d3c0ca238bff0521f70831Till Mossakowski $/ = ""; # paragraph at a time
74e82e43f5787027c5d4e523397525a259d6d001Christian Maeder while (<SOURCE>) {
b645cf3dc1e449038ed291bbd11fcc6e02b2fc7fChristian Maeder # Not very maintainable, but ok enough for now.
e379124f467e5d0ef7d3c0ca238bff0521f70831Till Mossakowski last if /Portions of this code/;
e379124f467e5d0ef7d3c0ca238bff0521f70831Till Mossakowski last unless
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski /[Cc]opyright/ ||
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski /This Source Code Form is subject to the terms of the Mozilla Public/ ||
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski /If a copy of the MPL was not distributed with this/ ||
1b05bdb88b90d3c947351f262d7ae7d68f0a4a6fTill Mossakowski /You can obtain one at http:\/\/mozilla.org\/MPL\/2.0\// ||
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder /See COPYRIGHT in the source root/ ||
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder /Permission to use, copy, modify, and / ||
2d2826f9db2c17275f91b0104940a60a2f9fd44dChristian Maeder /THE SOFTWARE IS PROVIDED "AS IS" AND /;
b645cf3dc1e449038ed291bbd11fcc6e02b2fc7fChristian Maeder }
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $/ = "\n";
b645cf3dc1e449038ed291bbd11fcc6e02b2fc7fChristian Maeder }
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $first = $_;
b645cf3dc1e449038ed291bbd11fcc6e02b2fc7fChristian Maeder } else {
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder $first = $_;
2d2826f9db2c17275f91b0104940a60a2f9fd44dChristian Maeder }
b645cf3dc1e449038ed291bbd11fcc6e02b2fc7fChristian Maeder
2d2826f9db2c17275f91b0104940a60a2f9fd44dChristian Maeder $first = "" if ! defined($first);
b645cf3dc1e449038ed291bbd11fcc6e02b2fc7fChristian Maeder
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder open(TARGET, ">$file.new") || die "can't open $file.new: $!";
42c01284bba8d7c8d995c8dfb96ace57d28ed1bcTill Mossakowski print TARGET $before_copyright if $before_copyright;
74e82e43f5787027c5d4e523397525a259d6d001Christian Maeder print TARGET $start_comment if $start_comment;
c616e681da8c052b62e14247fea522da099ac0e4Christian Maeder
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder $sysyears = "";
b645cf3dc1e449038ed291bbd11fcc6e02b2fc7fChristian Maeder $nomyears = "";
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder #
d21dd452cd68abade683103a5c0cfe6d02c5f17bTill Mossakowski # Nominum: up to 2001.
c616e681da8c052b62e14247fea522da099ac0e4Christian Maeder #
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder $last_year = 0;
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $anchor_year = 0;
d21dd452cd68abade683103a5c0cfe6d02c5f17bTill Mossakowski $years = "";
d21dd452cd68abade683103a5c0cfe6d02c5f17bTill Mossakowski foreach $year (@years) {
d21dd452cd68abade683103a5c0cfe6d02c5f17bTill Mossakowski if ($year >= 2002) { next; }
2d2826f9db2c17275f91b0104940a60a2f9fd44dChristian Maeder if ($last_year != 0 && $year == $last_year + 1) {
2d2826f9db2c17275f91b0104940a60a2f9fd44dChristian Maeder if ($year > $anchor_year + 1) {
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder substr($years, $anchor_end) = "-$year";
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder } else {
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $years .= ", $year";
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder }
aebf36d7483e5c012eff154d0b76de400d8fe3fcTill Mossakowski } else {
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder $years .= $last_year == 0 ? "$year" : ", $year";
aebf36d7483e5c012eff154d0b76de400d8fe3fcTill Mossakowski #if ($anchor_year != 0) {
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder # print "$file: noncontiguous year: ",
18902cdbb4cbcdaaeff6c0dd23c110ff2067a0bdJorina Freya Gerken # "$year != $last_year + 1\n";
aebf36d7483e5c012eff154d0b76de400d8fe3fcTill Mossakowski #}
e953bea49e7f0e1a43bccf2a66c5e2a2b50848e0Christian Maeder $anchor_year = $year;
e953bea49e7f0e1a43bccf2a66c5e2a2b50848e0Christian Maeder $anchor_end = length($years);
e953bea49e7f0e1a43bccf2a66c5e2a2b50848e0Christian Maeder }
0799b5dc3f06d2640e66e9ab54b8b217348fd719Christian Maeder
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder $last_year = $year;
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder }
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $nomyears = $years;
2d2826f9db2c17275f91b0104940a60a2f9fd44dChristian Maeder
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder #
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder # Internet Systems Consortium: 2004 onwards.
2d2826f9db2c17275f91b0104940a60a2f9fd44dChristian Maeder #
2d2826f9db2c17275f91b0104940a60a2f9fd44dChristian Maeder $last_year = 0;
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder $anchor_year = 0;
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder $years = "";
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder $anchor_end = length($years);
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder my $andor = 0;
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder my $noid = 0;
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder foreach $year (@years) {
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder $andor = 1 if ($year >= 2007);
c092fcac4b8f5c524c22ca579189c4487c13edf7Christian Maeder $noid = 1 if ($year > 2012 || ($year == 2012 && $this_month >= 5) );
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder if ($last_year != 0 && $year == $last_year + 1) {
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder if ($year > $anchor_year + 1) {
b9804822fb178b0fc27ce967a6a8cedc42c5bf90Christian Maeder substr($years, $anchor_end) = "-$year";
95c3e5d11dcee331dc3876a9bf0c1d6daa38e2caChristian Maeder } else {
2d2826f9db2c17275f91b0104940a60a2f9fd44dChristian Maeder $years .= ", $year";
2d2826f9db2c17275f91b0104940a60a2f9fd44dChristian Maeder }
d21dd452cd68abade683103a5c0cfe6d02c5f17bTill Mossakowski } else {
d21dd452cd68abade683103a5c0cfe6d02c5f17bTill Mossakowski $years .= $last_year == 0 ? "$year" : ", $year";
d21dd452cd68abade683103a5c0cfe6d02c5f17bTill Mossakowski #if ($anchor_year != 0) {
f69658e57cba7ecb37c0d84181f4c563215c2534Till Mossakowski # print "$file: noncontiguous year: ",
d21dd452cd68abade683103a5c0cfe6d02c5f17bTill Mossakowski # "$year != $last_year + 1\n";
#}
$anchor_year = $year;
$anchor_end = length($years);
}
$last_year = $year;
}
$sysyears = $years;
# make a copy
@lines = @$textp;
foreach $_ (@lines) {
next if (/\@SYSYEARS\@/ && $sysyears eq "");
s:modify, and distribute:modify, and/or distribute: if ($andor);
print TARGET (/^$/ ? $nonspaceprefix : $prefix);
s/\@SYSYEARS\@/$sysyears/;
s/\@NOMYEARS\@/$nomyears/;
print TARGET "$_";
}
print TARGET $end_comment if $end_comment;
if ($first eq "") {
$first = <SOURCE>;
}
if (defined($first)) {
if ($type eq 'MAN') {
print TARGET "$nonspaceprefix\n";
} else {
print TARGET "\n";
}
if (($type eq "C" || $type eq "CONF-C") &&
$sysyears =~ /$this_year/) {
my $body = "";
while (<SOURCE>) {
# Process leading white space.
# Remove 1-7 spaces followed by a tab into a single
# tab if at start of line or proceeded by tabs.
s/^(\t*) {1,7}\t/$1\t/ while (/^\t* {1,7}\t/);
# Convert 8 spaces into tabs if at start of line
# or preceeded by tabs.
s/^(\t*) {8}/$1\t/ while (/^\t* {8}/);
# Remove trailing white space.
s/[ \t]*$//;
$body = "$body$_";
}
$_ = $body;
} elsif (($type eq "SGML" || $type eq "HTML" ||
$type eq "MAKE") &&
$sysyears =~ /$this_year/) {
my $body = "";
while (<SOURCE>) {
# Remove trailing white space.
s/[ \t]*$//;
$body = "$body$_";
}
$_ = $body;
} else {
undef $/;
$_ = <SOURCE>;
$/ = "\n";
}
if ($type eq 'SGML' && m:<articleinfo>.*?</articleinfo>:s) {
# print "docinfo: $file\n";
my $r = copyrights(@years);
s:<articleinfo>.*?</articleinfo>:<articleinfo>\n$r </articleinfo>:s;
}
if ($type eq 'SGML' && m:<docinfo>.*?</docinfo>:s) {
# print "docinfo: $file\n";
my $r = copyrights(@years);
s:<docinfo>.*?</docinfo>:<docinfo>\n$r </docinfo>:s;
}
if ($type eq 'SGML' && m:<bookinfo>.*?</bookinfo>:s) {
# print "bookinfo: $file\n";
my $r = copyrights(@years);
$r .= " <xi:include href=\"releaseinfo.xml\"/>\n";
s:<bookinfo>.*?</bookinfo>:<bookinfo>\n$r </bookinfo>:s;
}
if ($type eq 'SGML' && m:<!-- insert copyright start -->.*?<!-- insert copyright end -->:s) {
my $r = copyrights(@years);
s:<!-- insert copyright start -->.*?<!-- insert copyright end -->:<!-- insert copyright start -->\n$r <!-- insert copyright end -->:s;
}
my ($start, $end);
if ($type =~ /^PYTHON(|-BIN)$/) {
($start = $prefix) =~ s/\s*\n//;
$end = "\n";
} elsif ($start_comment ne "") {
($start = $start_comment) =~ s/\s*\n/ /;
($end = $end_comment) =~ s/^\s*(.*)\n/ $1\n/;
} elsif ($prefix ne "") {
($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): $!";
}
}