first cut at Distar
[p5sagit/Distar.git] / lib / Distar.pm
CommitLineData
42e08a83 1package Distar;
2
3use strictures 1;
4use base qw(Exporter);
5
6our @EXPORT = qw(
7 author manifest_include
8);
9
10sub import {
11 strictures->import;
12 shift->export_to_level(1,@_);
13}
14
15sub author { our $Author = shift }
16
17our @Manifest = (
18 'lib' => '.pm',
19 't' => '.t',
20 't/lib' => '.pm',
21 'xt' => '.t',
22 'xt/lib' => '.pm',
23 '' => '.PL',
24 '' => qr{Changes|MANIFEST|README|META\.yml},
25 '' => qr{t/smells-of-vcs/.svn},
26 'maint' => qr{[^.].*},
27);
28
29sub manifest_include {
30 push @Manifest, @_;
31}
32
33sub write_manifest_skip {
34 use autodie;
35 my @files = @Manifest;
36 my @parts;
37 while (my ($dir, $spec) = splice(@files, 0, 2)) {
38 my $re = ($dir ? $dir.'/' : '').
39 ((ref($spec) eq 'Regexp')
40 ? $spec
41 : !ref($spec)
42 ? ".*\Q${spec}\E"
43 : die "spec must be string or regexp, was: ${spec} (${\ref $spec})");
44 push @parts, $re;
45 }
46 my $final = '^(?!'.join('|', map "${_}\$", @parts).')';
47 open my $skip, '>', 'MANIFEST.SKIP';
48 print $skip "${final}\n";
49 close $skip;
50}
51
52sub MY::postamble { <<'END'; }
53upload: $(DISTVNAME).tar$(SUFFIX)
54 cpan-upload $<
55release: upload
56 git commit -a -m "Release commit for $(VERSION)"
57 git tag release_$(VERSION)
58 git push
59 git push --tags
60END
61
62{
63 no warnings 'redefine';
64 sub main::WriteMakefile {
65 my %args = @_;
66 system("pod2text $args{VERSION_FROM} >README");
67 ExtUtils::MakeMaker::WriteMakefile(
68 @_, AUTHOR => our $Author, ABSTRACT_FROM => $args{VERSION_FROM},
69 test => { TESTS => ($args{test}{TESTS}||'').' xt/*.t' },
70 );
71 }
72}
73
74END {
75 write_manifest_skip()
76}
77
781;