CPAN-Packager

 view release on metacpan or  search on metacpan

lib/CPAN/Packager/Builder/RPM/Spec.pm  view on Meta::CPAN

package CPAN::Packager::Builder::RPM::Spec;

# stealed from cpanflute2 because cpanflute2 isn't updated all recently.
# so I just copied it and patched.
# cpanflute2 code looks ugly, so we need to refactor it later.

use Mouse;
use File::Basename;
use File::Copy qw(copy);
use Archive::Tar;
use File::Temp qw(tempdir);
use URI::Escape qw(uri_escape);
use Cwd;
use YAML;
use RPM::Specfile;

sub build {
    my ( $self, $args, $fullname ) = @_;

    # Setup some defaults
    my %defaults;

    my $orig_cmd = join( " ", $0, $fullname );

    $defaults{'outdir'}      = './';
    $defaults{'tmpdir'}      = '/tmp';
    $defaults{'release'}     = '8';
    $defaults{'installdirs'} = "";
    {
        my ( $username, $fullname ) = ( getpwuid($<) )[ 0, 6 ];
        $fullname = ( split /,/, $fullname )[0];
        $defaults{'email'} = $fullname ? $fullname . ' ' : '';
        $defaults{'email'} .= '<';
        $defaults{'email'} .= $ENV{REPLYTO} || $username . '@redhat.com';
        $defaults{'email'} .= '>';
    }

    # Parse command line options
    my %options = %$args;
    my $content;

    my @requires       = @{ $options{'requires'}       || [] };
    my @build_requires = @{ $options{'build-requires'} || [] };

    if ( $options{'just-spec'} and $options{'buildall'} ) {
        print "Error: just-spec and build cannot both be specified.\n";
        exit(1);
    }

    #
    # Make sure filename was provided
    die 'file name must be provided' unless $fullname;

    #
    # If we were given a description file, make sure it exists
    if ( $options{'descfile'} ) {
        if ( !-e $options{'descfile'} ) {
            print STDERR "Description file given does not exist!\n";
            print STDERR "File:  ${options{'descfile'}}\n";
            exit(1);
        }
        if ( !-r $options{'descfile'} ) {
            print STDERR "Description file given is not readable!\n";
            print STDERR "File:  ${options{'descfile'}}\n";
            exit(1);
        }
    }

    #
    # Overide defaults if necessary, otherwise keep them.
    my $tarball          = basename($fullname);
    my $create           = $options{create} || '';
    my $email            = $options{email} || $defaults{'email'};
    my $requires         = $options{requires} || [];
    my $buildrequires    = $options{buildrequires} || [];
    my $outdir           = $options{outdir} || $defaults{'outdir'};
    my $tmpdir           = $options{tmpdir} || $defaults{'tmpdir'};
    my $noarch           = $options{noarch} || '';
    my $plat_perl_reqs   = $options{'noperlreqs'} ? 0 : 1;
    my $release          = $options{'release'} || $defaults{'release'};
    my $build_switch     = 's';
    my $use_module_build = 0;
    my @docs             = ();

    $tmpdir = tempdir( CLEANUP => 1, DIR => $tmpdir );

    #
    # Set build arch - this is needed to find out where
    # the binary rpm was placed, and copy it back to the
    # current working directory.



( run in 2.620 seconds using v1.01-cache-2.11-cpan-c221a9de4ec )