/usr/share/perl5/Sbuild/AspcudResolver.pm is in libsbuild-perl 0.67.0-2ubuntu7.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | # ResolverBase.pm: build library for sbuild
# Copyright © 2005 Ryan Murray <rmurray@debian.org>
# Copyright © 2005-2008 Roger Leigh <rleigh@debian.org>
# Copyright © 2008 Simon McVittie <smcv@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
# <http://www.gnu.org/licenses/>.
#
#######################################################################
package Sbuild::AspcudResolver;
use strict;
use warnings;
use Sbuild::Base;
use Sbuild::ResolverBase;
BEGIN {
use Exporter ();
our (@ISA, @EXPORT);
@ISA = qw(Exporter Sbuild::ResolverBase);
@EXPORT = qw();
}
sub new {
my $class = shift;
my $conf = shift;
my $session = shift;
my $host = shift;
my $self = $class->SUPER::new($conf, $session, $host);
bless($self, $class);
return $self;
}
sub install_deps {
my $self = shift;
my $name = shift;
my $cross = shift;
my @pkgs = @_;
my $status = 0;
my $session = $self->get('Session');
my $dummy_pkg_name = 'sbuild-build-depends-' . $name. '-dummy';
# Call functions to setup an archive to install dummy package.
return 0 unless ($self->setup_apt_archive($dummy_pkg_name, @pkgs));
return 0 unless (!$self->update_archive());
$self->log_subsection("Install $name build dependencies (aspcud-based resolver)");
#install aspcud first:
my (@aspcud_installed_packages, @aspcud_removed_packages);
if (!$self->run_apt('-y', \@aspcud_installed_packages, \@aspcud_removed_packages, 'install', 'apt-cudf', 'aspcud')) {
$self->log_warning('Could not install aspcud!');
goto cleanup;
}
$self->set_installed(@aspcud_installed_packages);
$self->set_removed(@aspcud_removed_packages);
# Install the dummy package
my (@instd, @rmvd);
$self->log("Installing build dependencies\n");
my @apt_args = ("-yf", \@instd, \@rmvd);
push @apt_args, 'install', $dummy_pkg_name;
# It follows an explanation of the choice of the
# APT::Solver::aspcud::Preferences setting
#
# Since it is assumed that the chroot only contains a base system and
# build-essential, from which we assume that no package shall be removed,
# we first minimize the number of removed packages. This means that if
# there exist solutions that do not remove any packages, then those will
# be evaluated further. The second optimization criteria is to minimize
# the number of changed packages. This will take care that no packages of
# the base system are unnecessarily upgraded to their versions from
# experimental. It will also avoid any solutions that do need upgrades to
# the experimental versions and keep the upgrades to a minimum if an
# upgrade is strictly required. The third criteria minimizes the number of
# new packages the solution installs. Here it can happen that installing a
# dependency from experimental instead of unstable will lead to less new
# packages. But this should only happen if the package in unstable depends
# on more additional packages compared to the same package in
# experimental. If the solutions are otherwise equal then as the last
# criteria, the number of packages from experimental will be minimized by
# maximizing the sum of the apt-pin values. Since packages from unstable
# have a higher pin value than those in experimental, this should prefer
# packages from unstable except if the solution from unstable is so large
# compared to the one in experimental that their sum of pin values is
# larger in which case the solution in experimental will be preferred.
push @apt_args, '--solver', 'aspcud', '-o', 'APT::Solver::Strict-Pinning=false', '-o', 'APT::Solver::aspcud::Preferences=-removed,-changed,-new,+sum(solution,apt-pin)';
if (!$self->run_apt(@apt_args)) {
$self->log("Package installation failed\n");
if (defined ($self->get('Session')->get('Session Purged')) &&
$self->get('Session')->get('Session Purged') == 1) {
$self->log("Not removing build depends: cloned chroot in use\n");
} else {
$self->set_installed(@instd);
$self->set_removed(@rmvd);
goto package_cleanup;
}
return 0;
}
$self->set_installed(@instd);
$self->set_removed(@rmvd);
$status = 1;
package_cleanup:
if ($status == 0) {
if (defined ($session->get('Session Purged')) &&
$session->get('Session Purged') == 1) {
$self->log("Not removing installed packages: cloned chroot in use\n");
} else {
$self->uninstall_deps();
}
}
cleanup:
$self->cleanup_apt_archive();
return $status;
}
1;
|