Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/usr/bin/perl -w | 1 #!/usr/bin/perl -w |
| 2 # This script was originally based on the script of the same name from | 2 # This script was originally based on the script of the same name from |
| 3 # the KDE SDK (by dfaure@kde.org) | 3 # the KDE SDK (by dfaure@kde.org) |
| 4 # | 4 # |
| 5 # This version is | 5 # This version is |
| 6 # Copyright (C) 2007, 2008 Adam D. Barratt | 6 # Copyright (C) 2007, 2008 Adam D. Barratt |
| 7 # Copyright (C) 2012 Francesco Poli | 7 # Copyright (C) 2012 Francesco Poli |
| 8 # | 8 # |
| 9 # This program is free software; you can redistribute it and/or modify | 9 # This program is free software; you can redistribute it and/or modify |
| 10 # it under the terms of the GNU General Public License as published by | 10 # it under the terms of the GNU General Public License as published by |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 129 =head1 AUTHOR | 129 =head1 AUTHOR |
| 130 | 130 |
| 131 Adam D. Barratt <adam@adam-barratt.org.uk> | 131 Adam D. Barratt <adam@adam-barratt.org.uk> |
| 132 | 132 |
| 133 =cut | 133 =cut |
| 134 | 134 |
| 135 use strict; | 135 use strict; |
| 136 use warnings; | 136 use warnings; |
| 137 use Getopt::Long qw(:config gnu_getopt); | 137 use Getopt::Long qw(:config gnu_getopt); |
| 138 use File::Basename; | 138 use File::Basename; |
| 139 use Tie::File; | |
| 140 use Fcntl 'O_RDONLY'; | |
| 139 | 141 |
| 140 sub fatal($); | 142 sub fatal($); |
| 141 sub parse_copyright($); | 143 sub parse_copyright($); |
| 142 sub parselicense($); | 144 sub parselicense($); |
| 145 sub remove_comments($); | |
| 143 | 146 |
| 144 my $progname = basename($0); | 147 my $progname = basename($0); |
| 145 | 148 |
| 146 # From dpkg-source | 149 # From dpkg-source |
| 147 my $default_ignore_regex = ' | 150 my $default_ignore_regex = ' |
| 148 # Ignore general backup files | 151 # Ignore general backup files |
| 149 (?:^|/).*~$| | 152 (?:^|/).*~$| |
| 150 # Ignore emacs recovery files | 153 # Ignore emacs recovery files |
| 151 (?:^|/)\.#.*$| | 154 (?:^|/)\.#.*$| |
| 152 # Ignore vi swap files | 155 # Ignore vi swap files |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 277 } | 280 } |
| 278 close FIND; | 281 close FIND; |
| 279 } else { | 282 } else { |
| 280 next unless ($files_count == 1) or $file =~ m%$opt_check_regex%; | 283 next unless ($files_count == 1) or $file =~ m%$opt_check_regex%; |
| 281 push @files, $file unless $file =~ m%$opt_ignore_regex%; | 284 push @files, $file unless $file =~ m%$opt_ignore_regex%; |
| 282 } | 285 } |
| 283 } | 286 } |
| 284 | 287 |
| 285 while (@files) { | 288 while (@files) { |
| 286 my $file = shift @files; | 289 my $file = shift @files; |
| 287 my $content = ''; | 290 my $header = ''; |
|
Paweł Hajdan Jr.
2013/06/06 18:16:03
Please remove these modifications from this CL.
Nils Barth (inactive)
2013/06/07 09:10:13
Got it, handled in:
Issue 16426003: Add footer lic
| |
| 288 my $copyright_match; | 291 my $copyright_match; |
| 289 my $copyright = ''; | 292 my $copyright = ''; |
| 290 my $license = ''; | 293 my $license = ''; |
| 291 my %copyrights; | 294 my %copyrights; |
| 292 | 295 |
| 293 open (F, "<$file") or die "Unable to access $file\n"; | 296 open (F, "<$file") or die "Unable to access $file\n"; |
| 294 while (<F>) { | 297 while (<F>) { |
| 295 last if ($. > $opt_lines); | 298 last if ($. > $opt_lines); |
| 296 $content .= $_; | 299 $header .= $_; |
| 297 } | 300 } |
| 298 close(F); | 301 close(F); |
| 299 | 302 |
| 300 $copyright = join(" / ", values %copyrights); | 303 $copyright = join(" / ", values %copyrights); |
| 301 | 304 |
| 302 print qq(----- $file header -----\n$content----- end header -----\n\n) | 305 print qq(----- $file header -----\n$header----- end header -----\n\n) |
| 303 if $opt_verbose; | 306 if $opt_verbose; |
| 304 | 307 |
| 305 # Remove Fortran comments | 308 remove_comments($header); |
| 306 $content =~ s/^[cC] //gm; | 309 $license = parselicense($header); |
| 307 $content =~ tr/\t\r\n/ /; | |
| 308 # Remove C / C++ comments | |
| 309 $content =~ s#(\*/|/[/*])##g; | |
| 310 $content =~ tr% A-Za-z.,@;0-9\(\)/-%%cd; | |
| 311 $content =~ tr/ //s; | |
| 312 | 310 |
| 313 $license = parselicense($content); | 311 # If no license in header, check footer (slow, because read file backwards) |
| 312 # Need for instance for Perl files, which often use the footer | |
| 313 if ($license eq "UNKNOWN") { | |
| 314 my $footer = ''; | |
| 315 tie(my @file_lines, "Tie::File", $file, autochomp => 0, mode => O_RDONLY ) or die("Unable to access $file\n"); | |
| 316 # Avoid indexing error if header is entire file | |
| 317 if ($#file_lines >= $opt_lines) { | |
| 318 foreach (@file_lines[-$opt_lines .. -1]) { | |
| 319 $footer .= $_; | |
| 320 } | |
| 321 } | |
| 322 print qq(----- $file footer -----\n$header----- end footer -----\n\n) | |
| 323 if $opt_verbose; | |
| 324 remove_comments($footer); | |
| 325 $license = parselicense($footer); | |
| 326 } | |
| 327 | |
| 314 if ($opt_machine) { | 328 if ($opt_machine) { |
| 315 print "$file\t$license"; | 329 print "$file\t$license"; |
| 316 print "\t" . ($copyright or "*No copyright*") if $opt_copyright; | 330 print "\t" . ($copyright or "*No copyright*") if $opt_copyright; |
| 317 print "\n"; | 331 print "\n"; |
| 318 } else { | 332 } else { |
| 319 print "$file: "; | 333 print "$file: "; |
| 320 print "*No copyright* " unless $copyright; | 334 print "*No copyright* " unless $copyright; |
| 321 print $license . "\n"; | 335 print $license . "\n"; |
| 322 print " [Copyright: " . $copyright . "]\n" | 336 print " [Copyright: " . $copyright . "]\n" |
| 323 if $copyright and $opt_copyright; | 337 if $copyright and $opt_copyright; |
| 324 print "\n" if $opt_copyright; | 338 print "\n" if $opt_copyright; |
| 325 } | 339 } |
| 326 } | 340 } |
| 327 | 341 |
| 342 sub remove_comments($) { | |
| 343 $_ = $_[0]; | |
| 344 # Remove Fortran comments | |
| 345 s/^[cC] //gm; | |
| 346 tr/\t\r\n/ /; | |
| 347 # Remove C / C++ comments | |
| 348 s#(\*/|/[/*])##g; | |
| 349 tr% A-Za-z.,@;0-9\(\)/-%%cd; | |
| 350 tr/ //s; | |
| 351 $_[0] = $_; | |
| 352 } | |
| 353 | |
| 328 sub parse_copyright($) { | 354 sub parse_copyright($) { |
| 329 my $copyright = ''; | 355 my $copyright = ''; |
| 330 my $match; | 356 my $match; |
| 331 | 357 |
| 332 my $copyright_indicator_regex = ' | 358 my $copyright_indicator_regex = ' |
| 333 (?:copyright # The full word | 359 (?:copyright # The full word |
| 334 |copr\. # Legally-valid abbreviation | 360 |copr\. # Legally-valid abbreviation |
| 335 |\x{00a9} # Unicode character COPYRIGHT SIGN | 361 |\x{00a9} # Unicode character COPYRIGHT SIGN |
| 336 |\xc2\xa9 # Unicode copyright sign encoded in iso8859 | 362 |\xc2\xa9 # Unicode copyright sign encoded in iso8859 |
| 337 |\(c\) # Legally-null representation of sign | 363 |\(c\) # Legally-null representation of sign |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 491 } | 517 } |
| 492 | 518 |
| 493 if ($licensetext =~ /Released under the terms of the Artistic License ([^ ]+ )/) { | 519 if ($licensetext =~ /Released under the terms of the Artistic License ([^ ]+ )/) { |
| 494 $license = "Artistic (v$1) $license"; | 520 $license = "Artistic (v$1) $license"; |
| 495 } | 521 } |
| 496 | 522 |
| 497 if ($licensetext =~ /is free software under the Artistic [Ll]icense/) { | 523 if ($licensetext =~ /is free software under the Artistic [Ll]icense/) { |
| 498 $license = "Artistic $license"; | 524 $license = "Artistic $license"; |
| 499 } | 525 } |
| 500 | 526 |
| 501 if ($licensetext =~ /This program is free software; you can redistribute it and\/or modify it under the same terms as Perl itself/) { | 527 if ($licensetext =~ /This (program|library) is free software; you can redist ribute it and\/or modify it under the same terms as Perl itself/) { |
| 502 $license = "Perl $license"; | 528 $license = "Perl $license"; |
| 503 } | 529 } |
| 504 | 530 |
| 505 if ($licensetext =~ /under the terms of the Apache ([^ ]+) License OR versio n 2 of the GNU/) { | 531 if ($licensetext =~ /under the terms of the Apache ([^ ]+) License OR versio n 2 of the GNU/) { |
| 506 $license = "Apache (v$1) GPL (v2) $license"; | 532 $license = "Apache (v$1) GPL (v2) $license"; |
| 507 } elsif ($licensetext =~ /under the Apache License, Version ([^ ]+)/) { | 533 } elsif ($licensetext =~ /under the Apache License, Version ([^ ]+)/) { |
| 508 $license = "Apache (v$1) $license"; | 534 $license = "Apache (v$1) $license"; |
| 509 } | 535 } |
| 510 | 536 |
| 511 if ($licensetext =~ /(THE BEER-WARE LICENSE)/i) { | 537 if ($licensetext =~ /(THE BEER-WARE LICENSE)/i) { |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 591 return $license; | 617 return $license; |
| 592 } | 618 } |
| 593 | 619 |
| 594 sub fatal($) { | 620 sub fatal($) { |
| 595 my ($pack,$file,$line); | 621 my ($pack,$file,$line); |
| 596 ($pack,$file,$line) = caller(); | 622 ($pack,$file,$line) = caller(); |
| 597 (my $msg = "$progname: fatal error at line $line:\n@_\n") =~ tr/\0//d; | 623 (my $msg = "$progname: fatal error at line $line:\n@_\n") =~ tr/\0//d; |
| 598 $msg =~ s/\n\n$/\n/; | 624 $msg =~ s/\n\n$/\n/; |
| 599 die $msg; | 625 die $msg; |
| 600 } | 626 } |
| OLD | NEW |