merge_copyrights revision 8319af16557b81eba3277ee67215285f0823b587
f743002678eb67b99bbc29fee116b65d9530fec0wrowe#!/usr/local/bin/perl -w
80833bb9a1bf25dcf19e814438a4b311d2e1f4cffuankg#
a34684a59b60a4173c25035d0c627ef17e6dc215rpluem# Copyright (C) 2004, 2005 Internet Systems Consortium, Inc. ("ISC")
1337c7673efc1f80f634139fbad7cbb98a0dc657ylavic# Copyright (C) 1998-2001, 2003 Internet Software Consortium.
1337c7673efc1f80f634139fbad7cbb98a0dc657ylavic#
1337c7673efc1f80f634139fbad7cbb98a0dc657ylavic# Permission to use, copy, modify, and distribute this software for any
1337c7673efc1f80f634139fbad7cbb98a0dc657ylavic# purpose with or without fee is hereby granted, provided that the above
4da61833a1cbbca94094f9653fd970582b97a72etrawick# copyright notice and this permission notice appear in all copies.
4da61833a1cbbca94094f9653fd970582b97a72etrawick#
4da61833a1cbbca94094f9653fd970582b97a72etrawick# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
4da61833a1cbbca94094f9653fd970582b97a72etrawick# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
4da61833a1cbbca94094f9653fd970582b97a72etrawick# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
4789804be088bcd86ae637a29cdb7fda25169521jailletc# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
4789804be088bcd86ae637a29cdb7fda25169521jailletc# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
4789804be088bcd86ae637a29cdb7fda25169521jailletc# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
4789804be088bcd86ae637a29cdb7fda25169521jailletc# PERFORMANCE OF THIS SOFTWARE.
e50c3026198fd496f183cda4c32a202925476778covener
e50c3026198fd496f183cda4c32a202925476778covener# $Id: merge_copyrights,v 1.24 2005/09/06 01:16:34 marka Exp $
e50c3026198fd496f183cda4c32a202925476778covener
5b88c8507d5ef6d0c4cfbc78230294968175b638minfrin%file_types = ();
5b88c8507d5ef6d0c4cfbc78230294968175b638minfrin%file_years = ();
6c3b9cebb551140fbb25d58bae08b539b3802133ylavic
6c3b9cebb551140fbb25d58bae08b539b3802133ylavicopen(COPYRIGHTS, "<util/copyrights") || die "can't open ./util/copyrights: $!";
6c3b9cebb551140fbb25d58bae08b539b3802133ylavicwhile (<COPYRIGHTS>) {
4f29b65ab4b547ad5dbe506e2d0ff5d12ead9247ylavic chomp;
4f29b65ab4b547ad5dbe506e2d0ff5d12ead9247ylavic ($file, $type, $years) = split;
0a0df13b7f1f4f1a74fe295253d89ca3911b301aylavic $file_types{$file} = $type;
0a0df13b7f1f4f1a74fe295253d89ca3911b301aylavic $file_years{$file} = $years;
0a0df13b7f1f4f1a74fe295253d89ca3911b301aylavic}
0a0df13b7f1f4f1a74fe295253d89ca3911b301aylavicclose(COPYRIGHTS);
69301145375a889e7e37caf7cc7321ac0f91801erpluem
69301145375a889e7e37caf7cc7321ac0f91801erpluem($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time());
69301145375a889e7e37caf7cc7321ac0f91801erpluem$year += 1900;
506bfe33206b2fece40ef25f695af39dd4130facjkaluza
506bfe33206b2fece40ef25f695af39dd4130facjkaluza$find = "find . -type f -print";
506bfe33206b2fece40ef25f695af39dd4130facjkaluza
506bfe33206b2fece40ef25f695af39dd4130facjkaluzaopen(FILES, "$find | sort |") || die "can't start \"$find\": $!";
d58a848a016d401b965111e50ef829e1641f7834minfrinwhile (<FILES>) {
d58a848a016d401b965111e50ef829e1641f7834minfrin chomp;
d58a848a016d401b965111e50ef829e1641f7834minfrin
2e6f4d654c96c98b761fb012fd25c5d5b1558c44sf next if (m%/\.\# | # CVS old conflict file
2e6f4d654c96c98b761fb012fd25c5d5b1558c44sf /CVS/ | # CVS directory
2e6f4d654c96c98b761fb012fd25c5d5b1558c44sf util/newcopyrights | # our output
17e6c95f3b22d18acdf8380fb26a8d0e10c80767ylavic \.bak$ | # created by update_copyrights
17e6c95f3b22d18acdf8380fb26a8d0e10c80767ylavic /(dnssafe|openssl)/.*\.[ch]$ | # imported
17e6c95f3b22d18acdf8380fb26a8d0e10c80767ylavic doc/(draft|expired|rfc)/ # imported
17e6c95f3b22d18acdf8380fb26a8d0e10c80767ylavic %x);
17e6c95f3b22d18acdf8380fb26a8d0e10c80767ylavic
e8bd80a4bb88199d2f9a24a50345688e52d9c116ylavic if (!$file_types{$_}) {
e8bd80a4bb88199d2f9a24a50345688e52d9c116ylavic # Strip any .in extension to find out the file's real type.
e8bd80a4bb88199d2f9a24a50345688e52d9c116ylavic # .in files are processed by configure to produce the target file.
330e16bea8fe9cace4de90c349750c03dfb1fe64ylavic ($base = $_) =~ s/\.in$//;
330e16bea8fe9cace4de90c349750c03dfb1fe64ylavic
330e16bea8fe9cace4de90c349750c03dfb1fe64ylavic # Contributed code should maintain its own copyright.
330e16bea8fe9cace4de90c349750c03dfb1fe64ylavic if ($base =~ /\.\/contrib\//) {
330e16bea8fe9cace4de90c349750c03dfb1fe64ylavic $file_types{$_} = "X";
330e16bea8fe9cace4de90c349750c03dfb1fe64ylavic } elsif ($base =~ /\.(c|h|css)$/) {
330e16bea8fe9cace4de90c349750c03dfb1fe64ylavic $file_types{$_} = "C";
d7205b1a86c51c27b71a2c458dc453fd53a261c1covener } elsif ($base =~ /\.y$/) {
d7205b1a86c51c27b71a2c458dc453fd53a261c1covener $file_types{$_} = "YACC";
d7205b1a86c51c27b71a2c458dc453fd53a261c1covener } elsif ($base =~ /\.pl$/i) {
d7205b1a86c51c27b71a2c458dc453fd53a261c1covener $file_types{$_} = "PERL";
d7205b1a86c51c27b71a2c458dc453fd53a261c1covener } elsif ($base =~ /\.sh$/) {
44ff304057225e944e220e981d434a046d14cf06covener $file_types{$_} = "SH";
44ff304057225e944e220e981d434a046d14cf06covener } elsif ($base =~ /\.docbook$/ ||
44ff304057225e944e220e981d434a046d14cf06covener $base =~ /.xsl$/ ||
44ff304057225e944e220e981d434a046d14cf06covener $base =~ /.xml$/) {
5d1ba75b8794925e67591c209085a49279791de9covener $file_types{$_} = "SGML";
5d1ba75b8794925e67591c209085a49279791de9covener } elsif ($base =~ /\.html$/) {
5d1ba75b8794925e67591c209085a49279791de9covener $file_types{$_} = "HTML";
032982212dbcc7c3cce95bf89c503bb56e185ac7kbrand } elsif ($base =~ /\.(man|[0-9])$/) {
032982212dbcc7c3cce95bf89c503bb56e185ac7kbrand $file_types{$_} = "MAN";
032982212dbcc7c3cce95bf89c503bb56e185ac7kbrand } elsif ($base =~ /\/Makefile$/) {
032982212dbcc7c3cce95bf89c503bb56e185ac7kbrand $file_types{$_} = "MAKE";
caad2986f81ab263f7af41467dd622dc9add17f3ylavic } elsif ($base =~ /\/(named|rndc).?\.conf$/) {
caad2986f81ab263f7af41467dd622dc9add17f3ylavic $file_types{$_} = "CONF-C";
caad2986f81ab263f7af41467dd622dc9add17f3ylavic } elsif ($base =~ /\/resolv.?\.conf$/) {
caad2986f81ab263f7af41467dd622dc9add17f3ylavic $file_types{$_} = "CONF-SH";
45a10d38e6051fd7bdf9d742aaae633d97ff02abjailletc } elsif ($base =~ /\.(db|hint)$/) {
f7317ff316c2b141feea31bddb74d5d3fa1584edjorton $file_types{$_} = "ZONE";
f7317ff316c2b141feea31bddb74d5d3fa1584edjorton } elsif ($base =~ /(\/\.cvsignore|\.gif|\.jpg)$/i) {
2165214331e4afafca4048f66f303d0253d7b001covener $file_types{$_} = "X";
a34684a59b60a4173c25035d0c627ef17e6dc215rpluem } else {
a34684a59b60a4173c25035d0c627ef17e6dc215rpluem $file_types{$_} = "?";
1e2d421a36999d292042a5539971070d54aa6c63ylavic }
1e2d421a36999d292042a5539971070d54aa6c63ylavic ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
1e2d421a36999d292042a5539971070d54aa6c63ylavic $blksize,$blocks)
fa7ed98b9dc94c5845cf845aea0a44ecacd290c9humbedooh = stat($_);
fa7ed98b9dc94c5845cf845aea0a44ecacd290c9humbedooh ($sec,$min,$hour,$mday,$mon,$c_year,$wday,$yday,$isdst) =
fa7ed98b9dc94c5845cf845aea0a44ecacd290c9humbedooh localtime($ctime);
0b67eb8568cd58bb77082703951679b42cf098actrawick ($sec,$min,$hour,$mday,$mon,$m_year,$wday,$yday,$isdst) =
0b67eb8568cd58bb77082703951679b42cf098actrawick localtime($mtime);
0b67eb8568cd58bb77082703951679b42cf098actrawick $c_year += 1900;
0b67eb8568cd58bb77082703951679b42cf098actrawick $m_year += 1900;
5ef3c61605a3a021ff71f488983cb0065f8e1a79covener if ($m_year != $year || $c_year != $year) {
fb1985a97912b25ec6564c73e610a31e5fc6e25fcovener print "$_: must set copyright year(s) manually\n";
09c87c777bed1655621bb20e1c46cb6b1a63279dcovener $file_years{$_} = "????";
6502b7b32f980cc2093bb3ebce37e5e4dc68fba4ylavic } else {
6502b7b32f980cc2093bb3ebce37e5e4dc68fba4ylavic $file_years{$_} = "$year";
3060ce7f798fbda7999cd4ddf89b525d2b294185covener }
c1a63b8fad09c419c1a64f75993feb8a343a6801ylavic # keep perl from issuing warnings about "used only once"
c1a63b8fad09c419c1a64f75993feb8a343a6801ylavic $dev = $ino = $mode = $nlink = $uid = $gid = $rdev = $size = 0;
c1a63b8fad09c419c1a64f75993feb8a343a6801ylavic $atime = $blksize = $blocks = 0;
e6b4bd1113567627ab6bb6c6a7105e1e01a7d889jailletc } else {
e6b4bd1113567627ab6bb6c6a7105e1e01a7d889jailletc if (! defined($file_years{$_}) || $file_years{$_} eq "????") {
e466c40e1801982602ee0200c9e8b61cc148742djailletc print "$_: must set copyright year(s) manually\n";
e466c40e1801982602ee0200c9e8b61cc148742djailletc $file_years{$_} = "????";
457468b82e59d01eba00dd9d0817309c8f5e414ejim next;
457468b82e59d01eba00dd9d0817309c8f5e414ejim }
457468b82e59d01eba00dd9d0817309c8f5e414ejim
04983e3bd1754764eec7d6bb772fe3b0bf391771jorton # track the modification years even if we are not going to be
04983e3bd1754764eec7d6bb772fe3b0bf391771jorton # updating the copyrights.
15890c9306ba98f6fc243e15a3c4778ddc7d773erpluem # next if $file_types{$_} eq "X";
15660979a30d251681463de2e0584853890082accovener next if ($file_years{$_} =~ /^PARENT:/);
15660979a30d251681463de2e0584853890082accovener next if ($file_years{$_} eq "DOCBOOK");
49dacedb6c387b786b7911082ff35121a45f414bcovener
49dacedb6c387b786b7911082ff35121a45f414bcovener @years = split(/,/, $file_years{$_});
cfd9415521847b2f9394fad04fb701cfb955f503rjung $has_current = 0;
cfd9415521847b2f9394fad04fb701cfb955f503rjung foreach $fyear (@years) {
cfd9415521847b2f9394fad04fb701cfb955f503rjung if ($fyear == $year) {
28c31fb73c1264bd1d0ff932573677030b024c7dwrowe $has_current = 1;
28c31fb73c1264bd1d0ff932573677030b024c7dwrowe }
28c31fb73c1264bd1d0ff932573677030b024c7dwrowe }
28c31fb73c1264bd1d0ff932573677030b024c7dwrowe if (!$has_current) {
28c31fb73c1264bd1d0ff932573677030b024c7dwrowe ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
8491e0600f69b0405e156ea8a419653c065c645bcovener $blksize,$blocks)
63b9f1f5880391261705f696d7d65507bbe9ace3covener = stat($_);
63b9f1f5880391261705f696d7d65507bbe9ace3covener ($sec,$min,$hour,$mday,$mon,$m_year,$wday,$yday,$isdst) =
63b9f1f5880391261705f696d7d65507bbe9ace3covener localtime($mtime);
49dacedb6c387b786b7911082ff35121a45f414bcovener $m_year += 1900;
49dacedb6c387b786b7911082ff35121a45f414bcovener if ($m_year == $year) {
49dacedb6c387b786b7911082ff35121a45f414bcovener $file_years{$_} .= ",$year";
49dacedb6c387b786b7911082ff35121a45f414bcovener }
3c990331fc6702119e4f5b8ba9eae3021aea5265jim }
3c990331fc6702119e4f5b8ba9eae3021aea5265jim }
3c990331fc6702119e4f5b8ba9eae3021aea5265jim}
3c990331fc6702119e4f5b8ba9eae3021aea5265jimclose(FILES);
fc42512879dd0504532f52fe5d0d0383dda96a1eniq
fc42512879dd0504532f52fe5d0d0383dda96a1eniqopen(NEWCOPYRIGHTS, ">util/newcopyrights") ||
fc42512879dd0504532f52fe5d0d0383dda96a1eniq die "can't open newcopyrights: $!";
0451df5dc50fa5d8b3e07d92ee6a92e36a1181a5niqforeach $file (sort(keys(%file_types))) {
0451df5dc50fa5d8b3e07d92ee6a92e36a1181a5niq print NEWCOPYRIGHTS "$file";
0451df5dc50fa5d8b3e07d92ee6a92e36a1181a5niq $len = length($file);
da0442c0440caef34706e2c2f3af05cb65921cc0jailletc if ($len >= 48) {
983528026996668ea295be95aedb9c7a346af470ylavic $tabs = 1;
da0442c0440caef34706e2c2f3af05cb65921cc0jailletc } else {
da0442c0440caef34706e2c2f3af05cb65921cc0jailletc $needed = int (48 - $len);
06b8f183140c8e02e0974e938a05078b511d1603covener $tabs = int ($needed / 8);
06b8f183140c8e02e0974e938a05078b511d1603covener if ($needed % 8 != 0) {
06b8f183140c8e02e0974e938a05078b511d1603covener $tabs++;
15890c9306ba98f6fc243e15a3c4778ddc7d773erpluem }
259878293a997ff49f5ddfc53d3739cbdc25444ecovener }
259878293a997ff49f5ddfc53d3739cbdc25444ecovener for ($i = 0; $i < $tabs; $i++) {
259878293a997ff49f5ddfc53d3739cbdc25444ecovener printf NEWCOPYRIGHTS "\t";
259878293a997ff49f5ddfc53d3739cbdc25444ecovener }
15890c9306ba98f6fc243e15a3c4778ddc7d773erpluem printf NEWCOPYRIGHTS "%s\t%s\n", $file_types{$file}, $file_years{$file};
b54b024c06a19926832d77d40ba35ad8c41e4d3dminfrin}
b54b024c06a19926832d77d40ba35ad8c41e4d3dminfrinclose(NEWCOPYRIGHTS);
b54b024c06a19926832d77d40ba35ad8c41e4d3dminfrin