]> git.vpit.fr Git - perl/modules/CPANPLUS-Dist-Gentoo.git/blobdiff - lib/CPANPLUS/Dist/Gentoo.pm
Make 'overlay' default to the first overlay listed in PORTDIR_OVERLAY
[perl/modules/CPANPLUS-Dist-Gentoo.git] / lib / CPANPLUS / Dist / Gentoo.pm
index c86573c0e17f3053f009551419643bfce310e19f..ef52fe895d2d6c8d78bbe2d9d2cf064e1e92b76f 100644 (file)
@@ -26,31 +26,123 @@ CPANPLUS::Dist::Gentoo - CPANPLUS backend generating Gentoo ebuilds.
 
 =head1 VERSION
 
-Version 0.10
+Version 0.11
 
 =cut
 
-our $VERSION = '0.10';
+our $VERSION = '0.11';
 
 =head1 SYNOPSIS
 
+    # Using default values from your make.conf
+    cpan2dist --format=CPANPLUS::Dist::Gentoo --buildprereq Some::Module
+
+    # Specifying your own options
     cpan2dist --format=CPANPLUS::Dist::Gentoo \
               --dist-opts overlay=/usr/local/portage \
               --dist-opts distdir=/usr/portage/distfiles \
               --dist-opts manifest=yes \
               --dist-opts keywords=x86 \
-              --dist-opts header="# Copyright 1999-2008 Gentoo Foundation" \
+              --dist-opts header="# Begin" \
               --dist-opts footer="# End" \
               Any::Module You::Like
 
-=head1 DESCRPITON
+=head1 DESCRIPTION
 
-This module is a CPANPLUS backend that recursively generates Gentoo ebuilds for a given package in the specified overlay (defaults to F</usr/local/portage>), updates the manifest, and even emerges it (together with its dependencies) if the user requires it.
-You need write permissions on the directory where Gentoo fetches its source files (usually F</usr/portage/distfiles>).
-The valid C<KEYWORDS> for the generated ebuilds are by default those given in C<ACCEPT_KEYWORDS>, but you can specify your own with the C<keywords> dist-option.
+This module is a CPANPLUS backend that recursively generates Gentoo ebuilds for a given package in the default overlay, updates the manifest, and even emerges it (together with its dependencies) if the user requires it.
 
 The generated ebuilds are placed into the C<perl-gcpanp> category.
 They favour depending on a C<virtual>, on C<perl-core>, C<dev-perl> or C<perl-gcpan> (in that order) rather than C<perl-gcpanp>.
+Existing ebuilds will be searched into the main C<PORTDIR> portage tree and then into the overlays listed in C<PORTDIR_OVERLAY>.
+
+=head1 OPTIONS
+
+You can pass specific options to L<cpan2dist> by using the C<--dist-opts> command-line argument followed by a C<key=value> pair, where C<key> is the option name and C<value> is what it is set to.
+C<--dist-opts> can be used several times.
+
+The valid option C<key>s are :
+
+=over 4
+
+=item *
+
+C<manifest>
+
+A boolean that indicates whether the F<Manifest> file should be generated by running C<ebuild manifest> onto the generated ebuilds.
+
+Defaults to C<yes>.
+
+=item *
+
+C<overlay>
+
+The path of the overlay in which the generated ebuilds will be written.
+
+Defaults to the first overlay listed in C<PORTDIR_OVERLAY> (as returned by C<emerge --info>) or F</usr/local/portage> if this variable is empty.
+
+=item *
+
+C<distdir>
+
+The directory where C<ebuild> expects to find the source tarballs.
+You need write permissions on this directory.
+
+Defaults to the value of C<DISTDIR> (as returned by C<emerge --info>) or F</usr/portage/distfiles> if this variable is empty.
+
+=item *
+
+C<keywords>
+
+The valid C<KEYWORDS> for the generated ebuilds.
+
+Defaults to the value of C<ACCEPT_KEYWORDS> (as returned by C<emerge --info>) or C<'x86'> if this variable is empty.
+
+=item *
+
+C<header>
+
+A chunk of text that is prepended to every ebuild.
+
+Defaults to the generic Gentoo Foundation header.
+
+=item *
+
+C<footer>
+
+A chunk of text that is appended to every ebuild.
+
+Defaults to nothing.
+
+=back
+
+L<cpan2dist> itself takes other options, most notably :
+
+=over 4
+
+=item *
+
+C<--buildprereq> generates an ebuild for every dependency, even for those that are already up-to-date.
+Setting this option is recommended.
+
+=item *
+
+C<--force> forcefully regenerates ebuilds even if they already exist.
+
+=item *
+
+C<--install> installs the ebuilds after generating them.
+
+=item *
+
+C<--skiptest> skips tests while building, which speeds up the building process.
+
+=item *
+
+C<--verbose> shows a lot more information.
+
+=back
+
+Please refer to L<cpan2dist> documentation for a complete coverage of its abilities.
 
 =head1 INSTALLATION
 
@@ -83,13 +175,13 @@ If you still have C<perl> C<5.8.x>, you can upgrade it by running the following
 Then, fetch the L<CPANPLUS::Dist::Gentoo> tarball :
 
     $ cd /tmp
-    $ wget http://search.cpan.org/CPAN/authors/id/V/VP/VPIT/CPANPLUS-Dist-Gentoo-0.10.tar.gz
+    $ wget http://search.cpan.org/CPAN/authors/id/V/VP/VPIT/CPANPLUS-Dist-Gentoo-0.11.tar.gz
 
 Log in as root and unpack it in e.g. your home directory :
 
     # cd
-    # tar xzf /tmp/CPANPLUS-Dist-Gentoo-0.10.tar.gz
-    # cd CPANPLUS-Dist-Gentoo-0.10
+    # tar xzf /tmp/CPANPLUS-Dist-Gentoo-0.11.tar.gz
+    # cd CPANPLUS-Dist-Gentoo-0.11
 
 Bootstrap L<CPANPLUS::Dist::Gentoo> using the bundled shell script C<g-cpanp> :
 
@@ -132,6 +224,15 @@ my $format_available;
 sub format_available {
  return $format_available if defined $format_available;
 
+ unless (IPC::Cmd->can_capture_buffer) {
+  my $msg = 'IPC::Cmd must be able to capture buffers.';
+  unless (do { local $@; eval { require IPC::Run; 1 } }) {
+   $msg  .= ' Try installing IPC::Run (dev-perl/IPC-Run on Gentoo).';
+  }
+  __PACKAGE__->_abort($msg);
+  return $format_available = 0;
+ }
+
  for my $prog (qw<emerge ebuild>) {
   unless (IPC::Cmd::can_run($prog)) {
    __PACKAGE__->_abort("$prog is required to write ebuilds");
@@ -139,7 +240,7 @@ sub format_available {
   }
  }
 
if (IPC::Cmd->can_capture_buffer) {
+ {
   my $buffers;
   my ($success, $errmsg) = IPC::Cmd::run(
    command => [ qw<emerge --info> ],
@@ -260,7 +361,12 @@ sub prepare {
  $stat->footer($footer);
 
  my $overlay = delete $opts{overlay};
- $overlay = (defined $overlay) ? Cwd::abs_path($overlay) : '/usr/local/portage';
+ if (defined $overlay) {
+  $overlay   = Cwd::abs_path($overlay);
+ } else {
+  $overlay   = $overlays->[0];
+  $overlay   = '/usr/local/portage' unless defined $overlay;
+ }
  $stat->overlay($overlay);
 
  my $distdir = delete $opts{distdir};