RPM-Specfile

 view release on metacpan or  search on metacpan

cpanflute2  view on Meta::CPAN

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.
my $build_arch;
if($options{'arch'}) {
  $build_arch = $options{'arch'};
}
elsif($options{'noarch'}) {
  $build_arch = 'noarch';
}
else {
  $build_arch = get_default_build_arch();
  if($build_arch eq '') {
    print STDERR "Could not get default build arch!\n";
    exit(1);
  }
}

$build_switch = 'a' if(defined($options{'buildall'}));

$tarball =~ /^(.+)\-([^-]+)\.t(ar\.)?gz$/;
my $name = $options{name} || $1;
my $ver = $options{version} || $2;
my $tarball_top_dir = "$name-%{version}";

die "Module name/version not parsable from $tarball" unless $name and $ver;

$name =~ s/::/-/g;

copy($fullname, $tmpdir)
  or die "copy $fullname: $!";
utime((stat($fullname))[8,9], "$tmpdir/$tarball");

if (my @files = Archive::Tar->list_archive("$tmpdir/$tarball")) {
  $use_module_build = 1 if grep { /Build\.PL$/ } @files;

  if (not exists $options{noarch}) {
    $noarch = 1;
    $noarch = 0 if grep { /\.(xs|c|cc|C)$/ } @files;
  }

  my %prefixes;
  foreach (@files) {
    my @path_components = split m[/], $_;
    $prefixes{$path_components[0]}++;

    if ($path_components[-1] eq 'META.yml') {
      my $tar = new Archive::Tar;
      $tar->read("$tmpdir/$tarball", 1);
      my $contents = $tar->get_content($_);
      my $yaml = Load($contents);

      while (my ($mod, $ver) = each %{$yaml->{build_requires}}) {
	push @build_requires, [ "perl($mod)", $ver ];
      }
      while (my ($mod, $ver) = each %{$yaml->{requires}}) {
	push @requires, [ "perl($mod)", $ver ];
      }
    }

    # find docs
    if (m,^${name}-${ver}/(
          authors?|
          change(log|s)|
          credits|
          copy(ing|right)|
          licen[cs]e|
          readme|
          todo
          )$,ix) {
      push(@docs, $1);
    }
  }

  if (scalar keys %prefixes == 1) {
    ($tarball_top_dir) = keys %prefixes;
    $tarball_top_dir =~ s/$ver/%{version}/;
  }
}

#
# Get patches copied into place
my $patchfile  = '';
my @patchfiles = ();
my $patch      = '';
if ($options{patch}) {
    for $patch (@{$options{'patch'}}) {
	copy($patch, $tmpdir) or die "copy ${patch}: $!";
	utime((stat($options{patch}))[8,9],
	      "$tmpdir/" . basename($options{patch}));
	push @patchfiles, (basename($patch));
    }
}

#
# Copy install scriptlets if defined to the tmp directory
foreach my $scriptlet (qw(pre post preun postun)) {
    if(defined($options{$scriptlet})) {
	copy($options{$scriptlet}, $tmpdir)
	    or die "copy ${options{${scriptlet}}}: $!";
	my ($atime, $mtime) = (stat($options{$scriptlet}))[8,9];
	$options{$scriptlet} = "${tmpdir}/" . basename($options{$scriptlet});
	utime($atime, $mtime, $options{$scriptlet});
    }



( run in 1.842 second using v1.01-cache-2.11-cpan-71847e10f99 )