diff options
author | Junichi Uekawa <dancer@dancer64.netfort.gr.jp> | 2007-08-28 13:30:43 +0900 |
---|---|---|
committer | Junichi Uekawa <dancer@dancer64.netfort.gr.jp> | 2007-08-28 13:30:43 +0900 |
commit | 777070d2d72a9308cdb451b07faa43aaa577b744 (patch) | |
tree | 1815eb0cdce5db02ba7823ebc455efc13b3b8f51 /pbuilder-satisfydepends-classic | |
parent | acc30134ea97b8c1c387e953e1d03fad6edcb408 (diff) | |
download | pbuilder-777070d2d72a9308cdb451b07faa43aaa577b744.tar pbuilder-777070d2d72a9308cdb451b07faa43aaa577b744.tar.gz |
* rename pbuilder-satisfydepends to pbuilder-satisfydepends-classic, and
install pbuilder-satisfydepends-aptitude as the deafault
pbuilder-satisfydepends
* install aptitude per default in chroot.
Diffstat (limited to 'pbuilder-satisfydepends-classic')
-rwxr-xr-x | pbuilder-satisfydepends-classic | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/pbuilder-satisfydepends-classic b/pbuilder-satisfydepends-classic new file mode 100755 index 0000000..8a37603 --- /dev/null +++ b/pbuilder-satisfydepends-classic @@ -0,0 +1,171 @@ +#!/bin/bash +# pbuilder -- personal Debian package builder +# Copyright (C) 2001,2002,2003,2005-2007 Junichi Uekawa +# +# 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; default flavor + +# The original pbuilder-satisfydepends code, which is now called 'classic' + +set -e + +. /usr/lib/pbuilder/pbuilder-satisfydepends-funcs + +function checkbuilddep_internal () { +# Use this function to fulfill the dependency (almost) + + local ARCH=$($CHROOTEXEC dpkg-architecture -qDEB_HOST_ARCH) + local INSTALLPKG + local INSTALLPKGLIST + local INSTALLPKGMULTI + local CURRENTREALPKGNAME + local SATISFIED + echo " -> Attempting to parse the build-deps " + for INSTALLPKGMULTI in $(get_control_re "$DEBIAN_CONTROL" "$BD_REGEXP" | + tr " " "/" | \ + awk 'BEGIN{RS=","} {print}'); do + echo " -> Considering build-dep$(echo "$INSTALLPKGMULTI" | tr "/" " " )" + SATISFIED="no" + for INSTALLPKG in $(echo "$INSTALLPKGMULTI" | \ + awk 'BEGIN{RS="|"} {print}'); do + CURRENTREALPKGNAME=$(echo "$INSTALLPKG" | sed -e 's#^/*##' -e 's#[[/(].*##') + if echo "$INSTALLPKG" | grep -q '\['; then + if checkbuilddep_archdeps "$INSTALLPKG" "$ARCH"; then + SATISFIED="yes" + echo " -> This package is not for this architecture" + continue + fi + fi + if echo "$INSTALLPKG" | grep -q '('; then + #echo "Debug: $INSTALLPKG" + if ! checkbuilddep_versiondeps $CURRENTREALPKGNAME \ + $(echo "$INSTALLPKG" | tr "/" " " | sed 's/^.*( *\(<<\|<=\|>=\|=\|<\|>>\|>\) *\(.*\)).*$/\1/') \ + $(echo "$INSTALLPKG" | tr "/" " " | sed 's/^.*( *\(<<\|<=\|>=\|=\|<\|>>\|>\) *\(.*\)).*$/\2/') ; then + echo " -> Does not satisfy version, not trying" + continue + fi + fi + echo " -> Trying $CURRENTREALPKGNAME" + + if $CHROOTEXEC /usr/bin/apt-get -s install $INSTALLPKGLIST $CURRENTREALPKGNAME >& /dev/null; then + SATISFIED="yes" + INSTALLPKGLIST="$INSTALLPKGLIST $CURRENTREALPKGNAME" + else + echo " -> Cannot install $CURRENTREALPKGNAME; apt errors follow:" + if $CHROOTEXEC /usr/bin/apt-get -s install $INSTALLPKGLIST "$CURRENTREALPKGNAME"; then + : + fi + # package could not be found. -- looking for alternative. + PROVIDED="" + checkbuilddep_provides "$CURRENTREALPKGNAME" + if [ -n "$PROVIDED" ]; then + # something provides this package + echo " -> Considering $PROVIDED to satisfy the dependency " + if $CHROOTEXEC /usr/bin/apt-get -s install $INSTALLPKGLIST $PROVIDED >& /dev/null; then + SATISFIED="yes"; + INSTALLPKGLIST="$INSTALLPKGLIST $PROVIDED" + else + # show the error for diagnostic purposes + echo " -> Cannot install $PROVIDED; apt errors follow:" + if $CHROOTEXEC /usr/bin/apt-get -s install $INSTALLPKGLIST $PROVIDED; then + : + fi + fi + fi + fi + if [ "$SATISFIED" = "yes" ]; then + break; + fi + done; + if [ "$SATISFIED" = "no" ]; then + echo "E: Could not satisfy build-dependency." >&2 + if [ "$CONTINUE_FAIL" != "yes" ]; then + exit 2 + fi + fi + done; + + # now actually install the packages + echo " -> Installing $INSTALLPKGLIST" + if ! $CHROOTEXEC apt-get -y --force-yes install $INSTALLPKGLIST; then + echo " -> Trying to fix apt error" + # Work around an apt bug which causes configure to fail. + if $CHROOTEXEC dpkg --configure --pending && $CHROOTEXEC apt-get -y --force-yes install $INSTALLPKGLIST; then + echo " -> Apt bug workaround succeeded" + elif [ "$CONTINUE_FAIL" != "yes" ]; then + echo "E: Unrecoverable error installing build-dependencies." >&2 + exit 1 + fi + fi + + # start processing build-conflicts. + for INSTALLPKG in $(get_control_re "$DEBIAN_CONTROL" "$BC_REGEXP" | + tr " " "/" | \ + awk 'BEGIN{RS=","} {print}'); do + CURRENTREALPKGNAME=$(echo "$INSTALLPKG" | sed -e 's#^/*##' -e 's#[[/(].*##') + echo " -> Considering $CURRENTREALPKGNAME" + + if echo "$INSTALLPKG" | grep -q '\['; then + # this package has arch-conflicts. + if checkbuilddep_archdeps "$INSTALLPKG" "$ARCH"; then + echo "I: Ignoring other-arch" + continue + fi + fi + if echo "$INSTALLPKG" | grep -q '('; then + # this package has version-conflicts + if ! checkbuilddep_versiondeps $CURRENTREALPKGNAME \ + $(echo "$INSTALLPKG" | tr "/" " " | sed 's/^.*( *\(<<\|<=\|>=\|=\|<\|>>\|>\) *\(.*\)).*$/\1/') \ + $(echo "$INSTALLPKG" | tr "/" " " | sed 's/^.*( *\(<<\|<=\|>=\|=\|<\|>>\|>\) *\(.*\)).*$/\2/'); then + echo "I: Satisfies version, not trying" + continue + fi + fi + + # if package exists, remove it. + if $CHROOTEXEC /usr/bin/dpkg -s $(echo "$INSTALLPKG" | tr "/" " " | awk '{print $1}') 2>&1 | grep -q ^Package:; then + if ! $CHROOTEXEC /usr/bin/apt-get -y remove $CURRENTREALPKGNAME ; then + echo "E: Could not satisfy build-conflicts" >&2 + exit 1 + fi + else + echo "I: $CURRENTREALPKGNAME package is not installed, no need to remove" + fi + done + echo " -> Finished parsing the build-deps" +} + + +function print_help () { + # print out help message + cat <<EOF +pbuilder-satisfydepends -- satisfy dependencies +Copyright 2002-2007 Junichi Uekawa <dancer@debian.org> + +--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 + |