Commit | Line | Data |
32c45916 |
1 | #!/usr/bin/env perl |
afaa1345 |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
6 | use CPAN::FindDependencies qw( finddeps ); |
7 | use CPAN::Mini; |
8 | use List::AllUtils qw( any ); |
9 | use Module::CoreList; |
10 | use version; |
11 | |
12 | |
4125a6fe |
13 | { |
14 | package CPAN::FindDependencies; |
15 | |
e2caed9a |
16 | use LWP::Simple qw( get ); |
17 | |
4125a6fe |
18 | no warnings 'redefine'; |
19 | # The real function assumes that if you provide an argument it's a |
20 | # local file, not a URI. |
21 | sub _get02packages { |
22 | my $file = shift; |
23 | |
24 | get($file) || |
25 | die(__PACKAGE__.": Couldn't fetch 02packages index file\n"); |
26 | } |
27 | } |
28 | |
29 | |
afaa1345 |
30 | sub main { |
4125a6fe |
31 | # If this isn't fetched fresh each time, then CPAN::Mini gets |
32 | # confused (maybe it's a timestamp issue because of git?) |
33 | unlink './moosepan/modules/02packages.details.txt.gz' |
34 | or die $!; |
35 | |
36 | my @deps |
37 | = grep { is_real_dep($_) } |
38 | finddeps( 'Moose', |
39 | '02packages' => |
40 | 'http://mirrors.kernel.org/cpan/modules/02packages.details.txt.gz' |
41 | ); |
afaa1345 |
42 | |
43 | my @distros = map { $_->distribution() } @deps; |
44 | |
4125a6fe |
45 | my $filter_sub = sub { |
46 | return !any { $_[0] eq $_ } @distros; |
47 | }; |
afaa1345 |
48 | |
49 | CPAN::Mini->update_mirror( |
4125a6fe |
50 | remote => 'http://mirrors.kernel.org/cpan/', |
79ec5c5e |
51 | local => './moosepan', |
afaa1345 |
52 | path_filters => $filter_sub, |
53 | trace => 1, |
54 | skip_perl => 1, |
55 | ); |
56 | } |
57 | |
58 | my %skip_deps = map { $_ => 1 } qw( |
59 | ExtUtils::MakeMaker |
60 | Archive::Tar |
61 | Compress::Zlib |
62 | Compress::Raw::Bzip2 |
63 | Compress::Raw::Zlib |
64 | IO::Zlib |
65 | Package::Constants |
66 | ExtUtils::CBuilder |
67 | Pod::Simple |
68 | Pod::Escapes |
69 | Task::Weaken |
70 | Module::Build |
71 | ); |
72 | |
73 | my $min_perl = version->new('5.8.5'); |
74 | sub is_real_dep { |
75 | my $dep = shift; |
76 | |
77 | # Include this just to make sure the user gets a version with |
78 | # weaken available. |
79 | return 1 if $dep->name eq 'Scalar::Util'; |
80 | |
81 | return if $skip_deps{ $dep->name() }; |
82 | |
83 | my $perl = Module::CoreList->first_release( $dep->name() ); |
84 | |
85 | return if defined $perl && version->new($perl) le $min_perl; |
86 | |
87 | return 1; |
88 | } |
89 | |
90 | main(); |