Making CPAN dists

TorgoX on 2002-09-30T05:27:05

Dear Log,
So I wrote this little dealy today for automating the process of building the dist of a CPAN module. It seems to work. Does it look right?

#!/usr/bin/perl
# Time-stamp: "2002-09-29 23:13:56 MDT"

die "What to make?" unless -e "Makefile.PL";

my %preexisting;
@preexsting{ glob('*.tar.gz') } = ();

system( "perl Makefile.PL && make manifest && make disttest && make dist && make clean" ) and die;

my @new = grep !exists $preexisting{$_}, glob('*.tar.gz');
die "No new .tar.gz's !?!" unless @new;
die "Too many new .tar.gz's !!" unless @new == 1;
my $new = $new[0];
system(" chmod a+r $new && mv $new ~/public_html/ ");
exit;
__END__


system and die; feel bad

sky on 2002-09-30T09:29:35

First of all (from merlyn)

system "perl Makefile.PL" and die; system "make", qw(manifest disttest dist clean) and die;

or

!system "perl Makefile.PL" or die; !system "make", qw(manifest disttest dist clean) or die;

to make it more parsable for atleast my mind.

make disttest dist

Matts on 2002-10-01T06:55:49

doing a make disttest followed by a make dist on the perls I use puts the entire disttest directory into the distro, doubling its size and making it build twice when you unpackage it. I'm not sure if/when that bug was fixed.

I like this script

oneiron on 2002-10-01T08:37:20

I have always created my CPAN tarballs by hand, so I was delighted to try your script and I like it (apart from the 'preexsting' typo ;). I suppose you might replace:

system(" chmod a+r $new && mv $new ~/public_html/ ");

with something like:

chmod(0644, $new) or die "chmod '$new' failed: $!";
rename($new, "$ENV{HOME}/public_html/$new") or die "rename '$new' failed: $!";

One annoyance I noticed is that it seems to put MANIFEST.bak and Makefile.old into the tarball. Also, is it correct practice to stuff Makefile (in addition to Makefile.PL) into CPAN distributions?

Re:I like this script

TorgoX on 2002-10-01T09:15:31

Oops, I forgot to mention my MAKEFILE.SKIP file, which I think I inherited from someone...
^MANIFEST\.bak$
Makefile(\.old)?$
\.rej$
CVS
blib
~

Maybe I should add "^dist" and/or "^disttest" to that?

I like your (and everyone's) suggestions. I'll work them in.

Re:I like this script

oneiron on 2002-10-01T10:17:53

TorgoX, I think you meant MANIFEST.SKIP and not MAKEFILE.SKIP. I have got it working nicely now, though I found the MANIFEST.SKIP file to be tempermental in the extreme. This is my MANIFEST.SKIP:

^MANIFEST\.
^Makefile$
\.old$
^blib/

For a while, I was plagued by the "double distribution" problem mentioned by Matts, but I deleted my MANIFEST file and have not seen this problem since (I am running Perl 5.6.1).