merge_copyrights revision 499b34cea04a46823d003d4c0520c8b03e8513cb
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#!/usr/local/bin/perl -w
990d0e893f5b70e735cdf990af66e9ec6e91fa78Tinderbox User#
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews# Copyright (C) 1998-2001 Internet Software Consortium.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
4a14ce5ba00ab7bc55c99ffdcf59c7a4ab902721Automatic Updater# Permission to use, copy, modify, and distribute this software for any
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# purpose with or without fee is hereby granted, provided that the above
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# copyright notice and this permission notice appear in all copies.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
ea94d370123a5892f6c47a97f21d1b28d44bb168Tinderbox User
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# $Id: merge_copyrights,v 1.16 2001/01/09 22:00:53 bwelling Exp $
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein%file_types = ();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein%file_years = ();
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinopen(COPYRIGHTS, "<util/copyrights") || die "can't open ./util/copyrights: $!";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinwhile (<COPYRIGHTS>) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein chomp;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ($file, $type, $years) = split;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $file_types{$file} = $type;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $file_years{$file} = $years;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinclose(COPYRIGHTS);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time());
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein$year += 1900;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein$find = "find . -type f -print";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinopen(FILES, "$find | sort |") || die "can't start \"$find\": $!";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinwhile (<FILES>) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein chomp;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein next if (m%/\.\# | # CVS old conflict file
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein /CVS/ | # CVS directory
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein \.bak$ | # created by update_copyrights
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein /(dnssafe|openssl)/.*\.[ch]$ | # imported
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein doc/(draft|expired|rfc)/ # imported
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein %x);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (!$file_types{$_}) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # Strip any .in extension to find out the file's real type.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein # .in files are processed by configure to produce the target file.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ($base = $_) =~ s/\.in$//;
5fa6a064b8301e4f274bd132fd577def59e4fb4cTinderbox User
5fa6a064b8301e4f274bd132fd577def59e4fb4cTinderbox User if ($base =~ /\.(c|h|css)$/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $file_types{$_} = "C";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } elsif ($base =~ /\.y$/) {
5fa6a064b8301e4f274bd132fd577def59e4fb4cTinderbox User $file_types{$_} = "YACC";
5fa6a064b8301e4f274bd132fd577def59e4fb4cTinderbox User } elsif ($base =~ /\.pl$/i) {
5fa6a064b8301e4f274bd132fd577def59e4fb4cTinderbox User $file_types{$_} = "PERL";
5fa6a064b8301e4f274bd132fd577def59e4fb4cTinderbox User } elsif ($base =~ /\.sh$/) {
5fa6a064b8301e4f274bd132fd577def59e4fb4cTinderbox User $file_types{$_} = "SH";
5fa6a064b8301e4f274bd132fd577def59e4fb4cTinderbox User } elsif ($base =~ /\.html$/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $file_types{$_} = "HTML";
5fa6a064b8301e4f274bd132fd577def59e4fb4cTinderbox User } elsif ($base =~ /\.(man|[0-9])$/) {
5fa6a064b8301e4f274bd132fd577def59e4fb4cTinderbox User $file_types{$_} = "MAN";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } elsif ($base =~ /\/Makefile$/) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $file_types{$_} = "MAKE";
5fa6a064b8301e4f274bd132fd577def59e4fb4cTinderbox User } elsif ($base =~ /\/(named|rndc).?\.conf$/) {
5fa6a064b8301e4f274bd132fd577def59e4fb4cTinderbox User $file_types{$_} = "CONF-C";
5fa6a064b8301e4f274bd132fd577def59e4fb4cTinderbox User } elsif ($base =~ /\/resolv.?\.conf$/) {
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater $file_types{$_} = "CONF-SH";
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater } elsif ($base =~ /\.(db|hint)$/) {
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater $file_types{$_} = "ZONE";
60c29cf21affb5243753e22f9ff43347013ae8ebTinderbox User } elsif ($base =~ /(\/\.cvsignore|\.gif|\.jpg)$/i) {
60c29cf21affb5243753e22f9ff43347013ae8ebTinderbox User $file_types{$_} = "X";
b68a2d272b958eb2c40cce59ee33e71c5f5f521bTinderbox User } else {
b68a2d272b958eb2c40cce59ee33e71c5f5f521bTinderbox User $file_types{$_} = "?";
b68a2d272b958eb2c40cce59ee33e71c5f5f521bTinderbox User }
b68a2d272b958eb2c40cce59ee33e71c5f5f521bTinderbox User ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
b68a2d272b958eb2c40cce59ee33e71c5f5f521bTinderbox User $blksize,$blocks)
b68a2d272b958eb2c40cce59ee33e71c5f5f521bTinderbox User = stat($_);
b68a2d272b958eb2c40cce59ee33e71c5f5f521bTinderbox User ($sec,$min,$hour,$mday,$mon,$c_year,$wday,$yday,$isdst) =
b68a2d272b958eb2c40cce59ee33e71c5f5f521bTinderbox User localtime($ctime);
b68a2d272b958eb2c40cce59ee33e71c5f5f521bTinderbox User ($sec,$min,$hour,$mday,$mon,$m_year,$wday,$yday,$isdst) =
b68a2d272b958eb2c40cce59ee33e71c5f5f521bTinderbox User localtime($mtime);
b68a2d272b958eb2c40cce59ee33e71c5f5f521bTinderbox User $c_year += 1900;
6f64d4ab8e68f9b2333bcbfc755396d29a4a9d7cAutomatic Updater $m_year += 1900;
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater if ($m_year != $year || $c_year != $year) {
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater print "$_: must set copyright year(s) manually\n";
b68a2d272b958eb2c40cce59ee33e71c5f5f521bTinderbox User $file_years{$_} = "????";
b68a2d272b958eb2c40cce59ee33e71c5f5f521bTinderbox User } else {
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User $file_years{$_} = "$year";
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User }
bbbf2e27d3a981163dab139497d6b2dc85449db0Tinderbox User # keep perl from issuing warnings about "used only once"
60c29cf21affb5243753e22f9ff43347013ae8ebTinderbox User $dev = $ino = $mode = $nlink = $uid = $gid = $rdev = $size = 0;
b68a2d272b958eb2c40cce59ee33e71c5f5f521bTinderbox User $atime = $blksize = $blocks = 0;
b68a2d272b958eb2c40cce59ee33e71c5f5f521bTinderbox User } else {
b68a2d272b958eb2c40cce59ee33e71c5f5f521bTinderbox User if (! defined($file_years{$_}) || $file_years{$_} eq "????") {
b68a2d272b958eb2c40cce59ee33e71c5f5f521bTinderbox User print "$_: must set copyright year(s) manually\n";
b68a2d272b958eb2c40cce59ee33e71c5f5f521bTinderbox User $file_years{$_} = "????";
b68a2d272b958eb2c40cce59ee33e71c5f5f521bTinderbox User next;
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater }
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User
44d0f0256fbdce130a18655023c3b06bacacbd61Automatic Updater next if $file_types{$_} eq "X";
b68a2d272b958eb2c40cce59ee33e71c5f5f521bTinderbox User
b68a2d272b958eb2c40cce59ee33e71c5f5f521bTinderbox User @years = split(/,/, $file_years{$_});
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User $has_current = 0;
5fa6a064b8301e4f274bd132fd577def59e4fb4cTinderbox User foreach $fyear (@years) {
bcf15a19ae0efa72a22cdfb50666a3c6ce39eb9fTinderbox User if ($fyear == $year) {
5fa6a064b8301e4f274bd132fd577def59e4fb4cTinderbox User $has_current = 1;
5fa6a064b8301e4f274bd132fd577def59e4fb4cTinderbox User }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (!$has_current) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $blksize,$blocks)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein = stat($_);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ($sec,$min,$hour,$mday,$mon,$m_year,$wday,$yday,$isdst) =
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein localtime($mtime);
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews $m_year += 1900;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if ($m_year == $year) {
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews $file_years{$_} .= ",$year";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrewsclose(FILES);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinopen(NEWCOPYRIGHTS, ">util/newcopyrights") ||
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein die "can't open newcopyrights: $!";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinforeach $file (sort(keys(%file_types))) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein print NEWCOPYRIGHTS "$file";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein $len = length($file);
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews if ($len >= 48) {
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews $tabs = 1;
58d9e9169e7ab4355a0b0bfc13bc616bc5247dfeAutomatic Updater } else {
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews $needed = int (48 - $len);
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews $tabs = int ($needed / 8);
58d9e9169e7ab4355a0b0bfc13bc616bc5247dfeAutomatic Updater if ($needed % 8 != 0) {
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews $tabs++;
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein for ($i = 0; $i < $tabs; $i++) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein printf NEWCOPYRIGHTS "\t";
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein printf NEWCOPYRIGHTS "%s\t%s\n", $file_types{$file}, $file_years{$file};
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinclose(NEWCOPYRIGHTS);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein