#!/bin/bash # pbuilder -- personal Debian package builder # Copyright (C) 2001,2002,2003,2005-2007 Junichi Uekawa # Copyright (C) 2007 Loïc Minier # # 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, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # module to satisfy build dependencies; aptitude flavor set -e . /usr/lib/pbuilder/pbuilder-satisfydepends-funcs # filter out dependencies sent on input not for this arch; deps can have # multiple lines; output is on a single line or "" if empty function filter_arch_deps() { local arch="$1" local INSTALLPKGMULTI local INSTALLPKG # split on "," sed 's/[[:space:]]*,[[:space:]]*/\n/g' | while read INSTALLPKGMULTI; do echo "$INSTALLPKGMULTI" | # split on "|" sed 's/[[:space:]]*|[[:space:]]*/\n/g' | while read INSTALLPKG; do if echo "$INSTALLPKG" | grep -q '\['; then if checkbuilddep_archdeps "$INSTALLPKG" "$ARCH"; then continue fi fi # output the selected package echo "$INSTALLPKG" done | # remove the arch list and add " | " between entries sed 's/\[.*\]//; $,$! s/$/ |/' | xargs --no-run-if-empty done | # add ", " between entries sed '$,$! s/$/,/' | xargs --no-run-if-empty } function checkbuilddep_internal () { # Use this function to fulfill the dependency (almost) local ARCH=$($CHROOTEXEC dpkg-architecture -qDEB_HOST_ARCH) local BUILD_DEP_DEB_DIR local BUILD_DEP_DEB_CONTROL local DEPENDS local CONFLICTS echo " -> Attempting to satisfy build-dependencies" DEPENDS="$(get_control_re "$DEBIAN_CONTROL" "$BD_REGEXP" | filter_arch_deps "$ARCH")" CONFLICTS="$(get_control_re "$DEBIAN_CONTROL" "$BC_REGEXP" | filter_arch_deps "$ARCH")" echo " -> Creating pbuilder-satisfydepends-dummy package" BUILD_DEP_DEB_DIR="/tmp/satisfydepends-aptitude" BUILD_DEP_DEB_CONTROL="$BUILD_DEP_DEB_DIR/pbuilder-satisfydepends-dummy/DEBIAN/control" $CHROOTEXEC mkdir -p "$BUILD_DEP_DEB_DIR/pbuilder-satisfydepends-dummy/DEBIAN/" $CHROOTEXEC sh -c "cat >\"$BUILD_DEP_DEB_CONTROL\"" < Description: Dummy package to satisfy dependencies with aptitude - created by pbuilder This package was created automatically by pbuilder and should EOF if [ -n "$DEPENDS" ]; then $CHROOTEXEC sh -c "echo \"Depends: $DEPENDS\" >>\"$BUILD_DEP_DEB_CONTROL\"" fi if [ -n "$CONFLICTS" ]; then $CHROOTEXEC sh -c "echo \"Conflicts: $CONFLICTS\" >>\"$BUILD_DEP_DEB_CONTROL\"" fi $CHROOTEXEC sh -c "cat \"$BUILD_DEP_DEB_CONTROL\"" $CHROOTEXEC sh -c "dpkg-deb -b \"$BUILD_DEP_DEB_DIR/pbuilder-satisfydepends-dummy\"" $CHROOTEXEC apt-get -q -y --force-yes install aptitude $CHROOTEXEC dpkg -i "$BUILD_DEP_DEB_DIR/pbuilder-satisfydepends-dummy.deb" || true $CHROOTEXEC aptitude -y --without-recommends -o APT::Install-Recommends=false -o Aptitude::CmdLine::Ignore-Trust-Violations=true -o Aptitude::ProblemResolver::StepScore=100 install pbuilder-satisfydepends-dummy # check whether the aptitude's resolver kept the package if ! $CHROOTEXEC dpkg -l pbuilder-satisfydepends-dummy 2>/dev/null | grep -q ^ii; then echo "Aptitude couldn't satisfy the build dependencies" exit 1 fi echo " -> Finished parsing the build-deps" } function print_help () { # print out help message cat < --help: give help --control: specify control file (debian/control, *.dsc) --chroot: operate inside chroot --binary-all: include binary-all --binary-arch: include binary-arch only --echo: echo mode, do nothing. (--force-version required for most operation) --force-version: skip version check. --continue-fail: continue even when failed. EOF } . /usr/lib/pbuilder/pbuilder-satisfydepends-checkparams