| Server IP : 146.190.157.162 / Your IP : 216.73.217.6 Web Server : Apache System : Linux ubuntu-s-2vcpu-4gb-amd-sfo3-01-KIT-DIGITAL 6.5.0-44-generic #44-Ubuntu SMP PREEMPT_DYNAMIC Fri Jun 7 15:10:09 UTC 2024 x86_64 User : businessweek ( 639) PHP Version : 8.2.10-2ubuntu2.2 Disable Function : exec,passthru,shell_exec,system,proc_open,popen,pcntl_exec,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_signal,pcntl_signal_dispatch,pcntl_getpriority,pcntl_setpriority,dl,putenv,parse_ini_file,show_source MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /usr/share/perl5/Dpkg/ |
Upload File : |
# Copyright © 2020-2022 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/>.
package Dpkg::BuildAPI 0.01;
use strict;
use warnings;
our @EXPORT_OK = qw(
get_build_api
reset_build_api
);
use Exporter qw(import);
use Dpkg::Gettext;
use Dpkg::ErrorHandling;
use Dpkg::BuildEnv;
use Dpkg::Version;
use Dpkg::Deps;
use constant {
DEFAULT_BUILD_API => '0',
MAX_BUILD_API => '1',
};
my $build_api;
=encoding utf8
=head1 NAME
Dpkg::BuildAPI - handle build API versions
=head1 DESCRIPTION
The Dpkg::BuildAPI module provides functions to fetch the current dpkg
build API level.
=head1 FUNCTIONS
=over 4
=item $level = get_build_api([$ctrl])
Get the build API level, from the environment variable B<DPKG_BUILD_API>,
or if not defined and a $ctrl C<Dpkg::Control::Info> object passed as an
argument, from its build dependency fields. If no $ctrl object gets passed
the previous value obtained is returned.
=cut
sub get_build_api {
my $ctrl = shift;
return $build_api if defined $build_api && ! defined $ctrl;
if (Dpkg::BuildEnv::has('DPKG_BUILD_API')) {
$build_api = Dpkg::BuildEnv::get('DPKG_BUILD_API');
} elsif (defined $ctrl) {
my $src = $ctrl->get_source();
my @dep_list = deps_concat(map {
$src->{$_ }
} qw(Build-Depends Build-Depends-Indep Build-Depends-Arch));
my $deps = deps_parse(@dep_list,
build_dep => 1,
reduce_restrictions => 1,
);
if (not defined $deps) {
$build_api = DEFAULT_BUILD_API;
return $build_api;
}
deps_iterate($deps, sub {
my $dep = shift;
return 1 if $dep->{package} ne 'dpkg-build-api';
if (! defined $dep->{relation} || $dep->{relation} ne REL_EQ) {
error(g_('dpkg build API level needs an exact version'));
}
if (defined $build_api and $build_api ne $dep->{version}) {
error(g_('dpkg build API level with conflicting versions: %s vs %s'),
$build_api, $dep->{version});
}
$build_api = $dep->{version};
return 1;
});
}
$build_api //= DEFAULT_BUILD_API;
if ($build_api !~ m/^[0-9]+$/) {
error(g_("invalid dpkg build API level '%s'"), $build_api);
}
if ($build_api > MAX_BUILD_API) {
error(g_("dpkg build API level '%s' greater than max '%s'"),
$build_api, MAX_BUILD_API);
}
return $build_api;
}
=item reset_build_api()
Reset the cached build API level.
=cut
sub reset_build_api {
$build_api = undef;
}
=back
=head1 CHANGES
=head2 Version 0.xx
This is a private module.
=cut
1;