aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDario Lombardo <lomato@gmail.com>2018-02-06 16:59:40 +0100
committerAnders Broman <a.broman58@gmail.com>2018-02-08 11:44:58 +0000
commit8eed71f53974a0274f901edb63e9476c452e9eaa (patch)
tree4f154934ea4eb03c507b0c89ccdb31faf8762144
parenta2265f73b58ea91c3ae13ed5b863f844936f61d3 (diff)
tools: remake the indentation of licencecheck.pl.
Change-Id: Ib1b320e5b99e8842df61fd3dc584b6df4fc461f8 Reviewed-on: https://code.wireshark.org/review/25639 Reviewed-by: Anders Broman <a.broman58@gmail.com>
-rwxr-xr-xtools/licensecheck.pl1096
1 files changed, 549 insertions, 547 deletions
diff --git a/tools/licensecheck.pl b/tools/licensecheck.pl
index 8adab0347e..f56b7b05c9 100755
--- a/tools/licensecheck.pl
+++ b/tools/licensecheck.pl
@@ -196,85 +196,85 @@ my $default_ignore_regex = qr!
!x;
my $default_check_regex =
- qr!
- \.( # search for file suffix
- c(c|pp|xx)? # c and c++
- |h(h|pp|xx)? # header files for c and c++
- |S
- |css|less # HTML css and similar
- |f(77|90)?
- |go
- |groovy
- |lisp
- |scala
- |clj
- |p(l|m)?6?|t|xs|pod6? # perl5 or perl6
- |sh
- |php
- |py(|x)
- |rb
- |java
- |js
- |vala
- |el
- |sc(i|e)
- |cs
- |pas
- |inc
- |dtd|xsl
- |mod
- |m
- |md|markdown
- |tex
- |mli?
- |(c|l)?hs
- )
- $
- !x;
+ qr!
+ \.( # search for file suffix
+ c(c|pp|xx)? # c and c++
+ |h(h|pp|xx)? # header files for c and c++
+ |S
+ |css|less # HTML css and similar
+ |f(77|90)?
+ |go
+ |groovy
+ |lisp
+ |scala
+ |clj
+ |p(l|m)?6?|t|xs|pod6? # perl5 or perl6
+ |sh
+ |php
+ |py(|x)
+ |rb
+ |java
+ |js
+ |vala
+ |el
+ |sc(i|e)
+ |cs
+ |pas
+ |inc
+ |dtd|xsl
+ |mod
+ |m
+ |md|markdown
+ |tex
+ |mli?
+ |(c|l)?hs
+ )
+ $
+ !x;
# also used to cleanup
my $copyright_indicator_regex
- = qr!
- (?:copyright # The full word
- |copr\. # Legally-valid abbreviation
- |\xc2\xa9 # Unicode copyright sign encoded in iso8859
- |\x{00a9} # Unicode character COPYRIGHT SIGN
- #|© # Unicode character COPYRIGHT SIGN
- |\(c\) # Legally-null representation of sign
- )
- !lix;
+ = qr!
+ (?:copyright # The full word
+ |copr\. # Legally-valid abbreviation
+ |\xc2\xa9 # Unicode copyright sign encoded in iso8859
+ |\x{00a9} # Unicode character COPYRIGHT SIGN
+ #|© # Unicode character COPYRIGHT SIGN
+ |\(c\) # Legally-null representation of sign
+ )
+ !lix;
my $copyright_indicator_regex_with_capture = qr!$copyright_indicator_regex(?::\s*|\s+)(\S.*)$!lix;
# avoid ditching things like <info@foo.com>
my $copyright_disindicator_regex
- = qr{
- \b(?:info(?:rmation)?(?!@) # Discussing copyright information
- |(notice|statement|claim|string)s? # Discussing the notice
- |is|in|to # Part of a sentence
- |(holder|owner)s? # Part of a sentence
- |ownership # Part of a sentence
- )\b
- }ix;
+ = qr{
+ \b(?:info(?:rmation)?(?!@) # Discussing copyright information
+ |(notice|statement|claim|string)s? # Discussing the notice
+ |is|in|to # Part of a sentence
+ |(holder|owner)s? # Part of a sentence
+ |ownership # Part of a sentence
+ )\b
+ }ix;
my $copyright_predisindicator_regex
- = qr!(
- ^[#]define\s+.*\(c\) # #define foo(c) -- not copyright
- )!ix;
+ = qr!(
+ ^[#]define\s+.*\(c\) # #define foo(c) -- not copyright
+ )!ix;
my $modified_conf_msg;
my %OPT=(
- verbose => '',
- lines => '',
- noconf => '',
- ignore => '',
- check => '',
- recursive => 0,
- copyright => 0,
- machine => 0,
- text => 0,
- skipped => 0,
+ verbose => '',
+ lines => '',
+ noconf => '',
+ ignore => '',
+ check => '',
+ recursive => 0,
+ copyright => 0,
+ machine => 0,
+ text => 0,
+ skipped => 0,
);
my $def_lines = 60;
@@ -284,61 +284,61 @@ my $def_tail = 5000; # roughly 60 lines of 80 chars
# This is boilerplate
if (@ARGV and $ARGV[0] =~ /^--no-?conf$/) {
- $modified_conf_msg = " (no configuration files read)";
- shift;
+ $modified_conf_msg = " (no configuration files read)";
+ shift;
} else {
- my @config_files = ('/etc/devscripts.conf', '~/.devscripts');
- my %config_vars = (
- 'LICENSECHECK_VERBOSE' => 'no',
- 'LICENSECHECK_PARSELINES' => $def_lines,
- );
- my %config_default = %config_vars;
-
- my $shell_cmd;
- # Set defaults
- foreach my $var (keys %config_vars) {
- $shell_cmd .= qq[$var="$config_vars{$var}";\n];
- }
- $shell_cmd .= 'for file in ' . join(" ", @config_files) . "; do\n";
- $shell_cmd .= '[ -f $file ] && . $file; done;' . "\n";
- # Read back values
- foreach my $var (keys %config_vars) { $shell_cmd .= "echo \$$var;\n" }
- my $shell_out = `/bin/bash -c '$shell_cmd'`;
- @config_vars{keys %config_vars} = split /\n/, $shell_out, -1;
-
- # Check validity
- $config_vars{'LICENSECHECK_VERBOSE'} =~ /^(yes|no)$/
- or $config_vars{'LICENSECHECK_VERBOSE'} = 'no';
- $config_vars{'LICENSECHECK_PARSELINES'} =~ /^[1-9][0-9]*$/
- or $config_vars{'LICENSECHECK_PARSELINES'} = $def_lines;
-
- foreach my $var (sort keys %config_vars) {
- if ($config_vars{$var} ne $config_default{$var}) {
- $modified_conf_msg .= " $var=$config_vars{$var}\n";
- }
- }
- $modified_conf_msg ||= " (none)\n";
- chomp $modified_conf_msg;
-
- $OPT{'verbose'} = $config_vars{'LICENSECHECK_VERBOSE'} eq 'yes' ? 1 : 0;
- $OPT{'lines'} = $config_vars{'LICENSECHECK_PARSELINES'};
+ my @config_files = ('/etc/devscripts.conf', '~/.devscripts');
+ my %config_vars = (
+ 'LICENSECHECK_VERBOSE' => 'no',
+ 'LICENSECHECK_PARSELINES' => $def_lines,
+ );
+ my %config_default = %config_vars;
+
+ my $shell_cmd;
+ # Set defaults
+ foreach my $var (keys %config_vars) {
+ $shell_cmd .= qq[$var="$config_vars{$var}";\n];
+ }
+ $shell_cmd .= 'for file in ' . join(" ", @config_files) . "; do\n";
+ $shell_cmd .= '[ -f $file ] && . $file; done;' . "\n";
+ # Read back values
+ foreach my $var (keys %config_vars) { $shell_cmd .= "echo \$$var;\n" }
+ my $shell_out = `/bin/bash -c '$shell_cmd'`;
+ @config_vars{keys %config_vars} = split /\n/, $shell_out, -1;
+
+ # Check validity
+ $config_vars{'LICENSECHECK_VERBOSE'} =~ /^(yes|no)$/
+ or $config_vars{'LICENSECHECK_VERBOSE'} = 'no';
+ $config_vars{'LICENSECHECK_PARSELINES'} =~ /^[1-9][0-9]*$/
+ or $config_vars{'LICENSECHECK_PARSELINES'} = $def_lines;
+
+ foreach my $var (sort keys %config_vars) {
+ if ($config_vars{$var} ne $config_default{$var}) {
+ $modified_conf_msg .= " $var=$config_vars{$var}\n";
+ }
+ }
+ $modified_conf_msg ||= " (none)\n";
+ chomp $modified_conf_msg;
+
+ $OPT{'verbose'} = $config_vars{'LICENSECHECK_VERBOSE'} eq 'yes' ? 1 : 0;
+ $OPT{'lines'} = $config_vars{'LICENSECHECK_PARSELINES'};
}
GetOptions(\%OPT,
- "help|h",
- "check|c=s",
- "copyright",
- "encoding|e=s",
- "ignore|i=s",
- "lines|l=i",
- "machine|m",
- "noconf|no-conf",
- "recursive|r",
- "skipped|s",
- "tail",
- "text|t",
- "verbose!",
- "version|v",
+ "help|h",
+ "check|c=s",
+ "copyright",
+ "encoding|e=s",
+ "ignore|i=s",
+ "lines|l=i",
+ "machine|m",
+ "noconf|no-conf",
+ "recursive|r",
+ "skipped|s",
+ "tail",
+ "text|t",
+ "verbose!",
+ "version|v",
) or die "Usage: $progname [options] filelist\nRun $progname --help for more details\n";
$OPT{'lines'} = $def_lines if $OPT{'lines'} !~ /^[1-9][0-9]*$/;
@@ -348,13 +348,13 @@ my $check_regex = $default_check_regex;
$check_regex = qr/$OPT{check}/ if length $OPT{check};
if ($OPT{'noconf'}) {
- fatal("--no-conf is only acceptable as the first command-line option!");
+ fatal("--no-conf is only acceptable as the first command-line option!");
}
if ($OPT{'help'}) { help(); exit 0; }
if ($OPT{'version'}) { version(); exit 0; }
if ($OPT{text}) {
- warn "$0 warning: option -text is deprecated\n"; # remove -text end 2015
+ warn "$0 warning: option -text is deprecated\n"; # remove -text end 2015
}
die "Usage: $progname [options] filelist\nRun $progname --help for more details\n" unless @ARGV;
@@ -369,225 +369,225 @@ push @find_args, qw(-maxdepth 1) unless $OPT{'recursive'};
push @find_args, qw(-follow -type f -print);
while (@ARGV) {
- my $file = shift @ARGV;
-
- if (-d $file) {
- open my $FIND, '-|', 'find', $file, @find_args
- or die "$progname: couldn't exec find: $!\n";
-
- while (my $found = <$FIND>) {
- chomp ($found);
- # Silently skip empty files or ignored files
- next if -z $found or $found =~ $ignore_regex;
- if ( not $check_regex or $found =~ $check_regex ) {
- # Silently skip empty files or ignored files
- push @files, $found ;
- }
- else {
- warn "skipped file $found\n" if $OPT{skipped};
- }
- }
- close $FIND;
- }
- elsif ($file =~ $ignore_regex) {
- # Silently skip ignored files
- next;
- }
- elsif ( $files_count == 1 or not $check_regex or $file =~ $check_regex ) {
- push @files, $file;
- }
- else {
- warn "skipped file $file\n" if $OPT{skipped};
- }
+ my $file = shift @ARGV;
+
+ if (-d $file) {
+ open my $FIND, '-|', 'find', $file, @find_args
+ or die "$progname: couldn't exec find: $!\n";
+
+ while (my $found = <$FIND>) {
+ chomp ($found);
+ # Silently skip empty files or ignored files
+ next if -z $found or $found =~ $ignore_regex;
+ if ( not $check_regex or $found =~ $check_regex ) {
+ # Silently skip empty files or ignored files
+ push @files, $found ;
+ }
+ else {
+ warn "skipped file $found\n" if $OPT{skipped};
+ }
+ }
+ close $FIND;
+ }
+ elsif ($file =~ $ignore_regex) {
+ # Silently skip ignored files
+ next;
+ }
+ elsif ( $files_count == 1 or not $check_regex or $file =~ $check_regex ) {
+ push @files, $file;
+ }
+ else {
+ warn "skipped file $file\n" if $OPT{skipped};
+ }
}
while (@files) {
- my $file = shift @files;
- my $content = '';
- my $copyright_match;
- my $copyright = '';
-
- my $st = stat $file;
-
- my $enc = $OPT{encoding} ;
- my $mode = $enc ? "<:encoding($enc)" : '<';
- # need to use "<" when encoding is unknown otherwise we break compatibility
- my $fh = IO::File->new ($file ,$mode) or die "Unable to access $file\n";
-
- while ( my $line = $fh->getline ) {
- last if ($fh->input_line_number > $OPT{'lines'});
- $content .= $line;
- }
-
- my %copyrights = extract_copyright($content);
-
- print qq(----- $file header -----\n$content----- end header -----\n\n)
- if $OPT{'verbose'};
-
- my $license = parselicense(clean_cruft_and_spaces(clean_comments($content)));
- $copyright = join(" / ", reverse sort values %copyrights);
-
- if ( not $copyright and $license eq 'UNKNOWN') {
- my $position = $fh->tell; # See IO::Seekable
- my $tail_size = $OPT{tail} // $def_tail;
- my $jump = $st->size - $tail_size;
- $jump = $position if $jump < $position;
-
- my $tail ;
- if ( $tail_size and $jump < $st->size) {
- $fh->seek($jump, SEEK_SET) ; # also IO::Seekable
- $tail .= join('',$fh->getlines);
- }
-
- print qq(----- $file tail -----\n$tail----- end tail -----\n\n)
- if $OPT{'verbose'};
-
- %copyrights = extract_copyright($tail);
- $license = parselicense(clean_cruft_and_spaces(clean_comments($tail)));
- $copyright = join(" / ", reverse sort values %copyrights);
- }
-
- $fh->close;
-
- if ($OPT{'machine'}) {
- print "$file\t$license";
- print "\t" . ($copyright or "*No copyright*") if $OPT{'copyright'};
- print "\n";
- } else {
- print "$file: ";
- print "*No copyright* " unless $copyright;
- print $license . "\n";
- print " [Copyright: " . $copyright . "]\n"
- if $copyright and $OPT{'copyright'};
- print "\n" if $OPT{'copyright'};
- }
+ my $file = shift @files;
+ my $content = '';
+ my $copyright_match;
+ my $copyright = '';
+
+ my $st = stat $file;
+
+ my $enc = $OPT{encoding} ;
+ my $mode = $enc ? "<:encoding($enc)" : '<';
+ # need to use "<" when encoding is unknown otherwise we break compatibility
+ my $fh = IO::File->new ($file ,$mode) or die "Unable to access $file\n";
+
+ while ( my $line = $fh->getline ) {
+ last if ($fh->input_line_number > $OPT{'lines'});
+ $content .= $line;
+ }
+
+ my %copyrights = extract_copyright($content);
+
+ print qq(----- $file header -----\n$content----- end header -----\n\n)
+ if $OPT{'verbose'};
+
+ my $license = parselicense(clean_cruft_and_spaces(clean_comments($content)));
+ $copyright = join(" / ", reverse sort values %copyrights);
+
+ if ( not $copyright and $license eq 'UNKNOWN') {
+ my $position = $fh->tell; # See IO::Seekable
+ my $tail_size = $OPT{tail} // $def_tail;
+ my $jump = $st->size - $tail_size;
+ $jump = $position if $jump < $position;
+
+ my $tail ;
+ if ( $tail_size and $jump < $st->size) {
+ $fh->seek($jump, SEEK_SET) ; # also IO::Seekable
+ $tail .= join('',$fh->getlines);
+ }
+
+ print qq(----- $file tail -----\n$tail----- end tail -----\n\n)
+ if $OPT{'verbose'};
+
+ %copyrights = extract_copyright($tail);
+ $license = parselicense(clean_cruft_and_spaces(clean_comments($tail)));
+ $copyright = join(" / ", reverse sort values %copyrights);
+ }
+
+ $fh->close;
+
+ if ($OPT{'machine'}) {
+ print "$file\t$license";
+ print "\t" . ($copyright or "*No copyright*") if $OPT{'copyright'};
+ print "\n";
+ } else {
+ print "$file: ";
+ print "*No copyright* " unless $copyright;
+ print $license . "\n";
+ print " [Copyright: " . $copyright . "]\n"
+ if $copyright and $OPT{'copyright'};
+ print "\n" if $OPT{'copyright'};
+ }
}
sub extract_copyright {
- my $content = shift;
- my @c = split /\n/, clean_comments($content);
-
- my %copyrights;
- my $lines_after_copyright_block = 0;
-
- my $in_copyright_block = 0;
- while (@c) {
- my $line = shift @c ;
- my $copyright_match = parse_copyright($line, \$in_copyright_block) ;
- if ($copyright_match) {
- while (@c and $copyright_match =~ /\d[,.]?\s*$/) {
- # looks like copyright end with a year, assume the owner is on next line(s)
- $copyright_match .= ' '. shift @c;
- }
- $copyright_match =~ s/\s+/ /g;
- $copyright_match =~ s/\s*$//;
- $copyrights{lc("$copyright_match")} = "$copyright_match";
- }
- elsif (scalar keys %copyrights) {
- # skip remaining lines if a copyright blocks was found more than 5 lines ago.
- # so a copyright block may contain up to 5 blank lines, but no more
- last if $lines_after_copyright_block++ > 5;
+ my $content = shift;
+ my @c = split /\n/, clean_comments($content);
+
+ my %copyrights;
+ my $lines_after_copyright_block = 0;
+
+ my $in_copyright_block = 0;
+ while (@c) {
+ my $line = shift @c ;
+ my $copyright_match = parse_copyright($line, \$in_copyright_block) ;
+ if ($copyright_match) {
+ while (@c and $copyright_match =~ /\d[,.]?\s*$/) {
+ # looks like copyright end with a year, assume the owner is on next line(s)
+ $copyright_match .= ' '. shift @c;
+ }
+ $copyright_match =~ s/\s+/ /g;
+ $copyright_match =~ s/\s*$//;
+ $copyrights{lc("$copyright_match")} = "$copyright_match";
+ }
+ elsif (scalar keys %copyrights) {
+ # skip remaining lines if a copyright blocks was found more than 5 lines ago.
+ # so a copyright block may contain up to 5 blank lines, but no more
+ last if $lines_after_copyright_block++ > 5;
+ }
}
- }
- return %copyrights;
+ return %copyrights;
}
sub parse_copyright {
- my $data = shift ;
- my $in_copyright_block_ref = shift;
- my $copyright = '';
- my $match;
-
- if ( $data !~ $copyright_predisindicator_regex) {
- #print "match against ->$data<-\n";
- if ($data =~ $copyright_indicator_regex_with_capture) {
- $match = $1;
- $$in_copyright_block_ref = 1;
- # Ignore lines matching "see foo for copyright information" etc.
- if ($match !~ $copyright_disindicator_regex) {
- # De-cruft
- $match =~ s/$copyright_indicator_regex//igx;
- $match =~ s/^\s+//;
- $match =~ s/\s*\bby\b\s*/ /;
- $match =~ s/([,.])?\s*$//;
- $match =~ s/\s{2,}/ /g;
- $match =~ s/\\//g; # de-cruft nroff files
- $match =~ s/\s*[*#]\s*$//;
- $copyright = $match;
- }
- }
- elsif ($$in_copyright_block_ref and $data =~ /^\d{2,}[,\s]+/) {
- # following lines beginning with a year are supposed to be
- # continued copyright blocks
- $copyright = $data;
- }
- else {
- $$in_copyright_block_ref = 0;
- }
- }
-
- return $copyright;
+ my $data = shift ;
+ my $in_copyright_block_ref = shift;
+ my $copyright = '';
+ my $match;
+
+ if ( $data !~ $copyright_predisindicator_regex) {
+ #print "match against ->$data<-\n";
+ if ($data =~ $copyright_indicator_regex_with_capture) {
+ $match = $1;
+ $$in_copyright_block_ref = 1;
+ # Ignore lines matching "see foo for copyright information" etc.
+ if ($match !~ $copyright_disindicator_regex) {
+ # De-cruft
+ $match =~ s/$copyright_indicator_regex//igx;
+ $match =~ s/^\s+//;
+ $match =~ s/\s*\bby\b\s*/ /;
+ $match =~ s/([,.])?\s*$//;
+ $match =~ s/\s{2,}/ /g;
+ $match =~ s/\\//g; # de-cruft nroff files
+ $match =~ s/\s*[*#]\s*$//;
+ $copyright = $match;
+ }
+ }
+ elsif ($$in_copyright_block_ref and $data =~ /^\d{2,}[,\s]+/) {
+ # following lines beginning with a year are supposed to be
+ # continued copyright blocks
+ $copyright = $data;
+ }
+ else {
+ $$in_copyright_block_ref = 0;
+ }
+ }
+
+ return $copyright;
}
sub clean_comments {
- local $_ = shift or return q{};
+ local $_ = shift or return q{};
- # Remove generic comments: look for 4 or more lines beginning with
- # regular comment pattern and trim it. Fall back to old algorithm
- # if no such pattern found.
- my @matches = m/^\s*((?:[^a-zA-Z0-9\s]{1,3}|\bREM\b))\s\w/mg;
- if (@matches >= 4) {
- my $comment_re = qr/\s*[\Q$matches[0]\E]{1,3}\s*/;
- s/^$comment_re//mg;
- }
+ # Remove generic comments: look for 4 or more lines beginning with
+ # regular comment pattern and trim it. Fall back to old algorithm
+ # if no such pattern found.
+ my @matches = m/^\s*((?:[^a-zA-Z0-9\s]{1,3}|\bREM\b))\s\w/mg;
+ if (@matches >= 4) {
+ my $comment_re = qr/\s*[\Q$matches[0]\E]{1,3}\s*/;
+ s/^$comment_re//mg;
+ }
- # Remove Fortran comments
- s/^[cC] //gm;
+ # Remove Fortran comments
+ s/^[cC] //gm;
- # Remove C / C++ comments
- s#(\*/|/[/*])##g;
+ # Remove C / C++ comments
+ s#(\*/|/[/*])##g;
- return $_;
+ return $_;
}
sub clean_cruft_and_spaces {
- local $_ = shift or return q{};
+ local $_ = shift or return q{};
- tr/\t\r\n/ /;
+ tr/\t\r\n/ /;
- # this also removes quotes
- tr% A-Za-z.+,@:;0-9\(\)/-%%cd;
- tr/ //s;
+ # this also removes quotes
+ tr% A-Za-z.+,@:;0-9\(\)/-%%cd;
+ tr/ //s;
- return $_;
+ return $_;
}
sub help {
- print <<"EOF";
+ print <<"EOF";
Usage: $progname [options] filename [filename ...]
Valid options are:
- --help, -h Display this message
- --version, -v Display version and copyright info
- --no-conf, --noconf Don't read devscripts config files; must be
- the first option given
- --verbose Display the header of each file before its
- license information
- --skipped, -s Show skipped files
- --lines, -l Specify how many lines of the file header
- should be parsed for license information
- (Default: $def_lines)
- --tail Specify how many bytes to parse at end of file
- (Default: $def_tail)
- --check, -c Specify a pattern indicating which files should
- be checked
- (Default: '$default_check_regex')
- --machine, -m Display in a machine readable way (good for awk)
- --recursive, -r Add the contents of directories recursively
- --copyright Also display the file's copyright
- --ignore, -i Specify that files / directories matching the
- regular expression should be ignored when
- checking files
- (Default: '$default_ignore_regex')
+ --help, -h Display this message
+ --version, -v Display version and copyright info
+ --no-conf, --noconf Don't read devscripts config files; must be
+ the first option given
+ --verbose Display the header of each file before its
+ license information
+ --skipped, -s Show skipped files
+ --lines, -l Specify how many lines of the file header
+ should be parsed for license information
+ (Default: $def_lines)
+ --tail Specify how many bytes to parse at end of file
+ (Default: $def_tail)
+ --check, -c Specify a pattern indicating which files should
+ be checked
+ (Default: '$default_check_regex')
+ --machine, -m Display in a machine readable way (good for awk)
+ --recursive, -r Add the contents of directories recursively
+ --copyright Also display the file's copyright
+ --ignore, -i Specify that files / directories matching the
+ regular expression should be ignored when
+ checking files
+ (Default: '$default_ignore_regex')
Default settings modified by devscripts configuration files:
$modified_conf_msg
@@ -595,7 +595,7 @@ EOF
}
sub version {
- print <<"EOF";
+ print <<"EOF";
This is $progname, from the Debian devscripts package, version 2.16.2
Copyright (C) 2007, 2008 by Adam D. Barratt <adam\@adam-barratt.org.uk>; based
on a script of the same name from the KDE SDK by <dfaure\@kde.org>.
@@ -608,244 +608,246 @@ EOF
}
sub parselicense {
- my ($licensetext) = @_;
-
- my $gplver = "";
- my $extrainfo = "";
- my $license = "";
-
- if ($licensetext =~ /version ([^ ]+)(?: of the License)?,? or(?: \(at your option\))? version (\d(?:[.-]\d+)*)/) {
- $gplver = " (v$1 or v$2)";
- } elsif ($licensetext =~ /version ([^, ]+?)[.,]? (?:\(?only\)?.? )?(?:of the GNU (Affero )?(Lesser |Library )?General Public License )?(as )?published by the Free Software Foundation/i or
- $licensetext =~ /GNU (?:Affero )?(?:Lesser |Library )?General Public License (?:as )?published by the Free Software Foundation[;,] version ([^, ]+?)[.,]? /i) {
-
- $gplver = " (v$1)";
- } elsif ($licensetext =~ /GNU (?:Affero )?(?:Lesser |Library )?General Public License\s*(?:[(),GPL]+)\s*version (\d+(?:\.\d+)?)[ \.]/i) {
- $gplver = " (v$1)";
- } elsif ($licensetext =~ /either version ([^ ]+)(?: of the License)?, or (?:\(at your option\) )?any later version/) {
- $gplver = " (v$1 or later)";
- } elsif ($licensetext =~ /GPL\sas\spublished\sby\sthe\sFree\sSoftware\sFoundation,\sversion\s([\d.]+)/i ) {
- $gplver = " (v$1)";
- } elsif ($licensetext =~ /SPDX-License-Identifier:\s+GPL-([1-9])\.0[^+]/i ) {
- $gplver = " (v$1)";
- } elsif ($licensetext =~ /SPDX-License-Identifier:\s+GPL-([1-9])\.0\+/i ) {
- $gplver = " (v$1 or later)";
- } elsif ($licensetext =~ /SPDX-License-Identifier:\s+LGPL-([1-9])\.0\-or-later/i ) {
- $gplver = " (v$1 or later)";
- }
-
- if ($licensetext =~ /(?:675 Mass Ave|59 Temple Place|51 Franklin Steet|02139|02111-1307)/i) {
- $extrainfo = " (with incorrect FSF address)$extrainfo";
- }
-
- if ($licensetext =~ /permission (?:is (also granted|given))? to link (the code of )?this program with (any edition of )?(Qt|the Qt library)/i) {
- $extrainfo = " (with Qt exception)$extrainfo"
- }
-
- if ($licensetext =~ /As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice/) {
- $extrainfo = " (with Bison parser exception)$extrainfo";
- }
-
- # exclude blurb found in boost license text
- if ($licensetext =~ /(All changes made in this file will be lost|DO NOT (EDIT|delete this file)|Generated (automatically|by|from)|generated.*file)/i
- and $licensetext !~ /unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor/) {
- $license = "GENERATED FILE";
- }
-
- if ($licensetext =~ /(are made available|(is free software.? )?you can redistribute (it|them) and(?:\/|\s+)or modify (it|them)|is licensed) under the terms of (version [^ ]+ of )?the (GNU (Library |Lesser )General Public License|LGPL)/i) {
- $license = "LGPL$gplver$extrainfo $license";
- }
- # For Perl modules handled by Dist::Zilla
- elsif ($licensetext =~ /this is free software,? licensed under:? (?:the )?(?:GNU (?:Library |Lesser )General Public License|LGPL),? version ([\d\.]+)/i) {
- $license = "LGPL (v$1) $license";
- }
-
- if ($licensetext =~ /is free software.? you can redistribute (it|them) and(?:\/|\s+)or modify (it|them) under the terms of the (GNU Affero General Public License|AGPL)/i) {
- $license = "AGPL$gplver$extrainfo $license";
- }
-
- if ($licensetext =~ /(is free software.? )?you (can|may) redistribute (it|them) and(?:\/|\s+)or modify (it|them) under the terms of (?:version [^ ]+ (?:\(?only\)? )?of )?the GNU General Public License/i) {
- $license = "GPL$gplver$extrainfo $license";
- }
-
-
-
- if ($licensetext =~ /is distributed under the terms of the GNU General Public License,/
- and length $gplver) {
- $license = "GPL$gplver$extrainfo $license";
- }
-
- if ($licensetext =~ /SPDX-License-Identifier:\s+GPL/i
- and length $gplver) {
- $license = "GPL$gplver$extrainfo $license";
- }
-
- if ($licensetext =~ /SPDX-License-Identifier:\s+LGPL/i and length $gplver) {
- $license = "LGPL$gplver$extrainfo $license";
- }
-
- if ($licensetext =~ /SPDX-License-Identifier:\s+Zlib/i) {
- $license = "Zlib";
- }
-
- if ($licensetext =~ /SPDX-License-Identifier:\s+BSD-3-Clause/i) {
- $license = 'BSD-3-Clause';
- }
-
- if ($licensetext =~ /SPDX-License-Identifier:\s+MIT/i) {
- $license = 'MIT/X11 (BSD like)';
- }
-
- if ($licensetext =~ /(?:is|may be)\s(?:(?:distributed|used).*?terms|being\s+released).*?\b(L?GPL)\b/) {
- my $v = $gplver || ' (unversioned/unknown version)';
- $license = "$1$v $license";
- }
-
- if ($licensetext =~ /the rights to distribute and use this software as governed by the terms of the Lisp Lesser General Public License|\bLLGPL\b/ ) {
- $license = "LLGPL $license";
- }
-
- if ($licensetext =~ /This file is part of the .*Qt GUI Toolkit. This file may be distributed under the terms of the Q Public License as defined/) {
- $license = "QPL (part of Qt) $license";
- } elsif ($licensetext =~ /may (be distributed|redistribute it) under the terms of the Q Public License/) {
- $license = "QPL $license";
- }
-
- if ($licensetext =~ /opensource\.org\/licenses\/mit-license\.php/) {
- $license = "MIT/X11 (BSD like) $license";
- } elsif ($licensetext =~ /Permission is hereby granted, free of charge, to any person obtaining a copy of this software and(\/or)? associated documentation files \(the (Software|Materials)\), to deal in the (Software|Materials)/) {
- $license = "MIT/X11 (BSD like) $license";
- } elsif ($licensetext =~ /Permission is hereby granted, without written agreement and without license or royalty fees, to use, copy, modify, and distribute this software and its documentation for any purpose/) {
- $license = "MIT/X11 (BSD like) $license";
- }
-
- if ($licensetext =~ /Permission to use, copy, modify, and(\/or)? distribute this software for any purpose with or without fee is hereby granted, provided.*copyright notice.*permission notice.*all copies/) {
- $license = "ISC $license";
- }
-
- if ($licensetext =~ /THIS SOFTWARE IS PROVIDED .*AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY/) {
- if ($licensetext =~ /All advertising materials mentioning features or use of this software must display the following acknowledge?ment.*This product includes software developed by/i) {
- $license = "BSD (4 clause) $license";
- } elsif ($licensetext =~ /(The name(?:\(s\))? .*? may not|Neither the (names? .*?|authors?) nor the names of( (its|their|other|any))? contributors may) be used to endorse or promote products derived from this software/i) {
- $license = "BSD (3 clause) $license";
- } elsif ($licensetext =~ /Redistributions in binary form must reproduce the above copyright notice/i) {
- $license = "BSD (2 clause) $license";
- } else {
- $license = "BSD $license";
- }
- }
-
- if ($licensetext =~ /Mozilla Public License,? (?:(?:Version|v\.)\s+)?(\d+(?:\.\d+)?)/) {
- $license = "MPL (v$1) $license";
- }
- elsif ($licensetext =~ /Mozilla Public License,? \((?:Version|v\.) (\d+(?:\.\d+)?)\)/) {
- $license = "MPL (v$1) $license";
- }
-
- # match when either:
- # - the text *begins* with "The Artistic license v2.0" which is (hopefully) the actual artistic license v2.0 text.
- # - a license grant is found. i.e something like "this is free software, licensed under the artistic license v2.0"
- if ($licensetext =~ /(?:^\s*|(?:This is free software, licensed|Released|be used|use and modify this (?:module|software)) under (?:the terms of )?)[Tt]he Artistic License ([v\d.]*\d)/) {
- $license = "Artistic (v$1) $license";
- }
-
- if ($licensetext =~ /is free software under the Artistic [Ll]icense/) {
- $license = "Artistic $license";
- }
-
- if ($licensetext =~ /This program is free software; you can redistribute it and\/or modify it under the same terms as Perl itself/) {
- $license = "Perl $license";
- }
-
- if ($licensetext =~ /under the Apache License, Version ([^ ]+)/) {
- $license = "Apache (v$1) $license";
- }
-
- if ($licensetext =~ /(THE BEER-WARE LICENSE)/i) {
- $license = "Beerware $license";
- }
-
- if ($licensetext =~ /distributed under the terms of the FreeType project/i) {
- $license = "FreeType $license"; # aka FTL see http://www.freetype.org/license.html
- }
-
- if ($licensetext =~ /This source file is subject to version ([^ ]+) of the PHP license/) {
- $license = "PHP (v$1) $license";
- }
-
- if ($licensetext =~ /under the terms of the CeCILL /) {
- $license = "CeCILL $license";
- }
-
- if ($licensetext =~ /under the terms of the CeCILL-([^ ]+) /) {
- $license = "CeCILL-$1 $license";
- }
-
- if ($licensetext =~ /under the SGI Free Software License B/) {
- $license = "SGI Free Software License B $license";
- }
-
- if ($licensetext =~ /is in the public domain/i) {
- $license = "Public domain $license";
- }
-
- if ($licensetext =~ /terms of the Common Development and Distribution License(, Version ([^(]+))? \(the License\)/) {
- $license = "CDDL " . ($1 ? "(v$2) " : '') . $license;
- }
-
- if ($licensetext =~ /Microsoft Permissive License \(Ms-PL\)/) {
- $license = "Ms-PL $license";
- }
-
- if ($licensetext =~ /Licensed under the Academic Free License version ([\d.]+)/) {
- $license = $1 ? "AFL-$1" : "AFL";
- }
-
- if ($licensetext =~ /This program and the accompanying materials are made available under the terms of the Eclipse Public License v?([\d.]+)/) {
- $license = $1 ? "EPL-$1" : "EPL";
- }
-
- # quotes were removed by clean_comments function
- if ($licensetext =~ /Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license \(the Software\)/ or
- $licensetext =~ /Boost Software License([ ,-]+Version ([^ ]+)?(\.))/i) {
- $license = "BSL " . ($1 ? "(v$2) " : '') . $license;
- }
-
- if ($licensetext =~ /PYTHON SOFTWARE FOUNDATION LICENSE (VERSION ([^ ]+))/i) {
- $license = "PSF " . ($1 ? "(v$2) " : '') . $license;
- }
-
- if ($licensetext =~ /The origin of this software must not be misrepresented.*Altered source versions must be plainly marked as such.*This notice may not be removed or altered from any source distribution/ or
- $licensetext =~ /see copyright notice in zlib\.h/) {
- $license = "zlib/libpng $license";
- } elsif ($licensetext =~ /This code is released under the libpng license/) {
- $license = "libpng $license";
- }
-
- if ($licensetext =~ /Do What The Fuck You Want To Public License, Version ([^, ]+)/i) {
- $license = "WTFPL (v$1) $license";
- }
-
- if ($licensetext =~ /Do what The Fuck You Want To Public License/i) {
- $license = "WTFPL $license";
- }
-
- if ($licensetext =~ /(License WTFPL|Under (the|a) WTFPL)/i) {
- $license = "WTFPL $license";
- }
-
- $license = "UNKNOWN" if (!length($license));
-
- # Remove trailing spaces.
- $license =~ s/\s+$//;
-
- return $license;
+ my ($licensetext) = @_;
+
+ my $gplver = "";
+ my $extrainfo = "";
+ my $license = "";
+
+ if ($licensetext =~ /version ([^ ]+)(?: of the License)?,? or(?: \(at your option\))? version (\d(?:[.-]\d+)*)/) {
+ $gplver = " (v$1 or v$2)";
+ } elsif ($licensetext =~ /version ([^, ]+?)[.,]? (?:\(?only\)?.? )?(?:of the GNU (Affero )?(Lesser |Library )?General Public License )?(as )?published by the Free Software Foundation/i or
+ $licensetext =~ /GNU (?:Affero )?(?:Lesser |Library )?General Public License (?:as )?published by the Free Software Foundation[;,] version ([^, ]+?)[.,]? /i) {
+
+ $gplver = " (v$1)";
+ } elsif ($licensetext =~ /GNU (?:Affero )?(?:Lesser |Library )?General Public License\s*(?:[(),GPL]+)\s*version (\d+(?:\.\d+)?)[ \.]/i) {
+ $gplver = " (v$1)";
+ } elsif ($licensetext =~ /either version ([^ ]+)(?: of the License)?, or (?:\(at your option\) )?any later version/) {
+ $gplver = " (v$1 or later)";
+ } elsif ($licensetext =~ /GPL\sas\spublished\sby\sthe\sFree\sSoftware\sFoundation,\sversion\s([\d.]+)/i ) {
+ $gplver = " (v$1)";
+ } elsif ($licensetext =~ /SPDX-License-Identifier:\s+GPL-([1-9])\.0[^+]/i ) {
+ $gplver = " (v$1)";
+ } elsif ($licensetext =~ /SPDX-License-Identifier:\s+GPL-([1-9])\.0\+/i ) {
+ $gplver = " (v$1 or later)";
+ } elsif ($licensetext =~ /SPDX-License-Identifier:\s+LGPL-([1-9])\.0\-or-later/i ) {
+ $gplver = " (v$1 or later)";
+ }
+
+ if ($licensetext =~ /(?:675 Mass Ave|59 Temple Place|51 Franklin Steet|02139|02111-1307)/i) {
+ $extrainfo = " (with incorrect FSF address)$extrainfo";
+ }
+
+ if ($licensetext =~ /permission (?:is (also granted|given))? to link (the code of )?this program with (any edition of )?(Qt|the Qt library)/i) {
+ $extrainfo = " (with Qt exception)$extrainfo"
+ }
+
+ if ($licensetext =~ /As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice/) {
+ $extrainfo = " (with Bison parser exception)$extrainfo";
+ }
+
+ # exclude blurb found in boost license text
+ if ($licensetext =~ /(All changes made in this file will be lost|DO NOT (EDIT|delete this file)|Generated (automatically|by|from)|generated.*file)/i
+ and $licensetext !~ /unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor/) {
+ $license = "GENERATED FILE";
+ }
+
+ if ($licensetext =~ /(are made available|(is free software.? )?you can redistribute (it|them) and(?:\/|\s+)or modify (it|them)|is licensed) under the terms of (version [^ ]+ of )?the (GNU (Library |Lesser )General Public License|LGPL)/i) {
+ $license = "LGPL$gplver$extrainfo $license";
+ }
+ # For Perl modules handled by Dist::Zilla
+ elsif ($licensetext =~ /this is free software,? licensed under:? (?:the )?(?:GNU (?:Library |Lesser )General Public License|LGPL),? version ([\d\.]+)/i) {
+ $license = "LGPL (v$1) $license";
+ }
+
+ if ($licensetext =~ /is free software.? you can redistribute (it|them) and(?:\/|\s+)or modify (it|them) under the terms of the (GNU Affero General Public License|AGPL)/i) {
+ $license = "AGPL$gplver$extrainfo $license";
+ }
+
+ if ($licensetext =~ /(is free software.? )?you (can|may) redistribute (it|them) and(?:\/|\s+)or modify (it|them) under the terms of (?:version [^ ]+ (?:\(?only\)? )?of )?the GNU General Public License/i) {
+ $license = "GPL$gplver$extrainfo $license";
+ }
+
+
+
+ if ($licensetext =~ /is distributed under the terms of the GNU General Public License,/
+ and length $gplver) {
+ $license = "GPL$gplver$extrainfo $license";
+ }
+
+ if ($licensetext =~ /SPDX-License-Identifier:\s+GPL/i
+ and length $gplver) {
+ $license = "GPL$gplver$extrainfo $license";
+ }
+
+ if ($licensetext =~ /SPDX-License-Identifier:\s+LGPL/i and length $gplver) {
+ $license = "LGPL$gplver$extrainfo $license";
+ }
+
+ if ($licensetext =~ /SPDX-License-Identifier:\s+Zlib/i) {
+ $license = "Zlib";
+ }
+
+ if ($licensetext =~ /SPDX-License-Identifier:\s+BSD-3-Clause/i) {
+ $license = 'BSD-3-Clause';
+ }
+
+
+ if ($licensetext =~ /SPDX-License-Identifier:\s+MIT/i) {
+ $license = 'MIT/X11 (BSD like)';
+ }
+
+ if ($licensetext =~ /(?:is|may be)\s(?:(?:distributed|used).*?terms|being\s+released).*?\b(L?GPL)\b/) {
+ my $v = $gplver || ' (unversioned/unknown version)';
+ $license = "$1$v $license";
+ }
+
+ if ($licensetext =~ /the rights to distribute and use this software as governed by the terms of the Lisp Lesser General Public License|\bLLGPL\b/ ) {
+ $license = "LLGPL $license";
+ }
+
+ if ($licensetext =~ /This file is part of the .*Qt GUI Toolkit. This file may be distributed under the terms of the Q Public License as defined/) {
+ $license = "QPL (part of Qt) $license";
+ } elsif ($licensetext =~ /may (be distributed|redistribute it) under the terms of the Q Public License/) {
+ $license = "QPL $license";
+ }
+
+ if ($licensetext =~ /opensource\.org\/licenses\/mit-license\.php/) {
+ $license = "MIT/X11 (BSD like) $license";
+ } elsif ($licensetext =~ /Permission is hereby granted, free of charge, to any person obtaining a copy of this software and(\/or)? associated documentation files \(the (Software|Materials)\), to deal in the (Software|Materials)/) {
+ $license = "MIT/X11 (BSD like) $license";
+ } elsif ($licensetext =~ /Permission is hereby granted, without written agreement and without license or royalty fees, to use, copy, modify, and distribute this software and its documentation for any purpose/) {
+ $license = "MIT/X11 (BSD like) $license";
+ }
+
+ if ($licensetext =~ /Permission to use, copy, modify, and(\/or)? distribute this software for any purpose with or without fee is hereby granted, provided.*copyright notice.*permission notice.*all copies/) {
+ $license = "ISC $license";
+ }
+
+ if ($licensetext =~ /THIS SOFTWARE IS PROVIDED .*AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY/) {
+ if ($licensetext =~ /All advertising materials mentioning features or use of this software must display the following acknowledge?ment.*This product includes software developed by/i) {
+ $license = "BSD (4 clause) $license";
+ } elsif ($licensetext =~ /(The name(?:\(s\))? .*? may not|Neither the (names? .*?|authors?) nor the names of( (its|their|other|any))? contributors may) be used to endorse or promote products derived from this software/i) {
+ $license = "BSD (3 clause) $license";
+ } elsif ($licensetext =~ /Redistributions in binary form must reproduce the above copyright notice/i) {
+ $license = "BSD (2 clause) $license";
+ } else {
+ $license = "BSD $license";
+ }
+ }
+
+ if ($licensetext =~ /Mozilla Public License,? (?:(?:Version|v\.)\s+)?(\d+(?:\.\d+)?)/) {
+ $license = "MPL (v$1) $license";
+ }
+ elsif ($licensetext =~ /Mozilla Public License,? \((?:Version|v\.) (\d+(?:\.\d+)?)\)/) {
+ $license = "MPL (v$1) $license";
+ }
+
+ # match when either:
+ # - the text *begins* with "The Artistic license v2.0" which is (hopefully) the actual artistic license v2.0 text.
+ # - a license grant is found. i.e something like "this is free software, licensed under the artistic license v2.0"
+ if ($licensetext =~ /(?:^\s*|(?:This is free software, licensed|Released|be used|use and modify this (?:module|software)) under (?:the terms of )?)[Tt]he Artistic License ([v\d.]*\d)/) {
+ $license = "Artistic (v$1) $license";
+ }
+
+ if ($licensetext =~ /is free software under the Artistic [Ll]icense/) {
+ $license = "Artistic $license";
+ }
+
+ if ($licensetext =~ /This program is free software; you can redistribute it and\/or modify it under the same terms as Perl itself/) {
+ $license = "Perl $license";
+ }
+
+ if ($licensetext =~ /under the Apache License, Version ([^ ]+)/) {
+ $license = "Apache (v$1) $license";
+ }
+
+ if ($licensetext =~ /(THE BEER-WARE LICENSE)/i) {
+ $license = "Beerware $license";
+ }
+
+ if ($licensetext =~ /distributed under the terms of the FreeType project/i) {
+ $license = "FreeType $license"; # aka FTL see http://www.freetype.org/license.html
+ }
+
+ if ($licensetext =~ /This source file is subject to version ([^ ]+) of the PHP license/) {
+ $license = "PHP (v$1) $license";
+ }
+
+ if ($licensetext =~ /under the terms of the CeCILL /) {
+ $license = "CeCILL $license";
+ }
+
+ if ($licensetext =~ /under the terms of the CeCILL-([^ ]+) /) {
+ $license = "CeCILL-$1 $license";
+ }
+
+ if ($licensetext =~ /under the SGI Free Software License B/) {
+ $license = "SGI Free Software License B $license";
+ }
+
+ if ($licensetext =~ /is in the public domain/i) {
+ $license = "Public domain $license";
+ }
+
+ if ($licensetext =~ /terms of the Common Development and Distribution License(, Version ([^(]+))? \(the License\)/) {
+ $license = "CDDL " . ($1 ? "(v$2) " : '') . $license;
+ }
+
+ if ($licensetext =~ /Microsoft Permissive License \(Ms-PL\)/) {
+ $license = "Ms-PL $license";
+ }
+
+ if ($licensetext =~ /Licensed under the Academic Free License version ([\d.]+)/) {
+ $license = $1 ? "AFL-$1" : "AFL";
+ }
+
+ if ($licensetext =~ /This program and the accompanying materials are made available under the terms of the Eclipse Public License v?([\d.]+)/) {
+ $license = $1 ? "EPL-$1" : "EPL";
+ }
+
+ # quotes were removed by clean_comments function
+ if ($licensetext =~ /Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license \(the Software\)/ or
+ $licensetext =~ /Boost Software License([ ,-]+Version ([^ ]+)?(\.))/i) {
+ $license = "BSL " . ($1 ? "(v$2) " : '') . $license;
+ }
+
+ if ($licensetext =~ /PYTHON SOFTWARE FOUNDATION LICENSE (VERSION ([^ ]+))/i) {
+ $license = "PSF " . ($1 ? "(v$2) " : '') . $license;
+ }
+
+ if ($licensetext =~ /The origin of this software must not be misrepresented.*Altered source versions must be plainly marked as such.*This notice may not be removed or altered from any source distribution/ or
+ $licensetext =~ /see copyright notice in zlib\.h/) {
+ $license = "zlib/libpng $license";
+ } elsif ($licensetext =~ /This code is released under the libpng license/) {
+ $license = "libpng $license";
+ }
+
+ if ($licensetext =~ /Do What The Fuck You Want To Public License, Version ([^, ]+)/i) {
+ $license = "WTFPL (v$1) $license";
+ }
+
+ if ($licensetext =~ /Do what The Fuck You Want To Public License/i) {
+ $license = "WTFPL $license";
+ }
+
+ if ($licensetext =~ /(License WTFPL|Under (the|a) WTFPL)/i) {
+ $license = "WTFPL $license";
+ }
+
+ $license = "UNKNOWN" if (!length($license));
+
+ # Remove trailing spaces.
+ $license =~ s/\s+$//;
+
+ return $license;
+>>>>>>> tools: remake the indentation of licencecheck.pl.
}
sub fatal {
- my ($pack,$file,$line);
- ($pack,$file,$line) = caller();
- (my $msg = "$progname: fatal error at line $line:\n@_\n") =~ tr/\0//d;
- $msg =~ s/\n\n$/\n/;
- die $msg;
+ my ($pack,$file,$line);
+ ($pack,$file,$line) = caller();
+ (my $msg = "$progname: fatal error at line $line:\n@_\n") =~ tr/\0//d;
+ $msg =~ s/\n\n$/\n/;
+ die $msg;
}