[tpm] Makefile and proper use of t/*.t

James E Keenan jkeen at verizon.net
Thu Sep 10 14:44:14 PDT 2009

On Sep 10, 2009, at 9:08 AM, Madison Kelly wrote:

> Hi all,
>   This is a follow-up to my last question on testing. I followed  
> Adam and Michael's advice and read up on and became comfortable  
> with Test::* (Harness, Tutorial, Simple and More, specifically). My  
> test code is much cleaner and more concise now, so thank you again.
>   The two topic I still need help on are;
> Second -
>   The last thing I need to do before I can even think about getting  
> my modules on CPAN is to learn how to create a Makefile.pl. I've  
> looked at other modules for examples, but none have any comments I  
> found useful. I know that there is a reference to using h2xs to  
> create a framework which sets up a module from the beginning, but  
> my modules are already well under way. Also, I'd like to understand  
> the theory better so that my talk next month will be as complete as  
> possible.

You only *really* need h2xs if you're going to be creating C  
extensions with the XS glue language.  That almost certainly is not  
the case here.  Instead you should install CPAN distro  
ExtUtils::ModuleMaker, then use its 'modulemaker' command-line  
utility to prompt you to create the directory and file structure  
needed for CPAN.  Here's a slideshow I prepared on the subject a  
couple of years back.

> First -
>   I couldn't find a good overview of the proper use of the t/*.t  
> files. For now, I've created a base 'test.pl' in the root of my  
> module that makes sure I can do the basics of loading my  
> "parent" (main sibling) module. Then it uses 'require_ok(t/Foo.t)'  
> for each of the test files. The exact name of each *.t file matches  
> the corresponding *.pm file it tests.

Look at the test suite for ExtUtils::ModuleMaker.  Or, for simpler  
cases, the test suite for any of my distros on CPAN:  http:// 

People take different approaches to how they name/number their .t  
files.  Generally speaking, I create one .t file for each exported  
subroutine or public method.   But other approaches are quite  
plausible as well.

Jim Keenan

More information about the toronto-pm mailing list