From c5b67b75809d6f37030f8c3abd008b5005d95b47 Mon Sep 17 00:00:00 2001 From: Loïc Minier Date: Sat, 31 Mar 2007 14:08:56 +0200 Subject: * Initial pbuilder-satisfydepends-aptitude implementation; probably breaks for arch specific build-deps and for pbuilder environments using unsigned APT repositories. --- pbuilder-satisfydepends-aptitude | 147 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100755 pbuilder-satisfydepends-aptitude diff --git a/pbuilder-satisfydepends-aptitude b/pbuilder-satisfydepends-aptitude new file mode 100755 index 0000000..b6353ce --- /dev/null +++ b/pbuilder-satisfydepends-aptitude @@ -0,0 +1,147 @@ +#!/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 + +function checkbuilddep_internal () { +# Use this function to fulfill the dependency (almost) + local ARCH=$(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 $Id$" + DEPENDS="$(cat ${DEBIAN_CONTROL} | \ + awk ' +BEGIN{source=1} +/^$/ {source=0} +/^Source:/ {source=1} +/^[^ ]*:/ {p=0} +tolower($0) ~ /^'"${BD_REGEXP}"':/ {p=1} +{if(p && source) {print $0}}' | \ + sed 's/^[^: ]*://')" + CONFLICTS="$(cat "${DEBIAN_CONTROL}" | \ + awk 'BEGIN{source=1} +/^$/ {source=0} +/^Source:/ {source=1} +/^[^ ]*:/{p=0} +tolower($0) ~ /^'"${BC_REGEXP}"':/ {p=1} +{if(p && source) {print $0}}' | \ + sed 's/^[^: ]*://')" + 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 -y --force-yes install aptitude + $CHROOTEXEC dpkg -i "$BUILD_DEP_DEB_DIR/pbuilder-satisfydepends-dummy.deb" || true + $CHROOTEXEC aptitude -y install pbuilder-satisfydepends-dummy + 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 +} + + +DEBIAN_CONTROL=debian/control +CHROOTEXEC="" +BD_REGEXP="build-(depends|depends-indep)" +BC_REGEXP="build-(conflicts|conflicts-indep)" +FORCEVERSION="" +CONTINUE_FAIL="no" + + +while [ -n "$1" ]; do + case "$1" in + --control|-c) + DEBIAN_CONTROL="$2" + shift; shift + ;; + --chroot) + CHROOTEXEC="chroot $2 " + shift; shift + ;; + --internal-chrootexec) + CHROOTEXEC="$2" + shift; shift + ;; + --binary-all) + BD_REGEXP='build-(depends|depends-indep)' + BC_REGEXP='build-(conflicts|conflicts-indep)' + shift + ;; + --binary-arch) + BD_REGEXP='build-depends' + BC_REGEXP='build-conflicts' + shift + ;; + --echo) + CHROOTEXEC="echo $CHROOTEXEC" + shift + ;; + --continue-fail) + CONTINUE_FAIL="yes" + shift + ;; + --force-version) + FORCEVERSION="yes" + shift; + ;; + --help|-h|*) + print_help + exit 1 + ;; + esac +done + + +checkbuilddep_internal -- cgit v1.2.3 From 6de7a42e5278688ae51cddd6aa0812f43b361787 Mon Sep 17 00:00:00 2001 From: Loïc Minier Date: Sat, 31 Mar 2007 15:20:26 +0200 Subject: * Move functions used in pbuilder-satisfydepends* into pbuilder-satisfydepends-funcs. --- pbuilder-satisfydepends | 62 +------------- pbuilder-satisfydepends-experimental | 114 +------------------------- pbuilder-satisfydepends-funcs | 154 +++++++++++++++++++++++++++++++++++ 3 files changed, 156 insertions(+), 174 deletions(-) create mode 100755 pbuilder-satisfydepends-funcs diff --git a/pbuilder-satisfydepends b/pbuilder-satisfydepends index b619544..319c1c7 100644 --- a/pbuilder-satisfydepends +++ b/pbuilder-satisfydepends @@ -21,67 +21,7 @@ set -e -function checkbuilddep_versiondeps () { - local PACKAGE="$1" - local COMPARESTRING="$2" - local DEPSVERSION="$3" - local PACKAGEVERSIONS=$( ( $CHROOTEXEC /usr/bin/apt-cache show "$PACKAGE" ) | sed -n 's/^Version: \(.*\)$/\1/p' | xargs) - # no versioned provides. - if [ "${FORCEVERSION}" = "yes" ]; then - return 0; - fi - for PACKAGEVERSION in $PACKAGEVERSIONS ; do - if dpkg --compare-versions "$PACKAGEVERSION" "$COMPARESTRING" "$DEPSVERSION"; then - # satisfies depends - return 0; - fi - done - echo " Tried versions: $PACKAGEVERSIONS" - # cannot satisfy depends - return 1; -} - -function expand_arch () { - local ARCH="$1" - local EXPANDED_ARCH - - # just keep the original behavior. - echo "$ARCH" - return - - # the following may be used if dpkg change is set to stone. - if echo "$ARCH" | grep "-" > /dev/null; then - EXPANDED_ARCH=$ARCH - else - EXPANDED_ARCH="linux-$ARCH" - fi - local WC1=$(echo $EXPANDED_ARCH | sed 's/^[^-]*/any/') - local WC2=$(echo $EXPANDED_ARCH | sed 's/[^-]*$/any/') - echo "$ARCH\\|$EXPANDED_ARCH\\|$WC1\\|$WC2" -} - -function checkbuilddep_archdeps () { - # returns FALSE on INSTALL - local INSTALLPKG="$1" - local ARCH="$2" - if echo "$INSTALLPKG" | sed 's/.*\(\[.*\]\)/\1/' | grep "[[/][!]\($(expand_arch $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 "[[/]\($(expand_arch $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}') -} +. /usr/lib/pbuilder/pbuilder-satisfydepends-funcs function checkbuilddep_internal () { # Use this function to fulfill the dependency (almost) diff --git a/pbuilder-satisfydepends-experimental b/pbuilder-satisfydepends-experimental index 7f5f73d..4fb80b3 100755 --- a/pbuilder-satisfydepends-experimental +++ b/pbuilder-satisfydepends-experimental @@ -21,119 +21,7 @@ set -e -function package_versions() { - local PACKAGE="$1" - ( $CHROOTEXEC /usr/bin/apt-cache show "$PACKAGE" ) | sed -n 's/^Version: \(.*\)$/\1/p' -} - -function candidate_version() { - local PACKAGE="$1" - LC_ALL=C $CHROOTEXEC apt-cache policy "$PACKAGE" | sed -n 's/ *Candidate: *\(.*\)/\1/p' -} - -function checkbuilddep_versiondeps () { - local PACKAGE="$1" - local COMPARESTRING="$2" - local DEPSVERSION="$3" - local PACKAGEVERSIONS=$( package_versions "$PACKAGE" | xargs) - # no versioned provides. - if [ "${FORCEVERSION}" = "yes" ]; then - return 0; - fi - for PACKAGEVERSION in $PACKAGEVERSIONS ; do - if dpkg --compare-versions "$PACKAGEVERSION" "$COMPARESTRING" "$DEPSVERSION"; then - # satisfies depends - return 0; - fi - done - echo " Tried versions: $PACKAGEVERSIONS" - # cannot satisfy depends - return 1; -} - -function expand_arch () { - local ARCH="$1" - local EXPANDED_ARCH - - # just keep the original behavior. - echo "$ARCH" - return - - # the following may be used if dpkg change is set to stone. - if echo "$ARCH" | grep "-" > /dev/null; then - EXPANDED_ARCH=$ARCH - else - EXPANDED_ARCH="linux-$ARCH" - fi - local WC1=$(echo $EXPANDED_ARCH | sed 's/^[^-]*/any/') - local WC2=$(echo $EXPANDED_ARCH | sed 's/[^-]*$/any/') - echo "$ARCH\\|$EXPANDED_ARCH\\|$WC1\\|$WC2" -} - -function checkbuilddep_archdeps () { - # returns FALSE on INSTALL - local INSTALLPKG="$1" - local ARCH="$2" - if echo "$INSTALLPKG" | sed 's/.*\(\[.*\]\)/\1/' | grep "[[/][!]\($(expand_arch $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 "[[/]\($(expand_arch $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}') -} - -# returns either "package=version", to append to an apt-get install line, or -# package -function versioneddep_to_aptcmd () { - local INSTALLPKG="$1" - - local PACKAGE - local PACKAGE_WITHVERSION - local PACKAGEVERSIONS - local CANDIDATE_VERSION - local COMPARESTRING - local DEPSVERSION - - PACKAGE="$(echo "$INSTALLPKG" | sed -e 's/^[/]*//' -e 's/[[/(].*//')" - PACKAGE_WITHVERSION="$PACKAGE" - - # if not versionned, we skip directly to outputting $PACKAGE - if echo "$INSTALLPKG" | grep '[(]' > /dev/null; then - # package versions returned by APT, in reversed order - PACKAGEVERSIONS="$( package_versions "$PACKAGE" | tac | xargs )" - CANDIDATE_VERSION="$( candidate_version "$PACKAGE" )" - - COMPARESTRING="$(echo "$INSTALLPKG" | tr "/" " " | sed 's/^.*([ ]*\(<<\|<=\|>=\|=\|<\|>>\|>\)[ ]*\(.*\)).*$/\1/')" - DEPSVERSION="$(echo "$INSTALLPKG" | tr "/" " " | sed 's/^.*([ ]*\(<<\|<=\|>=\|=\|<\|>>\|>\)[ ]*\(.*\)).*$/\2/')" - # if strictly versionned, we skip to outputting that version - if [ "=" = "$COMPARESTRING" ]; then - PACKAGE_WITHVERSION="$PACKAGE=$DEPSVERSION" - else - # try the candidate version, then all available versions (asc) - for VERSION in $CANDIDATE_VERSION $PACKAGEVERSIONS; do - if dpkg --compare-versions "$VERSION" "$COMPARESTRING" "$DEPSVERSION"; then - if [ $VERSION != $CANDIDATE_VERSION ]; then - PACKAGE_WITHVERSION="$PACKAGE=$VERSION" - fi - break; - fi - done - fi - fi - - echo "$PACKAGE_WITHVERSION" -} +. /usr/lib/pbuilder/pbuilder-satisfydepends-funcs function checkbuilddep_internal () { # Use this function to fulfill the dependency (almost) diff --git a/pbuilder-satisfydepends-funcs b/pbuilder-satisfydepends-funcs new file mode 100755 index 0000000..029d0e1 --- /dev/null +++ b/pbuilder-satisfydepends-funcs @@ -0,0 +1,154 @@ +#!/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; common functions + + +function package_versions() { + local PACKAGE="$1" + ( $CHROOTEXEC /usr/bin/apt-cache show "$PACKAGE" ) | sed -n 's/^Version: \(.*\)$/\1/p' +} + +function candidate_version() { + local PACKAGE="$1" + LC_ALL=C $CHROOTEXEC apt-cache policy "$PACKAGE" | sed -n 's/ *Candidate: *\(.*\)/\1/p' +} + +function checkbuilddep_versiondeps () { + local PACKAGE="$1" + local COMPARESTRING="$2" + local DEPSVERSION="$3" + local PACKAGEVERSIONS=$( package_versions "$PACKAGE" | xargs) + # no versioned provides. + if [ "${FORCEVERSION}" = "yes" ]; then + return 0; + fi + for PACKAGEVERSION in $PACKAGEVERSIONS ; do + if dpkg --compare-versions "$PACKAGEVERSION" "$COMPARESTRING" "$DEPSVERSION"; then + # satisfies depends + return 0; + fi + done + echo " Tried versions: $PACKAGEVERSIONS" + # cannot satisfy depends + return 1; +} + +function expand_arch () { + local ARCH="$1" + local EXPANDED_ARCH + + # just keep the original behavior. + echo "$ARCH" + return + + # the following may be used if dpkg change is set to stone. + if echo "$ARCH" | grep "-" > /dev/null; then + EXPANDED_ARCH=$ARCH + else + EXPANDED_ARCH="linux-$ARCH" + fi + local WC1=$(echo $EXPANDED_ARCH | sed 's/^[^-]*/any/') + local WC2=$(echo $EXPANDED_ARCH | sed 's/[^-]*$/any/') + echo "$ARCH\\|$EXPANDED_ARCH\\|$WC1\\|$WC2" +} + +function checkbuilddep_archdeps () { + # returns FALSE on INSTALL + local INSTALLPKG="$1" + local ARCH="$2" + if echo "$INSTALLPKG" | sed 's/.*\(\[.*\]\)/\1/' | grep "[[/][!]\($(expand_arch $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 "[[/]\($(expand_arch $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}') +} + +# returns either "package=version", to append to an apt-get install line, or +# package +function versioneddep_to_aptcmd () { + local INSTALLPKG="$1" + + local PACKAGE + local PACKAGE_WITHVERSION + local PACKAGEVERSIONS + local CANDIDATE_VERSION + local COMPARESTRING + local DEPSVERSION + + PACKAGE="$(echo "$INSTALLPKG" | sed -e 's/^[/]*//' -e 's/[[/(].*//')" + PACKAGE_WITHVERSION="$PACKAGE" + + # if not versionned, we skip directly to outputting $PACKAGE + if echo "$INSTALLPKG" | grep '[(]' > /dev/null; then + # package versions returned by APT, in reversed order + PACKAGEVERSIONS="$( package_versions "$PACKAGE" | tac | xargs )" + CANDIDATE_VERSION="$( candidate_version "$PACKAGE" )" + + COMPARESTRING="$(echo "$INSTALLPKG" | tr "/" " " | sed 's/^.*([ ]*\(<<\|<=\|>=\|=\|<\|>>\|>\)[ ]*\(.*\)).*$/\1/')" + DEPSVERSION="$(echo "$INSTALLPKG" | tr "/" " " | sed 's/^.*([ ]*\(<<\|<=\|>=\|=\|<\|>>\|>\)[ ]*\(.*\)).*$/\2/')" + # if strictly versionned, we skip to outputting that version + if [ "=" = "$COMPARESTRING" ]; then + PACKAGE_WITHVERSION="$PACKAGE=$DEPSVERSION" + else + # try the candidate version, then all available versions (asc) + for VERSION in $CANDIDATE_VERSION $PACKAGEVERSIONS; do + if dpkg --compare-versions "$VERSION" "$COMPARESTRING" "$DEPSVERSION"; then + if [ $VERSION != $CANDIDATE_VERSION ]; then + PACKAGE_WITHVERSION="$PACKAGE=$VERSION" + fi + break; + fi + done + fi + fi + + echo "$PACKAGE_WITHVERSION" +} + +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 +} + -- cgit v1.2.3 From 8bb7ffe30bf79c6acbfb15c6be34fce5f4a945d7 Mon Sep 17 00:00:00 2001 From: Loïc Minier Date: Sat, 31 Mar 2007 15:39:08 +0200 Subject: * Move command-line parsing logic used in pbuilder-satisfydepends* into pbuilder-satisfydepends-checkparams. --- pbuilder-satisfydepends | 54 +----------------------------------- pbuilder-satisfydepends-aptitude | 54 +----------------------------------- pbuilder-satisfydepends-experimental | 54 +----------------------------------- 3 files changed, 3 insertions(+), 159 deletions(-) diff --git a/pbuilder-satisfydepends b/pbuilder-satisfydepends index 319c1c7..15a14bb 100644 --- a/pbuilder-satisfydepends +++ b/pbuilder-satisfydepends @@ -181,57 +181,5 @@ Copyright 2002-2007 Junichi Uekawa EOF } +. /usr/lib/pbuilder/pbuilder-satisfydepends-checkparams -DEBIAN_CONTROL=debian/control -CHROOTEXEC="" -BD_REGEXP="build-(depends|depends-indep)" -BC_REGEXP="build-(conflicts|conflicts-indep)" -FORCEVERSION="" -CONTINUE_FAIL="no" - - -while [ -n "$1" ]; do - case "$1" in - --control|-c) - DEBIAN_CONTROL="$2" - shift; shift - ;; - --chroot) - CHROOTEXEC="chroot $2 " - shift; shift - ;; - --internal-chrootexec) - CHROOTEXEC="$2" - shift; shift - ;; - --binary-all) - BD_REGEXP='build-(depends|depends-indep)' - BC_REGEXP='build-(conflicts|conflicts-indep)' - shift - ;; - --binary-arch) - BD_REGEXP='build-depends' - BC_REGEXP='build-conflicts' - shift - ;; - --echo) - CHROOTEXEC="echo $CHROOTEXEC" - shift - ;; - --continue-fail) - CONTINUE_FAIL="yes" - shift - ;; - --force-version) - FORCEVERSION="yes" - shift; - ;; - --help|-h|*) - print_help - exit 1 - ;; - esac -done - - -checkbuilddep_internal diff --git a/pbuilder-satisfydepends-aptitude b/pbuilder-satisfydepends-aptitude index b6353ce..1fb41a3 100755 --- a/pbuilder-satisfydepends-aptitude +++ b/pbuilder-satisfydepends-aptitude @@ -91,57 +91,5 @@ Copyright 2002-2007 Junichi Uekawa EOF } +. /usr/lib/pbuilder/pbuilder-satisfydepends-checkparams -DEBIAN_CONTROL=debian/control -CHROOTEXEC="" -BD_REGEXP="build-(depends|depends-indep)" -BC_REGEXP="build-(conflicts|conflicts-indep)" -FORCEVERSION="" -CONTINUE_FAIL="no" - - -while [ -n "$1" ]; do - case "$1" in - --control|-c) - DEBIAN_CONTROL="$2" - shift; shift - ;; - --chroot) - CHROOTEXEC="chroot $2 " - shift; shift - ;; - --internal-chrootexec) - CHROOTEXEC="$2" - shift; shift - ;; - --binary-all) - BD_REGEXP='build-(depends|depends-indep)' - BC_REGEXP='build-(conflicts|conflicts-indep)' - shift - ;; - --binary-arch) - BD_REGEXP='build-depends' - BC_REGEXP='build-conflicts' - shift - ;; - --echo) - CHROOTEXEC="echo $CHROOTEXEC" - shift - ;; - --continue-fail) - CONTINUE_FAIL="yes" - shift - ;; - --force-version) - FORCEVERSION="yes" - shift; - ;; - --help|-h|*) - print_help - exit 1 - ;; - esac -done - - -checkbuilddep_internal diff --git a/pbuilder-satisfydepends-experimental b/pbuilder-satisfydepends-experimental index 4fb80b3..b7020ba 100755 --- a/pbuilder-satisfydepends-experimental +++ b/pbuilder-satisfydepends-experimental @@ -202,57 +202,5 @@ Copyright 2002-2007 Junichi Uekawa EOF } +. /usr/lib/pbuilder/pbuilder-satisfydepends-checkparams -DEBIAN_CONTROL=debian/control -CHROOTEXEC="" -BD_REGEXP="build-(depends|depends-indep)" -BC_REGEXP="build-(conflicts|conflicts-indep)" -FORCEVERSION="" -CONTINUE_FAIL="no" - - -while [ -n "$1" ]; do - case "$1" in - --control|-c) - DEBIAN_CONTROL="$2" - shift; shift - ;; - --chroot) - CHROOTEXEC="chroot $2 " - shift; shift - ;; - --internal-chrootexec) - CHROOTEXEC="$2" - shift; shift - ;; - --binary-all) - BD_REGEXP='build-(depends|depends-indep)' - BC_REGEXP='build-(conflicts|conflicts-indep)' - shift - ;; - --binary-arch) - BD_REGEXP='build-depends' - BC_REGEXP='build-conflicts' - shift - ;; - --echo) - CHROOTEXEC="echo $CHROOTEXEC" - shift - ;; - --continue-fail) - CONTINUE_FAIL="yes" - shift - ;; - --force-version) - FORCEVERSION="yes" - shift; - ;; - --help|-h|*) - print_help - exit 1 - ;; - esac -done - - -checkbuilddep_internal -- cgit v1.2.3 From 65686562c1cb38de1880cdf137cc724ce38d7862 Mon Sep 17 00:00:00 2001 From: Loïc Minier Date: Sat, 31 Mar 2007 16:37:43 +0200 Subject: * Drop expand_arch() as it's currently useless; it can be resurrected later. --- pbuilder-satisfydepends-funcs | 23 ++--------------------- 1 file changed, 2 insertions(+), 21 deletions(-) diff --git a/pbuilder-satisfydepends-funcs b/pbuilder-satisfydepends-funcs index 029d0e1..f78e237 100755 --- a/pbuilder-satisfydepends-funcs +++ b/pbuilder-satisfydepends-funcs @@ -50,35 +50,16 @@ function checkbuilddep_versiondeps () { return 1; } -function expand_arch () { - local ARCH="$1" - local EXPANDED_ARCH - - # just keep the original behavior. - echo "$ARCH" - return - - # the following may be used if dpkg change is set to stone. - if echo "$ARCH" | grep "-" > /dev/null; then - EXPANDED_ARCH=$ARCH - else - EXPANDED_ARCH="linux-$ARCH" - fi - local WC1=$(echo $EXPANDED_ARCH | sed 's/^[^-]*/any/') - local WC2=$(echo $EXPANDED_ARCH | sed 's/[^-]*$/any/') - echo "$ARCH\\|$EXPANDED_ARCH\\|$WC1\\|$WC2" -} - function checkbuilddep_archdeps () { # returns FALSE on INSTALL local INSTALLPKG="$1" local ARCH="$2" - if echo "$INSTALLPKG" | sed 's/.*\(\[.*\]\)/\1/' | grep "[[/][!]\($(expand_arch $ARCH)\)[]/]" > /dev/null; then + 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 "[[/]\($(expand_arch $ARCH)\)[]/]" > /dev/null; then + if ! echo "$INSTALLPKG" | sed 's/.*\(\[.*\]\)/\1/' | grep "[[/]\($ARCH\)[]/]" > /dev/null; then # if $ARCH does not exist, ERROR. return 0; fi -- cgit v1.2.3 From e60c7421cdc7b48bec0f67a0a21cdbc7325bbb2e Mon Sep 17 00:00:00 2001 From: Loïc Minier Date: Sat, 31 Mar 2007 16:55:32 +0200 Subject: * Misc cleanups in checkbuilddep_archdeps(). --- pbuilder-satisfydepends-funcs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/pbuilder-satisfydepends-funcs b/pbuilder-satisfydepends-funcs index f78e237..a59905e 100755 --- a/pbuilder-satisfydepends-funcs +++ b/pbuilder-satisfydepends-funcs @@ -54,13 +54,15 @@ 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. + # architectures listed between [ and ] for this dep + local DEP_ARCHES="$(echo "$INSTALLPKG" | sed 's/.*\(\[.*\]\)/\1/')" + # check for !$ARCH in DEP_ARCHES + if echo "$DEP_ARCHES" | grep -q "[[/][!]\($ARCH\)[]/]"; then 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. + if ! echo "$DEP_ARCHES" | grep "[!]" > /dev/null; then + # check for arch in $ARCH in DEP_ARCHES + if ! echo "$DEP_ARCHES" | grep "[[/]\($ARCH\)[]/]" > /dev/null; then return 0; fi fi -- cgit v1.2.3 From 95f46bd66aa9d8eb8a81a6149b13d9f275c6a089 Mon Sep 17 00:00:00 2001 From: Loïc Minier Date: Sat, 31 Mar 2007 16:57:56 +0200 Subject: * More cleanups in RE and grep invocations. --- pbuilder-satisfydepends-funcs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pbuilder-satisfydepends-funcs b/pbuilder-satisfydepends-funcs index a59905e..d819698 100755 --- a/pbuilder-satisfydepends-funcs +++ b/pbuilder-satisfydepends-funcs @@ -57,12 +57,12 @@ function checkbuilddep_archdeps () { # architectures listed between [ and ] for this dep local DEP_ARCHES="$(echo "$INSTALLPKG" | sed 's/.*\(\[.*\]\)/\1/')" # check for !$ARCH in DEP_ARCHES - if echo "$DEP_ARCHES" | grep -q "[[/][!]\($ARCH\)[]/]"; then + if echo "$DEP_ARCHES" | grep -q "[[/]\!\($ARCH\)[]/]"; then return 0; fi - if ! echo "$DEP_ARCHES" | grep "[!]" > /dev/null; then + if ! echo "$DEP_ARCHES" | grep -q '!'; then # check for arch in $ARCH in DEP_ARCHES - if ! echo "$DEP_ARCHES" | grep "[[/]\($ARCH\)[]/]" > /dev/null; then + if ! echo "$DEP_ARCHES" | grep -q "[[/]\($ARCH\)[]/]"; then return 0; fi fi -- cgit v1.2.3 From 78c12e2cfe056b94112e3207b7dc2305265bc727 Mon Sep 17 00:00:00 2001 From: Loïc Minier Date: Sat, 31 Mar 2007 19:20:58 +0200 Subject: * Rework regular expressions in checkbuilddep_archdeps() to strip the [] enclosure early on and to permit spaces or slashes since some pbuilder-satisfydepends* implementations use tr to map spaces to slashes. --- pbuilder-satisfydepends-funcs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pbuilder-satisfydepends-funcs b/pbuilder-satisfydepends-funcs index d819698..7e4367d 100755 --- a/pbuilder-satisfydepends-funcs +++ b/pbuilder-satisfydepends-funcs @@ -55,14 +55,16 @@ function checkbuilddep_archdeps () { local INSTALLPKG="$1" local ARCH="$2" # architectures listed between [ and ] for this dep - local DEP_ARCHES="$(echo "$INSTALLPKG" | sed 's/.*\(\[.*\]\)/\1/')" + local DEP_ARCHES="$(echo "$INSTALLPKG" | sed 's/.*\[\(.*\)\].*/\1/')" # check for !$ARCH in DEP_ARCHES - if echo "$DEP_ARCHES" | grep -q "[[/]\!\($ARCH\)[]/]"; then + if echo "$DEP_ARCHES" | egrep -q "(^|[[:space:]/]+)\![[:space:]/]*$ARCH($|[[:space:]/]+)"; then return 0; fi + # check for a "!" which would mean there's a ! and hence $ARCH + # is included if ! echo "$DEP_ARCHES" | grep -q '!'; then - # check for arch in $ARCH in DEP_ARCHES - if ! echo "$DEP_ARCHES" | grep -q "[[/]\($ARCH\)[]/]"; then + # check for $ARCH in DEP_ARCHES + if ! echo "$DEP_ARCHES" | egrep -q "(^|[[:space:]/]+)$ARCH($|[[:space:]/]+)"; then return 0; fi fi -- cgit v1.2.3 From 475cf4ec89d394984172dadc35f95d7edb90eaac Mon Sep 17 00:00:00 2001 From: Loïc Minier Date: Sat, 31 Mar 2007 22:47:33 +0200 Subject: * Add function get_control_re() to pbuilder-satisfydepends-funcs to extract the value of source headers from a control file. * Add function filter_arch_deps() to pbuilder-satisfydepends-aptitude to filter out arch dependencies not for a certain arch. * Source pbuilder-satisfydepends-funcs in pbuilder-satisfydepends-aptitude. * Add support for arch specific build-deps and build-conflicts to pbuilder-satisfydepends-aptitude. --- pbuilder-satisfydepends-aptitude | 52 +++++++++++++++++++++++++++------------- pbuilder-satisfydepends-funcs | 15 ++++++++++++ 2 files changed, 50 insertions(+), 17 deletions(-) diff --git a/pbuilder-satisfydepends-aptitude b/pbuilder-satisfydepends-aptitude index 1fb41a3..078e2d6 100755 --- a/pbuilder-satisfydepends-aptitude +++ b/pbuilder-satisfydepends-aptitude @@ -21,6 +21,39 @@ 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, removing the arch list + echo "$INSTALLPKG" | sed 's/\[.*\]//' + done | + # add " | " between entries + sed '$,$! 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=$(dpkg-architecture -qDEB_HOST_ARCH) @@ -29,23 +62,8 @@ function checkbuilddep_internal () { local DEPENDS local CONFLICTS echo " -> Attempting to satisfy build-dependencies $Id$" - DEPENDS="$(cat ${DEBIAN_CONTROL} | \ - awk ' -BEGIN{source=1} -/^$/ {source=0} -/^Source:/ {source=1} -/^[^ ]*:/ {p=0} -tolower($0) ~ /^'"${BD_REGEXP}"':/ {p=1} -{if(p && source) {print $0}}' | \ - sed 's/^[^: ]*://')" - CONFLICTS="$(cat "${DEBIAN_CONTROL}" | \ - awk 'BEGIN{source=1} -/^$/ {source=0} -/^Source:/ {source=1} -/^[^ ]*:/{p=0} -tolower($0) ~ /^'"${BC_REGEXP}"':/ {p=1} -{if(p && source) {print $0}}' | \ - sed 's/^[^: ]*://')" + 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" diff --git a/pbuilder-satisfydepends-funcs b/pbuilder-satisfydepends-funcs index 7e4367d..0a4d181 100755 --- a/pbuilder-satisfydepends-funcs +++ b/pbuilder-satisfydepends-funcs @@ -50,6 +50,21 @@ function checkbuilddep_versiondeps () { return 1; } +get_control_re() { + control="$1" + re="$2" + + cat "$control" | + awk ' + BEGIN { source=1 } + /^$/ { source=0 } + /^Source:/ { source=1 } + /^[^ ]*:/ { p=0 } + tolower($0) ~ /^'"$re"':/ { p=1 } + { if (p && source) { print $0 } }' | + sed 's/^[^: ]*://' +} + function checkbuilddep_archdeps () { # returns FALSE on INSTALL local INSTALLPKG="$1" -- cgit v1.2.3 From 0c4ec0d6856d80841ddebd5a41ba9bb42504d2fa Mon Sep 17 00:00:00 2001 From: Loïc Minier Date: Sat, 31 Mar 2007 22:48:01 +0200 Subject: * Add missing pbuilder-satisfydepends-checkparams file. --- pbuilder-satisfydepends-checkparams | 74 +++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100755 pbuilder-satisfydepends-checkparams diff --git a/pbuilder-satisfydepends-checkparams b/pbuilder-satisfydepends-checkparams new file mode 100755 index 0000000..3314c64 --- /dev/null +++ b/pbuilder-satisfydepends-checkparams @@ -0,0 +1,74 @@ +#!/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; parse command line parameters + + +DEBIAN_CONTROL=debian/control +CHROOTEXEC="" +BD_REGEXP="build-(depends|depends-indep)" +BC_REGEXP="build-(conflicts|conflicts-indep)" +FORCEVERSION="" +CONTINUE_FAIL="no" + + +while [ -n "$1" ]; do + case "$1" in + --control|-c) + DEBIAN_CONTROL="$2" + shift; shift + ;; + --chroot) + CHROOTEXEC="chroot $2 " + shift; shift + ;; + --internal-chrootexec) + CHROOTEXEC="$2" + shift; shift + ;; + --binary-all) + BD_REGEXP='build-(depends|depends-indep)' + BC_REGEXP='build-(conflicts|conflicts-indep)' + shift + ;; + --binary-arch) + BD_REGEXP='build-depends' + BC_REGEXP='build-conflicts' + shift + ;; + --echo) + CHROOTEXEC="echo $CHROOTEXEC" + shift + ;; + --continue-fail) + CONTINUE_FAIL="yes" + shift + ;; + --force-version) + FORCEVERSION="yes" + shift; + ;; + --help|-h|*) + print_help + exit 1 + ;; + esac +done + + +checkbuilddep_internal -- cgit v1.2.3 From 5efd4d516d740ed35bf6c775be31faf2cfc23601 Mon Sep 17 00:00:00 2001 From: Loïc Minier Date: Sat, 31 Mar 2007 23:03:07 +0200 Subject: * Make use of get_control_re() in pbuilder-satisfydepends and pbuilder-satisfydepends-experimental. --- pbuilder-satisfydepends | 19 ++----------------- pbuilder-satisfydepends-experimental | 19 ++----------------- 2 files changed, 4 insertions(+), 34 deletions(-) diff --git a/pbuilder-satisfydepends b/pbuilder-satisfydepends index 15a14bb..85ca463 100644 --- a/pbuilder-satisfydepends +++ b/pbuilder-satisfydepends @@ -33,15 +33,7 @@ function checkbuilddep_internal () { local CURRENTREALPKGNAME local SATISFIED echo " -> Attempting to parse the build-deps $Id$" - for INSTALLPKGMULTI in $(cat ${DEBIAN_CONTROL} | \ - awk ' -BEGIN{source=1} -/^$/ {source=0} -/^Source:/ {source=1} -/^[^ ]*:/ {p=0} -tolower($0) ~ /^'"${BD_REGEXP}"':/ {p=1} -{if(p && source) {print $0}}' | \ - sed 's/^[^: ]*://' | \ + for INSTALLPKGMULTI in $(get_control_re "$DEBIAN_CONTROL" "$BD_REGEXP" | tr " " "/" | \ awk 'BEGIN{RS=","} {print}'); do echo " -> Considering build-dep$(echo "$INSTALLPKGMULTI" | tr "/" " " )" @@ -119,14 +111,7 @@ tolower($0) ~ /^'"${BD_REGEXP}"':/ {p=1} fi # start processing build-conflicts. - for INSTALLPKG in $(cat "${DEBIAN_CONTROL}" | \ - awk 'BEGIN{source=1} -/^$/ {source=0} -/^Source:/ {source=1} -/^[^ ]*:/{p=0} -tolower($0) ~ /^'"${BC_REGEXP}"':/ {p=1} -{if(p && source) {print $0}}' | \ - sed 's/^[^: ]*://' | \ + for INSTALLPKG in $(get_control_re "$DEBIAN_CONTROL" "$BC_REGEXP" | tr " " "/" | \ awk 'BEGIN{RS=","} {print}'); do CURRENTREALPKGNAME=$(echo "$INSTALLPKG" | sed -e 's/^[/]*//' -e 's/[[/(].*//') diff --git a/pbuilder-satisfydepends-experimental b/pbuilder-satisfydepends-experimental index b7020ba..ecf9700 100755 --- a/pbuilder-satisfydepends-experimental +++ b/pbuilder-satisfydepends-experimental @@ -35,15 +35,7 @@ function checkbuilddep_internal () { local PACKAGEVERSIONS local CANDIDATE_VERSION echo " -> Attempting to parse the build-deps $Id$" - for INSTALLPKGMULTI in $(cat ${DEBIAN_CONTROL} | \ - awk ' -BEGIN{source=1} -/^$/ {source=0} -/^Source:/ {source=1} -/^[^ ]*:/ {p=0} -tolower($0) ~ /^'"${BD_REGEXP}"':/ {p=1} -{if(p && source) {print $0}}' | \ - sed 's/^[^: ]*://' | \ + for INSTALLPKGMULTI in $(get_control_re "$DEBIAN_CONTROL" "$BD_REGEXP" | tr " " "/" | \ awk 'BEGIN{RS=","} {print}'); do echo " -> Considering build-dep$(echo "$INSTALLPKGMULTI" | tr "/" " " )" @@ -140,14 +132,7 @@ tolower($0) ~ /^'"${BD_REGEXP}"':/ {p=1} fi # start processing build-conflicts. - for INSTALLPKG in $(cat "${DEBIAN_CONTROL}" | \ - awk 'BEGIN{source=1} -/^$/ {source=0} -/^Source:/ {source=1} -/^[^ ]*:/{p=0} -tolower($0) ~ /^'"${BC_REGEXP}"':/ {p=1} -{if(p && source) {print $0}}' | \ - sed 's/^[^: ]*://' | \ + for INSTALLPKG in $(get_control_re "$DEBIAN_CONTROL" "$BC_REGEXP" | tr " " "/" | \ awk 'BEGIN{RS=","} {print}'); do CURRENTREALPKGNAME=$(echo "$INSTALLPKG" | sed -e 's/^[/]*//' -e 's/[[/(].*//') -- cgit v1.2.3 From 6587a44463d81d7508a5bacd787ff1b201894442 Mon Sep 17 00:00:00 2001 From: Loïc Minier Date: Sun, 1 Apr 2007 00:09:13 +0200 Subject: * Misc cleanups. --- pbuilder-satisfydepends | 67 ++++++++++++++++++------------------ pbuilder-satisfydepends-aptitude | 10 +++--- pbuilder-satisfydepends-experimental | 61 ++++++++++++++++---------------- pbuilder-satisfydepends-funcs | 4 +-- 4 files changed, 70 insertions(+), 72 deletions(-) diff --git a/pbuilder-satisfydepends b/pbuilder-satisfydepends index 85ca463..e0f7659 100644 --- a/pbuilder-satisfydepends +++ b/pbuilder-satisfydepends @@ -15,9 +15,8 @@ # 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 dependency. +# module to satisfy build dependencies; default flavor set -e @@ -40,46 +39,46 @@ function checkbuilddep_internal () { 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 + 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; + continue fi fi - if echo "$INSTALLPKG" | grep '[(]' > /dev/null; then + 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 + 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; + continue fi fi - echo " -> Trying ${CURRENTREALPKGNAME}" + echo " -> Trying $CURRENTREALPKGNAME" - if $CHROOTEXEC /usr/bin/apt-get -s install ${INSTALLPKGLIST} ${CURRENTREALPKGNAME} >& /dev/null; then + if $CHROOTEXEC /usr/bin/apt-get -s install $INSTALLPKGLIST $CURRENTREALPKGNAME >& /dev/null; then SATISFIED="yes" - INSTALLPKGLIST="${INSTALLPKGLIST} ${CURRENTREALPKGNAME}" + INSTALLPKGLIST="$INSTALLPKGLIST $CURRENTREALPKGNAME" else - echo " -> Cannot install ${CURRENTREALPKGNAME}; apt errors follow:" - if $CHROOTEXEC /usr/bin/apt-get -s install ${INSTALLPKGLIST} "${CURRENTREALPKGNAME}"; then + 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}" + 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 + if $CHROOTEXEC /usr/bin/apt-get -s install $INSTALLPKGLIST $PROVIDED >& /dev/null; then SATISFIED="yes"; - INSTALLPKGLIST="${INSTALLPKGLIST} ${PROVIDED}" + 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 + if $CHROOTEXEC /usr/bin/apt-get -s install $INSTALLPKGLIST $PROVIDED; then : fi fi @@ -98,11 +97,11 @@ function checkbuilddep_internal () { done; # now actually install the packages - echo " -> Installing ${INSTALLPKGLIST}" - if ! $CHROOTEXEC apt-get -y --force-yes install ${INSTALLPKGLIST}; then + 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 + 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 @@ -114,34 +113,34 @@ function checkbuilddep_internal () { 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}" + CURRENTREALPKGNAME=$(echo "$INSTALLPKG" | sed -e 's#^/*##' -e 's#[[/(].*##') + echo " -> Considering $CURRENTREALPKGNAME" - if echo "$INSTALLPKG" | grep '\[' > /dev/null ; then + if echo "$INSTALLPKG" | grep -q '\['; then # this package has arch-conflicts. if checkbuilddep_archdeps "$INSTALLPKG" "$ARCH"; then echo "I: Ignoring other-arch" - continue; + continue fi fi - if echo "$INSTALLPKG" | grep '[(]' > /dev/null ; then + 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 + if ! checkbuilddep_versiondeps $CURRENTREALPKGNAME \ + $(echo "$INSTALLPKG" | tr "/" " " | sed 's/^.*( *\(<<\|<=\|>=\|=\|<\|>>\|>\) *\(.*\)).*$/\1/') \ + $(echo "$INSTALLPKG" | tr "/" " " | sed 's/^.*( *\(<<\|<=\|>=\|=\|<\|>>\|>\) *\(.*\)).*$/\2/'); then echo "I: Satisfies version, not trying" - continue; + 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 + 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" + echo "I: $CURRENTREALPKGNAME package is not installed, no need to remove" fi done echo " -> Finished parsing the build-deps" diff --git a/pbuilder-satisfydepends-aptitude b/pbuilder-satisfydepends-aptitude index 078e2d6..6f94d74 100755 --- a/pbuilder-satisfydepends-aptitude +++ b/pbuilder-satisfydepends-aptitude @@ -39,14 +39,14 @@ function filter_arch_deps() { while read INSTALLPKG; do if echo "$INSTALLPKG" | grep -q '\['; then if checkbuilddep_archdeps "$INSTALLPKG" "$ARCH"; then - continue; + continue fi fi - # output the selected package, removing the arch list - echo "$INSTALLPKG" | sed 's/\[.*\]//' + # output the selected package + echo "$INSTALLPKG" done | - # add " | " between entries - sed '$,$! s/$/ |/' | + # remove the arch list and add " | " between entries + sed 's/\[.*\]//; $,$! s/$/ |/' | xargs --no-run-if-empty done | # add ", " between entries diff --git a/pbuilder-satisfydepends-experimental b/pbuilder-satisfydepends-experimental index ecf9700..39a3a2b 100755 --- a/pbuilder-satisfydepends-experimental +++ b/pbuilder-satisfydepends-experimental @@ -1,6 +1,7 @@ #!/bin/bash # pbuilder -- personal Debian package builder # Copyright (C) 2001,2002,2003,2005-2007 Junichi Uekawa +# Copyright (C) 2006,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 @@ -15,17 +16,15 @@ # 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 dependency. +# module to satisfy build dependencies; experimental flavor set -e . /usr/lib/pbuilder/pbuilder-satisfydepends-funcs -function checkbuilddep_internal () { # Use this function to fulfill the dependency (almost) - +function checkbuilddep_internal () { local ARCH=$(dpkg-architecture -qDEB_HOST_ARCH) local INSTALLPKG local INSTALLPKGLIST @@ -42,23 +41,23 @@ function checkbuilddep_internal () { 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 + 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; + continue fi fi CURRENT_APT_COMMAND="$(versioneddep_to_aptcmd "$INSTALLPKG")" while [ "$SATISFIED" = "no" ]; do - echo " -> Trying to add ${CURRENT_APT_COMMAND}" - if APT_OUTPUT="$( exec 2>&1; LC_ALL=C $CHROOTEXEC /usr/bin/apt-get -s install ${INSTALLPKGLIST} ${CURRENT_APT_COMMAND} )"; then + echo " -> Trying to add $CURRENT_APT_COMMAND" + if APT_OUTPUT="$( exec 2>&1; LC_ALL=C $CHROOTEXEC /usr/bin/apt-get -s install $INSTALLPKGLIST $CURRENT_APT_COMMAND )"; then # success, we're done SATISFIED="yes" - INSTALLPKGLIST="${INSTALLPKGLIST} ${CURRENT_APT_COMMAND}" + INSTALLPKGLIST="$INSTALLPKGLIST $CURRENT_APT_COMMAND" break fi # try to parse APT's output to recognize lines such as: @@ -85,23 +84,23 @@ function checkbuilddep_internal () { break; fi - echo " -> Cannot install ${CURRENT_APT_COMMAND}; apt errors follow:" - if $CHROOTEXEC /usr/bin/apt-get -s install ${INSTALLPKGLIST} "${CURRENT_APT_COMMAND}"; then + echo " -> Cannot install $CURRENT_APT_COMMAND; apt errors follow:" + if $CHROOTEXEC /usr/bin/apt-get -s install $INSTALLPKGLIST "$CURRENT_APT_COMMAND"; then : fi # package could not be found. -- looking for alternative. PROVIDED="" - checkbuilddep_provides "${CURRENTREALPKGNAME}" + 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 + if $CHROOTEXEC /usr/bin/apt-get -s install $INSTALLPKGLIST $PROVIDED >& /dev/null; then SATISFIED="yes"; - INSTALLPKGLIST="${INSTALLPKGLIST} ${PROVIDED}" + 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 + if $CHROOTEXEC /usr/bin/apt-get -s install $INSTALLPKGLIST $PROVIDED; then : fi fi @@ -119,11 +118,11 @@ function checkbuilddep_internal () { done; # now actually install the packages - echo " -> Installing ${INSTALLPKGLIST}" - if ! $CHROOTEXEC apt-get -y --force-yes install ${INSTALLPKGLIST}; then + 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 + 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 @@ -135,34 +134,34 @@ function checkbuilddep_internal () { 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}" + CURRENTREALPKGNAME=$(echo "$INSTALLPKG" | sed -e 's#^/*##' -e 's#[[/(].*##') + echo " -> Considering $CURRENTREALPKGNAME" - if echo "$INSTALLPKG" | grep '\[' > /dev/null ; then + if echo "$INSTALLPKG" | grep -q '\['; then # this package has arch-conflicts. if checkbuilddep_archdeps "$INSTALLPKG" "$ARCH"; then echo "I: Ignoring other-arch" - continue; + continue fi fi - if echo "$INSTALLPKG" | grep '[(]' > /dev/null ; then + 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 + if ! checkbuilddep_versiondeps $CURRENTREALPKGNAME \ + $(echo "$INSTALLPKG" | tr "/" " " | sed 's/^.*( *\(<<\|<=\|>=\|=\|<\|>>\|>\) *\(.*\)).*$/\1/') \ + $(echo "$INSTALLPKG" | tr "/" " " | sed 's/^.*( *\(<<\|<=\|>=\|=\|<\|>>\|>\) *\(.*\)).*$/\2/'); then echo "I: Satisfies version, not trying" - continue; + 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 + 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" + echo "I: $CURRENTREALPKGNAME package is not installed, no need to remove" fi done echo " -> Finished parsing the build-deps" diff --git a/pbuilder-satisfydepends-funcs b/pbuilder-satisfydepends-funcs index 0a4d181..0e8270c 100755 --- a/pbuilder-satisfydepends-funcs +++ b/pbuilder-satisfydepends-funcs @@ -113,8 +113,8 @@ function versioneddep_to_aptcmd () { PACKAGEVERSIONS="$( package_versions "$PACKAGE" | tac | xargs )" CANDIDATE_VERSION="$( candidate_version "$PACKAGE" )" - COMPARESTRING="$(echo "$INSTALLPKG" | tr "/" " " | sed 's/^.*([ ]*\(<<\|<=\|>=\|=\|<\|>>\|>\)[ ]*\(.*\)).*$/\1/')" - DEPSVERSION="$(echo "$INSTALLPKG" | tr "/" " " | sed 's/^.*([ ]*\(<<\|<=\|>=\|=\|<\|>>\|>\)[ ]*\(.*\)).*$/\2/')" + COMPARESTRING="$(echo "$INSTALLPKG" | tr "/" " " | sed 's/^.*( *\(<<\|<=\|>=\|=\|<\|>>\|>\) *\(.*\)).*$/\1/')" + DEPSVERSION="$(echo "$INSTALLPKG" | tr "/" " " | sed 's/^.*( *\(<<\|<=\|>=\|=\|<\|>>\|>\) *\(.*\)).*$/\2/')" # if strictly versionned, we skip to outputting that version if [ "=" = "$COMPARESTRING" ]; then PACKAGE_WITHVERSION="$PACKAGE=$DEPSVERSION" -- cgit v1.2.3 From f4acdc7109cb34c8ec611525131415a18e01ec25 Mon Sep 17 00:00:00 2001 From: Loïc Minier Date: Sun, 1 Apr 2007 00:14:12 +0200 Subject: * Install pbuilder-satisfydepends-aptitude. --- Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Makefile b/Makefile index 7831be7..a24c194 100644 --- a/Makefile +++ b/Makefile @@ -15,6 +15,7 @@ SHELLCODES=pbuilder-buildpackage \ pbuilder-modules \ pbuilder-runhooks \ pbuilder-satisfydepends \ + pbuilder-satisfydepends-aptitude \ pbuilder-satisfydepends-experimental \ pbuilder-updatebuildenv \ pbuilder-user-mode-linux \ @@ -71,6 +72,7 @@ install: $(INSTALL_EXECUTABLE) pdebuild-user-mode-linux $(DESTDIR)/usr/bin $(INSTALL_EXECUTABLE) debuild-pbuilder $(DESTDIR)/usr/bin $(INSTALL_EXECUTABLE) pbuilder-satisfydepends $(DESTDIR)/usr/lib/pbuilder/ + $(INSTALL_EXECUTABLE) pbuilder-satisfydepends-aptitude $(DESTDIR)/usr/lib/pbuilder/ $(INSTALL_EXECUTABLE) pbuilder-satisfydepends-experimental $(DESTDIR)/usr/lib/pbuilder/ $(INSTALL_EXECUTABLE) pdebuild-internal $(DESTDIR)/usr/lib/pbuilder/ $(INSTALL_FILE) pbuilderrc $(DESTDIR)/etc -- cgit v1.2.3 From da872b4891d080cbebccf315ead576077ad75fb2 Mon Sep 17 00:00:00 2001 From: Loïc Minier Date: Sun, 1 Apr 2007 00:14:22 +0200 Subject: * Document pbuilder-satisfydepends-aptitude. --- pbuilderrc | 11 +++++++---- pbuilderrc.5 | 10 ++++++---- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/pbuilderrc b/pbuilderrc index 7ec5f45..1b8da3b 100755 --- a/pbuilderrc +++ b/pbuilderrc @@ -35,10 +35,13 @@ BUILDSOURCEROOTCMD="fakeroot" PBUILDERROOTCMD="sudo" # command to satisfy build-dependencies; the default is an internal shell -# implementation which is relatively slow; there's an alternate experimental -# implementation, "pbuilder-satisfydepends-experimental", which might be useful -# to pull packages from experimental or from repositories with a low APT Pin -# Priority +# implementation which is relatively slow; there are two alternate +# implementations, the "experimental" implementation, +# "pbuilder-satisfydepends-experimental", which might be useful to pull +# packages from experimental or from repositories with a low APT Pin Priority, +# and the "aptitude" implementation, which will resolve build-dependencies and +# build-conflicts with aptitude which helps dealing with complex cases but does +# not support unsigned APT repositories PBUILDERSATISFYDEPENDSCMD="/usr/lib/pbuilder/pbuilder-satisfydepends" #default is to build everything. Passed on to dpkg-buildpackage diff --git a/pbuilderrc.5 b/pbuilderrc.5 index 832c5e6..98c2fc5 100644 --- a/pbuilderrc.5 +++ b/pbuilderrc.5 @@ -216,10 +216,12 @@ in .BI "PBUILDERSATISFYDEPENDSCMD=" "/usr/lib/pbuilder/pbuilder-satisfydepends" This option is used by various parts of pbuilder to satisfy (i.e. install) the -build-dependencies of a package. There is an alternate experimental -implementation, "pbuilder-satisfydepends-experimental", which might be useful -to pull packages from experimental or from repositories with a low APT Pin -Priority. +build-dependencies of a package. There are two alternate implementations, the +"experimental" implementation, "pbuilder-satisfydepends-experimental", which +might be useful to pull packages from experimental or from repositories with a +low APT Pin Priority, and the "aptitude" implementation, which will resolve +build-dependencies and build-conflicts with aptitude which helps dealing with +complex cases but does not support unsigned APT repositories .TP .BI "BUILDUSERID=" "1234" -- cgit v1.2.3 From 0b460b77a4919f3929f91eccebc0052f8e304122 Mon Sep 17 00:00:00 2001 From: Loïc Minier Date: Sun, 1 Apr 2007 00:19:02 +0200 Subject: * Update changelogs. --- ChangeLog | 7 +++++++ debian/changelog | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/ChangeLog b/ChangeLog index 2b492f7..20d97b2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2007-04-01 Loic Minier + + * pbuilder-satisfydepends*: + - Modularize with new -funcs and -checkparams shared sources. + - New pbuilder-satisfydepends-aptitude resolver based on aptitude. + - Cleanups. + 2007-03-30 Junichi Uekawa * pbuilder-user-mode-linux : '-n "${PBUILDER_COW}"' is not a good diff --git a/debian/changelog b/debian/changelog index 686cffc..234887c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +pbuilder (0.166) UNRELEASED; urgency=low + + * New pbuilder-satisfydepends-aptitude resolver based on aptitude; based on + an idea by Mike Hommey; closes: #337015. + + -- Loic Minier Sun, 01 Apr 2007 00:16:28 +0200 + pbuilder (0.165) unstable; urgency=low [ Junichi Uekawa ] -- cgit v1.2.3