The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# -*- perl -*-

require 5.008;

use strict;
require ExtUtils::MakeMaker;

eval { require 5.008; } or die << 'EOD';
#######################################
#
#	This module requires a minimum Perl version of 5.8.0
#	Please upgrade!
#
#######################################
EOD

print "\nConfiguring Devel::STrace...\n
";

use Config;
my @executables = ();
foreach my $src ('plstrace') {
	open  SCRIPT,       ">$src.pl" or die "Can't create $src.pl: $!";
	open  SOURCE,        "$src.source" or die "Missing $src.source";
	chmod 0755,          "$src.pl";
	push @executables, "$src.pl";
	print SCRIPT "$Config{startperl}\n";
	print SCRIPT $_
		while (<SOURCE>);

	close SCRIPT;
	close SOURCE;
}

my %prereqs = (
	'IPC::Mmap' => '0.11',
	'Devel::RingBuffer' => '0.31'
);

my %opts = (
	'NAME' => 'Devel::STrace',
	'VERSION_FROM' => 'lib/Devel/STrace.pm',
	'dist'         => {
	 	'DIST_DEFAULT' => 'all tardist',
     	'SUFFIX'       => 'gz',
	 	'COMPRESS'     => 'gzip -9vf'
    },
    'EXE_FILES'    => \@executables,
	'AUTHOR'       => 'Dean Arnold, Presicient Corp. (darnold@presicient.com)',
	'ABSTRACT'     => 'strace for Perl scripts',
	'PREREQ_PM'    => \%prereqs,
);

my $ok = 1;
$ok &= CheckModule($_, $prereqs{$_})
	foreach (keys %prereqs);

print "
Missing modules are available from CPAN (search.cpan.org).

"
	unless $ok;

ExtUtils::MakeMaker::WriteMakefile(%opts);

sub CheckModule ($$;$) {
    my($module, $version, $package) = @_;
    $package ||= $module;
    $prereqs{$module} = $version || 0;
    if ($version) {
		print "Checking for $package, $version or later ... ";
		eval "use $module $version";
		if ($@) {
		    print("\nYou don't have the $package package",
			  " version $version or later, installed.\n");
		    return 0;
		}
    } else {
		print "Checking for $package ... ";
		eval "use $module";
		if ($@) {
		    print("\nYou don't have the $package package installed.\n");
		    return 0;
		}
    }
    print "ok\n";
    return 1;
}