From afb79b8c279baa57e1c2e9409acf0d0ddb017d7c Mon Sep 17 00:00:00 2001 From: dancer Date: Tue, 12 Mar 2002 16:27:48 +0000 Subject: created pbuilder-satisfydepends, and many changes today. Improvement generally. --- pbuilder-buildpackage | 142 ++------------------------------------------------ 1 file changed, 4 insertions(+), 138 deletions(-) (limited to 'pbuilder-buildpackage') diff --git a/pbuilder-buildpackage b/pbuilder-buildpackage index bacd86a..6ad6d9c 100755 --- a/pbuilder-buildpackage +++ b/pbuilder-buildpackage @@ -32,147 +32,13 @@ function copydsc () { done } -function checkbuilddep_versiondeps () { - local PACKAGE="$1" - local COMPARESTRING="$2" - local DEPSVERSION="$3" - local PACKAGEVERSION=$($CHROOTEXEC usr/bin/apt-cache show $PACKAGE | grep "^Version:" | sort -rn | head -1 | sed 's/^Version: \(.*\)$/\1/') - # no versioned provides. - if dpkg --compare-versions "$PACKAGEVERSION" "$COMPARESTRING" "$DEPSVERSION"; then - # satisfies depends - return 0; - else - # cannot satisfy depends - return 1; - fi -} - -function checkbuilddep_archdeps () { - # returns FALSE on INSTALL - local INSTALLPKG="$1" - local ARCH="$2" - if echo "$INSTALLPKG" | sed 's/.*\(\[.*\]\)/\1/' | grep "[[/][!]$ARCH[]/]" > /dev/null; then - # if !$ARCH exists in there, ERROR. - return 0; - fi - if ! echo "$INSTALLPKG" | sed 's/.*\(\[.*\]\)/\1/' | grep "[!]" > /dev/null; then - if ! echo "$INSTALLPKG" | sed 's/.*\(\[.*\]\)/\1/' | grep "[[/]$ARCH[]/]" > /dev/null; then - # if $ARCH does not exist, ERROR. - return 0; - fi - fi - return 1; -} - -function checkbuilddep_provides () { - local PACKAGENAME="$1" - # PROVIDED needs to be used outside of this function. - PROVIDED=$($CHROOTEXEC usr/bin/apt-cache showpkg $PACKAGENAME | awk '{p=0}/^Reverse Provides:/,/^$/{p=1}{if(p && ($0 !~ "Reverse Provides:")){PACKAGE=$1}} END{print PACKAGE}') -} - -function checkbuilddep_internal () { -# Use this function to fulfill the dependency (almost) - local ARCH=$(dpkg --print-architecture) - local INSTALLPKG - local INSTALLPKGMULTI - local CURRENTREALPKGNAME - echo " -> Attempting to parse the build-deps by myself" - for INSTALLPKGMULTI in $(cat "$BUILDPLACE/"tmp/buildd/*/debian/control | \ - awk '/^[^ ]*:/{p=0} tolower($0) ~ /^build-depends:/{p=1} tolower($0) ~ /^build-depends-indep:/{p=1} {if(p) {print $0}}' | \ - sed 's/^[^:]*: //' | \ - tr " " "/" | \ - awk 'BEGIN{RS=","} {print}'); do - echo " -> Considering "$(echo $INSTALLPKGMULTI | tr "/" " " | awk '{print $0}' ) - SATISFIED="no" - for INSTALLPKG in $(echo "$INSTALLPKGMULTI" | \ - awk 'BEGIN{RS="|"} {print}'); do - CURRENTREALPKGNAME=$(echo "$INSTALLPKG" | sed -e 's/^[/]*//' -e 's/[[/(].*//') - if echo "$INSTALLPKG" | grep '\[' > /dev/null ; then - if checkbuilddep_archdeps "$INSTALLPKG" "$ARCH"; then - SATISFIED="yes" - echo " -> This package is not for this architecture" - continue; - fi - fi - if echo "$INSTALLPKG" | grep '[(]' > /dev/null; 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 " -> Installing "${CURRENTREALPKGNAME} - - if $CHROOTEXEC usr/bin/apt-get -y install ${CURRENTREALPKGNAME}; then - SATISFIED="yes" - else - # package could not be found. -- looking for alternative. - PROVIDED="" - checkbuilddep_provides ${CURRENTREALPKGNAME} - if [ -n "$PROVIDED" ]; then - # something provides this package - echo " -> Installing $PROVIDED to satisfy the dependency " - if $CHROOTEXEC usr/bin/apt-get -y install $PROVIDED; then - SATISFIED="yes"; - fi - fi - fi - if [ "$SATISFIED" = "yes" ]; then - break; - fi - done; - if [ "$SATISFIED" = "no" ]; then - echo "E: pbuilder: Could not satisfy build-dependency." >&2 - saveaptcache_umountproc_cleanbuildplace - exit 1 - fi - done; - - # start processing build-conflicts. - for INSTALLPKG in $(cat "$BUILDPLACE/"tmp/buildd/*/debian/control | \ - awk '/^[^ ]*:/{p=0} tolower($0) ~ /^build-conflicts:/{p=1} tolower($0) ~ /^build-conflicts-indep:/{p=1} {if(p) {print $0}}' | \ - sed 's/^[^:]*: //' | \ - tr " " "/" | \ - awk 'BEGIN{RS=","} {print}'); do - CURRENTREALPKGNAME=$(echo "$INSTALLPKG" | sed -e 's/^[/]*//' -e 's/[[/(].*//') - echo " -> Considering "${CURRENTREALPKGNAME} - - if echo "$INSTALLPKG" | grep '\[' > /dev/null ; then - # this package has arch-conflicts. - if checkbuilddep_archdeps "$INSTALLPKG" "$ARCH"; then - echo "I: Ignoring other-arch" - continue; - fi - fi - if echo "$INSTALLPKG" | grep '[(]' > /dev/null ; 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 ^Package: > /dev/null; then - if ! $CHROOTEXEC usr/bin/apt-get -y remove ${CURRENTREALPKGNAME} ; then - echo "E: Could not satisfy build-conflicts" >&2 - saveaptcache_umountproc_cleanbuildplace - exit 1 - fi - else - echo "I: This package is not installed." - fi - done -} - function checkbuilddep () { + /usr/lib/pbuilder/pbuilder-satisfydepends --control "$BUILDPLACE/"tmp/buildd/*/debian/control --chroot "$BUILDPLACE" checkbuilddep_internal # install extra packages to the chroot - $CHROOTEXEC usr/bin/apt-get -y install ${EXTRAPACKAGES} + if [ -n "$EXTRAPACKAGES" ]; then + $CHROOTEXEC usr/bin/apt-get -y install ${EXTRAPACKAGES} + fi } function echobacktime () { -- cgit v1.2.3