--- /dev/null
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use CPAN;
+use Cwd;
+use File::chdir;
+use File::Path qw( rmtree );
+
+
+CPAN::HandleConfig->load();
+CPAN::Shell::setup_output();
+CPAN::Index->reload();
+
+local $CPAN::Config->{tar_verbosity} = 'none';
+local $CPAN::Config->{load_module_verbosity} = 'none';
+
+
+my $LOGFILE = ( cwd . "/cpan-stable-smolder.log" );
+
+if ( -f $LOGFILE ) {
+ unlink $LOGFILE;
+}
+
+open my $log, '>', $LOGFILE || die "Could not open $LOGFILE because $!";
+
+test_all_modules(
+ qw[
+ Moose::Autobox
+ MooseX::Accessors::ReadWritePrivate
+ MooseX::App::Cmd
+ MooseX::Async
+ MooseX::Attribute::ENV
+ MooseX::AttributeHelpers
+ MooseX::Attribute::Prototype
+ MooseX::Attributes::Curried
+ MooseX::Blessed::Reconstruct
+ MooseX::ClassAttribute
+ MooseX::Clone
+ MooseX::ConfigFromFile
+ MooseX::Constructor::AllErrors
+ MooseX::Contract
+ MooseX::Control
+ MooseX::CurriedHandles
+ MooseX::Daemonize
+ MooseX::Declare
+ MooseX::DeepAccessors
+ MooseX::DOM
+ MooseX::Emulate::Class::Accessor::Fast
+ MooseX::FollowPBP
+ MooseX::Getopt
+ MooseX::GlobRef::Object
+ MooseX::InsideOut
+ MooseX::Iterator
+ MooseX::KeyedMutex
+ MooseX::LazyLogDispatch
+ MooseX::LogDispatch
+ MooseX::Log::Log4perl
+ MooseX::MakeImmutable
+ MooseX::Meta::TypeConstraint::ForceCoercion
+ MooseX::MetaDescription
+ MooseX::MethodAttributes
+ MooseX::Method::Signatures
+ MooseX::MultiInitArg
+ MooseX::MultiMethods
+ MooseX::MutatorAttributes
+ MooseX::NaturalKey
+ MooseX::NonMoose
+ MooseX::Object::Pluggable
+ MooseX::Param
+ MooseX::Params::Validate
+ MooseX::Plaggerize
+ MooseX::POE
+ MooseX::Policy::SemiAffordanceAccessor
+ MooseX::Q4MLog
+ MooseX::Role::Cmd
+ MooseX::Role::Matcher
+ MooseX::Role::Parameterized
+ MooseX::Role::TraitConstructor
+ MooseX::Role::XMLRPC::Client
+ MooseX::Scaffold
+ MooseX::SemiAffordanceAccessor
+ MooseX::SimpleConfig
+ MooseX::Singleton
+ MooseX::Storage
+ MooseX::Storage::Format::XML::Simple
+ MooseX::StrictConstructor
+ MooseX::Struct
+ MooseX::Templated
+ MooseX::Timestamp
+ MooseX::Traits
+ MooseX::Traits::Attribute::CascadeClear
+ MooseX::Types
+ MooseX::Types::Authen::Passphrase
+ MooseX::Types::Common
+ MooseX::Types::Data::GUID
+ MooseX::Types::DateTime
+ MooseX::Types::IO
+ MooseX::Types::Path::Class
+ MooseX::Types::Set::Object
+ MooseX::Types::Structured
+ MooseX::Types::URI
+ MooseX::Types::UUID
+ MooseX::Types::VariantTable
+ MooseX::WithCache
+ MooseX::Workers
+ MooseX::YAML
+ Fey-ORM
+ ]
+);
+
+close $log;
+
+exit;
+
+sub get_distro_from_cpan {
+ my $project = shift;
+
+ ( my $module = $project ) =~ s/-/::/g;
+
+ my @mods = CPAN::Shell->expand( 'Module', $module );
+
+ die "Cannot resolve $project to a single module object"
+ if @mods > 1;
+
+ return unless @mods;
+
+ my $dist = $mods[0]->distribution();
+
+ $dist->get();
+
+ return $dist;
+}
+
+sub test_module {
+ my $dir = shift;
+
+ local $CWD = $dir;
+
+ local $ENV{PERL_AUTOINSTALL} = '--defaultdeps';
+ if ( -f "Makefile.PL" ) {
+ return ! system $^X . ' Makefile.PL && make && make test';
+ }
+ else {
+ return ! system $^X . ' Build.PL && ./Build && ./Build test';
+ }
+}
+
+sub test_all_modules {
+ foreach my $project (@_) {
+ my $dist = get_distro_from_cpan($project);
+
+ unless ($dist) {
+ print $log "UNKNOWN : $project (not on CPAN?)\n";
+ next;
+ }
+
+ my $passed = test_module( $dist->dir() );
+
+ my $msg = $passed ? 'SUCCESS' : 'FAIL';
+
+ print $log sprintf( '%7s : %s - %s', $msg, $project, $dist->base_id() );
+ print $log "\n";
+ }
+}
+
+1;