#!/usr/bin/perl use strict; # use warnings; use Getopt::Long qw(:config no_ignore_case); use PPM::Make; my %opts = (); my @files = (); my %progs = (); my $result = GetOptions(\%opts, 'l|install', 'z|zip', 'f|force', 'i|ignore', 'b|binary=s', 'n|arch_sub', 's|script=s', 'e|exec=s', 'o|os:s', 'a|arch:s', 'v|version', 'h|help', 'r|remove', 'h|html', 'A|as!', 'V|vs', 'x|add=s' => \@files, 'p|program=s' => \%progs, ); if ($opts{v}) { print <<"END"; This is make_ppm, running PPM::Make version $PPM::Make::VERSION. Copyright 2002, Randy Kobes <randy\@theoryx5.uwinnipeg.ca>. This program is distributed under the same terms as Perl itself. END exit; } if ($opts{h} or not $result) { print <<"END"; Usage: $0 [options] [Module | Distribution] Options: [-z | --zip] : make a zip distribution [-f | --force] : force remaking a distribution [-i | --ignore] : ignore any failing test results [-b | --binary] location : specify the binary location [-n | --arch_sub] : use \$Config{archname} as a subdirectory [-s | --script] script : specify a script in the <INSTALL> field [-x | --add] file : add specified extra files to the archive [-e | --exec] exec : specify the executable to run the <INSTALL> script [-x | --add] file : add file to the archive [-o | --os] os : use os for the <OS> field [-a | --arch] arch : use arch for the <ARCHITECTURE> field [-v | --version] : print version information and exit [-h | --help] : print this help screen [-l | --install] : install the package after building [-r | --remove] : remove the build directory after installation [-p | --program] b=a : specify "a" to be used for the "b" program [-A | --as] : add Perl version number to ARCHITECTURE (>= 5.8) [-V | --ppmv] : add version string to ppd and archive filenames Additional Arguments: Module : specify a module to fetch (requires CPAN.pm) Distribution : specify a distribution to fetch With no arguments, make_ppm will build a distribution inside the current directory. See 'perldoc make_ppm'. END exit; } my $dist = shift; my $ppm = PPM::Make->new(zip => $opts{z}, force => $opts{f}, ignore => $opts{i}, binary => $opts{b}, dist => $dist, script => $opts{'s'}, exec => $opts{e}, os => $opts{o}, arch => $opts{a}, arch_sub => $opts{n}, install => $opts{l}, clean => $opts{r}, add => \@files, program => \%progs, as => $opts{A}, vs => $opts{V}, ); $ppm->make_ppm(); __END__ =head1 NAME make_ppm - script to make a PPM distribution =head1 SYNOPSIS make_ppm [options] [Module | Distribution] # make a PPM from within an already unpacked source distribution C:\.cpan\build\package_src> make_ppm # fetch from CPAN a module distribution and build a PPM C:\.cpan\build> make_ppm Net::FTP # fetch a distribution and build a PPM C:\.cpan\build> make_ppm ftp://wherever.com/package.tar.gz =head1 DESCRIPTION C<make_ppm> is an interface to the C<PPM::Make> module, and is used to build a PPM (Perl Package Manager) distribution from a CPAN source distribution. See L<PPM::Make> for a discussion. Apart from the options described below, without any arguments C<make_ppm> will assume it is inside an unpacked source distribution and make the corresponding PPM distribution. If it is given an argument of what looks like a module name (eg, I<Net::FTP>), it will use C<CPAN.pm> to look up the corresponding distribution and fetch and build it. Otherwise, additional arguments (eg, F<package.tar.gz>, or I<http://someplace.org/package.tar.gz>) will be interpreted as distributions to fetch and build. Available options include: =over =item [-z | --zip] By default, C<make_ppm> will build a C<.tar.gz> distribution if possible. This option forces a C<.zip> distribution to be made. =item [-f | --force] By default, if C<make_ppm> detects a F<blib/> directory, it will assume the distribution has already been made, and will not remake it. This option forces remaking the distribution. =item [-i | --ignore] By default, C<make_ppm>, if it is building the distribution, will die if all tests do not pass. Turning on this option instructs C<make_ppm> to ignore any test failures. =item [-b | --binary] location I<location> is used as the value for the C<BINARY_LOCATION> attribute passed to C<perl Makefile.PL>, and is used in setting the I<HREF> attribute of the I<CODEBASE> field in the ppd file. =item [-n | --arch_sub] This option will insert the value of C<$Config{archname}> (or the value of the I<-a> option, if given) as a relative subdirectory in the I<HREF> attribute of the I<CODEBASE> field in the ppd file. =item [-o | --os] os If this option is specified, the value, if present, will be used instead of the default for the I<NAME> attribute of the I<OS> field of the ppd file. If no value is supplied, the I<OS> field will not be included in the ppd file. =item [-a | --arch] arch If this option is specified, the value, if present, will be used instead of the default for the I<NAME> attribute of the I<ARCHITECTURE> field of the ppd file. If no value is specified, the I<ARCHITECTURE> field will not be included in the ppd file. =item [-s | --script] script This will be used in the I<PPM_INSTALL_SCRIPT> attribute passed to C<perl Makefile.PL>, and arises in setting the value of the I<INSTALL> field in the ppd file. =item [-e | -- exec] exec This will be used in the I<PPM_INSTALL_EXEC> attribute passed to C<perl Makefile.PL>, and arises in setting the I<EXEC> attribute of the I<INSTALL> field in the ppd file. This defaults to C<perl> when a value of I<script> is specified. =item [-x | --add] file This option, which can be specified multiple times, can be used to add additional files outside of the the F<blib> directory to the archive. =item [-l | --install] If specified, the C<ppm> utility will be used to install the module. =item [-r | --remove] If specified, the directory used to build the ppm distribution given on the command line will be removed after a successful install. =item [-p | --prog] program=/path/to/program This option specifies that C</path/to/program> should be used for C<program>, rather than the one PPM::Make finds. This option can be specified multiple times, with C<program> being one of C<tar>, C<gzip>, C<zip>, C<unzip>, or C<make>. =item [-A | --as] Beginning with Perl-5.8, Activestate adds the Perl version number to the NAME of the ARCHITECTURE tag in the ppd file. This option, which is enabled by default, will make a ppd file compatible with this practice. Specify C<--noas> to disable this option. =item [-V | --vs] This option will add a version string (based on the VERSION reported in the ppd file) to the ppd and archive filenames. =item [-h | --help] This prints out a short help screen and exits. =item [-v | --version] This prints out some version information and exits. =back =head1 COPYRIGHT This program is copyright, 2002, by Randy Kobes <randy@theoryx5.uwinnipeg.ca>. It is distributed under the same terms as Perl itself. =head1 SEE ALSO L<PPM::Make>, and L<PPM>. =cut