update_copyrights revision c61c6db1cea02006815184845fcf1b633b28163d
fa9e4066f08beec538e775443c5be79dd423fcabahrens#!/usr/local/bin/perl -w
fa9e4066f08beec538e775443c5be79dd423fcabahrens#
fa9e4066f08beec538e775443c5be79dd423fcabahrens# Copyright (C) 2004, 2005 Internet Systems Consortium, Inc. ("ISC")
fa9e4066f08beec538e775443c5be79dd423fcabahrens# Copyright (C) 1998-2001 Internet Software Consortium.
99653d4ee642c6528e88224f12409a5f23060994eschrock#
99653d4ee642c6528e88224f12409a5f23060994eschrock# Permission to use, copy, modify, and distribute this software for any
fa9e4066f08beec538e775443c5be79dd423fcabahrens# purpose with or without fee is hereby granted, provided that the above
fa9e4066f08beec538e775443c5be79dd423fcabahrens# copyright notice and this permission notice appear in all copies.
fa9e4066f08beec538e775443c5be79dd423fcabahrens#
fa9e4066f08beec538e775443c5be79dd423fcabahrens# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
fa9e4066f08beec538e775443c5be79dd423fcabahrens# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
fa9e4066f08beec538e775443c5be79dd423fcabahrens# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
fa9e4066f08beec538e775443c5be79dd423fcabahrens# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
fa9e4066f08beec538e775443c5be79dd423fcabahrens# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
fa9e4066f08beec538e775443c5be79dd423fcabahrens# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
fa9e4066f08beec538e775443c5be79dd423fcabahrens# PERFORMANCE OF THIS SOFTWARE.
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens# $Id: update_copyrights,v 1.37 2005/05/12 08:08:44 marka Exp $
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensrequire 5.002;
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl
fa9e4066f08beec538e775443c5be79dd423fcabahrens# Map copyright owners to the files containing copyright messages.
d87468da622d0a816b26cc636aa7dcc08249300erm# The first line of the copyright message is not in the file;
fa9e4066f08beec538e775443c5be79dd423fcabahrens# it is constructed by this script.
2b61b799b28717ea21febf9eab30c7867477f280mmusante
2b61b799b28717ea21febf9eab30c7867477f280mmusantemy %owner2filename = (
fa9e4066f08beec538e775443c5be79dd423fcabahrens "" => "util/COPYRIGHT",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "NAI" => "util/COPYRIGHT.NAI",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "NOM" => "util/COPYRIGHT.NOM",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "BSDI" => "util/COPYRIGHT.BSDI",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "BRIEF" => "util/COPYRIGHT.BRIEF",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "PORTION" => "util/COPYRIGHT.PORTION",
fa9e4066f08beec538e775443c5be79dd423fcabahrens);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens# Map each copyright owner name to a reference to an array containing
fa9e4066f08beec538e775443c5be79dd423fcabahrens# the lines of the copyright message.
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensmy %owner2text = ();
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensmy $keyword_pat = '\$(Id:.*|Revision:.*|Id|Revision)\$';
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensforeach $owner (keys %owner2filename) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens my $f = $owner2filename{$owner};
fa9e4066f08beec538e775443c5be79dd423fcabahrens open(COPYRIGHT, "<$f") || die "can't open $f: $!";
fa9e4066f08beec538e775443c5be79dd423fcabahrens @copyright_text = <COPYRIGHT>;
fa9e4066f08beec538e775443c5be79dd423fcabahrens close(COPYRIGHT);
fa9e4066f08beec538e775443c5be79dd423fcabahrens $owner2text{$owner} = [ @copyright_text ];
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensmy %file_types = ();
fa9e4066f08beec538e775443c5be79dd423fcabahrensmy %file_years = ();
fa9e4066f08beec538e775443c5be79dd423fcabahrensmy $years_list;
fa9e4066f08beec538e775443c5be79dd423fcabahrensmy $parent;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrenswhile (<>) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens chomp;
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling ($file, $type, $years) = split(/\s+/);
fa9e4066f08beec538e775443c5be79dd423fcabahrens $file_types{$file} = $type;
fa9e4066f08beec538e775443c5be79dd423fcabahrens $file_years{$file} = $years;
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrenssub getyears {
fa9e4066f08beec538e775443c5be79dd423fcabahrens $parent = $_[0];
fa9e4066f08beec538e775443c5be79dd423fcabahrens $parent =~ s/PARENT://;
fa9e4066f08beec538e775443c5be79dd423fcabahrens $years_list = $file_years{$parent};
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (defined($years_list) && $years_list =~ /^PARENT:/) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens print "BAD PARENT:$parent\n";
2b61b799b28717ea21febf9eab30c7867477f280mmusante undefine($years_list);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrenssub docbook {
fa9e4066f08beec538e775443c5be79dd423fcabahrens $parent = $_[0];
fa9e4066f08beec538e775443c5be79dd423fcabahrens $parent =~ s/\.[^.]*$/.docbook/;
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw $years_list = $file_years{$parent};
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
99653d4ee642c6528e88224f12409a5f23060994eschrocksub copyright {
99653d4ee642c6528e88224f12409a5f23060994eschrock my $holder = shift;
99653d4ee642c6528e88224f12409a5f23060994eschrock my $result = "";
0069fd67511146f5f43175204d5b71d2b357be71Tim Haley return $result unless (@_);
0069fd67511146f5f43175204d5b71d2b357be71Tim Haley $result = "$result <copyright>\n";
99653d4ee642c6528e88224f12409a5f23060994eschrock $result = "$result <year>$_</year>\n" foreach (@_);
3bb79bece53191f2cf27aa61a72ea1784a7ce700eschrock $result = "$result <holder>$holder</holder>\n";
fa9e4066f08beec538e775443c5be79dd423fcabahrens $result = "$result </copyright>\n";
fa9e4066f08beec538e775443c5be79dd423fcabahrens return $result;
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrenssub copyrights {
d5b4fe4dcc1b674d5e848db057a30cf882f73b22dougm my $a = copyright("Internet Systems Consortium, Inc. (\"ISC\")",
d5b4fe4dcc1b674d5e848db057a30cf882f73b22dougm grep({ $_ >= 2004} @_));
fa9e4066f08beec538e775443c5be79dd423fcabahrens my $b = copyright("Internet Software Consortium.",
fa9e4066f08beec538e775443c5be79dd423fcabahrens grep({ $_ < 2004} @_));
fa9e4066f08beec538e775443c5be79dd423fcabahrens return "$a$b";
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensforeach $file (keys %file_types) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens $typeandowner = $file_types{$file};
d5b4fe4dcc1b674d5e848db057a30cf882f73b22dougm $years_list = $file_years{$file};
d5b4fe4dcc1b674d5e848db057a30cf882f73b22dougm
fa9e4066f08beec538e775443c5be79dd423fcabahrens if ( ! -f $file ) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens print "$file: missing\n";
fa9e4066f08beec538e775443c5be79dd423fcabahrens next;
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
cc4231e55a9c2eb07b3aa5b3e602a93d2415d284mmusante
cc4231e55a9c2eb07b3aa5b3e602a93d2415d284mmusante if ($years_list =~ /PARENT:/) {
cc4231e55a9c2eb07b3aa5b3e602a93d2415d284mmusante getyears($years_list);
cc4231e55a9c2eb07b3aa5b3e602a93d2415d284mmusante if (!defined $years_list) {
cc4231e55a9c2eb07b3aa5b3e602a93d2415d284mmusante print "$file: has bad parent $parent\n";
cc4231e55a9c2eb07b3aa5b3e602a93d2415d284mmusante next;
cc4231e55a9c2eb07b3aa5b3e602a93d2415d284mmusante }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl if ($years_list eq "DOCBOOK") {
fa9e4066f08beec538e775443c5be79dd423fcabahrens docbook($file);
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl if (!defined $years_list) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens print "$file: has bad parent $parent\n";
fa9e4066f08beec538e775443c5be79dd423fcabahrens next;
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl }
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl }
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl @years = split(/,/, $years_list);
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl my ($type, $owner) = split(/\./, $typeandowner);
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl $owner = "" if !defined $owner;
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl $textp = $owner2text{$owner};
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl if (!defined $textp) {
2b61b799b28717ea21febf9eab30c7867477f280mmusante print "$file: unknown copyright owner $owner\n";
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl next;
cc4231e55a9c2eb07b3aa5b3e602a93d2415d284mmusante }
2b61b799b28717ea21febf9eab30c7867477f280mmusante
2b61b799b28717ea21febf9eab30c7867477f280mmusante next if $type eq "X" or $type eq "BAT";
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl $before_copyright = "";
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl $c_comment = 0;
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl $shell_comment = 0;
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl $m4_comment = 0;
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl $sgml_comment = 0;
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl $zone_comment = 0;
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl $man_comment = 0;
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl $start_comment = "";
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl $end_comment = "";
d5b4fe4dcc1b674d5e848db057a30cf882f73b22dougm $first = "";
d5b4fe4dcc1b674d5e848db057a30cf882f73b22dougm if ($type =~ /^(C|YACC|CONF-C)$/) {
d5b4fe4dcc1b674d5e848db057a30cf882f73b22dougm $c_comment = 1;
d5b4fe4dcc1b674d5e848db057a30cf882f73b22dougm $start_comment = "/*\n";
d5b4fe4dcc1b674d5e848db057a30cf882f73b22dougm $prefix = " * ";
d5b4fe4dcc1b674d5e848db057a30cf882f73b22dougm $end_comment = " */\n";
d5b4fe4dcc1b674d5e848db057a30cf882f73b22dougm } elsif ($type =~ /^(SH|PERL|TCL|MAKE|CONF-SH)$/) {
0069fd67511146f5f43175204d5b71d2b357be71Tim Haley $shell_comment = 1;
d5b4fe4dcc1b674d5e848db057a30cf882f73b22dougm $prefix = "# ";
d5b4fe4dcc1b674d5e848db057a30cf882f73b22dougm } elsif ($type eq "ZONE" || $type eq "MC") {
d5b4fe4dcc1b674d5e848db057a30cf882f73b22dougm $zone_comment = 1;
d5b4fe4dcc1b674d5e848db057a30cf882f73b22dougm $prefix = "; ";
d5b4fe4dcc1b674d5e848db057a30cf882f73b22dougm } elsif ($type eq "MAN") {
d5b4fe4dcc1b674d5e848db057a30cf882f73b22dougm $man_comment = 1;
d5b4fe4dcc1b674d5e848db057a30cf882f73b22dougm $prefix = ".\\\" ";
d5b4fe4dcc1b674d5e848db057a30cf882f73b22dougm } elsif ($type eq "M4") {
e7437265dc2a4920c197ed4337665539d358b22cahrens $m4_comment = 1;
fa9e4066f08beec538e775443c5be79dd423fcabahrens $prefix = "dnl ";
fa9e4066f08beec538e775443c5be79dd423fcabahrens } elsif ($type eq "HTML" || $type eq "SGML") {
2b61b799b28717ea21febf9eab30c7867477f280mmusante $sgml_comment = 1;
2b61b799b28717ea21febf9eab30c7867477f280mmusante $start_comment = "<!--\n";
2b61b799b28717ea21febf9eab30c7867477f280mmusante $prefix = " - ";
fa9e4066f08beec538e775443c5be79dd423fcabahrens $end_comment = "-->\n";
fa9e4066f08beec538e775443c5be79dd423fcabahrens } elsif ($type eq "TXT") {
fa9e4066f08beec538e775443c5be79dd423fcabahrens $prefix = "";
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else {
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl print "$file: type '$type' not supported yet; skipping\n";
fa9e4066f08beec538e775443c5be79dd423fcabahrens next;
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens ($nonspaceprefix = $prefix) =~ s/\s+$//;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens open(SOURCE, "<$file") || die "can't open $file: $!";
fa9e4066f08beec538e775443c5be79dd423fcabahrens $_ = <SOURCE>;
fa9e4066f08beec538e775443c5be79dd423fcabahrens if ($type eq "YACC") {
fa9e4066f08beec538e775443c5be79dd423fcabahrens unless ($_ eq "%{\n") {
fa9e4066f08beec538e775443c5be79dd423fcabahrens print "$file: unexpected yacc file start ",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(expected \"%{\\n\")\n";
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl close(SOURCE);
3d7934e1eaaab784a1928c5c9bdb6273eeb7275drm next;
6733190958bbcc0bd6d1d601e7ae0a6994dafb45dougm }
fa9e4066f08beec538e775443c5be79dd423fcabahrens $before_copyright = "$_";
fa9e4066f08beec538e775443c5be79dd423fcabahrens $_ = <SOURCE>;
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens if ($c_comment && /^\/\*/) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens $_ = <SOURCE>;
fa9e4066f08beec538e775443c5be79dd423fcabahrens if ($_ !~ /[Cc]opyright/) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens print "$file: non-copyright comment\n";
fa9e4066f08beec538e775443c5be79dd423fcabahrens close(SOURCE);
fa9e4066f08beec538e775443c5be79dd423fcabahrens next;
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens if ($_ !~ /\*\//) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens while (<SOURCE>) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens last if $_ =~ /\*\//;
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
6733190958bbcc0bd6d1d601e7ae0a6994dafb45dougm }
6733190958bbcc0bd6d1d601e7ae0a6994dafb45dougm } elsif ($shell_comment) {
6733190958bbcc0bd6d1d601e7ae0a6994dafb45dougm if (/^\#\!/) {
6733190958bbcc0bd6d1d601e7ae0a6994dafb45dougm $before_copyright = "$_#\n";
6733190958bbcc0bd6d1d601e7ae0a6994dafb45dougm $_ = <SOURCE>;
6733190958bbcc0bd6d1d601e7ae0a6994dafb45dougm $_ = <SOURCE> if $_ eq "#\n";
6733190958bbcc0bd6d1d601e7ae0a6994dafb45dougm }
d8689a57b109f75e2654627f1847266e18f5a7f2dougm if (/^\#/) {
d8689a57b109f75e2654627f1847266e18f5a7f2dougm if ($_ !~ /[Cc]opyright/) {
d8689a57b109f75e2654627f1847266e18f5a7f2dougm print "$file: non-copyright comment\n";
6733190958bbcc0bd6d1d601e7ae0a6994dafb45dougm close(SOURCE);
6733190958bbcc0bd6d1d601e7ae0a6994dafb45dougm next;
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens while (<SOURCE>) {
3d7934e1eaaab784a1928c5c9bdb6273eeb7275drm if ($_ !~ /^\#/) {
3d7934e1eaaab784a1928c5c9bdb6273eeb7275drm $first = $_;
fa9e4066f08beec538e775443c5be79dd423fcabahrens last;
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
3a55fc6b85230272df26c2c8c82f1176c0503e3arm } else {
3a55fc6b85230272df26c2c8c82f1176c0503e3arm $first = $_;
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw }
3a55fc6b85230272df26c2c8c82f1176c0503e3arm } elsif (($m4_comment || $zone_comment || $man_comment) &&
fa9e4066f08beec538e775443c5be79dd423fcabahrens /^\Q$nonspaceprefix\E/) {
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl while (/^\Q$nonspaceprefix\E\s*$/) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens $_ = <SOURCE>;
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if ($_ !~ /[Cc]opyright/) {
cc4231e55a9c2eb07b3aa5b3e602a93d2415d284mmusante print "$file: non-copyright comment\n";
2b61b799b28717ea21febf9eab30c7867477f280mmusante close(SOURCE);
2b61b799b28717ea21febf9eab30c7867477f280mmusante next;
2b61b799b28717ea21febf9eab30c7867477f280mmusante }
2b61b799b28717ea21febf9eab30c7867477f280mmusante while (<SOURCE>) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens if ($_ !~ /^\Q$nonspaceprefix\E/ ||
fa9e4066f08beec538e775443c5be79dd423fcabahrens $_ =~ /$keyword_pat/) {
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl $first = $_;
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl last;
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl }
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl }
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl } elsif ($sgml_comment) {
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl if (/^<!DOCTYPE/) {
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl $before_copyright = $_;
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl $_ = <SOURCE>;
3d7934e1eaaab784a1928c5c9bdb6273eeb7275drm while (! /^<!/ ) {
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl $before_copyright = "$before_copyright$_";
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl $_ = <SOURCE>;
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl }
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl }
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl if (/^<!/) {
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl $_ = <SOURCE> if $_ eq "<!--\n";
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl if ($_ !~ /[Cc]opyright/) {
3d7934e1eaaab784a1928c5c9bdb6273eeb7275drm print "$file: non-copyright comment\n";
3d7934e1eaaab784a1928c5c9bdb6273eeb7275drm close(SOURCE);
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl next;
3d7934e1eaaab784a1928c5c9bdb6273eeb7275drm }
3d7934e1eaaab784a1928c5c9bdb6273eeb7275drm while (defined($_)) {
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl last if s/.*-->//;
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl $_ = <SOURCE>;
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl }
fa9e4066f08beec538e775443c5be79dd423fcabahrens print "$file: unterminated comment\n"
fa9e4066f08beec538e775443c5be79dd423fcabahrens unless defined($_);
fa9e4066f08beec538e775443c5be79dd423fcabahrens if ($_ ne "\n") {
3a55fc6b85230272df26c2c8c82f1176c0503e3arm $first = $_;
3a55fc6b85230272df26c2c8c82f1176c0503e3arm } else {
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw $first = <SOURCE>;
3a55fc6b85230272df26c2c8c82f1176c0503e3arm }
3a55fc6b85230272df26c2c8c82f1176c0503e3arm } else {
3a55fc6b85230272df26c2c8c82f1176c0503e3arm $first = $_;
3a55fc6b85230272df26c2c8c82f1176c0503e3arm }
3a55fc6b85230272df26c2c8c82f1176c0503e3arm } elsif ($type eq "TXT") {
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw if ($_ =~ /[Cc]opyright/) {
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw $/ = ""; # paragraph at a time
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw while (<SOURCE>) {
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw # Not very maintainable, but ok enough for now.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw last unless
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw /[Cc]opyright/ ||
fa9e4066f08beec538e775443c5be79dd423fcabahrens /See COPYRIGHT in the source root/ ||
3d7934e1eaaab784a1928c5c9bdb6273eeb7275drm /Permission to use, copy, modify, and / ||
fa9e4066f08beec538e775443c5be79dd423fcabahrens /THE SOFTWARE IS PROVIDED "AS IS" AND /;
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens $/ = "\n";
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens $first = $_;
3d7934e1eaaab784a1928c5c9bdb6273eeb7275drm } else {
3d7934e1eaaab784a1928c5c9bdb6273eeb7275drm $first = $_;
3d7934e1eaaab784a1928c5c9bdb6273eeb7275drm }
3d7934e1eaaab784a1928c5c9bdb6273eeb7275drm
3d7934e1eaaab784a1928c5c9bdb6273eeb7275drm $first = "" if ! defined($first);
3d7934e1eaaab784a1928c5c9bdb6273eeb7275drm
3d7934e1eaaab784a1928c5c9bdb6273eeb7275drm open(TARGET, ">$file.new") || die "can't open $file.new: $!";
3d7934e1eaaab784a1928c5c9bdb6273eeb7275drm print TARGET $before_copyright if $before_copyright;
fa9e4066f08beec538e775443c5be79dd423fcabahrens print TARGET $start_comment if $start_comment;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
3d7934e1eaaab784a1928c5c9bdb6273eeb7275drm $sysyears = "";
fa9e4066f08beec538e775443c5be79dd423fcabahrens $sftyears = "";
fa9e4066f08beec538e775443c5be79dd423fcabahrens $nomyears = "";
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling #
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling # Internet Software Consortium: up to 2003
d87468da622d0a816b26cc636aa7dcc08249300erm #
55406565bb21da3b769184726b3306b334df62e9mmusante $last_year = 0;
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling $anchor_year = 0;
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling $years = "";
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling foreach $year (@years) {
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling if ($year >= 2004) { next; }
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling if ($last_year != 0 && $year == $last_year + 1) {
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling if ($year > $anchor_year + 1) {
55406565bb21da3b769184726b3306b334df62e9mmusante substr($years, $anchor_end) = "-$year";
55406565bb21da3b769184726b3306b334df62e9mmusante } else {
99653d4ee642c6528e88224f12409a5f23060994eschrock $years .= ", $year";
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling }
99653d4ee642c6528e88224f12409a5f23060994eschrock } else {
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling $years .= $last_year == 0 ? "$year" : ", $year";
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling #if ($anchor_year != 0) {
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling # print "$file: noncontiguous year: ",
fa9e4066f08beec538e775443c5be79dd423fcabahrens # "$year != $last_year + 1\n";
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl #}
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl $anchor_year = $year;
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl $anchor_end = length($years);
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl }
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl
fa9e4066f08beec538e775443c5be79dd423fcabahrens $last_year = $year;
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens $sftyears = $years;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens #
fa9e4066f08beec538e775443c5be79dd423fcabahrens # Nominum: up to 2001.
fa9e4066f08beec538e775443c5be79dd423fcabahrens #
fa9e4066f08beec538e775443c5be79dd423fcabahrens $last_year = 0;
fa9e4066f08beec538e775443c5be79dd423fcabahrens $anchor_year = 0;
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling $years = "";
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling foreach $year (@years) {
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling if ($year >= 2002) { next; }
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling if ($last_year != 0 && $year == $last_year + 1) {
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling if ($year > $anchor_year + 1) {
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling substr($years, $anchor_end) = "-$year";
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else {
fa9e4066f08beec538e775443c5be79dd423fcabahrens $years .= ", $year";
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else {
fa9e4066f08beec538e775443c5be79dd423fcabahrens $years .= $last_year == 0 ? "$year" : ", $year";
fa9e4066f08beec538e775443c5be79dd423fcabahrens #if ($anchor_year != 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens # print "$file: noncontiguous year: ",
fa9e4066f08beec538e775443c5be79dd423fcabahrens # "$year != $last_year + 1\n";
fa9e4066f08beec538e775443c5be79dd423fcabahrens #}
fa9e4066f08beec538e775443c5be79dd423fcabahrens $anchor_year = $year;
fa9e4066f08beec538e775443c5be79dd423fcabahrens $anchor_end = length($years);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens $last_year = $year;
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw }
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw $nomyears = $years;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens #
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw # Internet Systems Consortium: 2004 onwards.
fa9e4066f08beec538e775443c5be79dd423fcabahrens #
fa9e4066f08beec538e775443c5be79dd423fcabahrens $last_year = 0;
fa9e4066f08beec538e775443c5be79dd423fcabahrens $anchor_year = 0;
fa9e4066f08beec538e775443c5be79dd423fcabahrens $years = "";
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw $anchor_end = length($years);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw foreach $year (@years) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens if ($year < 2004) { next; }
fa9e4066f08beec538e775443c5be79dd423fcabahrens if ($last_year != 0 && $year == $last_year + 1) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens if ($year > $anchor_year + 1) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens substr($years, $anchor_end) = "-$year";
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw } else {
fa9e4066f08beec538e775443c5be79dd423fcabahrens $years .= ", $year";
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else {
fa9e4066f08beec538e775443c5be79dd423fcabahrens $years .= $last_year == 0 ? "$year" : ", $year";
fa9e4066f08beec538e775443c5be79dd423fcabahrens #if ($anchor_year != 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens # print "$file: noncontiguous year: ",
fa9e4066f08beec538e775443c5be79dd423fcabahrens # "$year != $last_year + 1\n";
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl #}
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl $anchor_year = $year;
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl $anchor_end = length($years);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens $last_year = $year;
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens $sysyears = $years;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens ($firstline, $secondline, $thirdline, @otherlines) = @$textp;
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling $firstline =~ s/\@SYSYEARS\@/$sysyears/;
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling $secondline =~ s/\@SFTYEARS\@/$sftyears/;
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling $thirdline =~ s/\@NOMYEARS\@/$nomyears/;
3cb34c601f3ef3016f638574f5982e80c3735c71ahrens
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling print TARGET "$prefix$firstline";
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling if ($sftyears ne "" ) {
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling print TARGET $secondline =~ /^$/ ? $nonspaceprefix : $prefix;
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling print TARGET "$secondline";
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling }
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling print TARGET $thirdline =~ /^$/ ? $nonspaceprefix : $prefix;
3cb34c601f3ef3016f638574f5982e80c3735c71ahrens print TARGET "$thirdline";
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling foreach $_ (@otherlines) {
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling print TARGET (/^$/ ? $nonspaceprefix : $prefix);
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling print TARGET "$_";
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling }
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling print TARGET $end_comment if $end_comment;
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling
b12a1c38fc215cc54fa6014069fd2b8dbb496646lling if ($first eq "") {
fa9e4066f08beec538e775443c5be79dd423fcabahrens $first = <SOURCE>;
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (defined($first)) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens if ($type eq 'MAN') {
fa9e4066f08beec538e775443c5be79dd423fcabahrens print TARGET "$nonspaceprefix\n";
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else {
68f944b71d3feda491e30f04cc360be6cdb79f21eschrock print TARGET "\n";
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
94de1d4cf6ec0a3bf040dcc4b8df107c4ed36b51eschrock
68f944b71d3feda491e30f04cc360be6cdb79f21eschrock undef $/;
68f944b71d3feda491e30f04cc360be6cdb79f21eschrock $_ = <SOURCE>;
94de1d4cf6ec0a3bf040dcc4b8df107c4ed36b51eschrock $/ = "\n";
94de1d4cf6ec0a3bf040dcc4b8df107c4ed36b51eschrock
94de1d4cf6ec0a3bf040dcc4b8df107c4ed36b51eschrock if ($type eq 'SGML' && m:<docinfo>.*?</docinfo>:s) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens print "docinfo: $file\n";
94de1d4cf6ec0a3bf040dcc4b8df107c4ed36b51eschrock my $r = copyrights(@years);
94de1d4cf6ec0a3bf040dcc4b8df107c4ed36b51eschrock s:<docinfo>.*?</docinfo>:<docinfo>\n$r </docinfo>:s;
94de1d4cf6ec0a3bf040dcc4b8df107c4ed36b51eschrock }
94de1d4cf6ec0a3bf040dcc4b8df107c4ed36b51eschrock if ($type eq 'SGML' && m:<bookinfo>.*?</bookinfo>:s) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens print "bookinfo: $file\n";
fa9e4066f08beec538e775443c5be79dd423fcabahrens my $r = copyrights(@years);
fa9e4066f08beec538e775443c5be79dd423fcabahrens s:<bookinfo>.*?</bookinfo>:<bookinfo>\n$r </bookinfo>:s;
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens my ($start, $end);
fa9e4066f08beec538e775443c5be79dd423fcabahrens if ($start_comment ne "") {
fa9e4066f08beec538e775443c5be79dd423fcabahrens ($start = $start_comment) =~ s/\s*\n/ /;
fa9e4066f08beec538e775443c5be79dd423fcabahrens ($end = $end_comment) =~ s/^\s*(.*)\n/ $1\n/;
fa9e4066f08beec538e775443c5be79dd423fcabahrens } elsif ($prefix ne "") {
fa9e4066f08beec538e775443c5be79dd423fcabahrens ($start = $prefix) =~ s/\s*\n//;
990b4856d0eaada6f8140335733a1b1771ed2746lling $end = "\n";
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw } else {
fa9e4066f08beec538e775443c5be79dd423fcabahrens $start = "";
fa9e4066f08beec538e775443c5be79dd423fcabahrens $end = "\n";
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl }
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl if ($first !~ /$keyword_pat/ && $_ !~ /$keyword_pat/) {
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl $end = "\n$nonspaceprefix" if ($type eq "MAN");
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl print TARGET "$start\$";
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl print TARGET "Id";
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl print TARGET "\$$end\n";
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
e9dbad6f263d5570ed7ff5443ec5b958af8c24d7eschrock print TARGET $first if $first !~ /^\s*$/;
fa9e4066f08beec538e775443c5be79dd423fcabahrens print TARGET $_;
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
99653d4ee642c6528e88224f12409a5f23060994eschrock close(TARGET);
99653d4ee642c6528e88224f12409a5f23060994eschrock close(SOURCE);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
99653d4ee642c6528e88224f12409a5f23060994eschrock $mode = (stat $file)[2]&511;
fa9e4066f08beec538e775443c5be79dd423fcabahrens chmod $mode, "$file.new";
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw if (system("cmp -s $file.new $file") == 0) {
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw unlink("$file.new");
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw } else {
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw rename("$file.new", "$file")
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw or die "rename($file.new, $file): $!";
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw }
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw}
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw