The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use strict;
use warnings;
use Module::Build;

my $class = Module::Build->subclass(
  class => 'Bot::Cobalt::Builder',
  code => q{

    sub ACTION_release {
      my $self = shift;
      $self->dispatch('versionify');
      $self->dispatch('test');
      $self->dispatch('wikidocs');
      $self->dispatch('dist');
    }

    sub ACTION_wikidocs {
      my $self = shift;
      my $base = $self->base_dir;
      my $remote = $ENV{DOC_UPLOAD} || die "Need ENV DOC_UPLOAD";
      chdir($base."/tools/release/docs");
      $self->do_system(qw{"./pod2doku"});
      $self->do_system(
        'rsync',
        '-rv',
        '--stats',
        '--progress',
        'wikidoc/',
        $remote.
         ':public_html/docs/wiki/data/pages/bots/cobalt/docs',
      );
      chdir($base);
    }

    sub ACTION_versionify {
      my $self = shift;

      my $base = $self->base_dir;
      my $vers = $self->dist_version;

      ++$|;

      print "Versionifying ";
      require File::Find;
      File::Find->import('find');

      my $x;
      find(sub {
          if ($_ =~ /\.pm(.in)?$/) {
            my $path = $File::Find::name;
            open my $fh, '<', $path
              or die "open: $path $!";
            my @thisf = readline($fh);
            close $fh;

            my $package_l = $thisf[0] || return;
            my $pkg;
            unless (($pkg) = $package_l =~ /^package\s+(\S+)$/) {
              warn "\nSkipping, no package: $path\n";
              return
            }

            ++$x;
            print ". ";

            my $v_line = "our \$VERSION = '$vers';\n";

            if ($thisf[1] =~ /VERSION/) {
              $thisf[1] = $v_line
            }

            open $fh, '>', $path
              or die "open: $path $!";
            print $fh @thisf;
            close $fh;
          }
        },
        $base."/lib", $base."/tools"
      );
      print "\n$x modules\n";
    }

  },
);

my $build = $class->new(
  module_name   => 'Bot::Cobalt',
  dist_abstract => 'Pluggable IRC darkbot-alike',
  dist_author   => 'Jon Portnoy <avenj@cobaltirc.org>',
  license => 'perl',

  create_readme => 1,

  recursive_test_files => 1,

  ## A passthru-to-build makefile:
  create_makefile_pl => 'small',

  PL_files => {
    'lib/Bot/Cobalt/Lang.pm.PL' => 'lib/Bot/Cobalt/Lang.pm',
    'bin/cobalt2-installer.PL' => 'bin/cobalt2-installer',
  },

  configure_requires => {
    'Module::Build' => '0.40',
  },

  build_requires => {
    'Test::Exception' => 0,
    'Test::Cmd'  => 0,
    'Test::More' => 0,

    'Data::Dumper'   => 0,
    'File::Find'     => 0,
    'File::Spec'     => 0,
    'File::Temp'     => 0,
    'Try::Tiny'      => 0,
    'Fcntl' => 0,
  },

  requires => {
   ### Core set ###
      'perl' => '5.12.1',

      'Carp' => 0,
      'Cwd'  => 0,

      'Data::Dumper'     => 0,
      'DB_File'          => 0,

      'Exporter'         => 0,

      'Fcntl'            => 0,
      'File::Find'       => 0,
      'File::Spec'       => 0,
      'File::Path'       => 2.00,

      'Getopt::Long'     => 0,

      'IO::File'         => 0,

      'List::Util'       => 0,

      'Module::CoreList' => 0,

      'POSIX'            => 0,

      'Scalar::Util'     => 0,
      'Storable'         => 0,
      'strictures'       => 1,

      'Time::HiRes'      => 0,
      'Try::Tiny'        => 0,

      'overload'         => 0,

   ### Cobalt set ###
     # Crypt
      'App::bmkpasswd' => 1.06,

     # HTTP
      'HTTP::Request'  => 0,
      'HTTP::Response' => 0,
      'URI::Escape'    => 0,

     # Logging
      'Devel::StackTrace' => 1.27,

     # Moo + related
      'Moo'                    => 0.091009,
      'MooX::Types::MooseLike' => 0.08,
      'namespace::clean'       => 0,

     # Network
      'Net::IP::Minimal' => 0.04,

     # POE::
      'POE'              => 1.311,

       ## ::Resolver that doesn't fail w/ newer Socket::GetAddrInfo
       ## (Socket::GetAddrInfo is a bit unnecessary these days, it seems)
      'POE::Component::Resolver'     => 0.920,
       ## Above also applies to Client::HTTP:
      'POE::Component::Client::HTTP' => 0.947,
      'POE::Component::Client::Keepalive' => 0,
      'POE::Component::Client::DNS' => 0,
      'POE::Component::IRC::State'  => 6.78,
      'POE::Component::Syndicator'  => 0.06,
      'Object::Pluggable'           => 1.27,

     # Process
      'Proc::PID::File' => 1.26,

     # Serialization
      'JSON::XS'        => 2.00,
      'YAML::XS'        => 0.34,

     # Utils
      'Data::Perl'      => 0.002,
      'IRC::Utils'      => 0.12,
      'Perl6::Junction' => 1,
      'Term::ReadKey'   => 0,
  },

  recommends => {
    ### POE::
      'POE::Component::SSLify' => 1.006,

    ### Utils / misc
      # terminal interaction
#      'Term::ReadLine::Perl' => 0,

    ### Release tools, commented for now
#      'File::Basename'   => 0,
#      'Dir::Self' => 0,
     # templating (cpodconv/release tools)
#      'Template' => 0,
     # POD conversion
#      'Pod::Select' => 0,
#      'Pod::Find'   => 0,
#      'Pod::Simple::Wiki' => 0,
  },
);

$build->add_to_cleanup("lib/Bot/Cobalt/Lang.pm");
$build->add_to_cleanup("bin/cobalt2-installer");
$build->create_build_script;

__END__
Bacon.