update_copyrights revision 168cf0ede1cf13a095e48af6749d88fbc432f096
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#!/usr/local/bin/perl -w
fdd80e9a55c70b36a3bf3e409b86897301c44ff8Automatic Updater#
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews# Copyright (C) 2004-2010, 2012-2015 Internet Systems Consortium, Inc. ("ISC")
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Copyright (C) 1998-2001 Internet Software Consortium.
4a14ce5ba00ab7bc55c99ffdcf59c7a4ab902721Automatic Updater#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Permission to use, copy, modify, and/or distribute this software for any
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# purpose with or without fee is hereby granted, provided that the above
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# copyright notice and this permission notice appear in all copies.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# PERFORMANCE OF THIS SOFTWARE.
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updater
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinrequire 5.002;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Map copyright owners to the files containing copyright messages.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# The first line of the copyright message is not in the file;
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews# it is constructed by this script.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Usage:
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# perl util/update_copyrights <util/copyrights
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinmy %owner2filename = (
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "" => "util/COPYRIGHT",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "NAI" => "util/COPYRIGHT.NAI",
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews "NOM" => "util/COPYRIGHT.NOM",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "BSDI" => "util/COPYRIGHT.BSDI",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "BRIEF" => "util/COPYRIGHT.BRIEF",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "PORTION" => "util/COPYRIGHT.PORTION",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Map each copyright owner name to a reference to an array containing
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# the lines of the copyright message.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinmy %owner2text = ();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinmy $keyword_pat = '\$(Id:.*|Revision:.*|Id|Revision)\$';
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrewsforeach $owner (keys %owner2filename) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein my $f = $owner2filename{$owner};
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein open(COPYRIGHT, "<$f") || die "can't open $f: $!";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein @copyright_text = <COPYRIGHT>;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein close(COPYRIGHT);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $owner2text{$owner} = [ @copyright_text ];
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updater
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinmy %file_types = ();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinmy %file_years = ();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinmy $years_list;
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updatermy $parent;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein($dummy,$dummy,$dummy,$dummy,$this_month,$this_year,$dummy,$dummy,$dummy) = localtime(time());
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updater$this_year += 1900;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinwhile (<>) {
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updater chomp;
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updater ($file, $type, $years) = split(/\s+/);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $file_types{$file} = $type;
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updater $file_years{$file} = $years;
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updater}
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updater
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updatersub getyears {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $parent = $_[0];
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updater $parent =~ s/PARENT://;
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updater $years_list = $file_years{$parent};
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updater if (defined($years_list) && $years_list =~ /^PARENT:/) {
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updater print "BAD PARENT:$parent\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein undefine($years_list);
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updater }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinsub docbook {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $parent = $_[0];
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $parent =~ s/\.[^.]*$/.docbook/;
a1ad6695ed6f988406cf155aa26376f84f73bcb9Automatic Updater $years_list = $file_years{$parent};
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updater}
a1ad6695ed6f988406cf155aa26376f84f73bcb9Automatic Updater
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updatersub copyright {
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updater my $holder = shift;
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater my $result = "";
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updater return $result unless (@_);
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater $result = "$result <copyright>\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $result = "$result <year>$_</year>\n" foreach (@_);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $result = "$result <holder>$holder</holder>\n";
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updater $result = "$result </copyright>\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein return $result;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updater
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinsub copyrights {
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updater my $a = copyright("Internet Systems Consortium, Inc. (\"ISC\")",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein grep({ $_ >= 2004} @_));
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein my $b = copyright("Internet Software Consortium.",
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updater grep({ $_ < 2004} @_));
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein return "$a$b";
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updater}
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updater
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updaterforeach $file (keys %file_types) {
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews $typeandowner = $file_types{$file};
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $years_list = $file_years{$file};
507151045be68c671ffd4e2f37e17cdfa0376fc4Automatic Updater
507151045be68c671ffd4e2f37e17cdfa0376fc4Automatic Updater if ( ! -f $file ) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print "$file: missing\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews # print "Doing: $file";
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($years_list =~ /PARENT:/) {
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews getyears($years_list);
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews if (!defined $years_list) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print "$file: has bad parent $parent\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next;
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews # copyright notice is now generated from the source.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next if ($years_list eq "DOCBOOK");
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($years_list eq "DOCBOOK") {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein docbook($file);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (!defined $years_list) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print "$file: has bad parent $parent\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein @years = split(/,/, $years_list);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein my ($type, $owner) = split(/\./, $typeandowner);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $owner = "" if !defined $owner;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $textp = $owner2text{$owner};
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (!defined $textp) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print "$file: unknown copyright owner $owner\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($file eq "./CHANGES" || $file eq "./EXCLUDED" ||
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $file eq "./CHANGES.SE")
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein open(SOURCE, "<$file") || die "can't open $file: $!";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein my $body = "";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein while (<SOURCE>) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # Process leading white space.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # Remove 1-7 spaces followed by a tab into a single
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # tab if at start of line or proceeded by tabs.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein s/^(\t*) {1,7}\t/$1\t/ while (/^\t* {1,7}\t/);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein s/^(\s{0,3}\d*\.)\s(\[\w{1,5}\])\s+(\S+)/$1\t$2\t\t$3/;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein s/^(\s{0,3}\d*\.)\s(\[\w{6,}\])\s+(\S+)/$1\t$2\t$3/;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # Convert 8 spaces into tabs if at start of line
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # or preceeded by tabs.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein s/^(\t*) /$1\t/ while (/^\t* /);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # Remove trailing white space.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein s/[ \t]*$//;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $body = "$body$_";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = $body;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein open(TARGET, ">$file.new") || die "can't open $file.new: $!";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET $_;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein close(TARGET);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein close(SOURCE);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (system("cmp -s $file.new $file") == 0) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein unlink("$file.new");
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews } else {
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews rename("$file.new", "$file")
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews or die "rename($file.new, $file): $!";
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews }
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews }
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews next if $type eq "X" or $type eq "BAT";
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews
b05bdb520d83f7ecaad708fe305268c3420be01dMark Andrews $before_copyright = "";
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews $c_comment = 0;
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews $shell_comment = 0;
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews $m4_comment = 0;
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews $sgml_comment = 0;
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews $mkd_comment = 0;
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews $zone_comment = 0;
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews $man_comment = 0;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $python_comment = 0;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $python_bin_comment = 0;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $start_comment = "";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $end_comment = "";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $first = "";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($type =~ /^(C|YACC|CONF-C)$/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $c_comment = 1;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $start_comment = "/*\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $prefix = " * ";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $end_comment = " */\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } elsif ($type =~ /^(SH|PERL|TCL|MAKE|CONF-SH|RNC)$/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $shell_comment = 1;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $prefix = "# ";
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater } elsif ($type =~ /^PYTHON-BIN$/) {
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater $python_bin_comment = 1;
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater $start_comment = "############################################################################\n";
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater $prefix = "# ";
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater $end_comment = "############################################################################\n"
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater } elsif ($type =~ /^PYTHON$/) {
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater $python_comment = 1;
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater $start_comment = "############################################################################\n";
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater $prefix = "# ";
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater $end_comment = "############################################################################\n"
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater } elsif ($type eq "ZONE" || $type eq "MC") {
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater $zone_comment = 1;
afb33f777af856f8c3382604a7a8ffdfe2b512c5Automatic Updater $prefix = "; ";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } elsif ($type eq "MAN") {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $man_comment = 1;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $prefix = ".\\\" ";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } elsif ($type eq "M4") {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $m4_comment = 1;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $prefix = "dnl ";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } elsif ($type eq "HTML" || $type eq "SGML") {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $sgml_comment = 1;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $start_comment = "<!--\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $prefix = " - ";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $end_comment = "-->\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } elsif ($type eq "MKD") {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $mkd_comment = 1;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $start_comment = "<!---\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $prefix = " - ";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $end_comment = "--->";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } elsif ($type eq "TXT") {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $prefix = "";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print "$file: type '$type' not supported yet; skipping\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ($nonspaceprefix = $prefix) =~ s/\s+$//;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein open(SOURCE, "<$file") || die "can't open $file: $!";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = <SOURCE>;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($type eq "YACC") {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein unless ($_ eq "%{\n") {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print "$file: unexpected yacc file start ",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "(expected \"%{\\n\")\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein close(SOURCE);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $before_copyright = "$_";
ceeb18e6907a10547859faa340ecad83bedae90cMark Andrews $_ = <SOURCE>;
ceeb18e6907a10547859faa340ecad83bedae90cMark Andrews }
ceeb18e6907a10547859faa340ecad83bedae90cMark Andrews if ($c_comment && /^\/\*/) {
ceeb18e6907a10547859faa340ecad83bedae90cMark Andrews $_ = <SOURCE>;
ceeb18e6907a10547859faa340ecad83bedae90cMark Andrews if ($_ !~ /[Cc]opyright/) {
ceeb18e6907a10547859faa340ecad83bedae90cMark Andrews print "$file: non-copyright comment\n";
ceeb18e6907a10547859faa340ecad83bedae90cMark Andrews close(SOURCE);
ceeb18e6907a10547859faa340ecad83bedae90cMark Andrews next;
ceeb18e6907a10547859faa340ecad83bedae90cMark Andrews }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($_ !~ /\*\//) {
ceeb18e6907a10547859faa340ecad83bedae90cMark Andrews while (<SOURCE>) {
ceeb18e6907a10547859faa340ecad83bedae90cMark Andrews last if $_ =~ /\*\//;
ceeb18e6907a10547859faa340ecad83bedae90cMark Andrews }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
ceeb18e6907a10547859faa340ecad83bedae90cMark Andrews } elsif ($shell_comment) {
ceeb18e6907a10547859faa340ecad83bedae90cMark Andrews if (/^\#\!/) {
ceeb18e6907a10547859faa340ecad83bedae90cMark Andrews $before_copyright = "$_#\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = <SOURCE>;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = <SOURCE> if $_ eq "#\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (/^\#/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($_ !~ /[Cc]opyright/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print "$file: non-copyright comment\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein close(SOURCE);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein while (<SOURCE>) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($_ !~ /^\#/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $first = $_;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein last;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $first = $_;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } elsif ($python_comment || $python_bin_comment) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($python_bin_comment && /^\#\!/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $before_copyright = "$_";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = <SOURCE>;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = <SOURCE> if $_ eq "#\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = <SOURCE> if $_ eq "############################################################################\n";
bea931e17b7567f09107f93ab7e25c7f00abeb9cMark Andrews } elsif ($python_comment && /^\#/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = <SOURCE> if $_ eq "#\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = <SOURCE> if $_ eq "############################################################################\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
b05bdb520d83f7ecaad708fe305268c3420be01dMark Andrews if (/^\#/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($_ !~ /[Cc]opyright/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print "$file: non-copyright comment\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein close(SOURCE);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein while (<SOURCE>) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($_ !~ /^\#/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $first = $_;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein last;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $first = $_;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } elsif (($m4_comment || $zone_comment || $man_comment) &&
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein /^\Q$nonspaceprefix\E/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein while (/^\Q$nonspaceprefix\E\s*$/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = <SOURCE>;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($_ !~ /[Cc]opyright/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print "$file: non-copyright comment\n";
ceeb18e6907a10547859faa340ecad83bedae90cMark Andrews close(SOURCE);
ceeb18e6907a10547859faa340ecad83bedae90cMark Andrews next;
ceeb18e6907a10547859faa340ecad83bedae90cMark Andrews }
ceeb18e6907a10547859faa340ecad83bedae90cMark Andrews while (<SOURCE>) {
ceeb18e6907a10547859faa340ecad83bedae90cMark Andrews if ($_ !~ /^\Q$nonspaceprefix\E/ ||
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ =~ /$keyword_pat/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $first = $_;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein last;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } elsif ($sgml_comment) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $before_copyright = "";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein while (/^<!DOCTYPE/ || /^<!ENTITY/ || /^<\?xml-stylesheet/ || /^<\?xml /) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # print "SGML: $_";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $before_copyright = "$before_copyright$_";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (/\]>$/ ) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = <SOURCE>;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein close(SOURCE) if (eof(SOURCE));
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (/^<!DOCTYPE.*\[$/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein while (!eof(SOURCE)) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = <SOURCE>;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next if (eof(SOURCE));
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $before_copyright =
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "$before_copyright$_";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (/]>$/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = <SOURCE>;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein last;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein close(SOURCE) if (eof(SOURCE));
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (/>$/ ) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = <SOURCE>;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein close(SOURCE) if (eof(SOURCE));
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = <SOURCE>;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein while (!eof(SOURCE) && ! /^<!/ ) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $before_copyright = "$before_copyright$_";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = <SOURCE>;
b05bdb520d83f7ecaad708fe305268c3420be01dMark Andrews }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (eof(SOURCE)) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein close(SOURCE);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (/^<!--/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = <SOURCE> if $_ eq "<!--\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($_ !~ /[Cc]opyright/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print "$file: non-copyright comment\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein close(SOURCE);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein while (defined($_)) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein last if s/.*-->//;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = <SOURCE>;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print "$file: unterminated comment\n"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein unless defined($_);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($_ ne "\n") {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $first = $_;
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater } else {
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater $first = <SOURCE>;
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater }
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater } else {
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater $first = $_;
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater }
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater } elsif ($mkd_comment) {
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater $before_copyright = "";
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater if (/^<!/) {
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater $_ = <SOURCE> if $_ eq "<!---\n";
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater if ($_ !~ /[Cc]opyright/) {
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater print "$file: non-copyright comment\n";
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater close(SOURCE);
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater next;
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater }
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater while (defined($_)) {
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater last if s/.*--->//;
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater $_ = <SOURCE>;
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater }
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater print "$file: unterminated comment\n"
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater unless defined($_);
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater if ($_ ne "\n") {
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater $first = $_;
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater } else {
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater $first = <SOURCE>;
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater }
984c2e9f76e66e86f7d9aca99a774836ddf196eaAutomatic Updater } else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $first = $_;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } elsif ($type eq "TXT") {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($_ =~ /[Cc]opyright/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $/ = ""; # paragraph at a time
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein while (<SOURCE>) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # Not very maintainable, but ok enough for now.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein last if /Portions of this code/;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein last unless
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein /[Cc]opyright/ ||
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews /See COPYRIGHT in the source root/ ||
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein /Permission to use, copy, modify, and / ||
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein /THE SOFTWARE IS PROVIDED "AS IS" AND /;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $/ = "\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $first = $_;
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews } else {
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews $first = $_;
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews }
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews $first = "" if ! defined($first);
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein open(TARGET, ">$file.new") || die "can't open $file.new: $!";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET $before_copyright if $before_copyright;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET $start_comment if $start_comment;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $sysyears = "";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $sftyears = "";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $nomyears = "";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein #
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # Internet Software Consortium: up to 2003
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein #
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $last_year = 0;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $anchor_year = 0;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $years = "";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein foreach $year (@years) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($year >= 2004) { next; }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($last_year != 0 && $year == $last_year + 1) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($year > $anchor_year + 1) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein substr($years, $anchor_end) = "-$year";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $years .= ", $year";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $years .= $last_year == 0 ? "$year" : ", $year";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein #if ($anchor_year != 0) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # print "$file: noncontiguous year: ",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # "$year != $last_year + 1\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein #}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $anchor_year = $year;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $anchor_end = length($years);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $last_year = $year;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $sftyears = $years;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein #
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # Nominum: up to 2001.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein #
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $last_year = 0;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $anchor_year = 0;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $years = "";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein foreach $year (@years) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($year >= 2002) { next; }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($last_year != 0 && $year == $last_year + 1) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($year > $anchor_year + 1) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein substr($years, $anchor_end) = "-$year";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $years .= ", $year";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $years .= $last_year == 0 ? "$year" : ", $year";
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updater #if ($anchor_year != 0) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # print "$file: noncontiguous year: ",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # "$year != $last_year + 1\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein #}
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce $anchor_year = $year;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $anchor_end = length($years);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $last_year = $year;
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updater }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $nomyears = $years;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein #
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # Internet Systems Consortium: 2004 onwards.
4556ad3a270bf049b3225433a402666aaffe3c36Mark Andrews #
4556ad3a270bf049b3225433a402666aaffe3c36Mark Andrews $last_year = 0;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $anchor_year = 0;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $years = "";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $anchor_end = length($years);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein my $andor = 0;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein my $noid = 0;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein foreach $year (@years) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($year < 2004) { next; }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $andor = 1 if ($year >= 2007);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $noid = 1 if ($year > 2012 || ($year == 2012 && $this_month >= 5) );
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($last_year != 0 && $year == $last_year + 1) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($year > $anchor_year + 1) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein substr($years, $anchor_end) = "-$year";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $years .= ", $year";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } else {
4556ad3a270bf049b3225433a402666aaffe3c36Mark Andrews $years .= $last_year == 0 ? "$year" : ", $year";
4556ad3a270bf049b3225433a402666aaffe3c36Mark Andrews #if ($anchor_year != 0) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # print "$file: noncontiguous year: ",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # "$year != $last_year + 1\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein #}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $anchor_year = $year;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $anchor_end = length($years);
4556ad3a270bf049b3225433a402666aaffe3c36Mark Andrews }
4556ad3a270bf049b3225433a402666aaffe3c36Mark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $last_year = $year;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $sysyears = $years;
4556ad3a270bf049b3225433a402666aaffe3c36Mark Andrews
4556ad3a270bf049b3225433a402666aaffe3c36Mark Andrews ($firstline, $secondline, @otherlines) = @$textp;
4556ad3a270bf049b3225433a402666aaffe3c36Mark Andrews
4556ad3a270bf049b3225433a402666aaffe3c36Mark Andrews $firstline =~ s/\@SYSYEARS\@/$sysyears/;
4556ad3a270bf049b3225433a402666aaffe3c36Mark Andrews $secondline =~ s/\@SFTYEARS\@/$sftyears/;
4556ad3a270bf049b3225433a402666aaffe3c36Mark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET "$prefix$firstline";
9c6a5d1f22f972232d7a9fd5c5fa64f10bacbdffAutomatic Updater if ($sftyears ne "" ) {
9c6a5d1f22f972232d7a9fd5c5fa64f10bacbdffAutomatic Updater print TARGET $secondline =~ /^$/ ? $nonspaceprefix : $prefix;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET "$secondline";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
035992291cb70ec3be4046fcea921b4a6acb1c77Mark Andrews
035992291cb70ec3be4046fcea921b4a6acb1c77Mark Andrews foreach $_ (@otherlines) {
035992291cb70ec3be4046fcea921b4a6acb1c77Mark Andrews s:modify, and distribute:modify, and/or distribute: if ($andor);
035992291cb70ec3be4046fcea921b4a6acb1c77Mark Andrews print TARGET (/^$/ ? $nonspaceprefix : $prefix);
68b30890ebd441a6a1ae3fdf71744d07d02cd030Mark Andrews s/\@NOMYEARS\@/$nomyears/;
68b30890ebd441a6a1ae3fdf71744d07d02cd030Mark Andrews print TARGET "$_";
035992291cb70ec3be4046fcea921b4a6acb1c77Mark Andrews }
68b30890ebd441a6a1ae3fdf71744d07d02cd030Mark Andrews print TARGET $end_comment if $end_comment;
035992291cb70ec3be4046fcea921b4a6acb1c77Mark Andrews
68b30890ebd441a6a1ae3fdf71744d07d02cd030Mark Andrews if ($first eq "") {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $first = <SOURCE>;
035992291cb70ec3be4046fcea921b4a6acb1c77Mark Andrews }
035992291cb70ec3be4046fcea921b4a6acb1c77Mark Andrews
035992291cb70ec3be4046fcea921b4a6acb1c77Mark Andrews if (defined($first)) {
9c6a5d1f22f972232d7a9fd5c5fa64f10bacbdffAutomatic Updater if ($type eq 'MAN') {
4556ad3a270bf049b3225433a402666aaffe3c36Mark Andrews print TARGET "$nonspaceprefix\n";
035992291cb70ec3be4046fcea921b4a6acb1c77Mark Andrews } else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET "\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
0c6ada0a814f3c5417daa1654129bc2af56ed504Automatic Updater
4556ad3a270bf049b3225433a402666aaffe3c36Mark Andrews if (($type eq "C" || $type eq "CONF-C") &&
4556ad3a270bf049b3225433a402666aaffe3c36Mark Andrews $sysyears =~ /$this_year/) {
4556ad3a270bf049b3225433a402666aaffe3c36Mark Andrews my $body = "";
4556ad3a270bf049b3225433a402666aaffe3c36Mark Andrews while (<SOURCE>) {
4556ad3a270bf049b3225433a402666aaffe3c36Mark Andrews # Process leading white space.
4556ad3a270bf049b3225433a402666aaffe3c36Mark Andrews # Remove 1-7 spaces followed by a tab into a single
4556ad3a270bf049b3225433a402666aaffe3c36Mark Andrews # tab if at start of line or proceeded by tabs.
4556ad3a270bf049b3225433a402666aaffe3c36Mark Andrews s/^(\t*) {1,7}\t/$1\t/ while (/^\t* {1,7}\t/);
4556ad3a270bf049b3225433a402666aaffe3c36Mark Andrews # Convert 8 spaces into tabs if at start of line
4556ad3a270bf049b3225433a402666aaffe3c36Mark Andrews # or preceeded by tabs.
4556ad3a270bf049b3225433a402666aaffe3c36Mark Andrews s/^(\t*) {8}/$1\t/ while (/^\t* {8}/);
4556ad3a270bf049b3225433a402666aaffe3c36Mark Andrews # Remove trailing white space.
4556ad3a270bf049b3225433a402666aaffe3c36Mark Andrews s/[ \t]*$//;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $body = "$body$_";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = $body;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } elsif (($type eq "SGML" || $type eq "HTML" ||
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $type eq "MAKE") &&
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updater $sysyears =~ /$this_year/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein my $body = "";
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews while (<SOURCE>) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # Remove trailing white space.
bea931e17b7567f09107f93ab7e25c7f00abeb9cMark Andrews s/[ \t]*$//;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $body = "$body$_";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = $body;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein undef $/;
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updater $_ = <SOURCE>;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $/ = "\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($type eq 'SGML' && m:<articleinfo>.*?</articleinfo>:s) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # print "docinfo: $file\n";
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews my $r = copyrights(@years);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein s:<articleinfo>.*?</articleinfo>:<articleinfo>\n$r </articleinfo>:s;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater if ($type eq 'SGML' && m:<docinfo>.*?</docinfo>:s) {
ac93437301f55ed69bf85883a497a75598c628f9Automatic Updater # print "docinfo: $file\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein my $r = copyrights(@years);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein s:<docinfo>.*?</docinfo>:<docinfo>\n$r </docinfo>:s;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($type eq 'SGML' && m:<bookinfo>.*?</bookinfo>:s) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # print "bookinfo: $file\n";
1238b38c9f0ab563b762dc0fd00ac6c34c2b7295Automatic Updater my $r = copyrights(@years);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $r .= " <xi:include href=\"releaseinfo.xml\"/>\n";
bea931e17b7567f09107f93ab7e25c7f00abeb9cMark Andrews s:<bookinfo>.*?</bookinfo>:<bookinfo>\n$r </bookinfo>:s;
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein my ($start, $end);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($type =~ /^PYTHON(|-BIN)$/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ($start = $prefix) =~ s/\s*\n//;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $end = "\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } elsif ($start_comment ne "") {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ($start = $start_comment) =~ s/\s*\n/ /;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ($end = $end_comment) =~ s/^\s*(.*)\n/ $1\n/;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } elsif ($prefix ne "") {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ($start = $prefix) =~ s/\s*\n//;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $end = "\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $start = "";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $end = "\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce if (!$noid && $first !~ /$keyword_pat/ &&
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce (!defined($_) || $_ !~ /$keyword_pat/)) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $end = "\n$nonspaceprefix" if ($type eq "MAN");
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET "$start\$";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET "Id";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET "\$$end\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET $first if $first !~ /^\s*$/;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET $_ if (defined($_));
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein close(TARGET);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein close(SOURCE);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $mode = (stat $file)[2]&511;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein chmod $mode, "$file.new";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce if (system("cmp -s $file.new $file") == 0) {
f293a69bcd1c1dd7bdac8f4102fc2398b9e475c8Eric Luce unlink("$file.new");
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rename("$file.new", "$file")
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein or die "rename($file.new, $file): $!";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein