update_copyrights revision 19ba7857f6bf38619eda1f1dae0eb05a6cdd2b77
0b062f4990db5cc6db2fe3398926f71b92a67407Brian Wellington#!/usr/local/bin/perl -w
731cc132f22dbc9e0ecd7035dce314a61076d31bAutomatic Updater#
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews# Copyright (C) 1998, 1999 Internet Software Consortium.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
0b062f4990db5cc6db2fe3398926f71b92a67407Brian Wellington# Permission to use, copy, modify, and distribute this software for any
0b062f4990db5cc6db2fe3398926f71b92a67407Brian Wellington# purpose with or without fee is hereby granted, provided that the above
0b062f4990db5cc6db2fe3398926f71b92a67407Brian Wellington# copyright notice and this permission notice appear in all copies.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
9016767f4e15191b7c763b8a4ad36a57dc2705a2Mark Andrews# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
9016767f4e15191b7c763b8a4ad36a57dc2705a2Mark Andrews# ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
9016767f4e15191b7c763b8a4ad36a57dc2705a2Mark Andrews# CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
9016767f4e15191b7c763b8a4ad36a57dc2705a2Mark Andrews# DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
9016767f4e15191b7c763b8a4ad36a57dc2705a2Mark Andrews# PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
9016767f4e15191b7c763b8a4ad36a57dc2705a2Mark Andrews# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
0b062f4990db5cc6db2fe3398926f71b92a67407Brian Wellington# SOFTWARE.
b272d38cc5d24f64c0647a9afb340c21c4b9aaf7Evan Hunt
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinif (@ARGV == 0) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein die "usage: update_copyrights <copyright_text>";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein@copyright_text = ();
b272d38cc5d24f64c0647a9afb340c21c4b9aaf7Evan Huntopen(COPYRIGHT, "<$ARGV[0]") || die "can't open $ARGV[0]: $!";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein@copyright_text = <>;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinclose(COPYRIGHT);
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews
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;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($type eq "X") {
b272d38cc5d24f64c0647a9afb340c21c4b9aaf7Evan Hunt print "$file: X type; skipping\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
d71e2e0c61df16ff37c9934c371a4a60c08974f7Mark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $before_copyright = "";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $c_comment = 0;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $shell_comment = 0;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $m4_comment = 0;
b272d38cc5d24f64c0647a9afb340c21c4b9aaf7Evan Hunt $first = "";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($type eq "C") {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $c_comment = 1;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $prefix = " * ";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } elsif ($type eq "SH" || $type eq "PERL" || $type eq "MAKE") {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $shell_comment = 1;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $prefix = "# ";
731cc132f22dbc9e0ecd7035dce314a61076d31bAutomatic Updater } elsif ($type eq "M4") {
b272d38cc5d24f64c0647a9afb340c21c4b9aaf7Evan Hunt $m4_comment = 1;
b272d38cc5d24f64c0647a9afb340c21c4b9aaf7Evan Hunt $prefix = "dnl ";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print "$file: type '$type' not supported yet; skipping\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next;
731cc132f22dbc9e0ecd7035dce314a61076d31bAutomatic Updater }
731cc132f22dbc9e0ecd7035dce314a61076d31bAutomatic Updater open(SOURCE, "<$file") || die "can't open $file: $!";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = <SOURCE>;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($c_comment && /^\/\*/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = <SOURCE>;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($_ !~ /[Cc]opyright/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print "$file: non-copyright comment\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein close(SOURCE);
b272d38cc5d24f64c0647a9afb340c21c4b9aaf7Evan Hunt next;
b272d38cc5d24f64c0647a9afb340c21c4b9aaf7Evan Hunt }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($_ !~ /\*\//) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein while (<SOURCE>) {
b272d38cc5d24f64c0647a9afb340c21c4b9aaf7Evan Hunt if ($_ =~ /\*\//) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein last;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
b272d38cc5d24f64c0647a9afb340c21c4b9aaf7Evan Hunt }
b272d38cc5d24f64c0647a9afb340c21c4b9aaf7Evan Hunt } elsif ($shell_comment) {
b272d38cc5d24f64c0647a9afb340c21c4b9aaf7Evan Hunt if (/^\#\!/) {
b272d38cc5d24f64c0647a9afb340c21c4b9aaf7Evan Hunt $before_copyright = "$_#\n";
b272d38cc5d24f64c0647a9afb340c21c4b9aaf7Evan Hunt $_ = <SOURCE>;
b272d38cc5d24f64c0647a9afb340c21c4b9aaf7Evan Hunt if ($_ eq "#\n") {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $_ = <SOURCE>;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (/^\#/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($_ !~ /[Cc]opyright/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print "$file: non-copyright comment\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein close(SOURCE);
2f8d63983c297c62630044d28a6f66676b4d339dMark Andrews next;
2f8d63983c297c62630044d28a6f66676b4d339dMark Andrews }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein while (<SOURCE>) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($_ !~ /^\#/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $first = $_;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein last;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $first = $_;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } elsif ($m4_comment && /^dnl /) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($_ !~ /[Cc]opyright/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print "$file: non-copyright comment\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein close(SOURCE);
b272d38cc5d24f64c0647a9afb340c21c4b9aaf7Evan Hunt next;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein while (<SOURCE>) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($_ !~ /^dnl /) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $first = $_;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein last;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $first = $_;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein open(TARGET, ">$file.new") || die "can't open $file.new: $!";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($before_copyright ne "") {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET $before_copyright;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($c_comment) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET "/*\n";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print TARGET "${prefix}Copyright (C) ";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $first_year = 1;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein foreach $year (@years) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (! $first_year) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein 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