D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
blackhat.pw
:
/
kunden
/
proc
/
self
/
root
/
usr
/
share
/
perl5
/
Dpkg
/
Filename :
BuildDriver.pm
back
Copy
# Copyright © 2020-2024 Guillem Jover <guillem@debian.org> # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. =encoding utf8 =head1 NAME Dpkg::BuildDriver - drive the build of a Debian package =head1 DESCRIPTION This class is used by dpkg-buildpackage to drive the build of a Debian package. B<Note>: This is a private module, its API can change at any time. =cut package Dpkg::BuildDriver 0.01; use strict; use warnings; use Dpkg (); use Dpkg::Gettext; use Dpkg::ErrorHandling; =head1 METHODS =over 4 =item $bd = Dpkg::BuildDriver->new(%opts) Create a new Dpkg::BuildDriver object. It will load a build driver module as requested in the B<Build-Drivers> field in the $opts{ctrl} L<Dpkg::Control::Info> object or if not present, it will fall back to load the default B<debian-rules> driver. Options: =over =item B<ctrl> (required) A L<Dpkg::Control::Info> object. =item B<root_cmd> A string with the gain-root-command to use when needing to execute a command with root-like rights. If needed and unset, it will default to L<fakeroot> if it is available or the module will error out. =item B<as_root> A boolean to force F<debian/rules> target calls as root-like, even if they would normally not require to be executed as root-like. This option is applied to all targets globally. B<Note>: This option is only relevant for drivers that use F<debian/rules>. =item B<debian_rules> An array containing the command to execute the F<debian/rules> file and any additional arguments. It defaults to B<debian/rules>. B<Note>: This option is only relevant for drivers that use F<debian/rules>. =item B<rrr_override> A string that overrides the B<Rules-Requires-Root> field value. B<Note>: This option is only relevant for drivers that use F<debian/rules>. =back =cut sub _load_driver { my ($name, %opts) = @_; # Normalize the driver name. $name = join q{}, map { ucfirst lc } split /-/, $name; my $module = "Dpkg::BuildDriver::$name"; eval qq{ require $module; }; error(g_('build driver %s is unknown: %s'), $name, $@) if $@; return $module->new(%opts); } sub new { my ($this, %opts) = @_; my $class = ref($this) || $this; my $ctrl_src = $opts{ctrl}->get_source(); my $name = $ctrl_src->{'Build-Driver'} // 'debian-rules'; my $self = { driver => _load_driver($name, %opts), }; bless $self, $class; return $self; } =item $bd->pre_check() Perform build driver specific checks, before anything else. This will run after the B<init> hook, and before C<dpkg-source --before-build>. B<Note>: This is an optional method that can be omitted from the driver implementation. =cut sub pre_check { my $self = shift; return unless $self->{driver}->can('pre_check'); return $self->{driver}->pre_check(); } =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) = @_; return $self->{driver}->need_build_task($build_task, $binary_task); } =item $bd->run_build_task($build_task, $binary_task) Executes the build task for the build. B<Note>: This is an optional method 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) = @_; $self->{driver}->run_build_task($build_task, $binary_task); return; } =item $bd->run_task($task) Executes the given task for the build. =cut sub run_task { my ($self, $task) = @_; $self->{driver}->run_task($task); return; } =back =head1 CHANGES =head2 Version 0.xx This is a private module. =cut 1;