sql for granting web_usr roles to breedbase db. Useful when the roles get messed...
[sgn-devtools.git] / build / find_reqs_from_debs.pl
blob42d12f6dcd71d69bcbb5a4c31790598866ba2cc2
1 #!/usr/bin/perl
2 use strict;
3 use Data::Dumper;
4 use File::Find;
6 # find all the packages in the given debian control output
7 my @all_packages;
8 while(<>) {
9 if(/^\s*Depends:/) {
10 chomp;
11 my @p = map /^\s*(\S+)/, split /\s*,\s*/,$_;
12 $p[0] =~ s/^\s*Depends:\s*//;
14 push @all_packages,
15 grep /perl/, @p;
19 my @all_mods;
20 foreach my $p (@all_packages) {
21 warn "searching $p\n";
22 my @pkg_files = `dpkg -L $p`;
23 unless( @pkg_files ) {
24 @pkg_files = `apt-file show $p | cut -d : -f 2`;
26 @pkg_files or die "cannot list files from package $p\n";
27 my @mods =
28 map { s!/!::!g; $_ }
29 map {
30 #my (undef,$f) = split /: /,$_,2;
31 chomp;
32 m!/[^/]*perl[^/]*/(\S+)\.pm$!;
34 @pkg_files;
36 warn Dumper \@mods if @mods;
37 push @all_mods,@mods;
43 my @kinds = ( { name => 'build_requires', dir => ['t'] },
44 { name => 'requires', dir => ['lib','scripts'] },
47 #@all_mods = @all_mods[0..200];
48 foreach my $mod (@all_mods) {
49 warn "searching for uses of $mod\n";
50 my @needs;
51 for my $k (@kinds) {
52 $k->{perlfiles} ||= do {
53 my @perlfiles;
54 find( sub {
55 return unless -x || /\.(pm|t|pl)$/;
56 push @perlfiles, $File::Find::name;
59 ) for grep -d, @{$k->{dir}};
60 \@perlfiles
63 next unless @{$k->{perlfiles}};
64 unless(system qw/grep -qP/, qq@(use|require)\\s+["']?$mod@, @{$k->{perlfiles}}) {
65 warn " adding to $k->{name}\n";
66 $k->{deps}{$mod} = 1;
69 #print "$mod: ".join(' ',@needs)."\n";
72 foreach (@kinds) {
73 print "$_->{name} => {\n";
74 for (sort {lc($a) cmp lc($b)} keys %{$_->{deps}}) {
75 print " '$_' => 0,\n"
77 print "},\n";