PHP 8.5.2
Preview: BuildAPI.pm Size: 3.33 KB
/usr/share/perl5/Dpkg/BuildAPI.pm

# 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/>.

=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.

B<Note>: This is a private module, its API can change at any time.

=cut

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;

=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 L<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;

Directory Contents

Dirs: 11 × Files: 30

Name Size Perms Modified Actions
Build DIR
- drwxr-xr-x 2026-01-23 09:00:34
Edit Download
Changelog DIR
- drwxr-xr-x 2026-01-23 09:00:34
Edit Download
- drwxr-xr-x 2026-01-23 09:00:34
Edit Download
Control DIR
- drwxr-xr-x 2026-01-23 09:00:34
Edit Download
Deps DIR
- drwxr-xr-x 2026-01-23 09:00:34
Edit Download
Dist DIR
- drwxr-xr-x 2026-01-23 09:00:34
Edit Download
Interface DIR
- drwxr-xr-x 2026-01-23 09:00:34
Edit Download
OpenPGP DIR
- drwxr-xr-x 2026-01-23 09:00:34
Edit Download
Shlibs DIR
- drwxr-xr-x 2026-01-23 09:00:34
Edit Download
Source DIR
- drwxr-xr-x 2026-01-23 09:00:34
Edit Download
Vendor DIR
- drwxr-xr-x 2026-01-23 09:00:34
Edit Download
14.76 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
3.33 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
2.23 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
14.42 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
3.07 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
6.20 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
3.93 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
2.13 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
6.02 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
20.46 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
11.04 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
11.94 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
5.77 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
7.67 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
14.76 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
5.60 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
2.42 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
2.06 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
1.52 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
5.31 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
11.41 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
11.60 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
2.12 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
3.99 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
2.22 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
8.70 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
5.69 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
11.72 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
8.73 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download
12.86 KB lrw-r--r-- 2025-09-18 17:43:59
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).