I could not get DateTime to build from the repository using what I guess is the ShipIt process and there's no instructions.
$ shipit Unknown keys in configuration file: hg.push, hg.tagpattern The real problem is that DateTime does not follow the normal Build.PL/Makefile.PL process. DateTime would get more contributions if it could be built and tested straight out of the repository by any decent Perl developer. Anything more complicated risks losing casual contributors (or, in this case, a serious one) either through lost interest or flat out not being able to build the module. I'm sorry I can't supply a patch, but I couldn't get it to build. :-/ That's the executive summary. If you're already convinced you can stop reading now and add the requisite build files to the repository. Detail and argument follows. "But those are generated files and you're not supposed to commit generated files!" Generally speaking, yes, but let's examine this. Why do you not commit generated files? Because they're usually different from machine to machine, like the Makefile from Makefile.PL or Build from Build.PL, so they would not be commonly useful. But things like MANIFEST, MANIFEST.SKIP, Makefile.PL and Build.PL are supposed to be exactly the same from machine to machine. Worse, by not checking in these generated but identical files you risk that they *will not* be identical. That I'll be using a different version of ShipIt than you will, or some other build widget. Different contributors will now be using different build systems causing mysterious bugs and wasting development time. Finally, it just might not work, as it did not in my case. "But serious contributors will learn the build process!" By having a rite of passage you sacrifice casual contributions. And what are serious contributors before they're serious contributors? "Ok, we'll just document the process." Its still extra work for contributors, leading to a wall to climb over, leading to lost contributions. They still might have an incompatibility leading to mysterious differences. And it still just might not work. "You're just lazy!" I'm not just lazy, I am very lazy. So are your contributors. They have better things to do then learn yet another build system. The more walls you put between checking out the code and fixing their problem the more contributors you lose. "You can work from the tarball." Yes, I can. And then I can't easily merge my work with new changes and releases. "Nobody's complained before." Generally, lost contributors do not complain to the developers. They're out of energy and frustrated. And when most people fail at something their impulse is "I fucked up" not "is this system set up to generate failure?" Fortunately for DateTime, I have no such issues. :) What follows is the log of my trying to build DateTime from the repo. At any point of failure in this process a casual contributor would throw up their hands in frustration and walk away. People reading this who are knowledgeable in the build process may be thinking "but you should just do X!" Of course, but I don't know what you know. I'm all fired up to put DateTime on a diet, as Dave and I talked briefly about at OSCON. So I get the latest copy from the repository using the META.yml metadata (excellent) so I'm not working against an outdated version and can keep up with upstream changes. Ok, now, Build.PL... no, no Build.PL. Makefile.PL? No, no Makefile.PL. At this point a normal user stops and gives up, they can't build the software. There's no README or INSTALL file. Fortunately, I see a .shipit file and I'm vaguely aware of the existence of ShipIt. I guess I'll have to build it myself. I find, download and install ShipIt. I read the basic instructions and run "shipit --write-config". "This directory already has a .shipit config file. I won't overwrite it. Aborting." Ok, I guess I don't do that. Let's just try "shipit". $ shipit Failed to load step module ShipIt::Step::DistTestExtra: Can't locate ShipIt/Step/DistTestExtra.pm in @INC (@INC contains: lib /usr/local/perl/5.10.1/lib/5.10.1/darwin-thread-multi-64int-ld-2level /usr/local/perl/5.10.1/lib/5.10.1 /usr/local/perl/5.10.1/lib/site_perl/5.10.1/darwin-thread-multi-64int-ld-2level /usr/local/perl/5.10.1/lib/site_perl/5.10.1 .) at (eval 32) line 1. BEGIN failed--compilation aborted at (eval 32) line 1. Well crap, another module. Ok, install that. $ shipit Failed to load step module ShipIt::Step::DistClean: Can't locate ShipIt/Step/DistClean.pm in @INC (@INC contains: lib /usr/local/perl/5.10.1/lib/5.10.1/darwin-thread-multi-64int-ld-2level /usr/local/perl/5.10.1/lib/5.10.1 /usr/local/perl/5.10.1/lib/site_perl/5.10.1/darwin-thread-multi-64int-ld-2level /usr/local/perl/5.10.1/lib/site_perl/5.10.1 .) at (eval 37) line 1. BEGIN failed--compilation aborted at (eval 37) line 1. Ok, another one. Install that. This one has a lot of deps. $ shipit Unknown keys in configuration file: hg.push, hg.tagpattern I already have ShipIt::VC::Mercurial. There's no obvious next step. Now I give up. -- Ahh email, my old friend. Do you know that revenge is a dish that is best served cold? And it is very cold on the Internet!