update_copyrights revision b897c52f865b2fc4e220e2110b874e59c716456b
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl#!/usr/local/bin/perl -w
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl
fd9abdda70912b99b24e3bf1a38f26fde908a74cndif (@ARGV == 0) {
fd9abdda70912b99b24e3bf1a38f26fde908a74cnd die "usage: update_copyrights <copyright_text>";
fd9abdda70912b99b24e3bf1a38f26fde908a74cnd}
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl@copyright_text = ();
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jslopen(COPYRIGHT, "<$ARGV[0]") || die "can't open $ARGV[0]: $!";
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl@copyright_text = <>;
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jslclose(COPYRIGHT);
96ad5d81ee4a2cc66a4ae19893efc8aa6d06fae7jailletc
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jslwhile (<>) {
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl ($file, $years_list) = split(/\s+/);
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen @years = split(/,/, $years_list);
2e545ce2450a9953665f701bb05350f0d3f26275nd
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen if ( ! -f $file ) {
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen print "$file: missing\n";
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl }
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl if ($years_list eq "SKIP") {
af33a4994ae2ff15bc67d19ff1a7feb906745bf8rbowen print "$file: SKIP\n";
3f08db06526d6901aa08c110b5bc7dde6bc39905nd next;
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl }
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl if ($file =~ /\.[chy]$/) {
3f08db06526d6901aa08c110b5bc7dde6bc39905nd $c_comment = 1;
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl } else {
0cf3cdbaa1dad11cbf1ce32e48f1b4ec88cf779fnilgun die "only C comments are supported right now";
f086b4b402fa9a2fefc7dda85de2a3cc1cd0a654rjung }
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl open(SOURCE, "<$file") || die "can't open $file: $!";
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl $_ = <SOURCE>;
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl if (/^\/\*/) {
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl $_ = <SOURCE>;
4a3f85b165e7ece75cfbdb5e0c5d272edd036c32rpluem if ($_ !~ /[Cc]opyright/) {
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl print "$file: non-copyright comment\n";
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl close(SOURCE);
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl next;
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl }
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl if ($_ !~ /\*\//) {
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl while (<SOURCE>) {
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl if ($_ =~ /\*\//) {
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl last;
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl }
30471a4650391f57975f60bbb6e4a90be7b284bfhumbedooh }
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl }
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl $first = "";
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl } else {
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl $first = $_;
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl }
1c28b8f24d373dfe800f9d99b9eea20fd05c1376rjung open(TARGET, ">$file.new") || die "can't open $file.new: $!";
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl if ($c_comment) {
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl print TARGET "/*\n";
1c28b8f24d373dfe800f9d99b9eea20fd05c1376rjung $prefix = " * ";
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl }
1c28b8f24d373dfe800f9d99b9eea20fd05c1376rjung print TARGET "${prefix}Copyright (C) ";
1c28b8f24d373dfe800f9d99b9eea20fd05c1376rjung $first_year = 1;
1c28b8f24d373dfe800f9d99b9eea20fd05c1376rjung foreach $year (@years) {
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl if (! $first_year) {
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl print TARGET ", ";
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl }
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl print TARGET "$year";
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl $first_year = 0;
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl }
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl print TARGET " Internet Software Consortium.\n";
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl print TARGET "$prefix\n";
1c28b8f24d373dfe800f9d99b9eea20fd05c1376rjung foreach $_ (@copyright_text) {
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl print TARGET "${prefix}$_";
1c28b8f24d373dfe800f9d99b9eea20fd05c1376rjung }
1c28b8f24d373dfe800f9d99b9eea20fd05c1376rjung if ($c_comment) {
1c28b8f24d373dfe800f9d99b9eea20fd05c1376rjung print TARGET " */\n";
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl }
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl if ($first ne "") {
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl print TARGET $first;
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl }
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl while (<SOURCE>) {
1c28b8f24d373dfe800f9d99b9eea20fd05c1376rjung print TARGET $_;
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl }
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl close(TARGET);
1c28b8f24d373dfe800f9d99b9eea20fd05c1376rjung close(SOURCE);
8a5db6a3d29e28627bf8a6d6f7066e840da6bdf2jsl rename("$file", "$file.bak") || die "rename($file, $file.bak): $!";
1c28b8f24d373dfe800f9d99b9eea20fd05c1376rjung rename("$file.new", "$file") || die "rename($file.new, $file): $!";
1c28b8f24d373dfe800f9d99b9eea20fd05c1376rjung}
1c28b8f24d373dfe800f9d99b9eea20fd05c1376rjung