#! /bin/bash export LANG=C export LC_ALL=C function copydsc () { local DSCFILE="$1" local TARGET="$2" for FILE in \ "$DSCFILE" \ $(echo "$DSCFILE" | sed 's/^\(.*\)\.dsc$/\1/' ).diff.gz \ $(echo "$DSCFILE" | sed 's/^\(.*\)\.dsc$/\1/').tar.gz \ $(echo "$DSCFILE" | sed 's/\(.*\)-[^-]*\.dsc$/\1/').orig.tar.gz ; do cp "$FILE" "$TARGET" ; done } function checkbuilddep_internal () { # Use this function to fulfill the dependency (almost) local ARCH=$(dpkg --print-architecture) echo " -> Attempting to parse the build-deps by myself" for INSTALLPKGMULTI in $(grep "^Build-Depends\(-Indep\|\): " "$BUILDPLACE/"tmp/buildd/*/debian/control | \ sed 's/^[^:]*: \(.*\)$/\1/' | \ tr " " "/" | \ awk 'BEGIN{RS=","} {print}'); do #echo " -> Considering $INSTALLPKGMULTI" SATISFIED="no" for INSTALLPKG in $(echo "$INSTALLPKGMULTI" | \ awk 'BEGIN{RS="|"} {print}'); do #echo " -> Trying to install $INSTALLPKG" if echo "$INSTALLPKG" | grep '\[' > /dev/null ; then # this package has arch-deps. if echo "$INSTALLPKG" | sed 's/.*\(\[.*\]\)/\1/' | grep "[[/]!$ARCH[]/]" > /dev/null; then # don't install this on this arch -- satisfied? maybe. FIXME SATISFIED="yes" continue; fi if ! echo "$INSTALLPKG" | sed 's/.*\(\[.*\]\)/\1/' | grep "[[/]$ARCH[]/]" > /dev/null; then # this arch is not listed. -- satisfied? maybe. FIXME SATISFIED="yes" continue; fi fi #echo " -> Installing $INSTALLPKG" $CHROOTEXEC usr/bin/apt-get -y install $(echo "$INSTALLPKG" | tr "/" " " | awk '{print $1}') && \ SATISFIED="yes" done; if [ "$SATISFIED" = "no" ]; then echo Could not satisfy build-dependency. abortingfunction exit 1 fi done; for INSTALLPKG in $(grep "^Build-Conflicts\(-Indep\|\): " "$BUILDPLACE/"tmp/buildd/*/debian/control | \ sed 's/^[^:]*: \(.*\)$/\1/' | \ tr " " "/" | \ awk 'BEGIN{RS=","} {print}'); do #echo " -> Considering $INSTALLPKG" if echo "$INSTALLPKG" | grep '\[' > /dev/null ; then # this package has arch-conflicts. if echo "$INSTALLPKG" | sed 's/.*\(\[.*\]\)/\1/' | grep "[[/]!$ARCH[]/]" > /dev/null; then # don't install this on this arch continue; fi if ! echo "$INSTALLPKG" | sed 's/.*\(\[.*\]\)/\1/' | grep "[[/]$ARCH[]/]" > /dev/null; then # this arch is not listed. continue; fi fi #echo " -> Removing $INSTALLPKG" $CHROOTEXEC usr/bin/apt-get -y remove $(echo "$INSTALLPKG" | tr "/" " " | awk '{print $1}') || ( echo Could not satisfy build-conflicts abortingfunction exit 1 ) done } function checkbuilddep_using_dpkgcheckbuilddeps () { # this function is not used currently... and is incomplete. for INSTALLPKG in $($CHROOTEXEC bin/sh -c "(cd tmp/buildd/*/; dpkg-checkbuilddeps)" 2>&1 | \ grep "^dpkg-checkbuilddeps: Unmet build dependencies: " | \ sed 's/^[^:]*:[^:]*: \(.*\)$/\1/' | \ awk 'BEGIN{RS=", "} {print $1}'); do echo " -> Installing $INSTALLPKG" $CHROOTEXEC usr/bin/apt-get -y install "$INSTALLPKG" done for REMOVEPKG in $($CHROOTEXEC bin/sh -c "(cd tmp/buildd/*/; dpkg-checkbuilddeps)" 2>&1 | \ grep "^dpkg-checkbuilddeps: Build conflicts: " | \ sed 's/^[^:]*:[^:]*: \(.*\)$/\1/' | \ awk 'BEGIN{RS=", "} {print $1}'); do echo " -> Removing $REMOVEPKG" $CHROOTEXEC usr/bin/apt-get -y remove "$REMOVEPKG" done } function checkbuilddep () { checkbuilddep_internal; } . /usr/lib/pbuilder/pbuilder-checkparams PACKAGENAME="$1" CHROOTEXEC="chroot $BUILDPLACE " if [ ! -f "$PACKAGENAME" ]; then echo "Command line parameter [$PACKAGENAME] is not a valid .dsc file name" >&2 exit 1; fi; extractbuildplace echo Copying source file copydsc "$PACKAGENAME" "$BUILDPLACE/tmp/buildd" echo Extracting source $CHROOTEXEC /bin/bash -c "( cd tmp/buildd; /usr/bin/dpkg-source -x $(basename $PACKAGENAME) )" || ( echo pbuilder: Failed extracting the source >&2 abortingfunction exit 1; ) echo Installing the build-deps checkbuilddep echo Building the package $CHROOTEXEC /bin/bash -c "(cd tmp/buildd/*/; dpkg-buildpackage)" || ( echo pbuilder: Failed autobuilding of package >&2 abortingfunction exit 1; ) umountproc test -n "$BUILDRESULT" && ( mkdir -p "$BUILDRESULT" if [ -d "$BUILDRESULT" ]; then cp "$BUILDPLACE"/tmp/buildd/* "$BUILDRESULT" else echo "Error: BUILDRESULT=[$BUILDRESULT] and is not a directory." >&2 fi ) cleanbuildplace