Using ExtUtils::MakeMaker for my first co-maint release - Bloom::Filter
After over 7 years, a new release of Bloom::Filter
is out! Thanks to Maciej Ceglowski (MCEGLOWS / @baconmeteor), who was kind enough to give me co-maint permissions. If you don’t know what bloom filter is1, please read “Using Bloom Filters” (article written by Maciej in 2004, but still up-to-date and very interesting). Instead of writing about bloom filters, in this blog post I’d like to concentrate on Perl module release process, as a part of my personal “diving into Perl” process.
First, just a quick summary what’s included new version of Bloom::Filter
:
- two bug reports closed2
- links to GitHub repository
- updated revision history in Changes (as per
CPAN::Changes::Spec
) - cleaned documentation
- tweaked Makefile.PL
As you can see – only minor changes, no new features or optimizations. Still, it was hard for me to deal with “legacy” distibution – written by someone else in 2004, last released in 2007, when Perl was in different shape and some tools didn’t exist yet. Bloom::Filter
is my third module I uploaded on CPAN, but first managed by ExtUtils::MakeMaker
(EUMM). Previously I used Dist::Zilla
(dzil) and Dist::Milla
(milla) to create a module from scratch and release it, which was quite overwhelming in case of Dist:Zilla
(even with great documentation and tutorial), and very easy in case of Dist::Milla
.3
However, what should I do to make a realease of EUMM module was not very obvious to me. Despite I had read few blog posts and tutorials dealing with “How to bootstrap release and manage a Perl module?” topic, none of them actually compared side by side and explained differences between dzil, milla, EUMM and other tools such as Module::Build
, Module::Install
, CPAN::Uploader
4. It was quite confusing for a newbie like me and I had to read documentation of each of these modules to find out if I needed that module or not. As it turned out, managing distribution created with EUMM is harder comparing to Dist::[ZM]illa, because one has to do many things manually. EUMM documentation says it’s just an utility designed to write a Makefile for an extension module from a Makefile.PL. Bearing that in mind, next steps involved digging in EUMM documentation and hacking Makefile.PL. In particular, these are some problems I had to deal with (each of these should actually begin with “Contrary to dzil / milla, …”):
- To maintain compatibility with older EUMM version, I had to remove some features by hand in Makefile.PL. I guess I expected that MakeMaker is actually MakeMakerMaker, which it isn’t, obviously.
- README and LICENCE were not autogenerated and I had to maintain cohesion between Makefile.PL and these files.
- After doing
make dist
there’s no next step to do actual release – tag, push and upload, another tool must be used for that (I usedCPAN::Uploader
).
So I found out EUMM is not a distribution making swiss knife, just a tool for managing Makefile creation process. That said, I don’t see a reason to use “raw” ExtUtils::MakeMaker
or Module::Build
plus some release tool instead of Dist::Milla
– for my needs it’s more than enough, it takes care of all boilercode I don’t need to write, does all git-related release stuff, and changes version all over module.5
Speaking of versioning – according to David Golden’s article, it should be a boring task. It wasn’t, at least this time. I had to face two (actually three, third was, as always in Perl, TIMTOWTDI) issues here:
- There was already 1.1 release on BackPAN (How is that possible?)
What is proper next development release for 1.0? I tried
my $version = Perl::Version->new('1.0'); $version->inc_alpha; say $version;
which is unexpectedly
1_01
, not1.0_01
but forPerl::Version->new('1.1')
it’s actually1.1_01
.
I’ve decided to just do one release for 1.1, without any dev releases. Luckilly, it worked without any problem, although it takes a while to see the release on (Meta)CPAN. Now, when this post is finished, I have to contact some downstream authors, which I know have been using patched version of Bloom::Filter
and point them to the new release.
Oh, there’s this question which I am asking myself: should I move an old (i.e. co-maintained) module to Dist::Milla
, or should it stay on EUMM forever?
-
In few words: bloom filter is a space-efficient probabilistic data structure, which is used to test whether an element is a member of a set (from Wikipedia).↩
-
Actually I don’t know how to filter closed issues which were fixed in 1.1 on RT… Any help?↩
-
I have to write a blog post about my
dzil
andmilla
experiences eventually…↩ -
I deliberately listed tools which aren’t used to same tasks, although my first impression was different.↩
-
Dist::Milla
is also contributor-friendly.↩