package CPAN::MakeMaker; $VERSION = '0.10'; @EXPORT = qw(WriteMakefile prompt); use strict; use ExtUtils::MakeMaker(); use File::Spec; use Cwd; use base 'Exporter'; *prompt = \&ExtUtils::MakeMaker::prompt; sub PRINT; if (not defined &PRINT) { *PRINT = sub { my @args = @_; chomp $args[-1]; print @args, "\n"; }; } sub WriteMakefile { my %args = @_; $args{NAME} = determine_NAME() unless defined $args{NAME}; $args{VERSION} = determine_VERSION() unless defined $args{VERSION} or defined $args{VERSION_FROM}; update_manifest(); ExtUtils::MakeMaker::WriteMakefile(%args); append_to_makefile(); } sub determine_NAME { my $NAME = ''; my @modules = glob('*.pm'), grep {/\.pm$/} find_files('lib'); if (@modules == 1) { open MODULE, $modules[0] or die $!; while () { next if /^\s*#/; if (/^\s*package\s+(\w[\w:]*)\s*;\s*$/) { $NAME = $1; } last; } } die <parse_version($modules[0]); }; print STDERR $@ if $@; } die < $manifest_path" or die "Can't open '$manifest_path' for output:\n$!"; print MANIFEST for @$manifest; close MANIFEST; } } sub read_manifest { my $manifest = []; my $manifest_path = ''; my $relative_path = ''; my @relative_dirs = (); my $cwd = cwd(); my @cwd_dirs = File::Spec->splitdir($cwd); while (@cwd_dirs) { last unless -f File::Spec->catfile(@cwd_dirs, 'Makefile.PL'); my $path = File::Spec->catfile(@cwd_dirs, 'MANIFEST'); if (-f $path) { $manifest_path = $path; last; } unshift @relative_dirs, pop(@cwd_dirs); } unless (length($manifest_path)) { die "Can't locate the MANIFEST file for '$cwd'\n"; } $relative_path = join '/', @relative_dirs if @relative_dirs; open MANIFEST, $manifest_path or die "Can't open $manifest_path for input:\n$!"; @$manifest = ; close MANIFEST; return ($manifest, $manifest_path, $relative_path); } sub append_to_makefile { open MAKEFILE, '>> Makefile' or die "CPAN::MakeMaker::WriteMakefile can't append to Makefile:\n$!"; print MAKEFILE < MAKEFILE close MAKEFILE; } 1;