update_copyrights revision 168cf0ede1cf13a095e48af6749d88fbc432f096
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#!/usr/local/bin/perl -w
11e9368a226272085c337e9e74b79808c16fbdbaTinderbox User#
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.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinrequire 5.002;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# Map copyright owners to the files containing copyright messages.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# The first line of the copyright message is not in the file;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# 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",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "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 = ();
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Usermy $keyword_pat = '\$(Id:.*|Revision:.*|Id|Revision)\$';
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinforeach $owner (keys %owner2filename) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein my $f = $owner2filename{$owner};
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User open(COPYRIGHT, "<$f") || die "can't open $f: $!";
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User @copyright_text = <COPYRIGHT>;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User close(COPYRIGHT);
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User $owner2text{$owner} = [ @copyright_text ];
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Usermy %file_types = ();
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Usermy %file_years = ();
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Usermy $years_list;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox Usermy $parent;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User($dummy,$dummy,$dummy,$dummy,$this_month,$this_year,$dummy,$dummy,$dummy) = localtime(time());
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein$this_year += 1900;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinwhile (<>) {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User chomp;
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews ($file, $type, $years) = split(/\s+/);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $file_types{$file} = $type;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $file_years{$file} = $years;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrewssub getyears {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $parent = $_[0];
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $parent =~ s/PARENT://;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $years_list = $file_years{$parent};
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User if (defined($years_list) && $years_list =~ /^PARENT:/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print "BAD PARENT:$parent\n";
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User undefine($years_list);
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
c48c7872a0e020a63a96faed166c6ae960e4c1e9Mark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinsub docbook {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $parent = $_[0];
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews $parent =~ s/\.[^.]*$/.docbook/;
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews $years_list = $file_years{$parent};
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
f9ce6280cec79deb16ff6d9807aa493ff23e10d9Tinderbox Usersub copyright {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User my $holder = shift;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User my $result = "";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein return $result unless (@_);
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User $result = "$result <copyright>\n";
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $result = "$result <year>$_</year>\n" foreach (@_);
9c6a5d1f22f972232d7a9fd5c5fa64f10bacbdffAutomatic Updater $result = "$result <holder>$holder</holder>\n";
9c6a5d1f22f972232d7a9fd5c5fa64f10bacbdffAutomatic Updater $result = "$result </copyright>\n";
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews return $result;
9c6a5d1f22f972232d7a9fd5c5fa64f10bacbdffAutomatic Updater}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinsub copyrights {
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews my $a = copyright("Internet Systems Consortium, Inc. (\"ISC\")",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein grep({ $_ >= 2004} @_));
9c6a5d1f22f972232d7a9fd5c5fa64f10bacbdffAutomatic Updater my $b = copyright("Internet Software Consortium.",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein grep({ $_ < 2004} @_));
9c6a5d1f22f972232d7a9fd5c5fa64f10bacbdffAutomatic Updater return "$a$b";
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews}
9c6a5d1f22f972232d7a9fd5c5fa64f10bacbdffAutomatic Updater
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinforeach $file (keys %file_types) {
9c6a5d1f22f972232d7a9fd5c5fa64f10bacbdffAutomatic Updater $typeandowner = $file_types{$file};
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $years_list = $file_years{$file};
9c6a5d1f22f972232d7a9fd5c5fa64f10bacbdffAutomatic Updater
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ( ! -f $file ) {
bea931e17b7567f09107f93ab7e25c7f00abeb9cMark Andrews print "$file: missing\n";
bea931e17b7567f09107f93ab7e25c7f00abeb9cMark Andrews next;
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # print "Doing: $file";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($years_list =~ /PARENT:/) {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User getyears($years_list);
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User if (!defined $years_list) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print "$file: has bad parent $parent\n";
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User next;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # copyright notice is now generated from the source.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User next if ($years_list eq "DOCBOOK");
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt if ($years_list eq "DOCBOOK") {
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt docbook($file);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (!defined $years_list) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print "$file: has bad parent $parent\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
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");
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rename("$file.new", "$file")
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein or die "rename($file.new, $file): $!";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next if $type eq "X" or $type eq "BAT";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $before_copyright = "";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $c_comment = 0;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $shell_comment = 0;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $m4_comment = 0;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $sgml_comment = 0;
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews $mkd_comment = 0;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $zone_comment = 0;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $man_comment = 0;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt $python_comment = 0;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt $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 = "# ";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } elsif ($type =~ /^PYTHON-BIN$/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $python_bin_comment = 1;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $start_comment = "############################################################################\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $prefix = "# ";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $end_comment = "############################################################################\n"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } elsif ($type =~ /^PYTHON$/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $python_comment = 1;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $start_comment = "############################################################################\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $prefix = "# ";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $end_comment = "############################################################################\n"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } elsif ($type eq "ZONE" || $type eq "MC") {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $zone_comment = 1;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $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>;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User if ($type eq "YACC") {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein unless ($_ eq "%{\n") {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print "$file: unexpected yacc file start ",
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User "(expected \"%{\\n\")\n";
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User close(SOURCE);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User }
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $before_copyright = "$_";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = <SOURCE>;
bea931e17b7567f09107f93ab7e25c7f00abeb9cMark Andrews }
bea931e17b7567f09107f93ab7e25c7f00abeb9cMark Andrews if ($c_comment && /^\/\*/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = <SOURCE>;
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews if ($_ !~ /[Cc]opyright/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print "$file: non-copyright comment\n";
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User close(SOURCE);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User }
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User if ($_ !~ /\*\//) {
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews while (<SOURCE>) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein last if $_ =~ /\*\//;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } elsif ($shell_comment) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (/^\#\!/) {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $before_copyright = "$_#\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = <SOURCE>;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = <SOURCE> if $_ eq "#\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews if (/^\#/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($_ !~ /[Cc]opyright/) {
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt print "$file: non-copyright comment\n";
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt close(SOURCE);
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt next;
731cc132f22dbc9e0ecd7035dce314a61076d31bAutomatic Updater }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein while (<SOURCE>) {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User if ($_ !~ /^\#/) {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $first = $_;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein last;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User }
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User }
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";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } elsif ($python_comment && /^\#/) {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $_ = <SOURCE> if $_ eq "#\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = <SOURCE> if $_ eq "############################################################################\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark 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 = $_;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User 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/) {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein while (/^\Q$nonspaceprefix\E\s*$/) {
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews $_ = <SOURCE>;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($_ !~ /[Cc]opyright/) {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User print "$file: non-copyright comment\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein close(SOURCE);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next;
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein while (<SOURCE>) {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User if ($_ !~ /^\Q$nonspaceprefix\E/ ||
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $_ =~ /$keyword_pat/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $first = $_;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User last;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } elsif ($sgml_comment) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $before_copyright = "";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein while (/^<!DOCTYPE/ || /^<!ENTITY/ || /^<\?xml-stylesheet/ || /^<\?xml /) {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User # print "SGML: $_";
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews $before_copyright = "$before_copyright$_";
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews 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 =
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User "$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>;
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews 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>;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (eof(SOURCE)) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein close(SOURCE);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User }
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews }
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($_)) {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User last if s/.*-->//;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $_ = <SOURCE>;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User print "$file: unterminated comment\n"
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User unless defined($_);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($_ ne "\n") {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $first = $_;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $first = <SOURCE>;
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews }
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews } else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $first = $_;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } elsif ($mkd_comment) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $before_copyright = "";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (/^<!/) {
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt $_ = <SOURCE> if $_ eq "<!---\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($_ !~ /[Cc]opyright/) {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User print "$file: non-copyright comment\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein close(SOURCE);
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User next;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User }
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews while (defined($_)) {
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews last if s/.*--->//;
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews $_ = <SOURCE>;
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews }
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews print "$file: unterminated comment\n"
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews unless defined($_);
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews if ($_ ne "\n") {
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews $first = $_;
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews } else {
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews $first = <SOURCE>;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User }
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews } else {
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews $first = $_;
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } elsif ($type eq "TXT") {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User if ($_ =~ /[Cc]opyright/) {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $/ = ""; # paragraph at a time
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein while (<SOURCE>) {
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User # Not very maintainable, but ok enough for now.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User last if /Portions of this code/;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein last unless
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein /[Cc]opyright/ ||
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein /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 = $_;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $first = $_;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User }
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $first = "" if ! defined($first);
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User 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 #
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $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 }
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User } 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);
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User }
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $last_year = $year;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User $sftyears = $years;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
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";
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User } 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: ",
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User # "$year != $last_year + 1\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein #}
b05bdb520d83f7ecaad708fe305268c3420be01dMark Andrews $anchor_year = $year;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $anchor_end = length($years);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $last_year = $year;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User }
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $nomyears = $years;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein #
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # Internet Systems Consortium: 2004 onwards.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein #
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $last_year = 0;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $anchor_year = 0;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $years = "";
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $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) {
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews if ($year > $anchor_year + 1) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein substr($years, $anchor_end) = "-$year";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } else {
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews $years .= ", $year";
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } else {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $years .= $last_year == 0 ? "$year" : ", $year";
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User #if ($anchor_year != 0) {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User # print "$file: noncontiguous year: ",
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # "$year != $last_year + 1\n";
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User #}
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $anchor_year = $year;
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews $anchor_end = length($years);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $last_year = $year;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $sysyears = $years;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ($firstline, $secondline, @otherlines) = @$textp;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
b9c96971964d87c2705c8dc29300ff8103479ee6Andreas Gustafsson $firstline =~ s/\@SYSYEARS\@/$sysyears/;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $secondline =~ s/\@SFTYEARS\@/$sftyears/;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET "$prefix$firstline";
b9c96971964d87c2705c8dc29300ff8103479ee6Andreas Gustafsson if ($sftyears ne "" ) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET $secondline =~ /^$/ ? $nonspaceprefix : $prefix;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET "$secondline";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein foreach $_ (@otherlines) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein s:modify, and distribute:modify, and/or distribute: if ($andor);
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User print TARGET (/^$/ ? $nonspaceprefix : $prefix);
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User s/\@NOMYEARS\@/$nomyears/;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User print TARGET "$_";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET $end_comment if $end_comment;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($first eq "") {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $first = <SOURCE>;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (defined($first)) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($type eq 'MAN') {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET "$nonspaceprefix\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET "\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (($type eq "C" || $type eq "CONF-C") &&
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $sysyears =~ /$this_year/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein my $body = "";
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt while (<SOURCE>) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # Process leading white space.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # 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;
}
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): $!";
}
}