merge_copyrights revision c427260a8678f2e99a2337fb95ec98d9c9ee8c05
43b4c41fbb07705c9df321221ab9cb9832460407Christian Maeder#!/usr/local/bin/perl -w
c63ebf815c8a874525cf18670ad74847f7fc7b26Christian Maeder#
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder# Copyright (C) 2004-2006 Internet Systems Consortium, Inc. ("ISC")
25cc5fbba63f84b47e389af749f55abbbde71c8cChristian Maeder# Copyright (C) 1998-2001, 2003 Internet Software Consortium.
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder#
43b4c41fbb07705c9df321221ab9cb9832460407Christian Maeder# Permission to use, copy, modify, and distribute this software for any
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder# purpose with or without fee is hereby granted, provided that the above
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder# copyright notice and this permission notice appear in all copies.
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder#
43b4c41fbb07705c9df321221ab9cb9832460407Christian Maeder# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
f4a2a20e49f41b2afa657e5e64d9e349c7faa091Christian Maeder# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
f2f9df2e17e70674f0bf426ed1763c973ee4cde0Christian Maeder# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder# PERFORMANCE OF THIS SOFTWARE.
68d10d143f29fcff3c637ba24f90e983995ceae6Christian Maeder
a53841f6d6e86ac751c12a33dc8aadf53f59d977Klaus Luettich# $Id: merge_copyrights,v 1.27 2006/12/22 01:41:55 marka Exp $
a53841f6d6e86ac751c12a33dc8aadf53f59d977Klaus Luettich
a53841f6d6e86ac751c12a33dc8aadf53f59d977Klaus Luettich%file_types = ();
a53841f6d6e86ac751c12a33dc8aadf53f59d977Klaus Luettich%file_years = ();
a737caf82de97c1907027c03e4b4509eb492b4b8Christian Maeder
68d10d143f29fcff3c637ba24f90e983995ceae6Christian Maederopen(COPYRIGHTS, "<util/copyrights") || die "can't open ./util/copyrights: $!";
96646aed2ae087b942ae23f15bbe729a8f7c43d3Christian Maederwhile (<COPYRIGHTS>) {
01e383014b555bbcf639c0ca60c5810b3eff83c0Christian Maeder chomp;
3b06e23643a9f65390cb8c1caabe83fa7e87a708Till Mossakowski ($file, $type, $years) = split;
9dac90ec2be2a72e03893095461960d483fe2fc2Christian Maeder $file_types{$file} = $type;
f04e8f3ff56405901be968fd4c6e9769239f1a9bKlaus Luettich $file_years{$file} = $years;
ce8b15da31cd181b7e90593cbbca98f47eda29d6Till Mossakowski}
e7757995211bd395dc79d26fe017d99375f7d2a6Christian Maederclose(COPYRIGHTS);
e7757995211bd395dc79d26fe017d99375f7d2a6Christian Maeder
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time());
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder$year += 1900;
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder$find = "find . -type f -print";
2e2094a642e3775b0d76b890556407941d3a53b6Christian Maeder
2e2094a642e3775b0d76b890556407941d3a53b6Christian Maederopen(FILES, "$find | sort |") || die "can't start \"$find\": $!";
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maederwhile (<FILES>) {
e8db9a65830cf71504e33c6f441a67b4d184a3caChristian Maeder chomp;
c0c2380bced8159ff0297ece14eba948bd236471Christian Maeder
8410667510a76409aca9bb24ff0eda0420088274Christian Maeder next if (m%/\.\# | # CVS old conflict file
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder /CVS/ | # CVS directory
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder util/newcopyrights | # our output
8410667510a76409aca9bb24ff0eda0420088274Christian Maeder \.bak$ | # created by update_copyrights
404166b9366552e9ec5abb87a37c76ec8a815fb7Klaus Luettich /(dnssafe|openssl)/.*\.[ch]$ | # imported
b1f59a4ea7c96f4c03a4d7cfcb9c5e66871cfbbbChristian Maeder doc/(draft|expired|rfc)/ # imported
ad270004874ce1d0697fb30d7309f180553bb315Christian Maeder %x);
4d56f2fa72e4aec20eb827c11ed49c8cbb7014bdChristian Maeder
4cb215739e9ab13447fa21162482ebe485b47455Christian Maeder if (!$file_types{$_}) {
8ef75f1cc0437656bf622cec5ac9e8ea221da8f2Christian Maeder # Strip any .in extension to find out the file's real type.
404166b9366552e9ec5abb87a37c76ec8a815fb7Klaus Luettich # .in files are processed by configure to produce the target file.
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder ($base = $_) =~ s/\.in$//;
356fa49fe3e6a8398f92d13e9f920d0f093697ecChristian Maeder
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder # Contributed code should maintain its own copyright.
55adfe57a4de1f36adc3e3bfc16f342e44a7d444Christian Maeder if ($base =~ /\.\/contrib\//) {
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder $file_types{$_} = "X";
8d97ef4f234681b11bb5924bd4d03adef858d2d2Christian Maeder } elsif ($base =~ /\.(c|h|css)$/) {
f4a2a20e49f41b2afa657e5e64d9e349c7faa091Christian Maeder $file_types{$_} = "C";
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder } elsif ($base =~ /\.y$/) {
e593b89bfd4952698dc37feced21cefe869d87a2Christian Maeder $file_types{$_} = "YACC";
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder } elsif ($base =~ /\.pl$/i) {
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder $file_types{$_} = "PERL";
7cc09dd93962a2155c34d209d1d4cd7d7b838264Christian Maeder } elsif ($base =~ /\.sh$/) {
1aee4aaddde105264c1faf394d88e302c05094ffChristian Maeder $file_types{$_} = "SH";
1aee4aaddde105264c1faf394d88e302c05094ffChristian Maeder } elsif ($base =~ /\.docbook$/ ||
f041c9a6bda23de33a38490e35b831ae18d96b45Christian Maeder $base =~ /.xsl$/ ||
7cc09dd93962a2155c34d209d1d4cd7d7b838264Christian Maeder $base =~ /.xml$/) {
1aee4aaddde105264c1faf394d88e302c05094ffChristian Maeder $file_types{$_} = "SGML";
1aee4aaddde105264c1faf394d88e302c05094ffChristian Maeder } elsif ($base =~ /\.html$/) {
c3053d57f642ca507cdf79512e604437c4546cb9Christian Maeder $file_types{$_} = "HTML";
dcbd32289a7bdf1e6edd06c6ab0698c6a9dbf37aChristian Maeder } elsif ($base =~ /\.(man|[0-9])$/) {
f4a2a20e49f41b2afa657e5e64d9e349c7faa091Christian Maeder $file_types{$_} = "MAN";
f4a2a20e49f41b2afa657e5e64d9e349c7faa091Christian Maeder } elsif ($base =~ /\/Makefile$/) {
dcbd32289a7bdf1e6edd06c6ab0698c6a9dbf37aChristian Maeder $file_types{$_} = "MAKE";
b886e9e5db2098d0112cc4f70aeba232962939ddChristian Maeder } elsif ($base =~ /\/(named|rndc).?\.conf$/) {
c2fcc35abb03cf0b4ca4b050efeb10827f38c322Christian Maeder $file_types{$_} = "CONF-C";
1aee4aaddde105264c1faf394d88e302c05094ffChristian Maeder } elsif ($base =~ /\/resolv.?\.conf$/) {
356fa49fe3e6a8398f92d13e9f920d0f093697ecChristian Maeder $file_types{$_} = "CONF-SH";
356fa49fe3e6a8398f92d13e9f920d0f093697ecChristian Maeder } elsif ($base =~ /\.(db|hint)$/) {
4ed0007ac9caea5b468f202521352d153481423cChristian Maeder $file_types{$_} = "ZONE";
356fa49fe3e6a8398f92d13e9f920d0f093697ecChristian Maeder } elsif ($base =~ /(\/\.cvsignore|\.gif|\.jpg|\.dsp|\.dsw)$/i) {
356fa49fe3e6a8398f92d13e9f920d0f093697ecChristian Maeder $file_types{$_} = "X";
0206ab93ef846e4e0885996d052b9b73b9dc66b0Christian Maeder } elsif ($base =~ /(\.rnc/i) {
f13d1e86e58da53680e78043e8df182eed867efbChristian Maeder $file_types{$_} = "RNC";
c2a4d8ae266aa37cc922eba97077520229a19902Christian Maeder } else {
79e80c4b3f0ebb337d84415a50f29ccfc793e68bChristian Maeder $file_types{$_} = "?";
79e80c4b3f0ebb337d84415a50f29ccfc793e68bChristian Maeder }
79e80c4b3f0ebb337d84415a50f29ccfc793e68bChristian Maeder ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
79e80c4b3f0ebb337d84415a50f29ccfc793e68bChristian Maeder $blksize,$blocks)
757e6c79ec40491d45dc72c82b5eb59a386634b0Jian Chun Wang = stat($_);
ecf76bc89d9a2ecd7ac7310d30654b9a79d97d62Klaus Luettich ($sec,$min,$hour,$mday,$mon,$c_year,$wday,$yday,$isdst) =
ecf76bc89d9a2ecd7ac7310d30654b9a79d97d62Klaus Luettich localtime($ctime);
ecf76bc89d9a2ecd7ac7310d30654b9a79d97d62Klaus Luettich ($sec,$min,$hour,$mday,$mon,$m_year,$wday,$yday,$isdst) =
36f63902db2b3463faa9f59912ad106e2d5aaa24Klaus Luettich localtime($mtime);
36f63902db2b3463faa9f59912ad106e2d5aaa24Klaus Luettich $c_year += 1900;
f04e8f3ff56405901be968fd4c6e9769239f1a9bKlaus Luettich $m_year += 1900;
5ad5dffe06818a13e1632b1119fbca7881085fc1Dominik Luecke if ($m_year != $year || $c_year != $year) {
8cacad2a09782249243b80985f28e9387019fe40Christian Maeder print "$_: must set copyright year(s) manually\n";
363939beade943a02b31004cea09dec34fa8a6d9Christian Maeder $file_years{$_} = "????";
a7c27282e71cf4505026645f96d4f5cb8a284e32Christian Maeder } else {
363939beade943a02b31004cea09dec34fa8a6d9Christian Maeder $file_years{$_} = "$year";
8a28707e9155465c6f2236a06eac6580a65c7025Christian Maeder }
f04e8f3ff56405901be968fd4c6e9769239f1a9bKlaus Luettich # keep perl from issuing warnings about "used only once"
797ccd67cb8ae127be097cd43448801b673e3b69Christian Maeder $dev = $ino = $mode = $nlink = $uid = $gid = $rdev = $size = 0;
797ccd67cb8ae127be097cd43448801b673e3b69Christian Maeder $atime = $blksize = $blocks = 0;
431d34c7007a787331c4e5ec997badb0f8190fc7Christian Maeder } else {
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder if (! defined($file_years{$_}) || $file_years{$_} eq "????") {
d3ae0072823e2ef0d41d4431fcc768e66489c20eChristian Maeder print "$_: must set copyright year(s) manually\n";
9e748851c150e1022fb952bab3315e869aaf0214Christian Maeder $file_years{$_} = "????";
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder next;
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder }
9e748851c150e1022fb952bab3315e869aaf0214Christian Maeder
9e748851c150e1022fb952bab3315e869aaf0214Christian Maeder # track the modification years even if we are not going to be
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder # updating the copyrights.
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder # next if $file_types{$_} eq "X";
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder next if ($file_years{$_} =~ /^PARENT:/);
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder next if ($file_years{$_} eq "DOCBOOK");
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder
b886e9e5db2098d0112cc4f70aeba232962939ddChristian Maeder @years = split(/,/, $file_years{$_});
15503d903d142d317200149b2d1d642053530365Christian Maeder $has_current = 0;
9e748851c150e1022fb952bab3315e869aaf0214Christian Maeder foreach $fyear (@years) {
9e748851c150e1022fb952bab3315e869aaf0214Christian Maeder if ($fyear == $year) {
f1541d4a151dbd08002dbd14e7eb1d5dde253689Christian Maeder $has_current = 1;
776a1a086df734581431e6edb4343ed4c8d34d55Christian Maeder }
f1541d4a151dbd08002dbd14e7eb1d5dde253689Christian Maeder }
6dc9bc98d0854fe2e3dd3bfc4275096a0c28ee1cChristian Maeder if (!$has_current) {
6dc9bc98d0854fe2e3dd3bfc4275096a0c28ee1cChristian Maeder ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
6dc9bc98d0854fe2e3dd3bfc4275096a0c28ee1cChristian Maeder $blksize,$blocks)
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder = stat($_);
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder ($sec,$min,$hour,$mday,$mon,$m_year,$wday,$yday,$isdst) =
c0c2380bced8159ff0297ece14eba948bd236471Christian Maeder localtime($mtime);
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder $m_year += 1900;
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder if ($m_year == $year) {
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder $file_years{$_} .= ",$year";
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder }
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder }
9e748851c150e1022fb952bab3315e869aaf0214Christian Maeder }
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder}
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maederclose(FILES);
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder
03a6d8f77f588dc5d3dd6653797fa2362efa1751Christian Maederopen(NEWCOPYRIGHTS, ">util/newcopyrights") ||
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder die "can't open newcopyrights: $!";
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maederforeach $file (sort(keys(%file_types))) {
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder print NEWCOPYRIGHTS "$file";
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder $len = length($file);
a5e5b8c3e5c11177e5034ef2423813a5d28979edChristian Maeder if ($len >= 48) {
bc8cbf12aa172bf5673b92a9e7a0151d4aa4c315Christian Maeder $tabs = 1;
2d130d212db7208777ca896a7ecad619a8944971Christian Maeder } else {
2d130d212db7208777ca896a7ecad619a8944971Christian Maeder $needed = int (48 - $len);
a5e5b8c3e5c11177e5034ef2423813a5d28979edChristian Maeder $tabs = int ($needed / 8);
a5e5b8c3e5c11177e5034ef2423813a5d28979edChristian Maeder if ($needed % 8 != 0) {
2d130d212db7208777ca896a7ecad619a8944971Christian Maeder $tabs++;
bc8cbf12aa172bf5673b92a9e7a0151d4aa4c315Christian Maeder }
2d130d212db7208777ca896a7ecad619a8944971Christian Maeder }
f4a2a20e49f41b2afa657e5e64d9e349c7faa091Christian Maeder for ($i = 0; $i < $tabs; $i++) {
2d130d212db7208777ca896a7ecad619a8944971Christian Maeder printf NEWCOPYRIGHTS "\t";
2d130d212db7208777ca896a7ecad619a8944971Christian Maeder }
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder printf NEWCOPYRIGHTS "%s\t%s\n", $file_types{$file}, $file_years{$file};
6ff7a91875597d6e4dfaa68c79187d01473e8341Christian Maeder}
6ff7a91875597d6e4dfaa68c79187d01473e8341Christian Maederclose(NEWCOPYRIGHTS);
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder