aboutsummaryrefslogtreecommitdiff
path: root/pbuilder-satisfydepends-classic
diff options
context:
space:
mode:
Diffstat (limited to 'pbuilder-satisfydepends-classic')
-rwxr-xr-xpbuilder-satisfydepends-classic171
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
+