Created
September 27, 2008 21:09
-
-
Save dann/13374 to your computer and use it in GitHub Desktop.
pmsetup
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/perl | |
use strict; | |
use warnings; | |
use ExtUtils::MakeMaker qw(prompt); | |
use File::Basename; | |
use File::Path; | |
use File::Spec; | |
use Template; | |
use YAML; | |
use Config::Pit; | |
my $config = pit_get( | |
"pmsetup", | |
require => { | |
author => "your username", | |
email => "your email", | |
workdir => "$ENV{HOME}/tmp", | |
} | |
); | |
$config->{author} | |
|| $config->{email} | |
|| $config->{workdir} | |
|| die("no settings"); | |
-e $config->{workdir} || mkdir $config->{workdir}, 0777; | |
my $modname = shift @ARGV or die "Usage: $0 module¥n"; | |
$modname =‾ s/-/::/g; | |
write_plugin_files( $modname, $config ); | |
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 | |
}; | |
for my $tmpl (@template) { | |
my $file = $tmpl->{file}; | |
$file =‾ s/(¥$¥w+)/$1/eeg; | |
write_file( $file, $tmpl->{template}, $vars ); | |
chmod oct( $tmpl->{chmod} ), $tmpl->{file} if $tmpl->{chmod}; | |
} | |
!system "perl Makefile.PL" or die $?; | |
!system 'make test' or die $?; | |
!system 'make manifest' or die $?; | |
!system 'make distclean' or die $?; | |
init_git_repo(); | |
} | |
sub init_git_repo { | |
!system 'git init' or die $?; | |
!system 'git add *.*' or die $?; | |
!system 'git add README' or die $?; | |
!system 'git add Changes' or die $?; | |
!system 'git add .gitignore' or die $?; | |
!system 'git add .shipit' or die $?; | |
!system 'git add lib' or die $?; | |
!system 'git add t' or die $?; | |
!system 'git add t/author' or die $?; | |
!system 'git commit -m "initial commit"' 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; | |
} | |
=pod | |
original L<http://svn.bulknews.net/repos/public/misc/pmsetup> | |
original L<http://coderepos.org/share/browser/lang/perl/misc/pmsetup/yappo-pmsetup> | |
=cut | |
__DATA__ | |
--- | |
file: Makefile.PL | |
template: | | |
use inc::Module::Install; | |
name '[% dist %]'; | |
all_from 'lib/[% path %]'; | |
requires $_ for (qw/ /); | |
build_requires 'Test::More'; | |
use_test_base; | |
auto_include; | |
WriteAll; | |
--- | |
file: t/00_compile.t | |
template: | | |
use strict; | |
use Test::More tests => 1; | |
BEGIN { use_ok '[% module %]' } | |
--- | |
file: t/author/dependency.t | |
template: | | |
use Test::Dependencies | |
exclude => [qw/Test::Dependencies Test::Base Test::Perl::Critic [% module %]/], | |
style => 'light'; | |
ok_dependencies(); | |
file: t/author/podspell.t | |
template: | | |
use Test::More; | |
eval q{ use Test::Spelling }; | |
plan skip_all => "Test::Spelling is not installed." if $@; | |
add_stopwords(map { split /[¥s¥:¥-]/ } <DATA>); | |
$ENV{LANG} = 'C'; | |
set_spell_cmd("aspell list"); | |
all_pod_files_spelling_ok('lib'); | |
__DATA__ | |
[% config.author %] | |
[% module %] | |
--- | |
file: t/author/perlcritic.t | |
template: | | |
use strict; | |
use Test::More; | |
eval { use Test::Perl::Critic -profile => 't/author/perlcriticrc' }; | |
plan skip_all => "Test::Perl::Critic is not installed." if $@; | |
all_critic_ok('lib'); | |
--- | |
file: t/author/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: t/perlcriticrc | |
template: | | |
[TestingAndDebugging::ProhibitNoStrict] | |
allow=refs | |
--- | |
file: Changes | |
template: | | |
Revision history for Perl extension [% module %] | |
0.01 [% localtime %] | |
* original version | |
--- | |
file: lib/$path | |
template: | | |
package [% module %]; | |
use strict; | |
use warnings; | |
our $VERSION = '0.01'; | |
1; | |
__END__ | |
=head1 NAME | |
[% module %] - | |
=head1 SYNOPSIS | |
use [% module %]; | |
=head1 DESCRIPTION | |
[% module %] is | |
=head1 AUTHOR | |
[% config.author %] E<lt>[% config.email %]E<gt> | |
=head1 SEE ALSO | |
=head1 LICENSE | |
This library is free software; you can redistribute it and/or modify | |
it under the same terms as Perl itself. | |
=cut | |
--- | |
file: MANIFEST.SKIP | |
template: | | |
¥bRCS¥b | |
¥bCVS¥b | |
^MANIFEST¥. | |
^Makefile$ | |
‾$ | |
^# | |
¥.old$ | |
^blib/ | |
^pm_to_blib | |
^MakeMaker-¥d | |
¥.gz$ | |
¥.cvsignore | |
^t/9¥d_.*¥.t | |
^t/perlcritic | |
^xt/ | |
^tools/ | |
¥.svn/ | |
¥.git/ | |
^[^/]+¥.yaml$ | |
^[^/]+¥.pl$ | |
^¥.shipit$ | |
--- | |
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 | |
chmod: 0644 | |
template: | | |
steps = FindVersion, ChangeVersion, CheckChangeLog, DistTest, Commit, Tag, MakeDist, UploadCPAN | |
git.tagpattern = release-%v | |
git.push_to = origin | |
--- | |
file: .gitignore | |
template: | | |
cover_db | |
META.yml | |
Makefile | |
blib | |
inc | |
pm_to_blib | |
MANIFEST | |
Makefile.old |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment