merge_copyrights revision a04588e781b513ae3b30e061ac98035802b5e8e8
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder#!/usr/local/bin/perl -w
25cc5fbba63f84b47e389af749f55abbbde71c8cChristian Maeder#
25cc5fbba63f84b47e389af749f55abbbde71c8cChristian Maeder# Copyright (C) 2004-2007, 2009-2014 Internet Systems Consortium, Inc. ("ISC")
25cc5fbba63f84b47e389af749f55abbbde71c8cChristian Maeder# Copyright (C) 1998-2001, 2003 Internet Software Consortium.
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder#
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder# Permission to use, copy, modify, and/or 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#
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian 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
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian 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
335039f3702f6a2584ede16128a00a51fd5b8bf8Jorina Freya Gerken# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
b9625461755578f3eed04676d42a63fd2caebd0cChristian Maeder# PERFORMANCE OF THIS SOFTWARE.
c6fcd42c6d6d9dae8c7835c24fcb7ce8531a9050Christian Maeder
ce8b15da31cd181b7e90593cbbca98f47eda29d6Till Mossakowski# $Id$
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder
760ae19a92dde8249679a674f93f58d26a7c5f6bChristian Maederuse strict;
760ae19a92dde8249679a674f93f58d26a7c5f6bChristian Maeder
88c800932dd7053322501ea2039d9f234be6866cKlaus Luettichmy %file_types = ();
8410667510a76409aca9bb24ff0eda0420088274Christian Maedermy %file_years = ();
8410667510a76409aca9bb24ff0eda0420088274Christian Maedermy %exists = ();
8410667510a76409aca9bb24ff0eda0420088274Christian Maeder
404166b9366552e9ec5abb87a37c76ec8a815fb7Klaus Luettichopen(COPYRIGHTS, "<util/copyrights") || die "can't open ./util/copyrights: $!";
404166b9366552e9ec5abb87a37c76ec8a815fb7Klaus Luettichwhile (<COPYRIGHTS>) {
fdb2d618144159395f7bf8ce3327b3c112a17dd3Till Mossakowski chomp;
404166b9366552e9ec5abb87a37c76ec8a815fb7Klaus Luettich my ($file, $type, $years) = split;
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder $file_types{$file} = $type;
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder $file_years{$file} = $years;
d67a33b40578beef2e255a274f89bb9c34aaf056Christian Maeder}
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maederclose(COPYRIGHTS);
e593b89bfd4952698dc37feced21cefe869d87a2Christian Maeder
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maedermy ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time());
6e049108aa87dc46bcff96fae50a4625df1d9648Klaus Luettich$sec = $min = $hour = $mday = $mon = $wday = $yday = $isdst = 0;
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder$year += 1900;
c6fcd42c6d6d9dae8c7835c24fcb7ce8531a9050Christian Maeder
c6fcd42c6d6d9dae8c7835c24fcb7ce8531a9050Christian Maederopen(FILES, "git ls-files | sed 's;^;./;' |") || die "git ls-files: $!";
c6fcd42c6d6d9dae8c7835c24fcb7ce8531a9050Christian Maederwhile (<FILES>) {
31c49f2fa23d4ac089f35145d80a224deb6ea7e4Till Mossakowski chomp;
c55a0f77be7e88d3620b419ec8961f4379a586e3Klaus Luettich $exists{$_} = 1;
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder}
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian Maederclose(FILES);
f4505a64a089693012a3f5c3b1f12a82cd7a2a5aKlaus Luettich
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maederopen(CHANGES, "sh util/recent_changes.sh |") || die "recent_changes.sh: $!";
f4505a64a089693012a3f5c3b1f12a82cd7a2a5aKlaus Luettichwhile (<CHANGES>) {
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder chomp;
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder
f4505a64a089693012a3f5c3b1f12a82cd7a2a5aKlaus Luettich # this file isn't in the repository now
f4505a64a089693012a3f5c3b1f12a82cd7a2a5aKlaus Luettich next unless ($exists{$_});
f4505a64a089693012a3f5c3b1f12a82cd7a2a5aKlaus Luettich
5d4038657f6a63e131f5804af2f7957b69e15a43Klaus Luettich next if (m%/\.\# | # CVS old conflict file
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder /CVS/ | # CVS directory
b0294d73dcefc502ddaa13e18b46103a5916971fTill Mossakowski /.git/ | # git directory
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder util/newcopyrights | # our output
77a65251ee036c6aaf09c2775315a4ee24259fbdJorina Freya Gerken \.bak$ | # created by update_copyrights
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder /(dnssafe|openssl)/.*\.[ch]$ | # imported
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder doc/(draft|expired|rfc)/ # imported
4d7d7f9a423490731c73403c7806bd66967da946Christian Maeder %x);
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder
97812b7ce9860bf514a8822a63503451795dbc65Klaus Luettich if (!$file_types{$_}) {
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder # Strip any .in extension to find out the file's real type.
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder # .in files are processed by configure to produce the target file.
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder my $base;
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder ($base = $_) =~ s/\.in$//;
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder # Contributed code should maintain its own copyright.
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder if ($base =~ /\.\/contrib\//) {
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder $file_types{$_} = "X";
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers } elsif ($base =~ /\.\/unit\/atf-src\//) {
4e7050bcbcf0f372a5bad32ecd0282bccabf0983Klaus Luettich $file_types{$_} = "X";
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder } elsif ($base =~ /\/openssl-[a-z0-9.]*-patch$/) {
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder $file_types{$_} = "X";
33d042fe6a9eb27a4c48f840b80838f3e7d98e34Christian Maeder } elsif ($base =~ /\.(c|h|css)$/) {
340706b6c0c6e3dbacdd7003e20e9cab7f9aa765Christian Maeder $file_types{$_} = "C";
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder } elsif ($base =~ /\.y$/) {
ce50fe187cdae64e75e510daafb78156280bdb91Christian Maeder $file_types{$_} = "YACC";
ebe517300051f765f2ed856a789dd5613d681ab0Klaus Luettich } elsif ($base =~ /\.pl$/i) {
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers $file_types{$_} = "PERL";
c55a0f77be7e88d3620b419ec8961f4379a586e3Klaus Luettich } elsif ($base =~ /\.py$/i) {
6ae5607d2def114f998fd49bac4eef12a2620fafChristian Maeder $file_types{$_} = "PYTHON";
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder } elsif ($base =~ /\.sh$/) {
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder $file_types{$_} = "SH";
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder } elsif ($base =~ /\.docbook$/ ||
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder $base =~ /.xsl$/ ||
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder $base =~ /.xml$/) {
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder $file_types{$_} = "SGML";
ebe517300051f765f2ed856a789dd5613d681ab0Klaus Luettich } elsif ($base =~ /doc\/arm\/.*\.html$/) {
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers $file_types{$_} = "X";
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers } elsif ($base =~ /\.html$/) {
c55a0f77be7e88d3620b419ec8961f4379a586e3Klaus Luettich $file_types{$_} = "HTML";
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder } elsif ($base =~ /\.(man|[0-9])$/) {
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder $file_types{$_} = "MAN";
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder } elsif ($base =~ /\/Makefile$/) {
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder $file_types{$_} = "MAKE";
ce50fe187cdae64e75e510daafb78156280bdb91Christian Maeder } elsif ($base =~ /\/(named|rndc|good|bad).{0,2}\.conf$/) {
4e7050bcbcf0f372a5bad32ecd0282bccabf0983Klaus Luettich $file_types{$_} = "CONF-C";
6ae5607d2def114f998fd49bac4eef12a2620fafChristian Maeder } elsif ($base =~ /\/checkconf\/(good|bad)-.*\.conf$/) {
e593b89bfd4952698dc37feced21cefe869d87a2Christian Maeder $file_types{$_} = "CONF-C";
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder } elsif ($base =~ /\/resolv.?\.conf$/) {
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder $file_types{$_} = "CONF-SH";
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder } elsif ($base =~ /\.(db|hint)$/) {
9df11f85fd7f8c4745d64464876e84ec4e263692Christian Maeder $file_types{$_} = "ZONE";
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers } elsif ($base =~ /(\/\.gitignore|Atffile|\.(gif|jpg))$/i) {
9df11f85fd7f8c4745d64464876e84ec4e263692Christian Maeder $file_types{$_} = "X";
5b818f10e11fc79def1fdd5c8a080d64a6438d87Christian Maeder } elsif ($base =~ /\.(def|dep|dsp|dsw|mak|sln)$/i) {
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers $file_types{$_} = "X";
5d4038657f6a63e131f5804af2f7957b69e15a43Klaus Luettich } elsif ($base =~ /\.(vcxproj(|\.(user|filters)))$/i) {
5d4038657f6a63e131f5804af2f7957b69e15a43Klaus Luettich $file_types{$_} = "X";
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian Maeder } elsif ($base =~ /\.rnc$/i) {
c432483b64662e8db604a58758cd18ea7fa65659Christian Maeder $file_types{$_} = "RNC";
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian Maeder } elsif ($base =~ /^\.\/EXCLUDED$/i) {
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian Maeder $file_types{$_} = "X";
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian Maeder } elsif ($base =~ /\.bat$/i) {
e8d782e6e650b71a2b0ee8461fd8d9fa31525591Christian Maeder $file_types{$_} = "BAT";
0310dabcd02da51f78f84e7a73d4c7b2dd3e8507Christian Maeder } elsif ($base =~ /\/named\.args$/i) {
c5e10ba19c9854112e5d29f491759e8e89f83652Christian Maeder $file_types{$_} = "X";
5b818f10e11fc79def1fdd5c8a080d64a6438d87Christian Maeder } else {
88c66e48620750c42b94db9feb01b42ae23dba97Till Mossakowski $file_types{$_} = "?";
ce8b15da31cd181b7e90593cbbca98f47eda29d6Till Mossakowski }
b3dca469a9e267d6d71acfdeca7bf284d0581dc7Till Mossakowski my $m_year = int(`sh util/file_year.sh $_`);
8659594bb40eb5f3da5439692f0908300947191eSonja Gröning if ($m_year != $year) {
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian Maeder print "$_: must set copyright year(s) manually\n";
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian Maeder $file_years{$_} = "????";
96ef2e46d048c357927f2795a40e9e66f21b85fbSonja Gröning } else {
96ef2e46d048c357927f2795a40e9e66f21b85fbSonja Gröning $file_years{$_} = "$year";
96ef2e46d048c357927f2795a40e9e66f21b85fbSonja Gröning }
7d09621f989f5e6dfbf603b36b2fccbacf639a3cTill Mossakowski } else {
eeb419aa20c97b4af973e97ee6ae77a8eed29e15Till Mossakowski if (! defined($file_years{$_}) || $file_years{$_} eq "????") {
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers print "$_: must set copyright year(s) manually\n";
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian Maeder $file_years{$_} = "????";
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers next;
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian Maeder }
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian Maeder
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian Maeder # track the modification years even if we are not going to be
7d09621f989f5e6dfbf603b36b2fccbacf639a3cTill Mossakowski # updating the copyrights.
ce8b15da31cd181b7e90593cbbca98f47eda29d6Till Mossakowski # next if $file_types{$_} eq "X";
ce8b15da31cd181b7e90593cbbca98f47eda29d6Till Mossakowski next if ($file_years{$_} =~ /^PARENT:/);
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers next if ($file_years{$_} eq "DOCBOOK");
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder my @years = split(/,/, $file_years{$_});
51e836611726885f6d2719d959ed1b51f8fd06f4Klaus Luettich my $has_current = 0;
fdb2d618144159395f7bf8ce3327b3c112a17dd3Till Mossakowski foreach my $fyear (@years) {
fdb2d618144159395f7bf8ce3327b3c112a17dd3Till Mossakowski if ($fyear == $year) {
327a9b9bf44b6e33f71fee7526dc1c0035251591Christian Maeder $has_current = 1;
b49276c9f50038e0bd499ad49f7bd6444566a834Christian Maeder }
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder }
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder if (!$has_current) {
a348b2eb46eb51f376c910d6dd4415fdab6713bdChristian Maeder $file_years{$_} .= ",$year";
69001b796a7215bb56d87523cdc9dd7a5cf032f3Christian Maeder }
69001b796a7215bb56d87523cdc9dd7a5cf032f3Christian Maeder }
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder}
40a2368e1fa061488d0be6886368ab1c8391b97fChristian Maederclose(CHANGES);
6e049108aa87dc46bcff96fae50a4625df1d9648Klaus Luettich
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maederopen(NEWCOPYRIGHTS, ">util/newcopyrights") ||
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder die "can't open newcopyrights: $!";
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maederforeach my $file (sort(keys(%file_types))) {
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian Maeder print NEWCOPYRIGHTS "$file";
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian Maeder my $len = length($file);
857992065be4ed40a72c6296b6c0aec62ab4c5b9Christian Maeder my $tabs = 0;
fdb2d618144159395f7bf8ce3327b3c112a17dd3Till Mossakowski if ($len >= 48) {
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder $tabs = 1;
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder } else {
8b0f493ae42bad8b94918cc0957f1af57096cda4Felix Reckers my $needed = int (48 - $len);
b49276c9f50038e0bd499ad49f7bd6444566a834Christian Maeder $tabs = int ($needed / 8);
88c800932dd7053322501ea2039d9f234be6866cKlaus Luettich if ($needed % 8 != 0) {
ed9207cf24e96b0d6f59985822054ae28cb69b2eChristian Maeder $tabs++;
b49276c9f50038e0bd499ad49f7bd6444566a834Christian Maeder }
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder }
ac0bbbcb2774629bb87986e69cf53d3402c5f575Christian Maeder for (my $i = 0; $i < $tabs; $i++) {
33d042fe6a9eb27a4c48f840b80838f3e7d98e34Christian Maeder printf NEWCOPYRIGHTS "\t";
b10267ae0a6523b73113fc2dee9ea628266fce60Christian Maeder }
fa21fba9ceb1ddf7b3efd54731a12ed8750191d8Christian Maeder printf NEWCOPYRIGHTS "%s\t%s\n", $file_types{$file}, $file_years{$file};
fa21fba9ceb1ddf7b3efd54731a12ed8750191d8Christian Maeder
621799f077b3a1ed0f5a35382cfad0602c255b20Klaus Luettich if (($file_years{$file} eq "????") || ($file_types{$file} eq "?")) {
05a8b581f98b928baca6dab60cd20277659ac760Christian Maeder print "Unknown file type or year: $file\n";
ed9207cf24e96b0d6f59985822054ae28cb69b2eChristian Maeder }
fa21fba9ceb1ddf7b3efd54731a12ed8750191d8Christian Maeder}
b49276c9f50038e0bd499ad49f7bd6444566a834Christian Maederclose(NEWCOPYRIGHTS);
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder