The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use 5.008008;
use strict;
use warnings;
use Module::Build;

# Which .pm contains the module version?
# This is also the file where the 'module_name' comes from. It's the string
# following the first 'package' keyword in the file up to the semicolon.
my $pm='lib/IO/Handle/Record.pm';

# What is used to create the README
my $pod=$pm;

# requirements: they appear in the README in the given order.
my @requires=(
	      'Class::Member' => '1.3',
	      'Storable' => '2.05',
	      'Test::Deep' => 0
	     );

my $code=<<"EOF";
\$ENV{GZIP}='-9f';
sub ACTION_distdir {
  my \$I = shift;

  \$I->log_info("Creating README.pod\n");
  open my \$out, '>', 'README.pod' or die "ERROR: Cannot open README.pod: \$!\\n";
  open my \$in,  '<', '$pod' or die "ERROR: Cannot open $pod: \$!\\n";
  my \$pr=0;
  local \$_;
  while( defined( \$_=<\$in> ) ) {
    if( \$pr ) {
      /^=cut\$/ and \$pr=0;
    } else {
      /^=/ and \$pr=1;
    }
    next unless \$pr;
    /=head1 DESCRIPTION/ and print \$out <<'XXX';
=head1 INSTALLATION

 perl Makefile.PL
 make test
 make install

or

 perl Build.PL
 ./Build test
 ./Build install

=head1 DEPENDENCIES

=over 4
${\do{my @l=@requires; my $out=''; while(my($m, $v)=splice @l, 0, 2) {$out.="\n=item B<*> $m".($v?" $v":"")."\n"} $out}}
=back

XXX
    print \$out \$_;
  }
  close \$out;

  if ( eval {require Pod::Readme; 1} ) {
    \$I->log_info("Creating README using Pod::Readme\n");

    my \$parser = Pod::Readme->new;
    \$parser->parse_from_file('README.pod', 'README');

  } elsif ( eval {require Pod::Text; 1} ) {
    \$I->log_info("Creating README using Pod::Text\n");

    Pod::Text->new()->parse_from_file( 'README.pod', 'README' );
  } else {
    \$I->log_warn("Can't load Pod::Readme or Pod::Text to create README\n");
    return;
  }

  \$I->_add_to_manifest('MANIFEST', 'README');

  return \$I->SUPER::ACTION_distdir(\@_);
}

sub ACTION_rpm {
  my \$version=\$_[0]->dist_version;
  open my \$out, '>', 'perl-IO-Handle-Record.spec.tmp' or die "ERROR: Cannot open perl-IO-Handle-Record.spec.tmp: \$!\\n";
  open my \$in,  '<', 'perl-IO-Handle-Record.spec' or die "ERROR: Cannot open perl-IO-Handle-Record.spec: \$!\\n";
  local \$_;
  while( defined( \$_=<\$in> ) ) {
    s/^(Version:\\s*).*/\${1}\$version/i;
    print \$out \$_;
  }
  rename 'perl-IO-Handle-Record.spec.tmp', 'perl-IO-Handle-Record.spec';
  system 'rpmbuild -ba perl-IO-Handle-Record.spec';
}
EOF

my $builder = Module::Build->subclass
  (
   code                => $code,
  )->new
  (
   module_name         => (sub {local @ARGV=($pm); while(<>){/package\s*(.*?)\s*;/ and return $1}})->(),
   license             => 'perl',
   dist_author         => 'Torsten Foertsch <torsten.foertsch@gmx.net>',
   dist_version_from   => $pm,
   xs_files            => {'Record.xs'=>'lib/IO/Handle/Record.xs'},
   requires            => {@requires},
  );

$builder->create_build_script;