mirror of
https://github.com/isc-projects/bind9.git
synced 2026-02-27 12:02:10 -05:00
The release notes doesn't have to have copyright header, it doesn't add any value there as the release notes are useless outside the project.
204 lines
6.4 KiB
Perl
204 lines
6.4 KiB
Perl
#!/usr/local/bin/perl -w
|
|
#
|
|
# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
|
|
#
|
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, you can obtain one at https://mozilla.org/MPL/2.0/.
|
|
#
|
|
# See the COPYRIGHT file distributed with this work for additional
|
|
# information regarding copyright ownership.
|
|
|
|
use strict;
|
|
|
|
my %file_types = ();
|
|
my %file_years = ();
|
|
|
|
open(COPYRIGHTS, "<util/copyrights") || die "can't open ./util/copyrights: $!";
|
|
while (<COPYRIGHTS>) {
|
|
chomp;
|
|
my ($file, $type, $years) = split;
|
|
$file_types{$file} = $type;
|
|
$file_years{$file} = $years;
|
|
}
|
|
close(COPYRIGHTS);
|
|
|
|
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime(time());
|
|
$sec = $min = $hour = $mday = $mon = $wday = $yday = $isdst = 0;
|
|
$year += 1900;
|
|
|
|
open(CHANGES, "git ls-files | sed 's;^;./;' | sort |") || die "git ls-files: $!";
|
|
while (<CHANGES>) {
|
|
chomp;
|
|
|
|
next if (m%/\. | # just ignore all hidden files
|
|
/ChangeLog | #
|
|
Makefile.(am|in) | # build system doesn't need to have copyright
|
|
/m4/ | # build system doesn't need to have copyright
|
|
/configure | # build system doesn't need to have copyright
|
|
/fuzz/.*\.in/ | # ignore fuzz corpus
|
|
util/newcopyrights | # our output
|
|
\.bak$ | # created by update_copyrights
|
|
\.md$ | # READMEs and such
|
|
\.data$ | # zone files
|
|
\.data[0-9]$ | # zone files
|
|
\.data\.in$ | # zone files
|
|
\.db$ | # zone files
|
|
\.db\.in$ | # zone files
|
|
/db\.[^/]*$ | # zone files
|
|
/[^/]*\.db\.[^/]* | # zone files
|
|
\.hints?$ | # zone files
|
|
\.hints?\.in$ | # zone files
|
|
/hints$ | # zone files
|
|
\.zone$ | # zone files
|
|
/cocci/.* | # coccinelle spatch files
|
|
\.conf$ | # configuration files
|
|
\.conf\.in$ | # configuration files
|
|
/(dnssafe|openssl)/.*\.[ch]$ | # imported
|
|
doc/(draft|expired|rfc)/ | # imported
|
|
doc/notes/ | # release notes doesn't really need copyright
|
|
\.*in$ | # the generated documentation doesn't really need copyright
|
|
grammar\.rst$ | # -"-
|
|
zoneopt\.rst$ | # -"-
|
|
zoneopt$ | # -"-
|
|
\.txt$ # text files don't really need copyright
|
|
%x);
|
|
|
|
if (!$file_types{$_}) {
|
|
# Strip any .in extension to find out the file's real type.
|
|
# .in files are processed by configure to produce the target file.
|
|
my $base;
|
|
($base = $_) =~ s/\.in$//;
|
|
|
|
# Contributed code should maintain its own copyright.
|
|
if ($base =~ /\.\/contrib\//) {
|
|
$file_types{$_} = "X";
|
|
} elsif ($base =~ /\/openssl-[a-z0-9.]*-patch$/) {
|
|
$file_types{$_} = "X";
|
|
} elsif ($base =~ /\.(c|h|css)$/) {
|
|
$file_types{$_} = "C";
|
|
} elsif ($base =~ /\.y$/) {
|
|
$file_types{$_} = "YACC";
|
|
} elsif ($base =~ /\.pl$/i) {
|
|
$file_types{$_} = "PERL";
|
|
} elsif ($base =~ /\.py$/i) {
|
|
$file_types{$_} = "PYTHON";
|
|
if (open(PYTHON, $_)) {
|
|
my $line = <PYTHON>;
|
|
$file_types{$_} = "PYTHON-BIN" if ($line && $line =~ /^#!/);
|
|
close(PYTHON);
|
|
}
|
|
} elsif ($base =~ /\.sh$/) {
|
|
$file_types{$_} = "SH";
|
|
} elsif ($base =~ /\.docbook$/ ||
|
|
$base =~ /\.xsl$/ ||
|
|
$base =~ /\.xml$/) {
|
|
$file_types{$_} = "SGML";
|
|
} elsif ($base =~ /\.rst$/ ||
|
|
$base =~ /\.inc$/) {
|
|
$file_types{$_} = "RST";
|
|
} elsif ($base =~ /doc\/arm\/.*\.html$/) {
|
|
$file_types{$_} = "X";
|
|
} elsif ($base =~ /\.(sty|pdf|eps)$/) {
|
|
$file_types{$_} = "X";
|
|
} elsif ($base =~ /\.html$/) {
|
|
$file_types{$_} = "HTML";
|
|
$base =~ s/\.html$//;
|
|
$base = $base . ".docbook";
|
|
} elsif ($base =~ /\.(man|[0-9])$/) {
|
|
$file_types{$_} = "MAN";
|
|
$base =~ s/\.[0-9]$//;
|
|
$base = $base . ".docbook";
|
|
} elsif ($base =~ /\/Makefile$/) {
|
|
$file_types{$_} = "MAKE";
|
|
} elsif ($base =~ /\/resolv.?\.conf$/) {
|
|
$file_types{$_} = "CONF-SH";
|
|
} elsif ($base =~ /\.md$/) {
|
|
$file_types{$_} = "MKD";
|
|
} elsif ($base =~ /(\/\.(gitignore|gitattributes)|\.(gif|jpg))$/i) {
|
|
$file_types{$_} = "X";
|
|
} elsif ($base =~ /\.(def|dep|dsp|dsw|mak|sln)$/i) {
|
|
$file_types{$_} = "X";
|
|
} elsif ($base =~ /\.(vcxproj(|\.(user|filters)))$/i) {
|
|
$file_types{$_} = "X";
|
|
} elsif ($base =~ /\.rnc$/i) {
|
|
$file_types{$_} = "RNC";
|
|
} elsif ($base =~ /^\.\/EXCLUDED$/i) {
|
|
$file_types{$_} = "X";
|
|
} elsif ($base =~ /\.bat$/i) {
|
|
$file_types{$_} = "BAT";
|
|
} elsif ($base =~ /\.(key|private)$/i) {
|
|
$file_types{$_} = "X";
|
|
} elsif ($base =~ /\/named\d{0,2}\.args$/i) {
|
|
$file_types{$_} = "X";
|
|
} elsif ($base =~ /\/named\.port$/i) {
|
|
$file_types{$_} = "X";
|
|
} elsif ($base =~ /\/named\.dropedns$/i) {
|
|
$file_types{$_} = "X";
|
|
} elsif ($base =~ /\/named\.notcp$/i) {
|
|
$file_types{$_} = "X";
|
|
} elsif ($base =~ /\/doc\/misc\/[-a-z]*\.zoneopt$/i) {
|
|
$file_types{$_} = "X";
|
|
} elsif ($base =~ /\/README$/i) {
|
|
$file_types{$_} = "TXT.BRIEF";
|
|
} else {
|
|
$file_types{$_} = "?";
|
|
}
|
|
if (($file_types{$_} eq "MAN" || $file_types{$_} eq "HTML") &&
|
|
$base =~ /\.docbook$/ && -e $base) {
|
|
$file_years{$_} = "DOCBOOK";
|
|
} else {
|
|
$file_years{$_} = "$year";
|
|
}
|
|
} else {
|
|
if (! defined($file_years{$_}) || $file_years{$_} eq "????") {
|
|
print "$_: must set copyright year(s) manually\n";
|
|
$file_years{$_} = "????";
|
|
next;
|
|
}
|
|
|
|
# track the modification years even if we are not going to be
|
|
# updating the copyrights.
|
|
# next if $file_types{$_} eq "X";
|
|
next if ($file_years{$_} =~ /^PARENT:/);
|
|
next if ($file_years{$_} eq "DOCBOOK");
|
|
|
|
my @years = split(/,/, $file_years{$_});
|
|
my $has_current = 0;
|
|
foreach my $fyear (@years) {
|
|
if ($fyear == $year) {
|
|
$has_current = 1;
|
|
}
|
|
}
|
|
if (!$has_current) {
|
|
$file_years{$_} .= ",$year";
|
|
}
|
|
}
|
|
}
|
|
close(CHANGES);
|
|
|
|
open(NEWCOPYRIGHTS, ">util/newcopyrights") ||
|
|
die "can't open newcopyrights: $!";
|
|
foreach my $file (sort(keys(%file_types))) {
|
|
print NEWCOPYRIGHTS "$file";
|
|
my $len = length($file);
|
|
my $tabs = 0;
|
|
if ($len >= 48) {
|
|
$tabs = 1;
|
|
} else {
|
|
my $needed = int (48 - $len);
|
|
$tabs = int ($needed / 8);
|
|
if ($needed % 8 != 0) {
|
|
$tabs++;
|
|
}
|
|
}
|
|
for (my $i = 0; $i < $tabs; $i++) {
|
|
printf NEWCOPYRIGHTS "\t";
|
|
}
|
|
printf NEWCOPYRIGHTS "%s\t%s\n", $file_types{$file}, $file_years{$file};
|
|
|
|
if (($file_years{$file} eq "????") || ($file_types{$file} eq "?")) {
|
|
print "Unknown file type or year: $file\n";
|
|
}
|
|
}
|
|
close(NEWCOPYRIGHTS);
|