merge_copyrights revision 754cb8a2b33fa6cfaa15d6470f66e5fb0eab4764
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater#!/usr/local/bin/perl -w
dcfda24abf565c442d058cbf81b2180d847a1b3eAutomatic Updater#
3e02c9e33656dcd9c364633d42dd785d3e6fdd66Automatic Updater# Copyright (C) 2004-2007, 2009 Internet Systems Consortium, Inc. ("ISC")
3e02c9e33656dcd9c364633d42dd785d3e6fdd66Automatic Updater# Copyright (C) 1998-2001, 2003 Internet Software Consortium.
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater#
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater# Permission to use, copy, modify, and/or distribute this software for any
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater# purpose with or without fee is hereby granted, provided that the above
3e02c9e33656dcd9c364633d42dd785d3e6fdd66Automatic Updater# copyright notice and this permission notice appear in all copies.
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater#
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
3e02c9e33656dcd9c364633d42dd785d3e6fdd66Automatic Updater# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater# PERFORMANCE OF THIS SOFTWARE.
a3f8c8e20780e488141d200acdfea6c5f3303513Automatic Updater
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater# $Id: merge_copyrights,v 1.33 2009/06/11 23:47:56 tbox Exp $
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater%file_types = ();
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater%file_years = ();
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updateropen(COPYRIGHTS, "<util/copyrights") || die "can't open ./util/copyrights: $!";
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updaterwhile (<COPYRIGHTS>) {
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater chomp;
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater ($file, $type, $years) = split;
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $file_types{$file} = $type;
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $file_years{$file} = $years;
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater}
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updaterclose(COPYRIGHTS);
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time());
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater$year += 1900;
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater$find = "find . -type f -print";
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updateropen(FILES, "$find | sort |") || die "can't start \"$find\": $!";
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updaterwhile (<FILES>) {
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater chomp;
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater next if (m%/\.\# | # CVS old conflict file
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater /CVS/ | # CVS directory
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater util/newcopyrights | # our output
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater \.bak$ | # created by update_copyrights
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater /(dnssafe|openssl)/.*\.[ch]$ | # imported
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater doc/(draft|expired|rfc)/ # imported
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater %x);
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater if (!$file_types{$_}) {
a3f8c8e20780e488141d200acdfea6c5f3303513Automatic Updater # Strip any .in extension to find out the file's real type.
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater # .in files are processed by configure to produce the target file.
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater ($base = $_) =~ s/\.in$//;
a3f8c8e20780e488141d200acdfea6c5f3303513Automatic Updater
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater # Contributed code should maintain its own copyright.
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater if ($base =~ /\.\/contrib\//) {
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $file_types{$_} = "X";
f8e3e03cacd16ffb923a9603fca23a9e1a1fee07Automatic Updater } elsif ($base =~ /\.(c|h|css)$/) {
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $file_types{$_} = "C";
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater } elsif ($base =~ /\.y$/) {
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $file_types{$_} = "YACC";
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater } elsif ($base =~ /\.pl$/i) {
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $file_types{$_} = "PERL";
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater } elsif ($base =~ /\.sh$/) {
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $file_types{$_} = "SH";
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater } elsif ($base =~ /\.docbook$/ ||
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $base =~ /.xsl$/ ||
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $base =~ /.xml$/) {
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $file_types{$_} = "SGML";
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater } elsif ($base =~ /\.html$/) {
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $file_types{$_} = "HTML";
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater } elsif ($base =~ /\.(man|[0-9])$/) {
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $file_types{$_} = "MAN";
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater } elsif ($base =~ /\/Makefile$/) {
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $file_types{$_} = "MAKE";
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater } elsif ($base =~ /\/(named|rndc).?\.conf$/) {
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $file_types{$_} = "CONF-C";
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater } elsif ($base =~ /\/resolv.?\.conf$/) {
a3f8c8e20780e488141d200acdfea6c5f3303513Automatic Updater $file_types{$_} = "CONF-SH";
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater } elsif ($base =~ /\.(db|hint)$/) {
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $file_types{$_} = "ZONE";
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater } elsif ($base =~ /(\/\.cvsignore|\.gif|\.jpg|\.dsp|\.dsw|\.mak)$/i) {
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $file_types{$_} = "X";
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater } elsif ($base =~ /\.rnc$/i) {
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $file_types{$_} = "RNC";
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater } elsif ($base =~ /\.bat$/i) {
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $file_types{$_} = "BAT";
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater } else {
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $file_types{$_} = "?";
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater }
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $blksize,$blocks)
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater = stat($_);
a3f8c8e20780e488141d200acdfea6c5f3303513Automatic Updater ($sec,$min,$hour,$mday,$mon,$c_year,$wday,$yday,$isdst) =
a3f8c8e20780e488141d200acdfea6c5f3303513Automatic Updater localtime($ctime);
a3f8c8e20780e488141d200acdfea6c5f3303513Automatic Updater ($sec,$min,$hour,$mday,$mon,$m_year,$wday,$yday,$isdst) =
a3f8c8e20780e488141d200acdfea6c5f3303513Automatic Updater localtime($mtime);
a3f8c8e20780e488141d200acdfea6c5f3303513Automatic Updater $c_year += 1900;
a3f8c8e20780e488141d200acdfea6c5f3303513Automatic Updater $m_year += 1900;
a3f8c8e20780e488141d200acdfea6c5f3303513Automatic Updater if ($m_year != $year || $c_year != $year) {
a3f8c8e20780e488141d200acdfea6c5f3303513Automatic Updater print "$_: must set copyright year(s) manually\n";
a3f8c8e20780e488141d200acdfea6c5f3303513Automatic Updater $file_years{$_} = "????";
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater } else {
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $file_years{$_} = "$year";
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater }
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater # keep perl from issuing warnings about "used only once"
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $dev = $ino = $mode = $nlink = $uid = $gid = $rdev = $size = 0;
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $atime = $blksize = $blocks = 0;
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater } else {
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater if (! defined($file_years{$_}) || $file_years{$_} eq "????") {
8ec3c085233cedb22b05da36e2773c8f357a7e45Automatic Updater print "$_: must set copyright year(s) manually\n";
8ec3c085233cedb22b05da36e2773c8f357a7e45Automatic Updater $file_years{$_} = "????";
8ec3c085233cedb22b05da36e2773c8f357a7e45Automatic Updater next;
64affc54f96a2c71cbd10ed71e246ce0746259aaAutomatic Updater }
8ec3c085233cedb22b05da36e2773c8f357a7e45Automatic Updater
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater # track the modification years even if we are not going to be
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater # updating the copyrights.
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater # next if $file_types{$_} eq "X";
a3f8c8e20780e488141d200acdfea6c5f3303513Automatic Updater next if ($file_years{$_} =~ /^PARENT:/);
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater next if ($file_years{$_} eq "DOCBOOK");
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater @years = split(/,/, $file_years{$_});
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater $has_current = 0;
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater foreach $fyear (@years) {
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater if ($fyear == $year) {
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater $has_current = 1;
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater }
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater }
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater if (!$has_current) {
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $blksize,$blocks)
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater = stat($_);
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater ($sec,$min,$hour,$mday,$mon,$m_year,$wday,$yday,$isdst) =
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater localtime($mtime);
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $m_year += 1900;
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater if ($m_year == $year) {
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $file_years{$_} .= ",$year";
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater }
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater }
5a24d24c8fba3480d707c0c902379ddb36501e12Automatic Updater }
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater}
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updaterclose(FILES);
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updateropen(NEWCOPYRIGHTS, ">util/newcopyrights") ||
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater die "can't open newcopyrights: $!";
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updaterforeach $file (sort(keys(%file_types))) {
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater print NEWCOPYRIGHTS "$file";
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $len = length($file);
f8e3e03cacd16ffb923a9603fca23a9e1a1fee07Automatic Updater if ($len >= 48) {
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $tabs = 1;
f8e3e03cacd16ffb923a9603fca23a9e1a1fee07Automatic Updater } else {
f8e3e03cacd16ffb923a9603fca23a9e1a1fee07Automatic Updater $needed = int (48 - $len);
f8e3e03cacd16ffb923a9603fca23a9e1a1fee07Automatic Updater $tabs = int ($needed / 8);
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater if ($needed % 8 != 0) {
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater $tabs++;
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater }
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater }
f8e3e03cacd16ffb923a9603fca23a9e1a1fee07Automatic Updater for ($i = 0; $i < $tabs; $i++) {
f8e3e03cacd16ffb923a9603fca23a9e1a1fee07Automatic Updater printf NEWCOPYRIGHTS "\t";
590c12cfe3b9a179ab2faa1be791a069c81882e0Automatic Updater }
3acf5eb97cebc2ba868e6ac4a4e01e6d1be0c892Automatic Updater printf NEWCOPYRIGHTS "%s\t%s\n", $file_types{$file}, $file_years{$file};
3acf5eb97cebc2ba868e6ac4a4e01e6d1be0c892Automatic Updater}
3acf5eb97cebc2ba868e6ac4a4e01e6d1be0c892Automatic Updaterclose(NEWCOPYRIGHTS);
3acf5eb97cebc2ba868e6ac4a4e01e6d1be0c892Automatic Updater