The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl
use strict;
use warnings;

use inc::MyBuilder;
use Module::Build::Compat;
use File::Path qw(rmtree);
use IO::Handle;

use LWP::Simple;

STDOUT->autoflush(1);

my $name    = 'rrdtool';
my $rrdtool = "http://oss.oetiker.ch/rrdtool/pub/${name}.tar.gz";

if (!grep { $_ eq '--no-upgrade' } @ARGV) {
    print "# donwloading $rrdtool\n";
    print "# => ", scalar mirror($rrdtool, "$name.tar.gz"), "\n";
}

print "# unpacking $name.tar.gz\n";
system("tar", "xzf",  "$name.tar.gz");
rmtree($name);

my $version = do {
    my @dirs = <rrdtool-*>;
    @dirs == 1 or die "XXX: too many rrdtool-*/: @dirs";
    ( $dirs[0] =~ m/ (\d+ (?: \. \d+)+ ) /xms )[0];
};
print "# rrdtool version $version\n";
symlink "$name-$version" => $name;

if (-e (my $patch = "patch/v$version.patch")) {
    print "# applying $patch\n";
    system("cd '$name' && patch -p1 < '../$patch'");
}

print "# witing Makefile\n";
my $builder = inc::MyBuilder->new(
    module_name => 'Alien::RRDtool',
    dist_author => 'Fuji, Goro (gfx) <gfuji(at)cpan.org>',
    license     => 'perl',

    requires    => {
        perl => 5.008_001,

        'File::ShareDir' => 0,
    },

    configure_requires => {
        'File::chdir'   => 0,
        'File::Which'   => 0,
        'LWP::Simple'   => 0,
        'Module::Build' => 0,
    },
    build_requires => {
        'File::ShareDir' => 0,
    },
    test_requires => {
        'Test::More'     => 0.88,
        'Test::Requires' => 0.06,
    },

    share_dir => 'alien',

    needs_compiler => 1,

    dist_meta => 1, # to make `cpanm .` happy

    no_index => {
        directory =>  [
            'inc',
            'author',
        ],
    },

    add_to_cleanup => [
        $name,
        "$name-$version",
        'Makefile',
        'blib',
    ],
);

$builder->notes( rrdtool    => $rrdtool );
$builder->notes( name       => $name    );
$builder->notes( version    => $version );
$builder->notes( installdir => 'alien' );

$builder->create_build_script();

# write Makefile for an easy interface to the build script
Module::Build::Compat->write_makefile(build_class => ref $builder);