#!/usr/bin/perl -w

use strict;

package misc::MakeMakerMod;
$misc::MakeMakerMod::VERSION = '0.003';

sub add_steps {
  my %args = @_; 
  my $file = $args{file} || "Makefile";
  my $step = $args{step} || "install";
  my $what = $args{what} || die "must provide a what argument";

  #read the Makefile
  open(MF, "<$file") || die "can't open Makefile for reading";
  my @lines = <MF>;
  close(MF);

  #find the step we're interested in
  my ($c, $ln) = (0,0);
  map { $c++; $ln = $c if(grep(/^$step\s+\:/, $_)); } @lines;

  #write the Makefile back out with extra commands in the install step
  open(MF, ">$file") || die "can't open Makefile for writing";
  map { print MF $_ } @lines[0..$ln-1];
  print MF "\n\t@################################\n"; 
  print MF "\t@### added by MakeMakerMod.pm ###\n";
  print MF "\t@################################\n"; 
  map { my $l = "\t  $_"; chomp($l); print MF "$l\n" } 
    split("\n", $what); 
  print MF "\t@#################################\n"; 
  print MF "\t@### /added by MakeMakerMod.pm ###\n";
  print MF "\t@#################################\n\n"; 
  map { print MF $_ } @lines[$ln..$#lines]; 
  close(MF);
}

1;
__END__

=begin text

wtf

=end text

=head1 NAME

MakeMakerMod - easily modify MakeMaker Makefiles

=head1 SYNOPSIS

It's quite difficult to do something as simple as
adding an install step to be run at install time (if
it is even possible at all) with ExtUtils::MakeMaker.
This module hackishly fixes that.

Example usage would look something like this:

  WriteMakefile(%args);
  MakeMakerMod::add_steps(
    step => "install",
    what => "perl misc/install-extras.pl"
  );

=head1 DESCRIPTION

  A horrible hack that can be horribly useful.

=head1 AUTHOR
   
  Brian Szymanski <scache@allafrica.com>

=cut