Tests: Add t_dist_copyright.pl

This commit is contained in:
Wilson Snyder 2023-01-20 20:42:46 -05:00
parent 30d6edd2e5
commit 5a39fc4ba9

View File

@ -0,0 +1,104 @@
#!/usr/bin/env perl
if (!$::Driver) { use FindBin; exec("$FindBin::Bin/bootstrap.pl", @ARGV, $0); die; }
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
#
# Copyright 2003 by Wilson Snyder. This program is free software; you
# can redistribute it and/or modify it under the terms of either the GNU
# Lesser General Public License Version 3 or the Perl Artistic License
# Version 2.0.
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
use IO::File;
use POSIX qw(strftime);
use strict;
scenarios(dist => 1);
our $Release_Ok_Re = qr!(^test_regress/t/|^examples/)!;
our $Exempt_Author_Re = qr!(^ci/|^nodist/fastcov.py|^nodist/fuzzer|^test_regress/t/.*\.(v|cpp|h)$)!;
our $Exempt_Files_Re = qr!(^\.|/\.|\.gitignore$|\.dat|\.gprof|\.mem|\.out$|\.png$|\.tree|\.vc$|\.vcd$|^\.)!;
our @Exempt_Files_List = qw(
Artistic
CPPLINT.cfg
LICENSE
README.rst
ci/ci-win-compile.ps1
ci/ci-win-test.ps1
ci/coverage-upload.sh
docs/CONTRIBUTING.rst
docs/CONTRIBUTORS
docs/_static
docs/gen
docs/spelling.txt
docs/verilated.dox
include/gtkwave
include/vltstd
install-sh
src/mkinstalldirs
test_regress/t/t_altera_lpm.v
test_regress/t/t_flag_f__3.v
test_regress/t/t_fuzz_eof_bad.v
test_regress/t/t_incr_void.v
test_regress/t/t_timing_trace_fst.pl
test_regress/t/t_wrapper_context.pl
test_regress/t/t_wrapper_context_fst.pl
test_regress/t/t_wrapper_context_seq.pl
test_regress/t/t_wrapper_del_context_bad.pl
test_regress/t/tsub/t_flag_f_tsub.v
test_regress/t/tsub/t_flag_f_tsub_inc.v
verilator.pc.in
);
my $root = "..";
my $Debug;
my $Exempt_Files_List_Re = '^(' . join('|', (map { quotemeta $_ } @Exempt_Files_List)) . ")";
if (!-r "$root/.git") {
skip("Not in a git repository");
} else {
my $files = `cd $root && git ls-files --exclude-standard`;
my $year = strftime("%Y", localtime);
$files =~ s/\s+/ /g;
foreach my $filename (split /\s+/, $files) {
next if $filename =~ /$Exempt_Files_Re/;
next if $filename =~ /$Exempt_Files_List_Re/;
my $fh = IO::File->new("<$root/$filename") or error("$! $filename");
my $spdx;
my $copyright;
my $release;
while (my $line = $fh->getline) {
if ($line =~ /SPDX-License-Identifier:/) {
$spdx = $line;
} elsif ($line =~ /Copyright 20[0-9][0-9]/) {
$copyright = $line;
if ($line !~ /Wilson Snyder|Geza Lore/
&& !($filename =~ /test_regress/ && $line =~ /Antmicro|Todd Strader/)) {
my $yeardash = ($filename =~ m!test_regress/t!) ? $year : $year."-".$year;
if ($filename !~ /$Exempt_Author_Re/) {
warn " ".$copyright;
error("$filename: Please use standard 'Copyright $yeardash by Wilson Snyder'");
}
}
} elsif ($line =~ m!Creative Commons Public Domain!
|| $line =~ m!freely copied and/or distributed!
|| $line =~ m!placed into the Public Domain!) {
$release = 1;
}
}
my $release_note;
if ($release && $filename !~ /$Release_Ok_Re/) {
$release_note = " (has copyright release, but not part of $Release_Ok_Re)";
}
if (!$copyright && (!$release || $release_note)) {
error("$filename: Please add standard 'Copyright $year ...', similar to in other files" . $release_note);
}
if (!$spdx) {
error("$filename: Please add standard 'SPDX-License_Identifier: ...', similar to in other files");
}
}
}
ok(1);
1;