Dpkg
view release on metacpan or search on metacpan
lib/Dpkg/BuildDriver/DebianRules.pm view on Meta::CPAN
'Rules-Requires-Root');
} elsif ($keywords_impl) {
# Set only on <implementations-keywords>.
$ENV{DEB_GAIN_ROOT_CMD} = join ' ', @{$self->{root_cmd}};
} else {
# We should not provide the variable otherwise.
delete $ENV{DEB_GAIN_ROOT_CMD};
}
return \%rrr;
}
sub _rules_requires_root {
my ($self, $target) = @_;
return 1 if $self->{as_root};
return 1 if $self->{rules_requires_root}{"dpkg/target/$target"};
return 1 if $self->{rules_requires_root}{'binary-targets'} and $target_legacy_root{$target};
return 0;
}
sub _run_cmd {
my @cmd = @_;
printcmd(@cmd);
system @cmd and subprocerr("@cmd");
}
sub _run_rules_cond_root {
my ($self, $target) = @_;
my @cmd;
push @cmd, @{$self->{root_cmd}} if $self->_rules_requires_root($target);
push @cmd, @{$self->{debian_rules}}, $target;
_run_cmd(@cmd);
}
=item $bd->pre_check()
Perform build driver specific checks, before anything else.
This checks whether the F<debian/rules> file is executable,
and if not then make it so.
=cut
sub pre_check {
my $self = shift;
if (@{$self->{debian_rules}} == 1) {
my $rules = $self->{debian_rules}[0];
my @sb = lstat $rules;
if (@sb == 0) {
syserr(g_('cannot stat %s'), $rules) if $! != ENOENT;
warning(g_('%s does not exist'), $rules);
} elsif (-f _) {
if (! -x _) {
warning(g_('%s is not executable; fixing that'), $rules);
chmod($sb[2] | 0o111, $rules)
or syserr(g_('cannot make %s executable'), $rules);
}
} else {
warning(g_('%s is not a plain file'), $rules);
}
}
}
=item $bool = $bd->need_build_task($build_task, $binary_task)
Returns whether we need to use the build task.
B<Note>: This method is needed as long as we support building as root-like.
Once that is not needed this method will be deprecated.
=cut
sub need_build_task {
my ($self, $build_task, $binary_task) = @_;
# If we are building rootless, there is no need to call the build target
# independently as non-root.
return 0 if not $self->_rules_requires_root($binary_task);
return 1;
}
=item $bd->run_build_task($build_task, $binary_task)
Executes the build task for the build.
B<Note>: This method is needed as long as we support building as root-like.
Once that is not needed this method will be deprecated.
=cut
sub run_build_task {
my ($self, $build_task, $binary_task) = @_;
# If we are building rootless, there is no need to call the build
# target independently as non-root.
if ($self->_rules_requires_root($binary_task)) {
_run_cmd(@{$self->{debian_rules}}, $build_task)
}
return;
}
=item $bd->run_task($task)
Executes the given task for the build.
=cut
sub run_task {
my ($self, $task) = @_;
$self->_run_rules_cond_root($task);
return;
}
( run in 0.571 second using v1.01-cache-2.11-cpan-39bf76dae61 )