The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use Distribution::Guess::BuildSystem;

my $dist = $ARGV[0];

my $dist_dir = unpack_dist( $dist );

unless( $dist_dir )
	{
	warn "Could not unpcak $dist\n";
	exit;
	}
	
#print "Unwrapped $dist to $dist_dir\n";

my $guesser = Distribution::Guess::BuildSystem->new( dist_dir => $dist_dir );

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
if( $guesser->has_makefile_pl && ! $guesser->has_build_pl )
	{
	print "Found a Makefile.PL!\n";
	
	if( $guesser->uses_makemaker )
		{
		print "Uses MakeMaker!\n";
		}
	elsif( $guesser->uses_module_install )
		{
		print "Uses Module::Install!\n";
		print "Uses auto_install\n" if $guesser->uses_auto_install;
		}
	}
elsif( $guesser->has_makefile_pl && $guesser->has_build_pl )
	{
	print "Found a Makefile.PL and a Build.PL!\n";
	print "Build.PL wraps Makefile.PL!\n" if $guesser->build_pl_wraps_makefile_pl;

	if( $guesser->uses_makemaker )
		{
		print "Uses MakeMaker!\n";
		}
	elsif( $guesser->uses_module_install )
		{
		print "Uses Module::Install!\n";
		print "Uses auto_install\n" if $guesser->uses_auto_install;
		}

	print "Found a Build.PL!\n";
	
	print "Uses Module::Build!\n" if $guesser->uses_module_build;
	print "Uses Module::Build::Compat!\n" if $guesser->uses_module_build_compat;	
	}
elsif( $guesser->has_build_pl )
	{
	print "Found a Build.PL!\n";
	
	print "Uses Module::Build!\n" if $guesser->uses_module_build;
	print "Uses Module::Build::Compat!\n" if $guesser->uses_module_build_compat;
	}
else
	{
	print "Didn't see a Makefile.PL or a Build.PL!\n";
	}

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
sub unpack_dist 
	{ 	
	require Archive::Extract;
	require File::Temp;

	my $dist = shift;
	
	( my $prefix = __PACKAGE__ ) =~ s/::/-/g;
	
	my $unpack_dir = eval { File::Temp::tempdir(
		$prefix . "-$$.XXXX",
		TMPDIR  => 1,
		CLEANUP => 1,
		) }; 

	my $extractor = eval { 
		Archive::Extract->new( archive => $dist ) 
		};
	if( defined $@ and $@ )
		{
		return;
		}
			
	my $rc = $extractor->extract( to => $unpack_dir );

	$extractor->extract_path;		
	}