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