update_copyrights revision e6d6ce00e2bf0f6a755f8229212e35706e4035ae
d6fa26d0adaec6c910115be34fe7a5a5f402c14fMark Andrews#!/usr/local/bin/perl -w
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
32098293b78922a5fbd10906afa28624820d3756Tinderbox User# Copyright (C) 1998, 1999 Internet Software Consortium.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox User# Permission to use, copy, modify, and distribute this software for any
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox User# purpose with or without fee is hereby granted, provided that the above
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox User# copyright notice and this permission notice appear in all copies.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
d6fa26d0adaec6c910115be34fe7a5a5f402c14fMark Andrews# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt# PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# SOFTWARE.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinif (@ARGV == 0) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein die "usage: update_copyrights <copyright_text>";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein@copyright_text = ();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinopen(COPYRIGHT, "<$ARGV[0]") || die "can't open $ARGV[0]: $!";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein@copyright_text = <>;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinclose(COPYRIGHT);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinwhile (<>) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ($file, $type, $years_list) = split(/\s+/);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein @years = split(/,/, $years_list);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ( ! -f $file ) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print "$file: missing\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User }
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User if ($type eq "X") {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User if ( ! -f $file ) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print "$file: type X, but missing\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User next;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User }
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User $before_copyright = "";
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User $c_comment = 0;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $shell_comment = 0;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User $m4_comment = 0;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User $first = "";
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User if ($type eq "C") {
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User $c_comment = 1;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User $prefix = " * ";
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User } elsif ($type eq "SH" || $type eq "PERL" || $type eq "MAKE") {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $shell_comment = 1;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $prefix = "# ";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } elsif ($type eq "M4") {
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User $m4_comment = 1;
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User $prefix = "dnl ";
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews } else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print "$file: type '$type' not supported yet; skipping\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein open(SOURCE, "<$file") || die "can't open $file: $!";
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews $_ = <SOURCE>;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($c_comment && /^\/\*/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = <SOURCE>;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($_ !~ /[Cc]opyright/) {
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User print "$file: non-copyright comment\n";
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User close(SOURCE);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next;
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User }
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User if ($_ !~ /\*\//) {
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User while (<SOURCE>) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($_ =~ /\*\//) {
c48c7872a0e020a63a96faed166c6ae960e4c1e9Mark Andrews last;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews }
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews } elsif ($shell_comment) {
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews if (/^\#\!/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $before_copyright = "$_#\n";
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User $_ = <SOURCE>;
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User if ($_ eq "#\n") {
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User $_ = <SOURCE>;
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User if (/^\#/) {
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User if ($_ !~ /[Cc]opyright/) {
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User print "$file: non-copyright comment\n";
9c6a5d1f22f972232d7a9fd5c5fa64f10bacbdffAutomatic Updater close(SOURCE);
9c6a5d1f22f972232d7a9fd5c5fa64f10bacbdffAutomatic Updater next;
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews }
9c6a5d1f22f972232d7a9fd5c5fa64f10bacbdffAutomatic Updater while (<SOURCE>) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($_ !~ /^\#/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $first = $_;
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews last;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
9c6a5d1f22f972232d7a9fd5c5fa64f10bacbdffAutomatic Updater }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } else {
9c6a5d1f22f972232d7a9fd5c5fa64f10bacbdffAutomatic Updater $first = $_;
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews }
9c6a5d1f22f972232d7a9fd5c5fa64f10bacbdffAutomatic Updater } elsif ($m4_comment && /^dnl /) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($_ !~ /[Cc]opyright/) {
9c6a5d1f22f972232d7a9fd5c5fa64f10bacbdffAutomatic Updater print "$file: non-copyright comment\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein close(SOURCE);
9c6a5d1f22f972232d7a9fd5c5fa64f10bacbdffAutomatic Updater next;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
bea931e17b7567f09107f93ab7e25c7f00abeb9cMark Andrews while (<SOURCE>) {
bea931e17b7567f09107f93ab7e25c7f00abeb9cMark Andrews if ($_ !~ /^dnl /) {
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews $first = $_;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein last;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User } else {
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User $first = $_;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
af40ebed6257e4ac1996144530b3de317cf4da11Tinderbox User open(TARGET, ">$file.new") || die "can't open $file.new: $!";
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User if ($before_copyright ne "") {
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User print TARGET $before_copyright;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($c_comment) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET "/*\n";
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User }
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User print TARGET "${prefix}Copyright (C) ";
7911e6f9de303bca5a3d8b34f4330c8f7cecffaeTinderbox User $first_year = 1;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein foreach $year (@years) {
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt if (! $first_year) {
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt print TARGET ", ";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET "$year";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $first_year = 0;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET " Internet Software Consortium.\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET "$prefix\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein foreach $_ (@copyright_text) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET "${prefix}$_";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($c_comment) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET " */\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($first eq "") {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $first = <SOURCE>;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($first ne "") {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($first !~ /^\s*$/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET "\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET $first;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein while (<SOURCE>) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET $_;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein close(TARGET);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein close(SOURCE);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rename("$file", "$file.bak") || die "rename($file, $file.bak): $!";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein rename("$file.new", "$file") || die "rename($file.new, $file): $!";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein