/usr/local/CPAN/dvdrip/Makefile.PL


# $Id: Makefile.PL 2393 2009-12-19 13:42:17Z joern $

use strict;

use File::Find;
use ExtUtils::MakeMaker;
use FileHandle;

$| = 1;

my %REQUIRED_MODULES = (
        'Gtk2'                  => 1.121,
        'Locale::TextDomain'    => 1.16,
	'Event'                 => 1.06,
        'Gtk2::Ex::FormFactory' => 0.65,
        'Event::ExecFlow'       => 0.64,
        'Event::RPC'            => 0.89,
        'AnyEvent'              => 1.02,
);

my $required_module_files = $ENV{SKIP_UNPACK_REQUIRED_MODULES} ?
    "" : unpack_shipped_modules(\%REQUIRED_MODULES);

my @add_bin_files = grep m!bin/!, split (/\s+/, $required_module_files);

WriteMakefile(
    'NAME'         => 'Video::DVDRip',
    'VERSION_FROM' => 'lib/Video/DVDRip.pm',
    'EXE_FILES'    => [
        'bin/dvdrip',          'bin/dvdrip-master',
        'bin/dvdrip-exec',     'bin/dvdrip-multitee',
        'bin/dvdrip-replex',   'bin/dvdrip-subpng',
        'bin/dvdrip-splitpipe',
        'bin/dvdrip-progress', 'bin/dvdrip-splash',
        'bin/dvdrip-thumb',
        @add_bin_files
    ],
    'PREREQ_PM' => \%REQUIRED_MODULES,
    'clean' => {
              FILES => 'bin/dvdrip-splitpipe src/dvdrip-splitpipe '
            . 'bin/dvdrip-progress src/dvdrip-progress '
            . 'l10n/.mo.installed '
            . $required_module_files
    },
    'dist' => {
        COMPRESS => "gzip",
        SUFFIX   => "gz",
        PREOP => 'echo "DONT USE THIS - USE tools/mkdist.pl INSTEAD"; exit 1',
    },
);

sub MY::postamble {
    '
bin/dvdrip-splitpipe bin/dvdrip-progress: src/Makefile
		cd src && make
';
}

sub unpack_shipped_modules {
    my ($required_modules) = @_;
    
    my (@files, @modules);
    foreach my $module ( keys %{$required_modules} ) {
        #-- check if a tar.gz file for this module is shipped
        my $module_dist_file = get_module_dist_file($module);
        next unless $module_dist_file;
        
        #-- now check if this module is already installed
        my $out = qx[ perl -M$module -e1 2>&1 >/dev/null && echo PERL_MODULE_OK 2>&1 ];
        next if $out =~ /PERL_MODULE_OK/;
        
        #-- Ok, module is missing and will be installed during
        #-- dvd::rip install
        push @modules, $module;
        my $module_dist_dir = $module_dist_file;
        $module_dist_dir =~ s/\.tar.gz$//;
        
        my $cmd =
             "cd perl-modules && "
            ."tar xfz $module_dist_file && "
            ."cd $module_dist_dir && "
            ."cp -r lib/* ../../lib && echo MODULE_COPY_OK; "
            ."ls lib/*.pm 2>/dev/null; "
            ."test -d bin && cp -r bin/* ../../bin; "
            ."test -d bin && ls bin/*; "
            ."cd ..; "
            ."rm -rf $module_dist_dir";

        $out = qx[ ( $cmd ) 2>&1 ];
        
        if ( $out =~ /MODULE_COPY_OK/ ) {
            $out =~ s/\s*MODULE_COPY_OK\s*//;
            push @files, split(/\s+/, $out);
            $module_dist_dir =~ /^([^-]+)/;
            push @files, "lib/$1";
        }
        else {
            print STDERR "Error unpacking $module_dist_file!\n";
            print STDERR "Executed command was:\n\n$cmd\n\n";
            print STDERR "Output was:\n\n$out\n";
            exit 1;
        }
    }

    if ( @modules ) {
        @modules = sort @modules;
        print "\n";
        print "Note:\n";
        print "-----\n";
        print "The following modules are required for dvd::rip but not found on your\n";
        print "system. They're shipped with dvd::rip for your convenience and will be\n";
        print "installed automatically when you run 'make install':\n\n";
        print "  @modules\n";
        print "\n";
        print "You can ignore the 'prerequisite not found' warnings beyond for them.\n\n";
        print "If you don't like this and want to install these modules manually\n";
        print "just set SKIP_UNPACK_REQUIRED_MODULES before executing Makefile.PL,\n";
        print "e.g. this way:\n\n";
        print "  SKIP_UNPACK_REQUIRED_MODULES=1 perl Makefile.PL\n\n";
    }

    return join(" ", @files);
}

sub get_module_dist_file {
    my ($module) = @_;

    my @dist_files = glob("perl-modules/*");
    
    my $module_dist_re = $module;
    $module_dist_re =~ s/::/-/g;
    $module_dist_re = quotemeta($module_dist_re);
    $module_dist_re = qr[($module_dist_re-[\d._-]+\.tar\.gz)];
    my $module_dist_file;
    foreach my $dist_file ( @dist_files ) {
        if ( $dist_file =~ $module_dist_re && -f "perl-modules/$1" ) {
            $module_dist_file = $1;
            last;
        }
    }

    return $module_dist_file;
}