Revision Log
Added auto_provides
#!/usr/bin/env perl
use strict;
use warnings;
use ExtUtils::MakeMaker qw(prompt);
use File::Basename;
use File::Path;
use File::Spec;
use Template;
use YAML;
my $path = File::Spec->catfile($ENV{HOME}, "/.pmsetuprc");
my $config = eval { YAML::LoadFile($path) } || {};
my $save;
while (! $config->{author}) {
$config->{author} = prompt("Your name: ", '');
$save++;
}
while (! $config->{email}) {
$config->{email} = prompt("Your email: ", '');
$save++;
}
my $modname = shift @ARGV or die "Usage: $0 module\n";
$modname =~ s/-/::/g;
write_plugin_files($modname, $config);
END {
YAML::DumpFile($path, $config) if $save;
}
sub write_plugin_files {
my($module, $config) = @_;
# $module = "Foo::Bar"
# $dist = "Foo-Bar"
# $path = "Foo/Bar.pm"
my @pkg = split /::/, $module;
my $dist = join "-", @pkg;
my $path = join("/", @pkg) . ".pm";
mkdir $dist, 0777;
chdir $dist;
my @template = YAML::Load(join '', <DATA>);
my $vars = { module => $module, dist => $dist, path => $path,
config => $config, localtime => scalar localtime, year => (localtime)[5] + 1900 };
for my $tmpl (@template) {
my $file = $tmpl->{file};
$file =~ s/(\$\w+)/$1/eeg;
write_file($file, $tmpl->{template}, $vars);
}
!system "perl Makefile.PL NO_MYMETA=1" or die $?;
!system 'make manifest' or die $?;
!system 'make test' or die $?;
!system 'make distclean' or die $?;
}
sub write_file {
my($path, $template, $vars) = @_;
if (-e $path) {
my $ans = prompt("$path exists. Override? [yN] ", 'n');
return if $ans !~ /[Yy]/;
}
my $dir = File::Basename::dirname($path);
unless (-e $dir) {
warn "Creating directory $dir\n";
File::Path::mkpath($dir, 1, 0777);
}
my $tt = Template->new;
$tt->process(\$template, $vars, \my $content);
warn "Creating $path\n";
open my $out, ">", $path or die "$path: $!";
print $out $content;
close $out;
}
__DATA__
---
file: Makefile.PL
template: |
use inc::Module::Install;
all_from 'lib/[% path %]';
readme_from('lib/[% path %]');
build_requires 'Test::More', 0.88;
test_requires 'Test::Requires';
auto_set_repository();
auto_provides;
WriteAll;
---
file: t/00_compile.t
template: |
use strict;
use Test::More tests => 1;
BEGIN { use_ok '[% module %]' }
---
file: xt/pod.t
template: |
use Test::More;
eval "use Test::Pod 1.00";
plan skip_all => "Test::Pod 1.00 required for testing POD" if $@;
all_pod_files_ok();
---
file: Changes
template: |
Revision history for Perl extension [% module %]
0.01 [% localtime %]
- original version
---
file: lib/$path
template: |
package [% module %];
use strict;
use 5.008_001;
our $VERSION = '0.01';
1;
__END__
=encoding utf-8
=for stopwords
=head1 NAME
[% module %] -
=head1 SYNOPSIS
use [% module %];
=head1 DESCRIPTION
[% module %] is
=head1 AUTHOR
[% config.author %] E<lt>[% config.email %]E<gt>
=head1 COPYRIGHT
Copyright [% year %]- [% config.author %]
=head1 LICENSE
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=head1 SEE ALSO
=cut
---
file: MANIFEST.SKIP
template: |
\bRCS\b
\bCVS\b
\.svn/
\.git/
^MANIFEST\.
^Makefile$
~$
\.old$
^blib/
^pm_to_blib
^MakeMaker-\d
\.gz$
\.cvsignore
\.shipit
MYMETA
---
file: README
template: |
This is Perl module [% module %].
INSTALLATION
[% module %] installation is straightforward. If your CPAN shell is set up,
you should just be able to do
% cpan [% module %]
Download it, unpack it, then build it as per the usual:
% perl Makefile.PL
% make && make test
Then install it:
% make install
DOCUMENTATION
[% module %] documentation is available as in POD. So you can do:
% perldoc [% module %]
to read the documentation online with your favorite pager.
[% config.author %]
---
file: .shipit
template: |
steps = FindVersion, ChangeVersion, CheckChangeLog, DistTest, Commit, Tag, MakeDist, UploadCPAN
git.push_to = origin
---
file: .gitignore
template: |
MYMETA.*
META.yml
Makefile
inc/
pm_to_blib
*~
|
Tatsuhiko Miyagawa Powered by ViewCVS 1.0-dev |
ViewCVS and CVS Help |