b897c52f865b2fc4e220e2110b874e59c716456bBob Halley#!/usr/local/bin/perl -w
5fbced719b71e659322b4ce3e4a39c9b039674c7Bob Halley#
43d2e7a90517587f4549a58af1b450e476eab8f6Tinderbox User# Copyright (C) 1998-2001, 2004-2010, 2012-2017 Internet Systems Consortium, Inc. ("ISC")
bf8267aa453e5d2a735ed732a043b77a0b355b20Mark Andrews#
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews# This Source Code Form is subject to the terms of the Mozilla Public
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews# License, v. 2.0. If a copy of the MPL was not distributed with this
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews# file, You can obtain one at http://mozilla.org/MPL/2.0/.
15a44745412679c30a6d022733925af70a38b715David Lawrence
5a6e6c2c9b2f6cf426aa2a682aa800765e26d540Andreas Gustafssonrequire 5.002;
5a6e6c2c9b2f6cf426aa2a682aa800765e26d540Andreas Gustafsson
5a6e6c2c9b2f6cf426aa2a682aa800765e26d540Andreas Gustafsson# Map copyright owners to the files containing copyright messages.
5a6e6c2c9b2f6cf426aa2a682aa800765e26d540Andreas Gustafsson# The first line of the copyright message is not in the file;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence# it is constructed by this script.
2da2220fe7af2c45724b50b0187523b1fab0cf08Rob Austein#
2da2220fe7af2c45724b50b0187523b1fab0cf08Rob Austein# Usage:
2da2220fe7af2c45724b50b0187523b1fab0cf08Rob Austein#
2da2220fe7af2c45724b50b0187523b1fab0cf08Rob Austein# perl util/update_copyrights <util/copyrights
5a6e6c2c9b2f6cf426aa2a682aa800765e26d540Andreas Gustafsson
5a6e6c2c9b2f6cf426aa2a682aa800765e26d540Andreas Gustafssonmy %owner2filename = (
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence "" => "util/COPYRIGHT",
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence "NAI" => "util/COPYRIGHT.NAI",
cb3e854e181373807f7f011e5050c1a8013b4841Brian Wellington "NOM" => "util/COPYRIGHT.NOM",
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence "BSDI" => "util/COPYRIGHT.BSDI",
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence "BRIEF" => "util/COPYRIGHT.BRIEF",
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence "PORTION" => "util/COPYRIGHT.PORTION",
5a6e6c2c9b2f6cf426aa2a682aa800765e26d540Andreas Gustafsson);
5a6e6c2c9b2f6cf426aa2a682aa800765e26d540Andreas Gustafsson
5a6e6c2c9b2f6cf426aa2a682aa800765e26d540Andreas Gustafsson# Map each copyright owner name to a reference to an array containing
5a6e6c2c9b2f6cf426aa2a682aa800765e26d540Andreas Gustafsson# the lines of the copyright message.
5a6e6c2c9b2f6cf426aa2a682aa800765e26d540Andreas Gustafsson
5a6e6c2c9b2f6cf426aa2a682aa800765e26d540Andreas Gustafssonmy %owner2text = ();
5a6e6c2c9b2f6cf426aa2a682aa800765e26d540Andreas Gustafsson
6ca4964362ec37d6afbf614dbb9aaa2f525002f1Mark Andrewsmy $keyword_pat = '\$(Id:.*|Revision:.*|Id|Revision)\$';
c968a9ca37964ae0bdc5d452ad784ec93bd04c57David Lawrence
5a6e6c2c9b2f6cf426aa2a682aa800765e26d540Andreas Gustafssonforeach $owner (keys %owner2filename) {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence my $f = $owner2filename{$owner};
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence open(COPYRIGHT, "<$f") || die "can't open $f: $!";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence @copyright_text = <COPYRIGHT>;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence close(COPYRIGHT);
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $owner2text{$owner} = [ @copyright_text ];
b897c52f865b2fc4e220e2110b874e59c716456bBob Halley}
b897c52f865b2fc4e220e2110b874e59c716456bBob Halley
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrewsmy %file_types = ();
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrewsmy %file_years = ();
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrewsmy $years_list;
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrewsmy $parent;
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews($dummy,$dummy,$dummy,$dummy,$this_month,$this_year,$dummy,$dummy,$dummy) = localtime(time());
7877ad5db24dbad945afc670b2010c70d0d7e2f5Mark Andrews$this_year += 1900;
7877ad5db24dbad945afc670b2010c70d0d7e2f5Mark Andrews
b897c52f865b2fc4e220e2110b874e59c716456bBob Halleywhile (<>) {
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews chomp;
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews ($file, $type, $years) = split(/\s+/);
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews $file_types{$file} = $type;
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews $file_years{$file} = $years;
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews}
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrewssub getyears {
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews $parent = $_[0];
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews $parent =~ s/PARENT://;
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews $years_list = $file_years{$parent};
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews if (defined($years_list) && $years_list =~ /^PARENT:/) {
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews print "BAD PARENT:$parent\n";
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews undefine($years_list);
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews }
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews}
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrewssub docbook {
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews $parent = $_[0];
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews $parent =~ s/\.[^.]*$/.docbook/;
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews $years_list = $file_years{$parent};
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews}
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews
e107074f370ee86275bd64ab8bcaa429fec1c7e2Mark Andrewssub copyright {
e107074f370ee86275bd64ab8bcaa429fec1c7e2Mark Andrews my $holder = shift;
e107074f370ee86275bd64ab8bcaa429fec1c7e2Mark Andrews my $result = "";
e107074f370ee86275bd64ab8bcaa429fec1c7e2Mark Andrews return $result unless (@_);
e107074f370ee86275bd64ab8bcaa429fec1c7e2Mark Andrews $result = "$result <copyright>\n";
e107074f370ee86275bd64ab8bcaa429fec1c7e2Mark Andrews $result = "$result <year>$_</year>\n" foreach (@_);
e107074f370ee86275bd64ab8bcaa429fec1c7e2Mark Andrews $result = "$result <holder>$holder</holder>\n";
e107074f370ee86275bd64ab8bcaa429fec1c7e2Mark Andrews $result = "$result </copyright>\n";
e107074f370ee86275bd64ab8bcaa429fec1c7e2Mark Andrews return $result;
e107074f370ee86275bd64ab8bcaa429fec1c7e2Mark Andrews}
e107074f370ee86275bd64ab8bcaa429fec1c7e2Mark Andrews
e107074f370ee86275bd64ab8bcaa429fec1c7e2Mark Andrewssub copyrights {
a809c57ab263613c79999653ad28fbe47fa4bfa3Mark Andrews my $a = copyright("Internet Systems Consortium, Inc. (\"ISC\")", @_);
a809c57ab263613c79999653ad28fbe47fa4bfa3Mark Andrews return "$a";
e107074f370ee86275bd64ab8bcaa429fec1c7e2Mark Andrews}
e107074f370ee86275bd64ab8bcaa429fec1c7e2Mark Andrews
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrewsforeach $file (keys %file_types) {
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews $typeandowner = $file_types{$file};
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews $years_list = $file_years{$file};
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence if ( ! -f $file ) {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence print "$file: missing\n";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence next;
4b598d8ae578861d5f3fc1333c9f84c9c9c8be7cDavid Lawrence }
8959ca20706f210127d0af1df769fb945c92baeaMark Andrews # print "Doing: $file";
4b598d8ae578861d5f3fc1333c9f84c9c9c8be7cDavid Lawrence
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews if ($years_list =~ /PARENT:/) {
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews getyears($years_list);
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews if (!defined $years_list) {
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews print "$file: has bad parent $parent\n";
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews next;
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews }
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews }
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews
f6161d8b90541b52946ae845bc8e2bec2647d6cbMark Andrews # copyright notice is now generated from the source.
5bae12051f80947fb9a5a6a3a54762e8bd08d95bMark Andrews next if ($years_list eq "DOCBOOK");
f6161d8b90541b52946ae845bc8e2bec2647d6cbMark Andrews
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews if ($years_list eq "DOCBOOK") {
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews docbook($file);
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews if (!defined $years_list) {
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews print "$file: has bad parent $parent\n";
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews next;
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews }
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews }
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews @years = split(/,/, $years_list);
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence my ($type, $owner) = split(/\./, $typeandowner);
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $owner = "" if !defined $owner;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $textp = $owner2text{$owner};
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence if (!defined $textp) {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence print "$file: unknown copyright owner $owner\n";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence next;
4b598d8ae578861d5f3fc1333c9f84c9c9c8be7cDavid Lawrence }
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews if ($file eq "./CHANGES" || $file eq "./EXCLUDED" ||
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews $file eq "./CHANGES.SE")
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews {
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews open(SOURCE, "<$file") || die "can't open $file: $!";
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews my $body = "";
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews while (<SOURCE>) {
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews # Process leading white space.
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews # Remove 1-7 spaces followed by a tab into a single
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews # tab if at start of line or proceeded by tabs.
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews s/^(\t*) {1,7}\t/$1\t/ while (/^\t* {1,7}\t/);
3b84724c44654f5c851b04acd71ba3fb6af133feMark Andrews s/^(\s{0,3}\d*\.)\s(\[\w{1,5}\])\s+(\S+)/$1\t$2\t\t$3/;
3b84724c44654f5c851b04acd71ba3fb6af133feMark Andrews s/^(\s{0,3}\d*\.)\s(\[\w{6,}\])\s+(\S+)/$1\t$2\t$3/;
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews # Convert 8 spaces into tabs if at start of line
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews # or preceeded by tabs.
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews s/^(\t*) /$1\t/ while (/^\t* /);
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews # Remove trailing white space.
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews s/[ \t]*$//;
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews $body = "$body$_";
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews }
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews $_ = $body;
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews open(TARGET, ">$file.new") || die "can't open $file.new: $!";
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews print TARGET $_;
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews close(TARGET);
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews close(SOURCE);
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews if (system("cmp -s $file.new $file") == 0) {
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews unlink("$file.new");
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews } else {
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews rename("$file.new", "$file")
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews or die "rename($file.new, $file): $!";
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews }
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews }
17f0452d8584cbcd6772b6d79eeadfa462162a51Mark Andrews
4e71e9b6c86d4d437c1beb4070861a77464f98e6Andreas Gustafsson next if $type eq "X" or $type eq "BAT";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $before_copyright = "";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $c_comment = 0;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $shell_comment = 0;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $m4_comment = 0;
5a48c9f76003a649e16de34fe6206e3b67b97afbBob Halley $sgml_comment = 0;
e2653c8e8437a0af130346b471c337ca3aa8910cMark Andrews $mkd_comment = 0;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $zone_comment = 0;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $man_comment = 0;
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews $python_comment = 0;
168cf0ede1cf13a095e48af6749d88fbc432f096Evan Hunt $python_bin_comment = 0;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $start_comment = "";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $end_comment = "";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $first = "";
86cbec9012b1db3f85789155c38d10c63a96156fAndreas Gustafsson if ($type =~ /^(C|YACC|CONF-C)$/) {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $c_comment = 1;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $start_comment = "/*\n";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $prefix = " * ";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $end_comment = " */\n";
2da2220fe7af2c45724b50b0187523b1fab0cf08Rob Austein } elsif ($type =~ /^(SH|PERL|TCL|MAKE|CONF-SH|RNC)$/) {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $shell_comment = 1;
0ba25dfc4cecede3228acf372b3373880a5355b0Mark Andrews $prefix = "# ";
168cf0ede1cf13a095e48af6749d88fbc432f096Evan Hunt } elsif ($type =~ /^PYTHON-BIN$/) {
168cf0ede1cf13a095e48af6749d88fbc432f096Evan Hunt $python_bin_comment = 1;
168cf0ede1cf13a095e48af6749d88fbc432f096Evan Hunt $start_comment = "############################################################################\n";
168cf0ede1cf13a095e48af6749d88fbc432f096Evan Hunt $prefix = "# ";
168cf0ede1cf13a095e48af6749d88fbc432f096Evan Hunt $end_comment = "############################################################################\n"
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews } elsif ($type =~ /^PYTHON$/) {
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews $python_comment = 1;
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews $start_comment = "############################################################################\n";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $prefix = "# ";
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews $end_comment = "############################################################################\n"
1fa26403d7679235a30fbf6289f68fed5872df30Mark Andrews } elsif ($type eq "ZONE" || $type eq "MC") {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $zone_comment = 1;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $prefix = "; ";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence } elsif ($type eq "MAN") {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $man_comment = 1;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $prefix = ".\\\" ";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence } elsif ($type eq "M4") {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $m4_comment = 1;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $prefix = "dnl ";
5a48c9f76003a649e16de34fe6206e3b67b97afbBob Halley } elsif ($type eq "HTML" || $type eq "SGML") {
5a48c9f76003a649e16de34fe6206e3b67b97afbBob Halley $sgml_comment = 1;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $start_comment = "<!--\n";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $prefix = " - ";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $end_comment = "-->\n";
6306dd073e0eba562491222821c4d3b39f440718Evan Hunt } elsif ($type eq "MKD") {
e2653c8e8437a0af130346b471c337ca3aa8910cMark Andrews $mkd_comment = 1;
59663800d2ec04777dae2791dd92aa563faf94c8Evan Hunt $start_comment = "<!--\n";
6306dd073e0eba562491222821c4d3b39f440718Evan Hunt $prefix = " - ";
59663800d2ec04777dae2791dd92aa563faf94c8Evan Hunt $end_comment = "-->";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence } elsif ($type eq "TXT") {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $prefix = "";
4b598d8ae578861d5f3fc1333c9f84c9c9c8be7cDavid Lawrence } else {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence print "$file: type '$type' not supported yet; skipping\n";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence next;
4b598d8ae578861d5f3fc1333c9f84c9c9c8be7cDavid Lawrence }
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence ($nonspaceprefix = $prefix) =~ s/\s+$//;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence open(SOURCE, "<$file") || die "can't open $file: $!";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $_ = <SOURCE>;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence if ($type eq "YACC") {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence unless ($_ eq "%{\n") {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence print "$file: unexpected yacc file start ",
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence "(expected \"%{\\n\")\n";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence close(SOURCE);
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence next;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence }
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $before_copyright = "$_";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $_ = <SOURCE>;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence }
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence if ($c_comment && /^\/\*/) {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $_ = <SOURCE>;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence if ($_ !~ /[Cc]opyright/) {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence print "$file: non-copyright comment\n";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence close(SOURCE);
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence next;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence }
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence if ($_ !~ /\*\//) {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence while (<SOURCE>) {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence last if $_ =~ /\*\//;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence }
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence }
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence } elsif ($shell_comment) {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence if (/^\#\!/) {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $before_copyright = "$_#\n";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $_ = <SOURCE>;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $_ = <SOURCE> if $_ eq "#\n";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence }
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence if (/^\#/) {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence if ($_ !~ /[Cc]opyright/) {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence print "$file: non-copyright comment\n";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence close(SOURCE);
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence next;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence }
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence while (<SOURCE>) {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence if ($_ !~ /^\#/) {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $first = $_;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence last;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence }
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence }
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence } else {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $first = $_;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence }
168cf0ede1cf13a095e48af6749d88fbc432f096Evan Hunt } elsif ($python_comment || $python_bin_comment) {
168cf0ede1cf13a095e48af6749d88fbc432f096Evan Hunt if ($python_bin_comment && /^\#\!/) {
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews $before_copyright = "$_";
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews $_ = <SOURCE>;
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews $_ = <SOURCE> if $_ eq "#\n";
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews $_ = <SOURCE> if $_ eq "############################################################################\n";
168cf0ede1cf13a095e48af6749d88fbc432f096Evan Hunt } elsif ($python_comment && /^\#/) {
168cf0ede1cf13a095e48af6749d88fbc432f096Evan Hunt $_ = <SOURCE> if $_ eq "#\n";
168cf0ede1cf13a095e48af6749d88fbc432f096Evan Hunt $_ = <SOURCE> if $_ eq "############################################################################\n";
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews }
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews if (/^\#/) {
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews if ($_ !~ /[Cc]opyright/) {
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews print "$file: non-copyright comment\n";
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews close(SOURCE);
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews next;
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews }
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews while (<SOURCE>) {
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews if ($_ !~ /^\#/) {
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews $first = $_;
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews last;
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews }
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews }
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews } else {
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews $first = $_;
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews }
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence } elsif (($m4_comment || $zone_comment || $man_comment) &&
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence /^\Q$nonspaceprefix\E/) {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence while (/^\Q$nonspaceprefix\E\s*$/) {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $_ = <SOURCE>;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence }
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence if ($_ !~ /[Cc]opyright/) {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence print "$file: non-copyright comment\n";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence close(SOURCE);
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence next;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence }
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence while (<SOURCE>) {
c968a9ca37964ae0bdc5d452ad784ec93bd04c57David Lawrence if ($_ !~ /^\Q$nonspaceprefix\E/ ||
c968a9ca37964ae0bdc5d452ad784ec93bd04c57David Lawrence $_ =~ /$keyword_pat/) {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $first = $_;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence last;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence }
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence }
5a48c9f76003a649e16de34fe6206e3b67b97afbBob Halley } elsif ($sgml_comment) {
6292befae7d18aa1918c958d284dec4957ea31c3Mark Andrews $before_copyright = "";
6715db6593ce9a271ac3131cd7a886feaa386a2eEvan Hunt while (/^<!DOCTYPE/ || /^<!ENTITY/ || /^<\?xml-stylesheet/ || /^<\?xml /) {
8959ca20706f210127d0af1df769fb945c92baeaMark Andrews # print "SGML: $_";
6292befae7d18aa1918c958d284dec4957ea31c3Mark Andrews $before_copyright = "$before_copyright$_";
3db767c98f8dfaadef4b389150e1257b67b3dacbMark Andrews if (/\]>$/ ) {
3db767c98f8dfaadef4b389150e1257b67b3dacbMark Andrews $_ = <SOURCE>;
3db767c98f8dfaadef4b389150e1257b67b3dacbMark Andrews close(SOURCE) if (eof(SOURCE));
3db767c98f8dfaadef4b389150e1257b67b3dacbMark Andrews next;
3db767c98f8dfaadef4b389150e1257b67b3dacbMark Andrews }
d9156bba3e3836d281e4f73d4eb8e8fbac9db657Mark Andrews if (/^<!DOCTYPE.*\[$/) {
3db767c98f8dfaadef4b389150e1257b67b3dacbMark Andrews while (!eof(SOURCE)) {
3db767c98f8dfaadef4b389150e1257b67b3dacbMark Andrews $_ = <SOURCE>;
3db767c98f8dfaadef4b389150e1257b67b3dacbMark Andrews next if (eof(SOURCE));
3db767c98f8dfaadef4b389150e1257b67b3dacbMark Andrews $before_copyright =
3db767c98f8dfaadef4b389150e1257b67b3dacbMark Andrews "$before_copyright$_";
3db767c98f8dfaadef4b389150e1257b67b3dacbMark Andrews if (/]>$/) {
3db767c98f8dfaadef4b389150e1257b67b3dacbMark Andrews $_ = <SOURCE>;
3db767c98f8dfaadef4b389150e1257b67b3dacbMark Andrews last;
3db767c98f8dfaadef4b389150e1257b67b3dacbMark Andrews }
3db767c98f8dfaadef4b389150e1257b67b3dacbMark Andrews }
3db767c98f8dfaadef4b389150e1257b67b3dacbMark Andrews close(SOURCE) if (eof(SOURCE));
3db767c98f8dfaadef4b389150e1257b67b3dacbMark Andrews next;
3db767c98f8dfaadef4b389150e1257b67b3dacbMark Andrews }
8959ca20706f210127d0af1df769fb945c92baeaMark Andrews if (/>$/ ) {
3d17258ff6c22bee15e3197d0e61a7ecaba7ed86Mark Andrews $_ = <SOURCE>;
3d17258ff6c22bee15e3197d0e61a7ecaba7ed86Mark Andrews close(SOURCE) if (eof(SOURCE));
3d17258ff6c22bee15e3197d0e61a7ecaba7ed86Mark Andrews next;
3d17258ff6c22bee15e3197d0e61a7ecaba7ed86Mark Andrews }
8959ca20706f210127d0af1df769fb945c92baeaMark Andrews $_ = <SOURCE>;
797d71e5bfaae7cc93ee53907bb988741931928eMark Andrews while (!eof(SOURCE) && ! /^<!/ ) {
21abfe71f960bb892e34fc16f6222151c3f7ce99Mark Andrews $before_copyright = "$before_copyright$_";
21abfe71f960bb892e34fc16f6222151c3f7ce99Mark Andrews $_ = <SOURCE>;
21abfe71f960bb892e34fc16f6222151c3f7ce99Mark Andrews }
797d71e5bfaae7cc93ee53907bb988741931928eMark Andrews if (eof(SOURCE)) {
797d71e5bfaae7cc93ee53907bb988741931928eMark Andrews close(SOURCE);
797d71e5bfaae7cc93ee53907bb988741931928eMark Andrews next;
797d71e5bfaae7cc93ee53907bb988741931928eMark Andrews }
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence }
6715db6593ce9a271ac3131cd7a886feaa386a2eEvan Hunt if (/^<!--/) {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $_ = <SOURCE> if $_ eq "<!--\n";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence if ($_ !~ /[Cc]opyright/) {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence print "$file: non-copyright comment\n";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence close(SOURCE);
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence next;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence }
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence while (defined($_)) {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence last if s/.*-->//;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $_ = <SOURCE>;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence }
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence print "$file: unterminated comment\n"
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence unless defined($_);
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence if ($_ ne "\n") {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $first = $_;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence } else {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $first = <SOURCE>;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence }
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence } else {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $first = $_;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence }
e2653c8e8437a0af130346b471c337ca3aa8910cMark Andrews } elsif ($mkd_comment) {
e2653c8e8437a0af130346b471c337ca3aa8910cMark Andrews $before_copyright = "";
e2653c8e8437a0af130346b471c337ca3aa8910cMark Andrews if (/^<!/) {
9b84e4edd614109ec8401b53d9612c01bea03a25Mark Andrews $_ = <SOURCE> if $_ eq "<!--\n";
e2653c8e8437a0af130346b471c337ca3aa8910cMark Andrews if ($_ !~ /[Cc]opyright/) {
e2653c8e8437a0af130346b471c337ca3aa8910cMark Andrews print "$file: non-copyright comment\n";
e2653c8e8437a0af130346b471c337ca3aa8910cMark Andrews close(SOURCE);
e2653c8e8437a0af130346b471c337ca3aa8910cMark Andrews next;
e2653c8e8437a0af130346b471c337ca3aa8910cMark Andrews }
e2653c8e8437a0af130346b471c337ca3aa8910cMark Andrews while (defined($_)) {
9b84e4edd614109ec8401b53d9612c01bea03a25Mark Andrews last if s/.*-->//;
e2653c8e8437a0af130346b471c337ca3aa8910cMark Andrews $_ = <SOURCE>;
e2653c8e8437a0af130346b471c337ca3aa8910cMark Andrews }
e2653c8e8437a0af130346b471c337ca3aa8910cMark Andrews print "$file: unterminated comment\n"
e2653c8e8437a0af130346b471c337ca3aa8910cMark Andrews unless defined($_);
e2653c8e8437a0af130346b471c337ca3aa8910cMark Andrews if ($_ ne "\n") {
e2653c8e8437a0af130346b471c337ca3aa8910cMark Andrews $first = $_;
e2653c8e8437a0af130346b471c337ca3aa8910cMark Andrews } else {
e2653c8e8437a0af130346b471c337ca3aa8910cMark Andrews $first = <SOURCE>;
e2653c8e8437a0af130346b471c337ca3aa8910cMark Andrews }
e2653c8e8437a0af130346b471c337ca3aa8910cMark Andrews } else {
e2653c8e8437a0af130346b471c337ca3aa8910cMark Andrews $first = $_;
e2653c8e8437a0af130346b471c337ca3aa8910cMark Andrews }
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence } elsif ($type eq "TXT") {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence if ($_ =~ /[Cc]opyright/) {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $/ = ""; # paragraph at a time
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence while (<SOURCE>) {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence # Not very maintainable, but ok enough for now.
a299dbc5667ccce4e9c7e40b5ed1e106e27e787fMark Andrews last if /Portions of this code/;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence last unless
1fa26403d7679235a30fbf6289f68fed5872df30Mark Andrews /[Cc]opyright/ ||
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews /This Source Code Form is subject to the terms of the Mozilla Public/ ||
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews /If a copy of the MPL was not distributed with this/ ||
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews /You can obtain one at http:\/\/mozilla.org\/MPL\/2.0\// ||
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence /See COPYRIGHT in the source root/ ||
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence /Permission to use, copy, modify, and / ||
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence /THE SOFTWARE IS PROVIDED "AS IS" AND /;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence }
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $/ = "\n";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence }
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $first = $_;
4b598d8ae578861d5f3fc1333c9f84c9c9c8be7cDavid Lawrence } else {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $first = $_;
4b598d8ae578861d5f3fc1333c9f84c9c9c8be7cDavid Lawrence }
4b598d8ae578861d5f3fc1333c9f84c9c9c8be7cDavid Lawrence
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $first = "" if ! defined($first);
5a6e6c2c9b2f6cf426aa2a682aa800765e26d540Andreas Gustafsson
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence open(TARGET, ">$file.new") || die "can't open $file.new: $!";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence print TARGET $before_copyright if $before_copyright;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence print TARGET $start_comment if $start_comment;
5a6e6c2c9b2f6cf426aa2a682aa800765e26d540Andreas Gustafsson
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews $sysyears = "";
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews $nomyears = "";
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews #
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews # Nominum: up to 2001.
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews #
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews $last_year = 0;
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews $anchor_year = 0;
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews $years = "";
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews foreach $year (@years) {
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews if ($year >= 2002) { next; }
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews if ($last_year != 0 && $year == $last_year + 1) {
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews if ($year > $anchor_year + 1) {
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews substr($years, $anchor_end) = "-$year";
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews } else {
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews $years .= ", $year";
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews }
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews } else {
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews $years .= $last_year == 0 ? "$year" : ", $year";
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews #if ($anchor_year != 0) {
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews # print "$file: noncontiguous year: ",
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews # "$year != $last_year + 1\n";
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews #}
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews $anchor_year = $year;
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews $anchor_end = length($years);
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews }
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews $last_year = $year;
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews }
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews $nomyears = $years;
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews #
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews # Internet Systems Consortium: 2004 onwards.
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews #
7d5dd6b570812327bcd1ada96a5065e22d0981e5Mark Andrews $last_year = 0;
7d5dd6b570812327bcd1ada96a5065e22d0981e5Mark Andrews $anchor_year = 0;
7d5dd6b570812327bcd1ada96a5065e22d0981e5Mark Andrews $years = "";
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews $anchor_end = length($years);
144a3203a6e1827d78fb046e92b15ece82e6e378Mark Andrews my $andor = 0;
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews my $noid = 0;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence foreach $year (@years) {
144a3203a6e1827d78fb046e92b15ece82e6e378Mark Andrews $andor = 1 if ($year >= 2007);
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews $noid = 1 if ($year > 2012 || ($year == 2012 && $this_month >= 5) );
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence if ($last_year != 0 && $year == $last_year + 1) {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence if ($year > $anchor_year + 1) {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence substr($years, $anchor_end) = "-$year";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence } else {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $years .= ", $year";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence }
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence } else {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $years .= $last_year == 0 ? "$year" : ", $year";
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews #if ($anchor_year != 0) {
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews # print "$file: noncontiguous year: ",
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews # "$year != $last_year + 1\n";
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews #}
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $anchor_year = $year;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $anchor_end = length($years);
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence }
5a6e6c2c9b2f6cf426aa2a682aa800765e26d540Andreas Gustafsson
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $last_year = $year;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence }
0295f63b67bb09cd4d00dd1d9c2238c37beefed8Mark Andrews $sysyears = $years;
541ed6feaf687e97990ad19748faeec744158559David Lawrence
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews # make a copy
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews @lines = @$textp;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews foreach $_ (@lines) {
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews next if (/\@SYSYEARS\@/ && $sysyears eq "");
144a3203a6e1827d78fb046e92b15ece82e6e378Mark Andrews s:modify, and distribute:modify, and/or distribute: if ($andor);
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence print TARGET (/^$/ ? $nonspaceprefix : $prefix);
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews s/\@SYSYEARS\@/$sysyears/;
599a98b25ca10c501bdf3368eab2a2a951130949Mark Andrews s/\@NOMYEARS\@/$nomyears/;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence print TARGET "$_";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence }
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence print TARGET $end_comment if $end_comment;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence if ($first eq "") {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $first = <SOURCE>;
541ed6feaf687e97990ad19748faeec744158559David Lawrence }
c968a9ca37964ae0bdc5d452ad784ec93bd04c57David Lawrence
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence if (defined($first)) {
c968a9ca37964ae0bdc5d452ad784ec93bd04c57David Lawrence if ($type eq 'MAN') {
c968a9ca37964ae0bdc5d452ad784ec93bd04c57David Lawrence print TARGET "$nonspaceprefix\n";
c968a9ca37964ae0bdc5d452ad784ec93bd04c57David Lawrence } else {
c968a9ca37964ae0bdc5d452ad784ec93bd04c57David Lawrence print TARGET "\n";
c968a9ca37964ae0bdc5d452ad784ec93bd04c57David Lawrence }
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence
2c089bf6d24936de631a57b4958ba6b8b5e3b23dMark Andrews if (($type eq "C" || $type eq "CONF-C") &&
2c089bf6d24936de631a57b4958ba6b8b5e3b23dMark Andrews $sysyears =~ /$this_year/) {
14731fe09a82ff330f999236ad40571de033d523Mark Andrews my $body = "";
14731fe09a82ff330f999236ad40571de033d523Mark Andrews while (<SOURCE>) {
14731fe09a82ff330f999236ad40571de033d523Mark Andrews # Process leading white space.
14731fe09a82ff330f999236ad40571de033d523Mark Andrews # Remove 1-7 spaces followed by a tab into a single
14731fe09a82ff330f999236ad40571de033d523Mark Andrews # tab if at start of line or proceeded by tabs.
14731fe09a82ff330f999236ad40571de033d523Mark Andrews s/^(\t*) {1,7}\t/$1\t/ while (/^\t* {1,7}\t/);
14731fe09a82ff330f999236ad40571de033d523Mark Andrews # Convert 8 spaces into tabs if at start of line
14731fe09a82ff330f999236ad40571de033d523Mark Andrews # or preceeded by tabs.
847e176103f14229f8b0cd4f7b3e3a2d76aac1a9Mark Andrews s/^(\t*) {8}/$1\t/ while (/^\t* {8}/);
14731fe09a82ff330f999236ad40571de033d523Mark Andrews # Remove trailing white space.
14731fe09a82ff330f999236ad40571de033d523Mark Andrews s/[ \t]*$//;
14731fe09a82ff330f999236ad40571de033d523Mark Andrews $body = "$body$_";
14731fe09a82ff330f999236ad40571de033d523Mark Andrews }
14731fe09a82ff330f999236ad40571de033d523Mark Andrews $_ = $body;
79f0eedd657d75889009226aa7ce23eeac28df5cMark Andrews } elsif (($type eq "SGML" || $type eq "HTML" ||
79f0eedd657d75889009226aa7ce23eeac28df5cMark Andrews $type eq "MAKE") &&
79f0eedd657d75889009226aa7ce23eeac28df5cMark Andrews $sysyears =~ /$this_year/) {
30eec077db2bdcb6f2a0dc388a3cdde2ede75ec1Mark Andrews my $body = "";
30eec077db2bdcb6f2a0dc388a3cdde2ede75ec1Mark Andrews while (<SOURCE>) {
30eec077db2bdcb6f2a0dc388a3cdde2ede75ec1Mark Andrews # Remove trailing white space.
30eec077db2bdcb6f2a0dc388a3cdde2ede75ec1Mark Andrews s/[ \t]*$//;
30eec077db2bdcb6f2a0dc388a3cdde2ede75ec1Mark Andrews $body = "$body$_";
30eec077db2bdcb6f2a0dc388a3cdde2ede75ec1Mark Andrews }
30eec077db2bdcb6f2a0dc388a3cdde2ede75ec1Mark Andrews $_ = $body;
14731fe09a82ff330f999236ad40571de033d523Mark Andrews } else {
14731fe09a82ff330f999236ad40571de033d523Mark Andrews undef $/;
14731fe09a82ff330f999236ad40571de033d523Mark Andrews $_ = <SOURCE>;
14731fe09a82ff330f999236ad40571de033d523Mark Andrews $/ = "\n";
14731fe09a82ff330f999236ad40571de033d523Mark Andrews }
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence
10e873cb368b0ed17a328e5421a0411eb90da0cbMark Andrews if ($type eq 'SGML' && m:<articleinfo>.*?</articleinfo>:s) {
10e873cb368b0ed17a328e5421a0411eb90da0cbMark Andrews # print "docinfo: $file\n";
10e873cb368b0ed17a328e5421a0411eb90da0cbMark Andrews my $r = copyrights(@years);
10e873cb368b0ed17a328e5421a0411eb90da0cbMark Andrews s:<articleinfo>.*?</articleinfo>:<articleinfo>\n$r </articleinfo>:s;
10e873cb368b0ed17a328e5421a0411eb90da0cbMark Andrews }
e107074f370ee86275bd64ab8bcaa429fec1c7e2Mark Andrews if ($type eq 'SGML' && m:<docinfo>.*?</docinfo>:s) {
b2e221a37027fd6b909894451a29366162c91d7eMark Andrews # print "docinfo: $file\n";
e107074f370ee86275bd64ab8bcaa429fec1c7e2Mark Andrews my $r = copyrights(@years);
c61c6db1cea02006815184845fcf1b633b28163dMark Andrews s:<docinfo>.*?</docinfo>:<docinfo>\n$r </docinfo>:s;
e107074f370ee86275bd64ab8bcaa429fec1c7e2Mark Andrews }
e107074f370ee86275bd64ab8bcaa429fec1c7e2Mark Andrews if ($type eq 'SGML' && m:<bookinfo>.*?</bookinfo>:s) {
b2e221a37027fd6b909894451a29366162c91d7eMark Andrews # print "bookinfo: $file\n";
e107074f370ee86275bd64ab8bcaa429fec1c7e2Mark Andrews my $r = copyrights(@years);
cf47fe2ddc9e738809b3b2d708ed2712188e7fc1Evan Hunt $r .= " <xi:include href=\"releaseinfo.xml\"/>\n";
e107074f370ee86275bd64ab8bcaa429fec1c7e2Mark Andrews s:<bookinfo>.*?</bookinfo>:<bookinfo>\n$r </bookinfo>:s;
e107074f370ee86275bd64ab8bcaa429fec1c7e2Mark Andrews }
ae07f624ff7218079a36fd8aa1e2e1f76c1399c6Mark Andrews if ($type eq 'SGML' && m:<!-- insert copyright start -->.*?<!-- insert copyright end -->:s) {
ae07f624ff7218079a36fd8aa1e2e1f76c1399c6Mark Andrews my $r = copyrights(@years);
ae07f624ff7218079a36fd8aa1e2e1f76c1399c6Mark Andrews s:<!-- insert copyright start -->.*?<!-- insert copyright end -->:<!-- insert copyright start -->\n$r <!-- insert copyright end -->:s;
ae07f624ff7218079a36fd8aa1e2e1f76c1399c6Mark Andrews }
e107074f370ee86275bd64ab8bcaa429fec1c7e2Mark Andrews
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence my ($start, $end);
168cf0ede1cf13a095e48af6749d88fbc432f096Evan Hunt if ($type =~ /^PYTHON(|-BIN)$/) {
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews ($start = $prefix) =~ s/\s*\n//;
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews $end = "\n";
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews } elsif ($start_comment ne "") {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence ($start = $start_comment) =~ s/\s*\n/ /;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence ($end = $end_comment) =~ s/^\s*(.*)\n/ $1\n/;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence } elsif ($prefix ne "") {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence ($start = $prefix) =~ s/\s*\n//;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $end = "\n";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence } else {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $start = "";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $end = "\n";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence }
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence
9640c35421ba0bb4af6b6bfbff695d2a0ac560b3Mark Andrews if (!$noid && $first !~ /$keyword_pat/ &&
9408328f1d5034e7cb9552e8df1aaf578118f2b5Mark Andrews (!defined($_) || $_ !~ /$keyword_pat/)) {
6ca4964362ec37d6afbf614dbb9aaa2f525002f1Mark Andrews $end = "\n$nonspaceprefix" if ($type eq "MAN");
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence print TARGET "$start\$";
34158349b49add1ad63eede5ab7e694c589eb3cdMark Andrews print TARGET "Id";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence print TARGET "\$$end\n";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence }
541ed6feaf687e97990ad19748faeec744158559David Lawrence
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence print TARGET $first if $first !~ /^\s*$/;
9408328f1d5034e7cb9552e8df1aaf578118f2b5Mark Andrews print TARGET $_ if (defined($_));
541ed6feaf687e97990ad19748faeec744158559David Lawrence }
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence close(TARGET);
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence close(SOURCE);
541ed6feaf687e97990ad19748faeec744158559David Lawrence
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence $mode = (stat $file)[2]&511;
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence chmod $mode, "$file.new";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence if (system("cmp -s $file.new $file") == 0) {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence unlink("$file.new");
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence } else {
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence rename("$file.new", "$file")
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence or die "rename($file.new, $file): $!";
f4a7d04843eb62c92f2d4ff338da49ae86e3279bDavid Lawrence }
b897c52f865b2fc4e220e2110b874e59c716456bBob Halley}