in reply to Perl-specific automation tools?

Module::Build is our answer packaging things nicely for sharing with others or installing on prod boxes. You could also use the traditional ExtUtils::MakeMaker.

C/C++ people need make to compile their programs. Pure Perl programs (at least until Perl 6) are compiled on the fly when the program runs. So, we don't need make until we add C code. Then we use make via the modules mentioned above.

Java people need ant (or something like it) as a make replacement because the java compiler is written in java. This means that every time make sees a stale compiled file, it must start a JVM to compile a new version. Starting JVMs is hugely time consuming. Ant starts one JVM and keeps it running for all the compiles.

A tool like Module::Build will compile C as necessary, using make, but otherwise is just an organizer. It has a manifest of the files users need to install. It has a test suite to make sure the packages are working as expected. It has a script (Build) which runs the tests, installs the modules, etc. MakeMaker actually generates a genuine make file to do those things. Since make files are not so easy to maintain, and are not competely standard between make variants, the tide seems to be moving in favor of Module::Build which is pure perl.

Phil

Replies are listed 'Best First'.
Re^2: Perl-specific automation tools?
by JohnMG (Beadle) on Oct 23, 2006 at 14:38 UTC

    C/C++ people need make to compile their programs. {snip} ... Java people need ant {snip} ...

    Right. But there are, of course, other generic tasks you might use Make or Ant for. For example, building documentation after updating it, uploading a static website that gets modified regularly, installing your webapp from the qa server to the production one, and so on.

    Although I tend to use a mix of [MR]akefiles and homegrown scripts for these sorts of things, I'm curious if other Perl users had alternative solutions.

    BTW, Thanks for the links everyone. For my own modules, will read up on Module::Build. :)