Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re: ExtUtils::ModuleMaker

by Dog and Pony (Priest)
on Jun 11, 2002 at 15:32 UTC ( #173518=note: print w/ replies, xml ) Need Help??


in reply to ExtUtils::ModuleMaker

First of all, thanks for this. I've been using your script for a while, because I find this way much easier than the H2XS way. I just discovered that a new feature has been added to ExtUtils::ModuleMaker that I thought I'd share with the rest of you.

If you add

compact => 1,
to the arguments to Generate_Module_Files it produces the directory "Foo-Bar" instead of "Foo/Bar", which apparently is what you want to make it easier to make for instance a CPAN distribution (see link below).

It still doesn't add the version number, as recommended in the excellent How to make a CPAN Module Distribution, but now it is much easier to do that too. The following lines, added to your script (together with the "compact" argument) takes care of this:

my $dir_name = $module_name; $dir_name =~ s/::/-/g; print STDERR "renaming '$dir_name' to '$dir_name-$version'\n"; rename $dir_name, "$dir_name-$version" or warn "Could not rename '$dir_name' to '$dir_name-$version': $!" +;
Just so we all can be even more lazy... :)

Note that you must upgrade ExtUtils::ModuleMaker to a newer version for this to work, I am using version 0.204, while whatever the last one I had was, did not have the compact parameter.


You have moved into a dark place.
It is pitch black. You are likely to be eaten by a grue.


Comment on Re: ExtUtils::ModuleMaker
Select or Download Code
Re: Re: ExtUtils::ModuleMaker
by ignatz (Vicar) on Jul 21, 2002 at 15:44 UTC
    Here's my revamp of simonflk's utility rolling in D&P's compact stuff:

    STANDARD COMPACT USAGE:

    $> newmodule -name Foo::Bar -version 0.01 -compact 1
    $> newmodule -n Foo::Bar -v 0.01 -c 1
    
    COMPACT USAGE WITH VERSION # IN FOLDER NAME:
    $> newmodule -name Foo::Bar -version 0.01 -compact 2
    $> newmodule -n Foo::Bar -v 0.01 -c 2
    $> newmodule -n Foo::Bar -v 0.01 (My Default Setting)
    
    DEFAULT FOLDER NAMING USAGE:
    $> newmodule -name Foo::Bar -version 0.01 -compact 0
    $> newmodule -n Foo::Bar -v 0.01 -c 0
    
    #!/usr/bin/perl use strict; use warnings; use Getopt::Long; use ExtUtils::ModuleMaker 0.204; my %author = ( NAME => 'Christopher Baker', EMAIL => 'ignatz@ignatzmouse.com', # CPANID => 'IGNATZ', Someday *SIGH* WEBSITE => 'http://www.ignatzmouse.com' ); # Set some defaults my $license = 'perl'; my $version = '0.01'; my $module_name = ''; my $compact = 2; my $extra_modules = ''; my @extra_modules = (); GetOptions ( 'name=s' => \$module_name, 'version:f' => \$version, 'license:s' => \$license, 'extra:s' => \$extra_modules, 'compact:i' => \$compact ); Usage() unless $module_name; ###################################################################### +######### # Now make the module ###################################################################### +######### push @extra_modules, {NAME => $_, ABSTRACT => $_} for split /,/, $extra_modules; Generate_Module_Files ( NAME => $module_name, ABSTRACT => $module_name, AUTHOR => \%author, VERSION => $version, LICENSE => $license, compact => $compact, # Module uses wrong option case, not C +OMPACT EXTRA_MODULES => \@extra_modules ); if ($compact == 2) { my $dir_name = $module_name; $dir_name =~ s/::/-/g; print STDERR "renaming '$dir_name' to '$dir_name-$version'\n"; rename $dir_name, "$dir_name-$version" or warn "Could not rename '$dir_name' to '$dir_name-$version': + $!"; } sub Usage { my ($prog) = $0 =~ /\/([^\/]+)$/; print <<HELP; $prog - Simple Module Maker Usage: $prog <-name ModuleName> [-version=?] [-extra=?,?] [-license=?] + [-compact=?] Eg: $prog -name My::Module $prog -name My::Module -version 0.11 -extra My::Utils,My::Extra -license perl HELP }
    ()-()
     \"/
      `                                                     
    
      compact        => $compact, # Module uses wrong option case, not COMPACT

      Not anymore, at least as of version 0.32. Couldn't find anything in the changelog regarding the switch, but it's 'correctly' capitalized now. Just wanted to give a heads up.

      If you execute this script in the same directory as it and you don't pass any parameters, your Usage() doesn't construct $prog correctly.
      my ($prog) = $0 =~ /\/([^\/]+)$/; ---- Change to: use File::Basename; ... my ($prog) = basename($0);

      ------
      We are the carpenters and bricklayers of the Information Age.

      The idea is a little like C++ templates, except not quite so brain-meltingly complicated. -- TheDamian, Exegesis 6

      Please remember that I'm crufty and crochety. All opinions are purely mine and all code is untested, unless otherwise specified.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://173518]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (19)
As of 2014-10-20 19:08 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    For retirement, I am banking on:










    Results (89 votes), past polls