The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
##
# name:      Module::Install::Stardoc
# abstract:  Stardoc Support for Module::Install
# author:    Ingy döt Net <ingy@cpan.org>
# copyright: 2011
# license:   perl

package Module::Install::Stardoc;
use 5.008003;
use strict;
use warnings;

use Module::Install::Base;
use vars qw'@ISA $VERSION';
BEGIN {
    @ISA = 'Module::Install::Base';
    $VERSION = '0.18';
}

use File::Find;

my @clean;

sub stardoc_make_pod {
    my $self = shift;
    return unless $self->is_admin;
    require Stardoc::Convert;
    eval "use IO::All; 1" or die $@;

    my @pms = @_;

    if (not @pms) {
        File::Find::find(sub {
            push @pms, $File::Find::name if /\.pm$/;
        }, 'lib');
    };
    for my $pm (@pms) {
        (my $pod = $pm) =~ s/\.pm$/.pod/ or die;
        my $doc = Stardoc::Convert->perl_file_to_pod($pm) or next;
        push @clean, $pod;
        my $old = -e $pod ? io($pod)->all : '';
        if ($doc ne $old) {
            print "Creating $pod from $pm\n";
            io($pod)->print($doc);
        }
    }
}

sub stardoc_clean_pod {
    my $self = shift;
    return unless $self->is_admin;
    $self->clean_files(join ' ', @clean);
}

1;

=head1 SYNOPSIS

In Makefile.PL:

    use inc::Module::Install;

    stardoc_make_pod;
    all_from 'lib/Foo.pm';
    stardoc_clean_pod;

=head1 DESCRIPTION

The C<stardoc_make_pod> command generates a pod file from every .pm file in
your lib/ directory that contains Stardoc documentation.

The C<stardoc_clean_pod> command tells C<make clean> to remove the generated
pod files.

=cut