#!/usr/bin/perl ## DOC: cran2deb copy_find path ## DOC: a tool for finding (heuristically) some copyright notices. ## DOC: use warnings; use strict; use File::Find qw(find); my $keywords='\(C\)|©|copyright|warranty|redistribution|modification|patent|trademark|licen[cs]e|permission'; my @files; find(sub {if (-f $File::Find::name && $File::Find::name !~ /debian/) {push @files,$File::Find::name} },@ARGV); my @missing_copyright; my %copyright_notices; for my $file (@files) { my $fh = IO::File->new($file,'r') or die "Unable to open '$file' for reading: $!"; my $has_copyright = 0; my $lines=0; my $chars=0; while (<$fh>) { $chars+=length($_); $lines++; chomp; if (/\Q$keywords\E/) { $copyright_notices{$_} = $_; $has_copyright = 1; } } if (not $has_copyright) { push @missing_copyright,[$file,$lines,$chars]; } } print "Suspect copyright notices:\n"; for my $notice (keys %copyright_notices) { print ' '.$copyright_notices{$notice}."\n"; } print "Files without *suspect* copyright notices:\n"; for my $fr (@missing_copyright) { print ' '.$fr->[0]."\n"; print ' '.call_file($fr->[0])."\n"; print ' chars:'.$fr->[1]."\n"; print ' lines:'.$fr->[2]."\n"; } sub call_file{ my ($file) = @_; my $file_fh; my $result; open($file_fh,"-|",'file',$file); local $\; $result = <$file_fh>; chomp $result; return $result; }