1#!/usr/bin/perl 2 3# Copyright (C) 2016 Martin Thomas <mtdev@hamtam.de> 4# LGPL version 2 or later. 5 6use strict; 7use warnings; 8use IO::Dir; 9use File::Find qw(find); 10use Encode::Guess; 11 12my ($dir, $directory, $f, $w, $tmp); 13my (@files, @dirs, $file, $filename); 14my $header; 15my $files; 16my $encoding; 17my @copyright; 18my @copyrightout; 19my @uniqcpr; 20my @output; 21my $i; 22 23$encoding = ":encoding(UTF-8)"; 24$encoding = ""; 25 26$directory="./"; 27 28$header = "Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/\n"; 29$header .= "Upstream-Name: uclibc-ng\n"; 30$header .= 'Upstream-Contact: Waldemar Brodkorb <wbx@uclibc-ng.org>'."\n"; 31$header .= "Source: git://uclibc-ng.org/git/uclibc-ng\n\n"; 32 33# my $emailregex='\b[[:alnum:]._%+-]+@[[:alnum:].-]+.[[:alpha:]]{2,6}\b'; 34 35sub list_dirs { 36 my @dirs = @_; 37 my @files; 38 find({ wanted => sub { push @files, $_ } , no_chdir => 1 }, @dirs); 39 return @files; 40} 41 42@files=list_dirs($directory); 43 44foreach $file (@files) { 45 if ( -f $file ){ 46# $encoding = guess_encoding($file); 47 open(my $fh, "< $encoding", $file) 48 or die "Could not open file '$file' $!"; 49 while (my $row = <$fh>) { 50 chomp $row; 51 if ($row =~ m/[Cc]opyright / ) 52 { 53 $row =~ s/^[\s\/\*#!;.\"\\]*//; #remove leading 54 $row =~ s/\s+$//; #remove trailing 55 push @copyright, { file => $file, raw => $row}; 56 last; 57 } 58 } 59 close $fh 60 } 61} 62 63#sort raw 64@copyrightout = sort { $a->{raw} cmp $b->{raw} } @copyright; 65 66$tmp=""; 67$i=-1; 68foreach (@copyrightout) { 69 if ( $tmp eq $_->{'raw'} ) 70 { 71 $output[$i]{"files"} .= "\n"." $_->{'file'}"; 72 } 73 else 74 { 75 ++$i; 76 $output[$i]{"header"} .= "Copyright: $_->{'raw'}\n"; 77 $output[$i]{"header"} .= "License: GNU Lesser General Public License 2.1\n"; 78 $output[$i]{"files"} .= "Files: ".$_->{'file'}; 79 } 80 $tmp=$_->{'raw'}; 81} 82 83print "$header"; 84$i=0; 85foreach (@output) { 86 print "$output[$i]->{'files'}\n"; 87 print "$output[$i]->{'header'}\n"; 88 ++$i; 89} 90