NAME
   cpan2rpm - A Perl module packager

SYNOPSIS
   cpan2rpm [options] <module>

DESCRIPTION
   This script will generate an RPM package from a Perl module. It uses the
   standard RPM file structure and creates a spec file, a source RPM, and a
   binary, leaving these in their respective directories.

   The directory structure used follows the definition rules RPM uses
   whereby /usr/lib/rpm/macros is used by default but may be overridden by
   macros in /etc/rpm/macros and ~/.rpmmacros in that order.

   If the <module> passed is either a CPAN module name (e.g. XML::Simple)
   or a URL (both http:// and ftp:// style locators will work) the script
   automatically downloads the given module (when CPAN module names are
   specified, the latest distribution is used), putting it in the SOURCES
   directory. If <module> is a local filename reference (e.g.
   /tmp/XML-Simple-1.05.tar.gz), the tarball gets copied to the SOURCES
   directory.

   Headers in the spec will generally assume any values configured in the
   RPM macro files as described above. Use of any particular option will
   override the internally calculated or configured values. Whenever a
   header is neither configured in the RPM macro files nor is passed at the
   command line, the script will seek to calculate a proper value and
   supplies a default as stated for each option below. It is thus typicall
   sufficient to provide only the <module>.

   The `options' available are as follows:

   *--pkgname=`string-value'*
     The RPM package name. This is the `Name' header in the RPM's spec
     file. Please note that the string `perl-' will be prepended to any
     value passed here. If no value is supplied, the script will use the
     NAME field found in the module's Makefile.PL

   *--version=`float-value'*
     The script determines the version number of the module by parsing the
     tarball name.

   *--release=`integer-value'*
     The package release number. Defaults to 1.

   *--summary=`string-value'*
     A one-line description of the package. If left unspecified the script
     will use the module name, appending an abstract whenever available.

   *--description=`string-value'*
     This text describes the package/module. This value is picked up from
     the POD in the module. Defaults to "None.".

   *--url=`string-value'*
     The home url for the package. Defaults to http://www.cpan.org.

   *--group=`string-value'*
     This is the RPM group. For further information on available groups
     please see your RPM documentation. Defaults to `Applications/CPAN'.

   *--author=`string-value'*
     This is the name and address of the person who authored the module.
     Typically it should be in the format: *Name <e-mail-address>*. If left
     unspecified, the script will attempt to extract it from the tarball's
     MakeMaker file, failing to build the package otherwise. There is no
     default for this option.

   *--packager=`string-value'*
     This is you (if you're packaging someone else's module). The string
     should be in the same format as for --author and defaults to: `Arix
     International <[email protected]>' unless the RPM macro files provide
     a value.

   *--license=`string-value'*
     The license header specified in the spec file. This field is also
     sometimes referred to as *Copyright*, but *License* is a more suitable
     name and has become more common. Defaults to `Artistic', Perl's own
     license.

   *--distribution=`string-value'*
     The script will use the %{distribution} tag defined in the RPM macros
     file. If this tag is not set, the script will attempt to determine the
     distribution name by looking at the /etc/issue file. If this file does
     not exist, the distribution will be left blank.

   *--buildarch=`string-value'*
     Allows specification of an architecture for building the RPM.
     Currently defaults to `i386'.

   *--buildroot=`string-value'*
     Allows specifying a directory to use as a BuildRoot. Don't mess with
     this is you don't know what it is. Defaults to:
     `%{_tmppath}/%{name}-%{version}'.

   *--provides=`string-value'*
     Indicates that a package should be provided by the module being built.
     RPM will generate an appropriate list of provided dependencies and any
     passed here will be *in addition* to those calculated.

   *--requires=`string-value'*
     Indicates packages that should be required for installation. This
     option works precisely as --requires above.

   *--no-requires=`string-value'*
     Suppresses generation of a given required dependency. Sometimes
     authors create dependencies on modules the packager can't find,
     sometimes RPM generates spurious dependencies. This option allows the
     packager to arbitrarily supress a given requirement. The value may be
     a comma-separated list.

   *--spec-only*
     This option instructs the script to not build the RPM package but
     instead to oly display the generated spec file on stdout.

   *--make-maker=`string-value'*
     This option allows passing a string to the MakeMaker process (i.e.
     perl Makefile.PL <your-arguments-here>)

   *--nopkgprfx*
     Suppresses prefixing the package name with the string `perl-'.

   *--force*
     By default the script will do as little work as possible i.e. if it
     has alreaddy previously retrieved a module from CPAN, it will not
     retrieve it again. If it has already generated a spec file it will not
     generate it again. This option allows the packager to force all
     actions, starting from scratch.

   *--debug[=n]*
     This option produces debugging output. An optional integer increases
     the level of verbosity for this output. If no integer is given, 1 is
     assumed.

   *--help, -h*
     Displays a terse syntax message.

NOTES
   This script requires that RPM be installed. Both rpm and rpm-build must
   be installed on the local machine. Please see the RPM documentation (man
   rpm) for further information.

   Additionally, the Perl module will be needed :) and the CPAN module
   (which is bundled with the Perl distribution) will need to be
   configured. For further information please refer to the CPAN manpage.

TODO
   I'm happy to work on any feature requests you may send me :) but in the
   meantime these are the things waiting for attention:

BUGS
   Same goes for bugs.

AUTHOR & LICENSE
   Written by Erick Calder <[email protected]>. This utility is free and
   distributed under GPL, the Gnu Public License.

   The script was inspired by cpanflute which is distributed with the
   rpm-build package from RedHat. Many thanks to Robert Brown
   <[email protected]> for all his cool tricks, advice and patient support.

AVAILABILITY
   The latest version may always be found at:

   http://perl.arix.com/

CHANGES
   $Log: cpan2rpm,v $ Revision 1.46 2002/05/31 23:59:33 ekkis - changed
   shebang line to make MakeMaker happy (thx Hook BOT)

   Revision 1.45 2002/05/31 23:35:40 ekkis - redesigned the %files section
   (at the suggestion of Eric Kolve [[email protected]]) to fix
   problems with modules that contain XS e.g. DBI - added a smart %doc
   section which picks up documentation from the tarball (with help from
   Hook-BOT (Bob Brown <[email protected]>) for file regexp) - now uses
   %{_prefix} to list files which is better than /usr since it allows
   redefinition e.g. _prefix=/usr/local (Hook-BOT) - trimmed descriptions
   and reformatted ad banner - improved %clean section with code that wipes
   the extracted source tree structure after building (which can bloat disk
   badly when doing a lot of rpms) - thx Hook-BOT! - fixed --spec-only (thx
   Eric Kolve)

   Revision 1.44 2002/05/29 16:32:10 bbb ~/.rpmmacros

   Revision 1.43 2002/05/28 23:32:29 ekkis changed e-mail addresses

   Revision 1.42 2002/05/28 23:13:28 bbb Same as second round "1.3" but in
   the right place now.

   Revision 1.5 2002/05/23 02:55:37 ekkis adding "use strict" forces
   Makefile.PL to be eval()uated that way so had to add "no strict" to eval
   string. Also added warning in case eval fails.

   Revision 1.4 2002/05/23 02:43:43 ekkis added use strict

   Revision 1.3 2002/05/23 02:14:04 ekkis oops, small patch

   Revision 1.2 2002/05/23 02:13:07 ekkis added --nopkgprfx in case we want
   to build RPMs without a prepended "perl-" (as in the case of
   cpan2rpm<g>)

   Revision 1.1 2002/05/22 23:47:59 ekkis Moved from dist to .

   Revision 1.40 2002/05/22 23:03:35 ekkis since we're no longer including
   the package version number in the spec filename when building multiple
   versions of the same package we're force to --force. this makes no sense
   to the script will now _always_ build the spec file

   Revision 1.39 2002/05/19 01:04:44 ekkis still haveing problem with DBI -
   couldn't figure out how to eval() Makefile.PL so assuming pkgname from
   module (or passed)

   Revision 1.38 2002/05/18 22:55:00 ekkis - patched to allow calls like
   "use ExtUtils::MakeMaker qw(WriteMakefile)"... note this currently only
   works with () and will fail with qw//. Due to DBI calls. - also changed
   MyExit() to die() instead since we really do need for the script to exit
   but without exiting us! - patched to allow for calls like
   ExtUtils::MakeMaker::WriteMakefile() as found in DBD::mysql

   Revision 1.37 2002/05/07 04:21:49 ekkis added --make-maker parameter

   Revision 1.36 2002/04/23 00:29:24 ekkis - implemented protection of my
   variables from Makefile.PL being eval()d by surrounding that code with a
   package. Considered the Safe module but decided against another
   dependency.

   Revision 1.35 2002/04/22 23:19:13 ekkis --provides and --requires
   weren't working

   Revision 1.34 2002/04/18 08:32:53 ekkis - put back code to generate
   name/e-mail addr of packager (uses hostname()) - added END {} code to
   make sure we clean up. $SIG{__DIE__} works only for die() calls - now
   picks up AUTHOR from tarball POD when possible - modified version
   parsing code to allow versions with alpha - redesigned tarls(). now
   context sensitive, much better way to determine embedded directory -
   writefile() now checks for existence

   Revision 1.33 2002/04/17 08:52:43 ekkis - some bug fixes - {force}
   implementation for get_url()

   Revision 1.32 2002/04/17 08:40:50 ekkis - added --no-requires,
   --find-provides, --find-requires and --install options - now can receive
   a URL to download from - reimplemented MyExit for eval()ing Makefile.PL
   - enhancements to writefile()

   Revision 1.31 2002/04/16 04:06:53 ekkis ripped out all dependency
   (provides,requires) generation code as the newer rpm-buid generates this
   correctly

   Revision 1.30 2002/04/12 17:22:35 ekkis - filelist is now abstracted -
   cool new method for extracting CVS version without breaking emacs - new
   regexp for splitting path/filename from given $info{module}

   Revision 1.29 2002/04/09 23:00:16 ekkis took out %define version and
   release as it causes recursive behaviour

   Revision 1.28 2002/04/09 22:20:41 ekkis - better relative path handling
   - now prepends url to Source: field when available via CPAN - BuildRoot
   more automated now

   Revision 1.27 2002/04/09 08:25:00 ekkis - now requires version 0.59 or
   greater of CPAN as previous versions are problema tic - implemented use
   of RPM macros to figure outdirectory structures. script now p arses the
   various macro definition files and does recursive expansions to figure
   out correct values... see docs. - added support for a full-path tarball
   specification. this allows the user to call cpan2rpm with any tarball
   anywhere. The tarball will be copied to SOURCES. - defined %version,
   %release - added Rob Brown's perlver %defines - BuildRoot now defaults
   to the standard %{_tmpdir} - removed version number from spec filename -
   now scans only usr/lib in tmpdir for modules (should give better
   Provides headers since we don't pick up .pm files in other directories
   like examples/) - added code to figure out real module dependencies
   (PREREQ_PM is unreliable) - now attempts to read VERSION_FROM if neither
   ABSTRACT nor ABSTRACT_FROM is provided. failing that it will take the
   module name (minus any parent info, plus appropriate extension e.g.
   Ping.pm from Net::Ping), and if that file exists will scan it for POD

   Revision 1.26 2002/04/08 22:30:35 ekkis now requires CPAN version 0.59
   as previous versions seem broken added to TODO list

   Revision 1.25 2002/04/07 09:18:19 ekkis hijacked exit() for the
   Makefile.PL eval since certain modules exit on us (not very exciting)
   e.g. POE

   Revision 1.24 2002/04/07 02:31:00 ekkis fixed generation of dependencies
   on Perl core modules (not allowed)

   Revision 1.23 2002/04/07 01:15:33 ekkis removed dashed lines from
   CHANGES section... don't konw thy CVS does use this in keyword
   expansion!

   Revision 1.22 2002/04/07 01:12:24 ekkis added old Log info

   Revision 1.21 2002/04/07 01:09:01 ekkis tarball maker now calls system()
   instead of qx// so user can see prompts added CHANGES section

   revision 1.20 date: 2002/04/07 00:06:20; author: ekkis; state: Exp;
   lines: +4 -1 added back author info retrieval from CPAN when possible

   revision 1.19 date: 2002/04/06 23:45:25; author: ekkis; state: Exp;
   lines: +4 -2 added availability section to pod

   revision 1.18 date: 2002/04/06 23:43:00; author: ekkis; state: Exp;
   lines: +6 -8 changed default for license to "Artistic" as most modules
   are released under Perl's own license.

   revision 1.17 date: 2002/04/06 23:13:31; author: ekkis; state: Exp;
   lines: +2 -2 removed spaces before =head1 NAME - he cares!!

   revision 1.16 date: 2002/04/06 23:03:28; author: ekkis; state: Exp;
   lines: +2 -2 a fix for a fix

   revision 1.15 date: 2002/04/06 22:51:36; author: ekkis; state: Exp;
   lines: +2 -2 fixed docs

   revision 1.14 date: 2002/04/06 22:47:40; author: ekkis; state: Exp;
   lines: +33 -19 added --debug added -n in calls to silence questions from
   Makefile.PL (may not always work) now makes sure /tmp/cpan2rpm exists,
   creates as needed

   revision 1.13 date: 2002/04/06 02:34:15; author: ekkis; state: Exp;
   lines: +18 -1 status info

   revision 1.12 date: 2002/04/06 01:57:31; author: ekkis; state: Exp;
   lines: +8 -5 enhancement for f2mod() to generate RPM dependencies

   revision 1.11 date: 2002/04/06 01:51:22; author: ekkis; state: Exp;
   lines: +71 -68 various fixes incorporated provides() into get_meta()
   correctly generates Provides header

   revision 1.10 date: 2002/04/06 00:01:15; author: ekkis; state: Exp;
   lines: +55 -22 added f2mod() enhancements to untar() now generates
   Provides headers

   revision 1.9 date: 2002/04/05 22:37:05; author: ekkis; state: Exp;
   lines: +167 -102 major code reorg now uses ExtUtils::Installed for
   platform independent module listings added --provides and --spec-only

   revision 1.8 date: 2002/04/05 05:29:57; author: ekkis; state: Exp;
   lines: +2 -2 fixed regexp for tardir

   revision 1.7 date: 2002/04/05 02:07:25; author: ekkis; state: Exp;
   lines: +33 -20 now eval()s Makefile.PL instead of parsing it also looks
   up DESCRIPTION from module file for spec file

   revision 1.6 date: 2002/04/04 03:55:27; author: ekkis; state: Exp;
   lines: +2 -2 fixed embedded >s in tags

   revision 1.5 date: 2002/04/04 03:47:34; author: ekkis; state: Exp;
   lines: +15 -5 added author support

   revision 1.4 date: 2002/04/04 02:20:32; author: ekkis; state: Exp;
   lines: +105 -83 general cleanup now excepts core Perl modules from RPM
   dependencies now supports ABSTRACT_FROM improved PREREQ_PM handling
   (with Provides: clause)

   revision 1.3 date: 2002/04/03 12:33:14; author: ekkis; state: Exp;
   lines: +38 -18 various bug fixes

   revision 1.2 date: 2002/04/03 11:08:32; author: ekkis; state: Exp;
   lines: +144 -142 now retrieves metadata from tarball

   revision 1.1 date: 2002/04/03 10:57:00; author: ekkis; state: Exp;
   branches: 1.1.1; Initial revision

   revision 1.1.1.1 date: 2002/04/03 10:57:00; author: ekkis; state: Exp;
   lines: +0 -0 Initial import