CPAN-Packager
view release on metacpan or search on metacpan
lib/CPAN/Packager/Builder/RPM.pm view on Meta::CPAN
}
$spec_content;
}
sub _filter_global_requires_for_rpmbuild {
my ( $self, $spec_content, $module ) = @_;
$spec_content = $self->_filter_global_requires_for_spec($spec_content);
$spec_content
= "Source3: filter_macro_for_special_modules\n"
. '%define __perl_requires %{SOURCE3}' . "\n"
. $spec_content;
$self->_generate_global_filter_macro($module);
$spec_content;
}
sub _filter_global_requires_for_spec {
my ( $self, $spec_content ) = @_;
foreach my $ignore ( @{ $self->config( global => 'no_depends' ) } ) {
$spec_content
= $self->_filter_requires( $spec_content, $ignore->{module} );
}
$spec_content;
}
sub _filter_requires {
my ( $self, $spec_content, $no_depend_module ) = @_;
$spec_content =~ s/^Requires: perl\($no_depend_module\).*?$//mg;
$spec_content =~ s/^BuildRequires: perl\($no_depend_module\).*?$//mg;
$spec_content;
}
sub _fix_requires {
my ( $self, $spec_content ) = @_;
my $fix_package_depends
= $self->config( global => 'fix_package_depends' );
foreach my $module (@$fix_package_depends) {
$spec_content
=~ s/^Requires: perl\($module->{from}\).*?$/Requires: perl\($module->{to}\)/mg;
}
$spec_content;
}
sub _generate_module_filter_macro {
my ( $self, $module_name ) = @_;
my $filter_macro_file = file( $self->build_dir, 'filter_macro' );
my $fh = $filter_macro_file->openw
or die "Can't create $filter_macro_file: $!";
print $fh qq{#!/bin/sh
/usr/lib/rpm/perl.req \$\* |\\
sed };
for my $mod (
@{ $self->config( modules => $module_name )->{no_depends} || () } )
{
print $fh "-e '/perl($mod->{module})/d' ";
}
print $fh "\n";
system("chmod 755 $filter_macro_file");
}
sub _generate_global_filter_macro {
my ( $self, $module_name ) = @_;
my $filter_macro_file
= file( $self->build_dir, 'filter_macro_for_special_modules' );
my $fh = $filter_macro_file->openw
or die "Can't create $filter_macro_file: $!";
print $fh qq{#!/bin/sh
/usr/lib/rpm/perl.req \$\* |\\
sed };
for my $mod ( @{ $self->config( global => 'no_depends' ) || () } ) {
print $fh "-e '/perl($mod->{module})/d' ";
}
print $fh "\n";
system("chmod 755 $filter_macro_file");
}
sub get_default_build_arch {
my $build_arch = qx(rpm --eval %{_build_arch});
chomp $build_arch;
$build_arch;
}
sub is_installed {
my ( $self, $module ) = @_;
my $package = $self->package_name($module);
my $return_value = capture( EXIT_ANY, "LANG=C rpm -q $package" );
$self->log( info => ">>> $package is "
. ( $return_value =~ /not installed/ ? 'not ' : '' )
. "installed" );
return $return_value =~ /not installed/ ? 0 : 1;
}
sub generate_macro {
my $self = shift;
my $macro_file = file( $self->build_dir, 'macros' );
my $fh = $macro_file->openw or die "Can't create $macro_file: $!";
my $package_output_dir = $self->package_output_dir;
my $build_dir = $self->build_dir;
print $fh qq{
%_topdir $build_dir
%_builddir %{_topdir}
%_rpmdir $package_output_dir
%_sourcedir %{_topdir}
%_specdir %{_topdir}
%_srcrpmdir $package_output_dir
%_build_name_fmt %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm
};
$fh->close;
}
sub generate_rpmrc {
my $self = shift;
my $rpmrc_file = file( $self->build_dir, 'rpmrc' );
my $fh = $rpmrc_file->openw
or die "Can't create $rpmrc_file: $!";
my $macrofiles = qx(rpm --showrc | grep ^macrofiles | cut -f2- -d:);
chomp $macrofiles;
my $build_dir = $self->build_dir;
print $fh qq{
include: /usr/lib/rpm/rpmrc
macrofiles: $macrofiles:$build_dir/macros
};
$fh->close;
}
sub build_rpm_package {
my ( $self, $spec_file_name ) = @_;
$self->log( info => '>>> build rpm package with rpmbuild' );
my $rpmrc_file = file( $self->build_dir, 'rpmrc' );
my $spec_file_path = file( $self->build_dir, $spec_file_name );
( run in 1.310 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )