diff options
Diffstat (limited to 'perl-extras/bin/build_all_modules.pl')
-rw-r--r-- | perl-extras/bin/build_all_modules.pl | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/perl-extras/bin/build_all_modules.pl b/perl-extras/bin/build_all_modules.pl new file mode 100644 index 000000000..eb57e811b --- /dev/null +++ b/perl-extras/bin/build_all_modules.pl @@ -0,0 +1,133 @@ +#!/usr/bin/env perl + +use strict; +use warnings; + +use IPC::Run3; +use LWP::Simple; +use YAML; +use File::Slurp; +use Path::Class; + +my $cpan_meta_db_base = "http://cpanmetadb.appspot.com/v1.0/package"; +my $cpan_mirror_base = "http://search.cpan.org/CPAN/authors/id"; +my $root_dir = file(__FILE__)->dir->parent->absolute->stringify; +my $dist_list = "$root_dir/install_order.txt"; +my $url_list = "$root_dir/urls.txt"; +my $dist_dir = "$root_dir/distributions"; +my $fake_mirror = "$root_dir/fake_mirror"; +my $local_lib = "$root_dir/../local-lib5"; +my $cpanm_cmd = + "perl $root_dir/bin/cpanm --mirror $fake_mirror --mirror-only -L $local_lib"; + +my @distributions = map { s{\s+$}{}; $_; } read_file($dist_list); + +foreach my $dist (@distributions) { + print " --- installing $dist ---\n"; + + my $out = ''; + my $cmd = "$cpanm_cmd $dist_dir/$dist"; + + print " running '$cmd'\n"; + + run3( $cmd, undef, \$out, \$out ) + || die "Error running '$cmd'"; + + die "Error building '$dist':\n\n$out\n\n" + unless $out =~ m{Successfully installed}; +} + +# # try to install the distribution using cpanm +# +# my @fetched_urls = +# map { s{.*(http://\S+).*}{$1}; $_ } +# grep { m{^Fetching http://search.cpan.org} } +# split /\n/, $out; +# +# my @installed = +# grep { $_ } +# map { m{^Successfully (?:re)?installed (\S+).*} ? $1 : undef } +# split /\n/, $out; +# +# foreach my $dist (@installed) { +# my ($url) = grep { m{/$dist\.} } @fetched_urls; +# my ($filename) = $url =~ m{([^/]+)$}; +# +# print " getting $filename from $url\n"; +# +# is_success( getstore( $url, "$dist_dir/$filename" ) ) +# || die "Error saving $url to $dist_dir/$filename"; +# write_file( $dist_list, { append => 1 }, "$filename\n" ); +# write_file( $url_list, { append => 1 }, "$url\n" ); +# } + +# # +# # load list of modules at start and write it back at the end +# my %installed = (); +# my %looked_at = (); +# +# sub add_filename_to_list { +# my $module = shift; +# print "Adding '$module' to '$dist_list'\n"; +# append( $dist_list, "$module\n" ); +# getc; +# } +# +# # add_module('App::cpanminus'); +# add_module($module_to_add); +# +# sub add_module { +# my $module = shift; +# print "--- $module ---\n"; +# return 1 if $installed{$module} || $looked_at{$module}++; +# +# # get the distribution this module is in +# my $yaml = get("$cpan_meta_db_base/$module") +# || die "Can't get details from $cpan_meta_db_base/$module"; +# my $dist_info = Load($yaml); +# my $distfile = $dist_info->{distfile} +# || die("Can't get distfile from returned YAML for $module"); +# +# # fetch the distribution from cpan +# my ($filename) = $distfile =~ m{/([^/]*)$}; +# unless ( -e "$dist_dir/$filename" ) { +# my $dist_url = "$cpan_mirror_base/$distfile"; +# print " fetching '$dist_url' to '$dist_dir/$filename'\n"; +# is_success( getstore( $dist_url, "$dist_dir/$filename" ) ) +# || die "Could not fetch $dist_url"; +# } +# +# # try to install the distribution using cpanm +# my $out = ''; +# my $cmd = "$cpanm_cmd $dist_dir/$filename"; +# print " running '$cmd'\n"; +# run3( $cmd, undef, \$out, \$out ) || die "Error running '$cmd'"; +# +# warn "vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n"; +# warn $out; +# warn "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"; +# +# my @missing_modules = +# map { s{^.*\s(\S+)$}{$1}; $_ } +# grep { m/Couldn\'t find module or a distribution/ } +# split /\n/, $out; +# +# if ( scalar @missing_modules ) { +# print " missing: ", join( ', ', @missing_modules ), "\n"; +# add_module($_) for @missing_modules; +# add_module($module); +# } +# elsif ( $out =~ m{Successfully installed } ) { +# +# # add ourselves to the done lists +# print " Success with '$filename'\n"; +# $installed{$module}++; +# add_filename_to_list($filename); +# } +# else { +# die "No success and no missing modules for $module"; +# } +# +# } +# +# # |